Merhabalar, dergimizin bu sayısında Nesne Yönelimli Programlama'dan (NYP) bahsedeceğiz.

NYP, bazı uygulama yeteneklerine sahip veri yığınlarının birbirleri ile olan ilişkisine dayanan güçlü bir programlama paradigmasıdır. Zaman içinde ihtiyaçlara bağlı olarak yazılan programların boyutlarının artmasıyla birlikte programlarda hata arama ve veri kontrolleri zorlaşmaya başladı, çünkü 50000 satıra varan bu büyük programlar <acronym title="yinelemeli">iteratif</acronym> paradigmayla oluşturuluyordu. Bu paradigma küçük boyutlu programlar için uygunsa bile büyük veri yapılarının depolama, kontrol ve değiştirilmesi işinde azımsanamayacak zorluklar çıkarıyordu. Ek olarak hata ayıklanması isi oldukca zorlaşmıştı, çünkü bu programlar homojen yapıdaydı ve hatanın bu kadar buyuk homojen bir yapıda tespit edilmesi oldukça güç bir işti. İşte <acronym title="yinelemeli">iteratif</acronym> yöntemin bu dezavantajları 1960'lı yıllarda NYP paradigmasının ortaya çıkmasını sağladı.

<acronym title="yinelemeli">İteratif</acronym> yöntemdeki “tür” tanımına benzer bir şekilde NYP de “sınıf” tanımı mevcuttur. Sınıfı türden ayıran genel özellikleri şunlardır:

  1. Veri yapısı homojen değil heterojendir.
  2. “Kendine ait” yöntemleri vardır. Bunlar dış yordamlar tarafından çağrılamaz.

Hafızada herhangi bir sınıf türünden bir yer ayırdığımız zaman, ayrılan bu yer artık "nesne" olmuş olur. (Kurduğumuz analojide "değişken"e denk geliyor) Nesneler "sınıf" tanımında yer alan bütün özelliklere sahiptir. Şimdi, sınıf ile nesnenin iliskisine dair bir benzetme yapalım. Mesela; "otomobil" sınıfı tanımlayalım. Bir otomobile ait olabilecek renk, marka, model, katedilen km gibi özellikler otomobil sınıfının veri kısmını oluştururlar. Uygulama kısmına bakacak olursak, bu kısmı, otomobilin ""dinamik"" özellikleri şekillendirir. Bu uygulamalar 'kaçınılmaz' olarak otomobilin veri kısmında bir takım degişikliklere sebep olabilecektir, en azından biz böyle olmasını bekleriz. Örneğin; bir otomobil ilerleyebilir, geri gelebilir, sağa dönebilir veya sola dönebilir; bununla ilintili olarak otomobil sınıfının icinde ilerle() uygulamamız olduğunu varsayalım. Bu otomobil ilerledikçe katettiği km'si artacağından bu uygulama veri kısmındaki katedilen km verisini değiştirecektir. Aynı bu durumda olduğu gibi otomobilin modeli yıl geçtikçe arttırılacaktır. Bu benzetme üzerinden devam edecek olursak, buraya bazı özelliklerin eklenmesi gerektiğini farkedeceksiniz. Bu özellikleri NYP mantığının 3 temel özelliği altında inceleyelim:

  1. Depolama (Encapsulation): Bu özellik nesnenin istenilen kısmına, istenilen biçimlerde ulaşmayı sağlar. Bir otomobil nesnesinin kmsini sadece kendi ilerle() yordamı değiştirebilir. Bir otomobilin ilerlemesi başka bir otomobilin kmsini etkileyemez. Bu özellik her otomobil için geçerlidir. Ayrıca depolama özelliği bilginin dış yordamlar tarafından ulaşılmasını engeller. Bu özelliği güvenlik için önemlidir.
  2. Miras (Inheritance): Bu özellik benzer sınıfların birbirinden üretilebilmesini sağlar. Mesela taşıt sınıfımız olsun. Bu taşıt sınıfından yukarıda bahsettiğim otomobil sınıfını üretebiliriz, zira “her” taşıtın bir markası veya kmsi vardır. Bu özellikler türetilen sınıfa geçebilir. Fakat türettiğimiz sınıfta genel sınıfta bulunmayan özellikler olmayabilir. Mesela ek olarak kamyon sınıfını türetelim. Bu sınıfın “yük kapasitesi” gibi genel sınıfta ve diğer otomobil sınıfında olmayan kendine ait özellikleri olacaktır. Miras özelliği buna benzer uygulamalarda yardımcı olur.
  3. Çok Biçimlilik (Polymorphism): Bu özellik nesne uygulamalarında programcıya sade ve daha kolay anlaşılır bir arayüz sağlar. Bunun çıkış noktası ise "aynı metodolojiye" sahip nesne uygulamalarının olmasıdır. Mesela; kamyon sınıfı da ilerleme özelliğine sahip olduğundan, kamyon sınıfının içinde ilerle() uygulaması da olması işimizi kolaylaştıracaktır. İşte çok biçimlilik bunu yapabilmemizi sağlar.

Yukarıda bahsettiğim özellikleriyle birlikte NYP mantığının daha birçok özelliği mevcut. NYP'nin büyük programların daha kolay bir şekilde oluşturulması, veri yapılarını daha kontrollü ve güvenilir biçimde depolanması, veri yapılarının daha kolay bicimde manipüle edilmesi ve erişimi, sade bir arayüz sağladığından hataların tespitinde kolaylık sağlaması, gibi özellikleri bu paradigmanın günümüzün çoğu uygulamasında kaçınılmaz çözüm olduğunu gösteriyor.

Kaynaklar: