Photo by Daniel Tong on Unsplash

JS ILE FONKSIYONEL PROGRAMLAMA

Object-Oriented Programlamanın Unutulmuş Tarihi — 1

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 JS ile Fonksiyonel Programlama yazısının bir devamı olarak yazıyorum. Bir çok kavramı tek bir yazıda ele almanın yaratacağı karmaşıklıktan kaçmak için bu şekilde bir yönteme başvurdum.

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 eklerim 😃.

Bugün kullandığımız fonksiyonel ve imperative programlama paradigmaları 1930'larda matematikteki Lambda Calculus ve Turing Machine ile evrensel formülasyon işletimine bir alternatif olarak ortaya çıktı.

Not: Imperative Programla ve Fonksiyonel Programlama nedir bilmiyorsanız daha önceden yazmış olduğum aşağıdaki yazılara göz gezdirmenizi öneririm.

Church Turing Tezi bize Turing Makinesi ile Lambda Calculus eşdeğer olduğunu , Turing makinesinde işletilebilen bir kodun aynı zamanda Lambda Calculus içinde işletilebileceğini gösterdi.

Not: Church Turing, Turing Makinesi ve Lambda Calculus hakkında daha detaylı bilgi almak için aşağıdaki yazıya göz gezdirmenizi öneririm

Turing Makinesi ile ilgili yanlış bir kanıda her şeyin işletilebilir olduğuydu. Ama bazı durumlardan dolayı bu mümkün değil (örneğin: halting problem, durdurulamama sorunu). Yazıda “işletilebilir(computable)” olarak bahsedilen tüm kavramlar Turing Makinesinde çalıştırılabilir kod anlamında bahsedilecektir.

while (true) continue //infinite loop
print "Hello, world!"

Lambda calculus yukarıdan aşağıya fonksiyonların işletimi yaklaşımını benimserken, Turing makineside kayan şerit / kayıt makinesinde formülasyonu, hesaplamaya aşağıdan yukarıya, (adım adım) bir yaklaşımı temsil eder.

Lambda Calculus ve Turing Makinesi

Low level programlama dilleri (makine kodu ve assembly) ilk olarak 1940'ların başlarında gözükmeye başladı. 1950'lerin sonuna doğru high-level programlama dilleri gözüktü. Günümüzde de hale kullanılmaya devam eden Lisp dialect devamı olan Clojure, Scheme, AutoLisp vb…. ve bunun yanında günümüz imprative dillerin temelini oluşturan FORTRAN ve COBOL ilk olarak 1950'lerde ortaya çıkmış, daha sonraki yıllarda FORTRAN ve COBOL yazılan uygulamlar C ve C++ ve C aile türevi diller ile tekrardan yazılmıştır.

Digital bilgisayar çağının ilk evrelerindeki tüm imperative ve fonksiyonel programlama dillerinin kökleri matematik teki computation theory (hesaplama, işletim teorisine) dayanır. Object-Oriented Programming OOP (Nesneye-Dayalı Programlama) ise 1966/67 yılında Alan Kay tarafından yüksel okuldayken ortaya atıldı.

Ivan Sutherland’s 1961/62 yıllarında geliştirdiği Sketchpad uygulaması ve 1963 yılında yazmış Sketchpad Tezi OOP için öncül ilham kaynağı olmuş. Objeler veri yapıları olarak grafik resimlerde osiloskop ekranda gösterilip, dynamic delegation ve inheritance kavramlarına tezinde bahsetmiştir.

Herhangi bir object → (master), bu objenin oluşturulmuş örneklerde → (occurrences) olarak adlandırılmıştır. Sketchpad’s masters → örneklerindeki kalıtım yapısı , JavaScript prototype inheritance mekaniğinde kullanılmıştır.

Not: JavaScript Prototype Inheritance konusunu bilmiyorsanız bu konuda yazmış olduğum aşağıdaki yazıları okumanızı öneririm.

MIT Lincoln Laboratuvarı’ndaki TX-2, bir ışık kalemi kullanarak doğrudan ekran etkileşimi kullanan bir grafik bilgisayar monitörünün ilk kullanımlarından biriydi.

Whirlwind: Preparing the Way for SAGE

1948–1958 arasında çalışan EDSAC, bir ekranda grafikleri görüntüleyebiliyordu. MIT’deki Whirlwind, 1949'da çalışan bir osiloskop ekranına sahipti. Projenin amacı, birden çok uçağı içeren genel bir uçuş simülatörü yaratmaktı. Bu, SAGE hesaplama sisteminin geliştirilmesine yol açtı. The TX-2 was a test computer for SAGE.

İlk object-oriented programlama dili olarak bilinen Simula (Simulation Programming Language)1965 yılında ortaya çıktı. Simula’da Object, Class, Class Inheritance, Subclass ve Virtual Method kavramlarını kullanmıştır.

Virtual Method bir sınıfın altsınıflarınca gerçekleştirimlerinin ezilebileceği metodların tanımlanmasıdır. Java, .NET interface tanımlaman veya abstract sınıfta tanımlanan metodlar alt sınıflar tarafından gerçekleştirilmek zordundadır, veya bir sınıfın subclass içerisinde türediği sınıfa ait bir metodu ezerek implementasyonu değiştirebilir. İşte bu durumda kod compile sırasında değil de , bu kod çalıştırılırken o ana sınıfın hangi subclass implementation çağrılacağı belli olur ve program dallanmaya başlar. JavaScript ise tamemen dinamik bir dil olduğu için yani tüm metodları (run-time) belirleyebildiğiniz için bu tür Virtual Method desteğine ihtiyaç duymamaktadı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.

--

--