Object Oriented Programming (OOP)

KATEGORİ

Nesne yönelimli programlamayı nasıl açıklayabiliriz?

Bunu basit bir şekilde cevaplamak için chocolate analogy kavramından faydalanalım. OOP ile gerçek dünyadaki nesnelerin modellemesi yapılır. Nesne kavramı OOP’nin temelidir. Diyelim ki çikolata üretmek istiyoruz. Bunun için öncelikle bir çikolata kalıbına ihtiyacımız var. Öncelikle bu kalıp üretilir. Kalıbın belli özellikleri olacaktır. Boyut, şekil, çikolata tipi, ek malzemesi vb. Bu özelliklerin haliyle bir kısmı değişmez bir kısmı değişebilir olacaktır.

Kalıbımızı ürettikten sonra çikolata üretim işlemine başlayabiliriz. Burada çikolata kalıbı bizim sınıfımız, üretilen çikolata da bu sınıftan ürettiğimiz nesnemizi temsil eder. Her bir nesneyi oluşturduğumuzda onun özelliklerini de (tip, içindeki kuruyemiş, üretim tarihi, son kullanma tarihi) tanımlarız.

OOP’nin 4 temel prensibi : Encapsulation, Inheritance, Polymorphism ve Abstraction’dır.

Encapsulation (kapsülleme), bir sınıfın dışarıdan erişimi konusunda getirilen kısıtlamaları ifade eder. Java’da public, private ve protected keywordleri ile bu kısıtlamalar yönetilir.

Inheritance, bir sınıfın başka bir sınıfın özelliklerini ve davranışlarını almasıdır. Kalıtım, sınıflar arası is-a ilişkisi oluşturur. Alt sınıf, üst sınıfın bir türüdür. Kalıtım için extends keywordü kullanılır. Java’da çoklu kalıtım yoktur. Ancak birden fazla arayüz(interface) implement edilebilir. Bu durumda bir sınıfın farklı davranışlar sergilemesini istediğimiz durumlarda birden fazla arayüz implement edilerek çoklu kalıtıma benzer bir durum oluşturulur.

Polymorphism, aynı adı taşıyan methodların aynı sınıf içinde ya da farklı sınıflar içinde farklı davranışlar sergilemesidir.

Bir sınıf içerisinde aynı ada sahip birden fazla method olsun. Bunların parametre sayıları farklı olabilir. Parametre sayıları aynı olsa dahi parametre tipleri farklı olabilir. Haliyle bu farklılıklar içinde bir method çağrısı yapıldığında hangi methodun kullanılacağına parametrelerin tipine ve sayısına bakılarak karar verilir. Bu çözümleme işlemi compile-time’de gerçekleşir ve bu işleme compile-time polymorphism denir.

Runtime polymorphism’de ise, alt sınıf üst sınıfın aynı adlı methodunu alır ve kendi ihtiyacına göre tanımlar. (Üst sınıf : shape, altsınıflar: kare, dikdörtgen , method da getArea() olsun)

Abstraction (soyutlama), nesne yönelimli programlamada bir nesnenin önemli detaylarını gösterirken, gereksiz veya kullanıcı için önemsiz olan detayları gizlemeyi ifade eder. Java’da soyutlama işlemi için hem abstract sınıflar hem de interface’ler kullanılır. Abstract sınıf hem soyut hem de somut (içi doldurulmuş) methodlar içerebilir. Bu sınıftan bir nesne de oluşturulamaz.

Abstract sınıfın sınıf üyeleri bulunurken interface’te bulunmaz. Haliyle, abstract sınıf bir nesnenin tipini temsil ederken, interface davranışlarını temsil eder.