Photo by Arno Smit on Unsplash

JS ILE FONKSIYONEL PROGRAMLAMA

Object Composition — 2 (Kalıtım Türleri)

Onur Dayıbaşı
Frontend Development With JS
3 min readOct 8, 2021

--

Favor composition over inheritance → Composition, kalıtıma tercih edin derken Java’daki sınıflar için düşünüldüğünde bu kavram çok doğru, çünkü sınıf kalıtım konusunun çok ciddi yan etkileri ve zararları bulunuyor. Aşağıdaki konulara bir önceki yazımız Object Composition konusunda değinmiştik.

Aşağıdaki kısım Eric Eliott What “you were taught was not prototypal inheritanceile başlayan cevabından bir alıntıdır.

Eric Eliott göre tüm kalıtım yöntemleri kötü ve zararlı değil. Sadece java, .Net gibi dillerde olan extends yöntemini kullanan Class Inheritance yöntemlerini zararlı buluyor. Bu tür bir sınıflandırma baştan yaptığımız dinamikliği kaybetmemiz ve aşağıdaki tasarım ve kod problemlerinin oluşmasına neden oluyor.

  • The tight coupling problem: Ata sınıfa çok sıkı bağımlılık
  • The fragile base class problem: Ata sınıftaki değişkenlik problemi
  • Inflexible hierarchy problem: Hiyerarşinin esnekliği yoketmesi
  • The duplication by necessity problem: Aynı yeteneğin farklı ata sınıflarda yer alma ihtiyacı davranışın yer aldığı kodun dublicate edilmesine neden oluyor.
  • The Gorilla/banana problem : Siz uygulamanızda ufak bir objeyi kullanmak istediğinizde aslında arka planda bunun bağımlı olduğu çok fazla yapının olması. Çünkü hiyerarşisinden dolayı ihtiyacınız olmayan bir çok yapıyı zorunlu tutmak problemi.

Peki tamam bu problemler iyide buna alternatif kalıtım yöntemleri neler ? Başka kalıtım türleri neler ?

  • Functional inheritance
  • Concatenative inheritance
  • Prototype delegation

Diğer kalıtım türlerini aşağıda analiz etmeye çalışalım.

Functional inheritance (Fonksiyonel Kalıtım)

Fonksiyonları constructor nesne oluşturucu olarak kullanma Örneğin aşağıdaki kodu inceleyelim. Cat → Animal türeyen bir yapıda olmasını istiyoruz. Eninde sonunda elimizde belli özellikleri olan ve davranışları olan bellekte yer tutan objelerimiz olacak. Örneğin;

  • Animal (Hayvan)→ name
  • Cat (🐱 )→ sayHello

olduğu durumda Cat nesnesi önce elindeki veriyle Animal Objesini oluşturup, o Objeye kendi fonksiyonlarını ekleyerek fonksiyonel olarak kalıtımı gerçekleştirir.

https://www.jstips.co/en/javascript/what-is-a-functional-inheritance/

Concatenative inheritance (Birleştirici Kalıtım)

Object.assign yöntemleri ile ilgili fonksiyon iskelet yapısını klonlayarak yeni objeler oluşturma imkanı sağlar. Yapıları birleştirme altyapısı çok esnek olduğu için mixin yapılarını oluşturabilme özgürlüğüne sahipsinizdir.

Object.assign

Prototype Delegation ( Delegasyon ile Kalıtım)

JavaScript objeler içerisinde prototype isminde özel bir yapı bulunur. Bir objenin içerisinde ilgili prop veya metod bulunmadığında bu protoype aracılığla delegation yöntemi ile içerde bulunan __proto__ nesnesinde varmı diye bakılır. Bu konuda aşağıdaki yazılarda bu konulara detaylıca değindim.

JavaScript Prototype Delegation Yöntemi..

Hatta siz ne kadar JS class, extends gibi yapılar kullansanızda JavaScript bunu arkaplanda Prototpye ve Delegation yapısı üzerinden yönetir.

Referanslar

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--