Photo by Daniel Tong on Unsplash

JS ILE FONKSIYONEL PROGRAMLAMA

Object-Oriented Programlamanın Unutulmuş Tarihi — 6

Object Oriented Programlama acaba ilk başta bu programlama paradigmasını kuran kişilerin kafasında ki yapımı, yoksa şu anda bambaşka bir şekilde anlaşılmış farklı bir şekilde OOP uygulanıyor. Acaba Java, C++ veya .NET Object Oriented Programlamayı farklı mı yorumladılar ?

--

Bu yazıyı daha önceden yazmış olduğum Object-Oriented Programlamanın Unutulmuş Tarihi-1 , Tarihi-2, Tarihi3, Tarihi4 ve Tarihi5 yazılarının devamıdır.

Not: Eric Elliott, kitabından okuduğum The Forgotten History of OOP blog yazısı Object Oriented nasıl bir düşünce yapısı ile ortaya çıktığı nasıl başka konulara ve önceliklere evrildiği açısından beni etkiledi. Bu yüzden bu blog yazısını çevirerek anlatmaya çalışacağım, tabi araya kendi notlarımı da ekliyorum 😃.

Object Nedir?

Objects (Nesneler) farklı Programlama Dilleri içerisinde birçok birbirinden farklı anlam ve çağrışımda kullanılmıştır. Örneğin JS “objects” birbirini kapsayan veri yapısıdır. Ne bir Sınıf Tabanlı(Class-Based) programlama gerçekleştirmelerini, ne de Alan Kay message-passing yapısını içermez.

Not: JavaScript Object yapısını daha iyi anlamak için aşağıdaki yazmış olduğum yazıyı ve bu yazının içerisinden linklediğim diğer yazıları okumanızı öneririm.

JavaScript te, objects (nesneler) aşağıdaki yapıları destekler.

Bir fonksiyonu bir değişkene atayabilirsiniz.(First Class Function) Object yapısını ve davranışlarını dinamik oluşturabilirsiniz. (MetaProgramming-1, 2, 3, 4 ). JavaScript aynı zamanda clousure yapısı ile modül yapısı ile encapsulation gerçekleştirir. (Closure Anlamak ve JS Module). Tüm bu yapılar zorunlu değildir. İhtiyaçlarınız doğrultusunda opsiyonel olarak kullanabilirsiniz.

Öncesinde bahsettiğimiz gibi JavaScript bir Object basit manada birleşik veri yapısından ibarettir. Bir nesneyi oluşturmak oldukça basittir.

const obj={}

Bu tarz JS objeleri ile kodlama yaptığınız zaman kodunuz “object-oriented” yaklaşımdan çok fonksiyonel olur.

OOP Gerçek OOP Diyemeyiz

Çünkü modern programlama dillerinde object Alan Kay’ın bahsettiği object yeteneklerinden çok daha azı. Bu durumda object yerine belkide component kavramını kullanmak daha doğru olur. Gerçek OOP(Nesne-Tabanlı Programlama) kurallarını ve yeteneklerini Component içerisinde sağlayabiliriz.

Örneğin object içerisindeki bir çok değer başka JS kodları tarafından değiştirilip sahiplenebiliyor. Ama bileşen seviyesinde belli bir state ve encapsulation işlemini gerçekleştirebiliriz. Örneğin React bileşenlerini buna örnek olarak gösterebiliriz. State tamamen dışarıdan izole edilmiş internal state oluştururken, Props’da bileşen dışından bilgi almak ve bilgi göndermek için kullanılır.

React Component

Gerçek OOP demek:

Birçok bileşen davranışı algebraic data yapıları ile özelleştirilebilir. Inheritance gerekli değildir. (Composition vs Inheritance) React Class Component sadece React.Component türetilip başka hiçbir hiyerarşik yapının oluşmamasını ister. Aynı şekilde Hooklar ile Class Component kurtulup Fonksiyonel Component nasıl geçebilecekleri üzerine çalışmışlardır. (Overreacted.io Üzerine Notlar). Bileşenler ortak davranışları, paylaşılmış fonksiyonları tekrar tekrar kullanmak isteyebilir bunu veriyi paylaşmadan nasıl gerçekleştirebilirler ? (React Code Sharing)

JavaScript Object içeriğini değiştirmek veya Class Inheritance yapıları kullanmak OOP(Object-Oriented Programlama) yaptığınız anlamına gelmez. Bileşenleri yukarıdaki kavramlar kapsamında kullanıyor olmanız gerçek Object-Oriented Programming anlamına gelir, belkide Object yerine Monitoring Oriented Programlama denmeli. Bu sayede kafadaki bir çok karışıklık ortadan kalkmış olacaktır.

Referanslar

Okumaya Devam Et 😃

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

--

--