Photo by Daniel Tong on Unsplash

JS ILE FONKSIYONEL PROGRAMLAMA

Object-Oriented Programlamanın Unutulmuş Tarihi — 4

Onur Dayıbaşı
Frontend Development With JS
3 min readMay 25, 2021

--

Bu yazıyı daha önceden yazmış olduğum Object-Oriented Programlamanın Unutulmuş Tarihi-1 , Tarihi-2 ve Tarihi3 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 😃.

“I realized that the cell/whole-computer metaphor would get rid of data[…]”
~ Alan Kay

Alan Kay yukarıda cümlede hücre/bilgisayar ana odağın veriden kurtulma yani veri paylaşımının , paylaşılan verinin neden olduğu sıkı bağlantılı yapıların ne tarz zorluklara neden olduğunun farkındaydı.

Ancak 1960'ların sonlarında, ARPA programcıları, yazılım geliştirmeden önce programları için bir veri modeli temsili seçme ihtiyacı nedeniyle hayal kırıklığına uğradılar. Belirli veri yapılarına çok sıkı bir şekilde bağlanan prosedürler, değiştirilmeye karşı dirençli değildi. Verilerin daha homojen bir şekilde işlenmesini istediler.

“[…] the whole point of OOP is not to have to worry about what is inside an object. Objects made on different machines and with different languages should be able to talk to each other […]” ~ Alan Kay

  • Objeler, veri yapısı uygulamalarını soyutlayabilir ve gizleyebilir.
  • Bir nesnenin dahili uygulaması, yazılım sisteminin diğer bölümlerini bozmadan değişebilir.
  • Aslında, aşırı geç bağlama ile, tamamen farklı bir bilgisayar sistemi bir nesnenin sorumluluklarını devralabilir ve yazılım çalışmaya devam edebilir.
  • Bu arada nesneler, nesnenin dahili olarak kullandığı herhangi bir veri yapısı ile çalışan standart bir arayüz ortaya çıkarabilir. Aynı arayüz bağlantılı bir liste, ağaç, akış vb. ile çalışabilir.

Alan Kay ayrıca objeleri cebirsel yapılar olarak görüyordu, bu da davranışlarını matematiksel olarak kanıtlanabilir deterministik mekanikler haline getiriyordu.

“My math background made me realize that each object could have several algebras associated with it, and there could be families of these, and that these would be very very useful.”
~ Alan Kay

Bu kanıtlanmış bir doğrudur. Object formunun temelini kategori teorisinden gelen promises veya lenses yapıları oluşturur.

Alan Kay’ın objelere yönelik vizyonunun cebirsel doğası,

  • nesnelerin biçimsel doğrulamalara,
  • deterministik davranışa
  • ve gelişmiş test edilebilirliğe sahip olmasına izin verir

çünkü cebirler(algebras) temelde birkaç kurala uyan denklem formunda işlemlerdir.

Cebir(algebras), sayılar teorisini, geometriyi ve analizi içine alan geniş bir matematik dalıdır. Temel matematik işlemlerinden, çember ve daire alanları bulmayı kapsayan geniş bir çemberi vardır. Temel cebir bilimi, mühendislik ve eczacılık gibi birçok alanda kullanılmaktadır. Vikipedi

Programcı diliyle cebir;

fonksiyonların (aksiyomlar / denklemler) geçmesi gereken birim testler tarafından uygulanan belirli yasaların eşlik ettiği fonksiyonlardan (operasyonlardan) oluşan soyutlamalar gibidir.

Bu fikirler, C ++, Java, C # vb. Dahil olmak üzere çoğu C ailesi OO dilinde onlarca yıldır unutulmuştu, ancak en yaygın kullanılan OO dillerinin son sürümlerinde geri dönmeye başlıyorlar.

Programlama dünyasının OO dilleri bağlamında işlevsel programlamanın ve mantıklı düşüncenin faydalarını yeniden keşfettiğini söyleyebilirsiniz.

JavaScript ve Smalltalk ondan önceki gibi, çoğu modern OO dili giderek daha fazla “çok paradigmalı diller” haline geliyor. Fonksiyonel programlama ve OOP arasında seçim yapmak için hiçbir neden yoktur. Her birinin tarihsel özüne baktığımızda, bunlar sadece uyumlu değil, aynı zamanda tamamlayıcı fikirlerdir.

Ortak birçok özelliği paylaştıkları için, JavaScript’in Smalltalk’ın asıl devam edeni olarak söyleyebiliriz.

  • Objects
  • First-class functions and closures.
  • Dynamic types
  • Late binding (functions/methods changeable at runtime)
  • OOP without class inheritance

Alan Kay’a göre OOP esas olan temeller neydi ?

  • Encapsulation
  • Message passing
  • Dynamic binding (the ability for the program to evolve/adapt at runtime)

Peki Alan Kay’a göre önemli olMAyan ama Object Oriented Tasarım ve Geliştirmede hep en çok bahsedilen konular nelerdir ?

  • Classes
  • Class inheritance
  • Special treatment for objects/functions/data
  • The new keyword
  • Polymorphism
  • Static types
  • Recognizing a class as a “type”

Not: Yukarıda bir sürü kavram geçiyor. Bu kavramları kafanızda oturtabilmeniz için önceden yazmış olduğum bazı yazıları okumanızı öneririm

Referanslar

Okumaya Devam Et 😃

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

--

--