nesne tabanlı programlama

Nesne tabanlı programlama gün geçtikçe dünyada olduğu gibi Türkiye’de de popülerlik kazanıyor. Öyle ki, “geleceğin meslekleri” kategorisinden çıkarak “günümüzün mesleği” haline gelmiş durumda. Birçok insana karmaşık ve anlamsız görünen kodlar yaşamımızı doğrudan etkileyen tüm nesneleri yönlendirmeye devam ediyor. Peki bu kodlar “şeyler”i nasıl algılıyor, onları nasıl tanımlıyor?

Bir Bebeğin Gözünden Nesne Tabanlı Programlama

Günümüz programcılığının en popüler alanları arasında gösterilen nesne tabanlı programlama (object oriented programming), bir bebeğin yeni tanıştığı dünyayı algılama tarzına benzeyen bir modelde geliştiriliyor.

Bebeğin dünyaya geldiğinde ilk gördüğü şey annedir. Daha sonra diğer insanları görür. Dışarı çıktığında kedilere rastlar. Belli bir zamandan sonra, sıkça gördüğü bu kedileri kendi içinde sınıflandırmaya başlar. Çok sayıda kedi görmüştür ve artık bazı kedileri “siyah kediler” bazılarını “beyaz kediler” olarak ayırır.

Bebek zamanla soyut kavramlarla tanışır. Onları tasvir etmek için bazı nesnelere başvurur. Örneğin anne ve babasından hep sevgi görmektedir. Annesinin kazağı veya babasının kravatı onun için sevginin nesnesi haline gelir. Kazak ve kravat gördüğünde aklına gelen şey sadece sevgidir.

Nesneleri Çağırmak

Programlama işinde korkulacak bir şey olmadığını anlamak için kod evreninin, içinde yaşadığımız evrenin sakinleri tarafından oluşturulduğunu akılda tutmak gerekir. Kod yazarları da, bir şeyi ifade etmek için nesnelerden yararlanabilir. İşte nesne tabanlı programlama, en basit ifadesiyle böyle bir yaklaşım.

Programlama yaparken yordamları uygulama koduna yazmak yerine bunları sınıfların içine kaydediyor, buradan nesneler üretiyor ve nesneleri bu şekilde çağırıyorsanız nesne tabanlı programlama işine hoş geldiniz!

Nesne Tabanlı Programlama’daki  4 Sacayağı

Uzman programcılar, nesne tabanlı programlama uygulamalarını yeni başlayanlara anlatmak için 4 ana kuraldan bahseder. Bu 4 kural uygulandığında, nesne tabanlı programlama için gerekli şartlar oluşmuş demektir.

Kapsülleme

Diyelim ki bir programımız var. Programda tanımlanan kurallara göre birbirleriyle iletişim kuran birkaç farklı mantıksal nesneye sahibiz. Kapsüllemede her nesne kendi özel durumunu bir sınıf içinde tutar. Diğer nesnelerin bu duruma doğrudan erişimi yoktur. Bunun yerine, yalnızca ortak işlevlerin bir listesini  yöntemler ile çağırırlar. Böylece nesne kendi durumunu yöntemlerle yönetir. Açıkça izin verilmedikçe başka hiçbir sınıf ona dokunamaz. Nesne ile iletişim kurmak istiyorsanız, sağlanan yöntemleri kullanmanız şarttır. Ancak, varsayılan olarak, durumu değiştiremezsiniz.

Yazının başında bahsettiğimiz bebeğin kedileri sınıflandırmasını düşünelim. Onun için siyah, beyaz kediler vardır. Bununla birlikte aç ve tok kediler de bulunur. Bebek, kediye mama verebilir. Ancak “aç kedi”yi bulunduğu sınıftan doğrudan çıkaramaz.

Soyutlama

İletişim beraberinde “nesnelerin birbirine bağımlılığı” sorununu getirir. Programcı için burada çözüm soyutlamayı sağlamaktır. Soyutlama, kapsüllemenin doğal bir uzantısı olarak düşünülebilir. Nesneye yönelik tasarımda, programlar genellikle fazla büyüktür. Bu durumda ayrı nesneler birbirleriyle çok fazla iletişim kurar. Bu yüzden yıllarca böyle büyük bir kod tabanını korumak da yol boyunca değişiklik yapmak da zordur. Soyutlama, işte bu ürkütücü sorunu hafifletmeyi amaçlayan bir kavramdır.

Soyutlamayı uygulamak, her nesnenin yalnızca onu kullanmak için üst düzey bir mekanizmayı ortaya çıkarması gerektiği anlamına gelir. Bu mekanizma, içinde uygulama ayrıntılarını saklamalıdır. Böylece, sadece diğer nesnelerle ilgili işlemleri göstermelidir.

Bir masaüstü bilgisayarı düşünelim. Kasanın içerisinde birbirinden farklı işlevlere sahip onlarca donanım bulunur. Bilgisayarın açma düğmesine bastığınızda sesler çıkmaya başlar, birçok donanım faaliyete geçer ve birkaç saniye içerisinde monitörünüzde masaüstü uygulamalarına erişmiş olursunuz. Size düşen yalnızca bir düğmeye basmaktır. Düğmenin altında ne olup bittiği hakkında bir bilgiye sahip değilsinizdir. Ne olup bittiğini bilmenize gerek kalmadan, işleminizi gerçekleştirebilirsiniz.

Kalıtım

Kapsülleme ve soyutlamanın kod temeli geliştirme ve korumada programcıya nasıl yardımcı olduğunu gördük. Şimdiye kadar her şey kusursuz görünüyor. Peki, nesne tabanlı programlama işlemlerinin tümünde görülen “nesnelerin birbirine benzerliği” sorununa nasıl çözüm getirilir? OOP tasarımında ortak bir sorunun ne olduğunu biliyor musunuz?

Evet, nesneler genelde birbirine çok benzer ve ortak mantığa sahiptirler. Ancak tamamen aynı değillerdir. Öyleyse ortak mantığı tekrar nasıl kullanırız ve benzersiz mantığı ayrı bir sınıfa nasıl çıkarırız? Bunu başarmak için kalıtım yolunu kullanırız.  Başka bir ebeveyn sınıftan türeterek alt bir sınıf oluştururuz. Bu şekilde bir hiyerarşi oluştururuz. Böylece alt sınıf, ana sınıfın tüm alanlarını ve yöntemlerini yeniden kullanır ve kendi benzersiz bölümünü uygular.

Çok Biçimlilik

Diyelim ki ebeveyn sınıfımız ve ondan kalan birkaç alt sınıfımız var. Tüm bu sınıfların bir karışımını içeren bir koleksiyonu, örneğin bir listeyi, kullanmak istiyoruz. Ya da ebeveyn sınıfı için uygulanmış bir yöntemimiz var ve bunu alt sınıflar için de kullanmak istiyoruz. Bu noktada imdada çok biçimlilik (polimorfizm) yetişir.

Çok biçimlilik alt sınıfları kendi yöntemlerini koruyarak ebeveyn sınıfı gibi kullanmanın yolunu açar. Bu, genellikle yeniden kullanılacak bir ana ara yüz tanımlayarak olur. Bu ara yüz bir çok ortak yöntemi içinde barındırır. Sonra, her bir alt sınıf bu yöntemlerin kendi versiyonunu uygular.

Kodlardan korkanlar için güzel bir haberimiz var. Programlama işinde korkulacak bir şey yok! Aslında programlama işinin kendisinde korkulacak bir şey yok, çünkü programları yazanlar da bizim gibi insanlar ve hayatı algıladıkları biçimde o kodları yaratıyorlar. Nesne tabanlı programlama ise buna güzel bir örnek ve bu alana ilgi duyanlar için uygun bir giriş kapısı olabilir.

Bir önceki yazımıza https://smartpro.com.tr/humble-bundle-nedir/ linki üzerinden ulaşabilirsiniz.