Nesne Yönelimli Programlama Nedir?

 

Nesne Yönelimli Programlama Nedir?

Nesne Yönelimli Programlama Yaklaşımı herhangi bir programlama dili üzerinde
geliştiricilik yaparken soruna yaklaşımımızdan ziyade çözüme yaklaşımımızı temsil eder.
Çözümümüzü nasıl var edeceğimiz konusunda bize bir mimari kurabilmek amaçlı
bir yaklaşım sunar. Ne demek istediğimizi ve bu yaklaşımın varlığını daha detaylı
açıklayabilmek adına bebek adımlarıyla ilerlemekte fayda var.


Programlama dili, çözüm üretilmesi talep olunan bir ürünün, bilgisayarın okuyabileceği
ve çözümleyebileceği şekilde geliştiricinin hayal gücüne ve bilgisine kalmış şekilde
çözülebilmesine imkan veren araçtır. Bu araç bilgisayar ve çözümümüzü
harmanlayabilmek adına kullanılır, çözümümüzü dijitalleştirme anahtarıdır denilebilir.
Bu anahtarla bilgisayarın belirli görevleri yerine getirmesi amacıyla onu yönetebilir ve
talep olunan işleme keyfimize göre çözümler getirtebiliriz. Yani bir nevi bilgisayarımızla
dijital bağlamda konuşabilir ve bir sorun üzerine bir ortak gibi çalışabiliriz. Bu
programlama dilleriyle talep edilen bir sorun belirli bir süre zarfında çözülebilir hale
gelecektir. Bu sorun genellikle birtakım işleri kolaylaştıran, yerine göre çeşitli
otomasyonlar sağlayan bir program çözümünü gerektirir. Program nedir diye
sorulursa eğer de, talep edilen iş doğrultusunda bilgisayara gönderdiğimiz bir
dizi komutları içerisinde barındıran bir çözümlemesi ya da amacı olan geliştirici
tasarımlarıdır. Bu tasarımların eli kolu programlama dilleridir ve bu programlama dilleri
de adeta birer iletişim anahtarıdır, böylece geliştiricisiyle dijital ortam arasında köprü
kurulabilmiş olacaktır. Bu tasarımların belirli bir amaca yönelik sistematik geliştirilme
işine de yazılım adı verilmekte ve bu yazılımlar işi belirli bir mühendislik çerçevesine
sokup formulize etmektedir. Arkaplan temaları ve terminolojisi hakkında gerekli
olduğunu düşündüğüm birtakım bilgileri önden vermenin faydalı olacağına inanarak
yazıya çeşitli noktalara yoğunlaşarak başladım.


Nesne Yönetlimli Programlama Nedir? Neden Nesne Yönelimli Programlamaya
Gerek Var?

Şimdi gelelim aklımızdaki soruya, nedir yahu bu nesne yönelimli programlama
 dediğinizi duyar gibiyim. 🔊

Nesne yönelimli programlama yaklaşımında sorunu objeler üzerinden yorumlamalı
ve bu yorumlama doğrultusunda çözüm aramalısınız. Bu objelerle alakalı bilgi vermek
için de kullanım yapılarının özelliklerini içerisinde barındıran temsili yapılardır denilebilir.
Bu temsili yapıları yorumlayarak getirilen bu yaklaşımın varlığı çok kritiktir. Öyle ki yazılım
dünyasının tekdüze düşünceden sıyrılması bu yaklaşımın ortaya çıkışıyla başlamıştır.
Örneğin nesnelerin temelinde programlama yaklaşımıyla daha öncesinde defalarca kez
verimsiztekrarlı ve takip edilmesi neredeyse imkansız mimariler yerini başkalarına
bırakmıştır. Bu başkaları, okunabilir yani böylece birlikte çalışabilmeye müsait, tekrar
kullanılmaya
 müsait, geliştirilebilir, kontrol edilebilir ve kolayca sonrasında
sürdürülebilir yapılardır. Yazılım dünyasının neredeyse kalıcı temellerinin atılmaya
başlandığı geç 1960 larda çıkan bu teknik yazılım dünyasında o zamanda adeta bir
devrim yaratmıştır. Nesne yönelimi 4 bacaklı bir iskelet üzerinde şekillendirilebilir. Bu
bacaklar, Encapsulation, Inheritance, Polymorphism ve Abstraction bacaklarıdır.
Bu Abstraction yani soyutlama sınıf tanımlarında yalnızca gerekli özelliklerin üzerine
odaklanılıp buradan belirli yapılar elde etme işidir. Ana amacı gereksiz karmaşıklığı
elimine etmek böylece gereksiz detaylardan kullanıcıyı kurtarmaktır. Örneğin çok
meşhur olan kahve makinesi örneğini verelim. Kahve makinesinin kendi içerisindeki
işlemlerinin varlığı, girdileri bir ürüne dönüştürme süreci ve bu süreçteki kararlarının
listesi yalnızca kahve içmek isteyen bir insan için oldukça gereksiz detaylardır. Sonuç
odaklı düşünen bir kahve sever sadece kahveyle ilgileneceğinden ☕ onun için gerekli
soyutlama işlemlerinin yapılması gayet kritik önem taşımaktadır. Yani kullanıcıya
sunacağın basit bir arayüz ve o kahve makinesinin talep edilen kahveyi üretmesi
sonucu dışındakilerin pek kıymeti yoktur.

Biraz da encapsulation üzerinde durmakta fayda var. Soyutlamada dışarıdan sonuç
 odaklı bakılan bir işlem için gereksiz detayların gizlenmesi demiştik. Kapsüle alma yani
 encapsulation işleminde ise bunu içten süreci yorumlama işlemi üzerinden gereksiz
 detayları elimine ederek kritik işlemi korumaya almak diyebiliriz. Yani şöyle ki belirli
 erişim atamalarıyla verilerin erişilebilirlikleri üzerinden ana işlem korumalı hale
 getirilecektir. Bunu kalemin iç aksamını yerine göre korumak amaçlı onu bir plastik dış
 gövde içerisine alma işlemi olarak görebiliriz. Böylece veriler ya gizlenir ya erişime
 açılır 
ve kullanım üzerinden şekillendirilir.

Sonraki odak noktamız ise Inheritance dır. Inheritance kelime kökeni olarak inherit
etme yani atadan elde etme/miras alma anlamına gelir. Mevcut bir nesne üzerinden
düşünürsek eğer diğer bir nesneye verilerin aktarılması ile alakalı olduğunu söyleyebiliriz.
Mirasın alındığı sınıf Super sınıf olarak adlandırılır, alan ise mirasçı/ara sınıf olarak
adlandırılmaktadır. Tekrar kullanım özelliğini ana amaç olarak düşünen Inheritance da
tekrar kullanımların varlığıyla birlikte verimliliğin arttırıldığını kolaylıkla söyleyebiliriz.
Extends yapısıyla inherit işlemi tanımlanır, ara class yani child class ana yapıdan yani
süper class dan gerekli mirasını böylece alır.

Son bacak olan Polymorphism üzerinde de durup bu kısmı bitirelim. Polymorphism,
süper class üzerinden miras alınmış birtakım özelliklerin child class üzerinde değişen
talebe bağlı olarak değiştirilmesi özelliğine denir. Neden böyle bir şeye ihtiyaç olunsun
yahu zaten ihtiyaç o değilse neden miras alınıyor dediğinizi duyar gibiyim.
Örneklemekten zarar gelmez öyle değil mi? 🤔

Kuş süper class ını ele alalım. Farklı farklı kuş türleri ve bunun sonucunda farklı farklı
kuş özellikleri mevcut. Karga ile saka kuşunu örnek alalım. İki kuş da miras edilen şekliyle
birtakım sesler çıkarmakta. Ancak saka kuşunun sesi kulaklarımızda hoş bir seda
bırakırken karganın sesi öyle mi? 😂

Saka kuşu miras edilen şekliyle değil çok daha hoş şekilde ve farklı özelliklere sahip
olarak ötmekte yani o özellikler Saka kuşu için override edilmiş diyebiliriz. Bu yaklaşımı
bize sağlayan Polymorphism özelliğidir.



Nesne yönelimli programlama ile;

Sınıf içesinde çoğu problemin çözümü belirli bir sınıf içerisinde yapılabilir. Bir sınıf
içerisindeki paylaşımlı kullanılan nesnelerde(başka sınıflarda da çağırılarak kullanılan)
yalnızca ana sınıfı üzerindeki değişim tüm yapının editlenmesi adına yeterli olacaktır.
Çeşitli güvenli yapı prensipleri oluşturulmuştur örneğin kuş sınıfı ana canlı sınıfından
türetilmiştir ancak sürüngen sınıfına erişimi yoktur ve verileri hakkında bilgi sahibi
olunamaz. Nesne yönelimli yaklaşımın belki de en önemli avantajı tekrarlı kodları
engellemesi denilebilir, oluşturulan nesneler birçok yerde kullanılabilir, ya da oluşturulan
bu nesnelerin sınıfları çağırılabilir böylece kod tekrarından kaçınılmış olur.


Ancak potansiyel dezavantaj oluşturabileceği noktalardan da az da olsa bahsedelim. 
Karmaşıklık seviyesi nesne yönelimli programlama kullanımına elverişli olmayan
projelerde kullanımıyla birlikte karmaşıklık seviyesi arttırılmış olabilir. Ayrıca nesne
yönelimli düşünme yaklaşımı 
algoritma bazlı düşünüp çözüme kafa yormanın önüne
geçeilir böyle durumlarda 
algoritmik olarak daha zayıf çözümlerin varlığına neden olabilir.

Yorum Gönder

0Yorumlar
Yorum Gönder (0)