Bilmek istediğin her şeye ulaş

Nesne tabanlı programlamaya neden gerek duyulur?

Öncelikle programlamanın gelişimine bakmak gerekiyor. Önceleri kod içindeki dallanmalar için goto ve benzeri deyimler kullanılıyordu. Daha sonra prosedürel teknikle program parçacıkları fonksiyonlarda yazılmaya ve çağrılmaya devam etti. Nesne yönelimli programlama ise sadece bir teknik değil, yaklaşım şeklidir. Nesne yönelimli yazılım tasarımı yapılır. Sonra bu tasarım ilgili tekniklerle kodda uygulanır.

4 temel prensibi vardır.
  • Çok biçimlilik (Polymorphism)
  • Soyutlama (Abstraction)
  • Miras alma (Inheritance)
  • Sarmalama (Encapsulation)

Neden gerek duyur sorusuna cevap değil bunlar ama giriş niteliğinde. Temel olarak sebebi ise kod boyutunun artması, yazılan kodların tekrar kullanılabilirliği ve ekip şeklinde çalışmaya kolaylık göstermesi temel sebepleridir.

Bir programlama dilinde OOP (Nesne yönelimli programlama) tekniklerini biliyor olmak, OOP yazmak anlamına gelmez. Siz gidip klasik fonksiyonları bir veya birden fazla sınıf içerisine alıyorsanız bu OOP değildir. OOP'nin bir düşünce yapısı vardır.

Mesela miras alma ve çok biçimlilik çok önemlidir. Nedir bu miras alma? Temel olarak bir sınıfın diğer bir sınıf veya sınıflardan özellikler veya metotlar miras almasıdır. Örneğin tarihi Türkçe tarih formatına çeviren bir metodunuz var. Bunun dahil olduğu tarih sınıfını miras alan bir sınıf yazarsanız bu metodu da kullanabilirsiniz. Yani kod tekrarını önlemiş olursunuz. Bu fonksiyonel programlamada da vardır ama çok biçimlilik yoktur. Örneğin tarih sınıfınızda gün artır diye bir metot olsun ve tarihe belirlenen günü eklesin. Siz miras aldığınız sınıfın bu metodunu ihtiyaca göre değiştirebilirsiniz. Yani komple tarih sınıfını alırsınız ama gün artırma metodunun üzerine yazabilirsiniz (overriding). Örnek olarak gün artır dediğinizde artık bu metot, verilen günün iki katı günü tarihe ekleyebilir. Ama dikkat edin, eski sınıfta bir modifikasyon yapmadık.

Sınıflar gelişmeye açık, değişime kapalı olmalıdır. Yani tarih sınıfını miras alan 10 sınıf varsa ve siz tarih sınıfını değiştirirseniz, bunu miras alan sınıflarda da değişim yapma ihtimaliniz olabilir.

Sarmalama (Encapsulation) kavramına da değineyim. Mesela bir veritabanı sınıfınız var ve bunun hata şeklinde bir özelliği var. Siz bu özelliğe dışarıdan erişimi kapatabilirsiniz. Yani bir sınıf bu sınıfı miras alsa da hataya direkt erişim sağlanamaz. Bu mantıklıdır, çünkü veritabanı hatalarını işlem yapan metotlar üretir. Siz gidip durup dururken hataya "olmadı bea" yazamazsınız. Eğer yazarsanız bu sınıfın log tutan sınıfla etkileşimini bozabilir, loglara tanımlanamayan hatalar yazdırabilirsiniz.

Sonuç olarak OOP, kod tekrarını azaltan, geliştirme sürecini verimli kılan, takım çalışmasına kolaylık sağlayan bir programlama paradigmasıdır. Ekrana "Merhaba Dünya" yazdırmak için OOP yapmak zorunda değilsiniz. İhtiyaç duyduğunuzda kullanabilirsiniz. Tabi Java, C# gibi diller tamamen OOP yönelimlidir. Temel veri tipleri bile nesnelerle ifade edilmiştir. Ama genel olarak OOP yapmak belli bir tasarım ve kodlama sürecini beraber gerektirir.
  • Paylaş
Teknik insanların önemli bir kısmı bu gerçeği kaçırsa da bilgisayar bilimleri, pek çok yönü ile hayatın ve özellikle beynin düşünsel fonksiyonlarının, yaşamı algılayışının bir modelidir. Dolayısıyla; bilgisayar ile bir bilim olarak derinleşmek hayatı daha sistematik olarak değerlendirmek, analitiğini görebilmek fırsatını verir insana. Bu önermenin tersi de önemlidir: Bilgisayar bilimlerinin karmaşık gibi görünen dehlizlerle dolu yollarında, güncel yaşamdan örnekler alarak benzetimlerde bulunmak, çoğu kez sorunu çözücü, anlaşılmazı anlaşılır kılmaya yeter. Tıpkı nesneye yönelik tasarıma ve programlamaya nereden gelindiğini anlarken kullanacağımız yöntem gibi:

Yaşama biraz daha alıcı gözle baktığımızda, algı sınırlarımızla çevrelenmiş bu dünyanın, her biri kendince anlamlı, sayısız varlıktan oluşma bir yapboz olduğunu düşündürecek yeterince bulguya erişiriz. İşe başlıyoruz:

Coğrafi olarak söylersek; dünya, kıtalar, ülkeler, şehirler, ilçeler, mahalleler, sokaklar, binalar, daireler...
Biyolojik olarak söylersek; canlı, familya, cins, beden, organ, hücre...
Dikkat ederseniz; sağdan sola doğru gidildikçe bir bütün oluşuyor. O halde her maddenin atomdan oluştuğu gibi, her varlığın alt varlıklardan oluşması, akla yatkın gözüküyor.

Bir evi örnek alın ve isim tamlamaları türetin: evin penceresi, evin kapısının kulpu, evin ocağının bacasının dumanı...

Bu örneklerin akıl almaz kombinasyonlarla çoğaltabileceğimiz gerçeği, yaşamın ne denli zengin bir varlıklar (nesneler) kümesi olduğunu ortaya koyuyor. Ve biraz daha derin bir analizde şunun da farkına varmak mümkündürki; nesnelerin yaşam uzayı içindeki rolünü ve önemini belirleyen temel faktörlerden birisi de diğer nesnelerle kurduğu ilişkilerdir. Sosyal ağ kavramının da çıkış noktası burasıdır. Diğer bir ifadeyle karmakarışık bir ağın parçalarıyız, diğer tüm varlıklar gibi ve sürekli olarak diğer varlıklarla (nesnelerle) etkileşim halindeyiz ki yaşam bu demek.

Daha da teknik ifadeyle; kendimiz de dahil olmak üzere tüm canlı ve cansız hayat yapı taşları, hayat denen çizgenin (grafın) düğümleriyiz. Birbirimizle olan ilişkiyi gösteren, belki de sonsuz sayıda kenar ile birbirimize bağlıyız. Bu karman çorman ağın bir parçası olmaktır, yaşamak.

Bu kadar bilişim felsefesinden sonra, bir soru geliyor akla: Bir nesneyi diğerlerinden ayırmak, onunla iletişim kurmak ve onu yönetebilmek için bazı özel tanımlara ihtiyacımız yok mu? Elbette! Yaşamı iyi gözlemleyenler -ki iyi bilim insanı olmak, bu demektir- nesnelerlr ilgili bu tanımları üç kategoride toplamışlar:

1- Bu nesnenin nicel özellikleri (Boyu posu, rengi, tadı, ağırlığı, şekli şimali vb.) [özellik, attribute]
2- Her varlık gibi bu nesnenin de başına gelebilecek haller (kırılma, çarpma, düşme, yürüme, patlama, ölme vb.) [olay, event]
3- Bu nesneye iletişime geçilerek yaptırılabilecek eylemler (bağır, yaz, koş, göster, sus, ye, kapat, azalt vb.) [metod, method]

İşte bu tespit üzerine modellenmiş ve kurgulanmış bir yapıdır, nesneye yönelik tasarım ve programlama: Daha gerçeğe yakındır, bir orkestra şefi olduğu hissini verir tasarımcısına. Yine canlılar dünyasında olduğu gibi bazı özellikler kalıtsal olabilir yani; genetik yolla kendinden türeyen diğer canlılara geçebilir. [kalıtım, inheritance] Yine canlılar dünyasında olduğu gibi; kalıtım yoluyla geçen özelliklerden bazıları mutasyona uğrayarak değişebilir [çok biçimlilik, polymorphism] , atasında olmayan yeni özellikler kazanabilir [üzerine yazma, overriding]. Hatta bir bukalemunun renk değiştirerek kendini gizlemesi gibi bazı özelliklerin bazı kimselere görünür bazılarına görünür olmamasını tercih gibi güvenlik amaçlı davranışlar da olabilir canlılar dünyasında. [sarmalama, encapsulation] Ve nihayet soyut kavramlar da vardır yaşamın içinde; duyu organlarımızla algılayamayız belki ama var olduğunu biliriz. [soyut, abstract]...

Bir kapı:
Özellikleri var; rengi kırmızı, boyu 2 metre, cinsi tokmaklı, durumu açık...
Olayları var, başına gelen; açılır, kapanır, çalınır, kırılır...
Metodları var, yapmasını istediğimiz; açıl, kapan, dur, devril...

Bu kapıdan bir başka yavru doğabilir, o da kapı lakin bir özellik eklenerek mutasyona uğratılmış, o bir "camlı" kapı. Bir diğer çocuğu da "sürgülü kapı". İşte size çok biçimlilik.
Bu kapının kilidi var, öyle herkese açılmaz. Kimisine kilitli görünür kimisine açık. Sarılıp "sarmalanmıştır" bir güzel...

Ne kadar renkli bir yaşam değil mi? İşte o rengi kaçırmamak adına, insanoğlunun en iyi yaptığı iş yapılarak yaşam taklit edilmiş; kuşların kanatları uçaklara, köstebeğin tırnakları iş makinesinin kepçesine nasıl takıldıysa gerçek yaşamın nesneler analitiği de yazılım dünyasına kurgulanarak, "nesneye dayalılık" konsepti geliştirilmiştir. Önceki yaklaşım olan "yapısal programlama" gibi makine sistematiğine göre değil, nesnelere parçalanmış gerçek bir yaşamın düzenine göre davranır. Yazılımcının kendisini başrollerde çeşitli nesnelerin oynadığı bir filmin yönetmeniymiş gibi hissetmesi, bundandır ki doğaldır.

Bir başka önemli nokta: Burada anlatılanlar sanki meslektaşlarımla ve programcılarla ilgili gibi düşünülebilir ama aslında her meslek kesiminde karşılaşılan bir olgudur nesneler. Çünkü hayat o nesnelerin etkileşiminden ibarettir. Umuyorum farklı alandaki kişilere de nesnelerin sistematiği açısından fikir verir, yazdıklarım.

İşten Cemce bir nesne tabanlı yaşam tarifi. Onu lezzetli bir yemeğe dönüştürmek ise sizin maharetinizle mümkün.
  • Paylaş
Sonraki Soru
HESAP OLUŞTUR

İstatistikler

84 Görüntülenme3 Takipçi2 Yanıt

Konu Başlıkları