Nesneye yönelik programlama 1990’lı yılların ve günümüzün teknolojisidir ve büyük olasılıkla yakın gelecekteki programlama teknolojisi olmaya da devam edecektir. 1970’lerdeki Yapısal Programlamanın (Structured Programming) yerini tamamı ile almıştır.
Nesneye yönelik programlamada, programlama ortamındaki her şey bir nesne olarak kabul edilmekte, nesnelerin özellikleri (Properties) değiştirilerek onlara yeni biçimler verilebilmektedir. Ayrıca her nesnenin duyarlı olduğu olaylar (Events) mevcuttur. Her nesne üzerine uygulanabilecek farklı metotlar (Methods) oluşturulmuştur.
Yapısal Programlamada ağırlık programlama komutlarında iken, Nesneye Yönelik Programlamada yazılımcının ortamdaki nesneler, özellikleri, hassas oldukları olaylar ve nesnelere uygulanabilecek metotlar hakkında da detaylı bilgi sahibi olması gerekmektedir.
Nesne Yönelimli Programlama (NYP) mantıksal işlemlerden ziyade, nesnelere (object) ve nesneler üzerinde işlemlere odaklanan programlama dili modelidir. NYP’de programlar, nesnelerin birbirileriyle etkileşime geçmeleri sağlanmasıyla tasarlanır. Java, C++, C#, Python, PHP, JavaScript, Ruby, Perl, Smalltalk, Objective-C gibi diller başlıca nesne yönelimli programlama dilleridir. NYP teorisinde 4 temel özelliğin gerçekleştirilmesi zorunlu sayılmıştır ve biri bile eksik ise bu dil saf NYP sayılmamıştır.
Bu dört temel özellik şunlardır:
Soyutlama, NYP’de programlama dilinin farklı tip verileri ve sınıfları farklı şekilde işleme yeteneğini belirten özelliğidir. Temel olarak, metotları ve türetilmiş sınıfları yeniden tanımlama yeteneğidir.
Örneğin, yeryüzünde bulunan her şey bir nesnedir. Bilgisayar yazılımı açısından nesne, bir varlığın temsil biçimidir. Bir bina da bir nesnedir. Binayı bilgisayar yazılımı içinde temsil etmek istersek, bu nesnenin ayırt edici özelliklerini belirlemeliyiz. Bina yüksekliği, dış yüzey rengi, kat sayısı, zemin alanı ve zemin boyutları gibi özellikler, binayı temsil etmek için ilk akla gelen özelliklerdendir. O halde nesnenin bilgisayarda temsilinde, özellikleri (properties) kilit rol oynamaktadır.
Nesnenin karakteristik özellikleri (properties) ve gerçekleştirebileceği eylemler de metot olarak adlandırılır. Bu anlamda, soyutlaştırmanın sonucunda bir nesne, özellikleri ve metotları ile temsil edilebilir.
NYP dilleri, soyutlamayı sınıf (class) yapısı ile gerçekleştirirler. Sınıf yapısı içerisinde o nesneye ait özellikler ve metotlar tanımlanır. Ancak sınıf soyut bir yapıdır ve doğrudan kullanılamaz. O sınıftan üretilen örnekler (instance) sınıfa ait tüm özelliklere ve metotlara sahip olurlar ve bunlar program içinde doğrudan kullanılabilirler.
Soyutlamada, alt sınıfların ortak özelliklerini ve işlevlerini taşıyan ancak henüz bir nesnesi olmayan bir üst sınıf oluşturmak istenirse bir soyut (abstract) üst sınıf oluşturulur. Soyut sınıfın yöntemleri alt sınıfları tarafından üzerine yazılmak üzere şablon olarak tanımlanabilir veya soyut metot olarak oluşturulabilir. Soyut metoda sahip bir sınıf otomatik olarak kendisi de soyut hale gelir ve soyut sınıflardan nesne oluşturulmaz.
Aşağıda soyutlamanın bir örnek bulunmaktadır. "Sekil" adlı bir soyut sınıf oluşturulmuştur. Bu sınıfa alt sınıf olarak "Dikdortgen" diye gerçek bir sınıf oluşturulmuştur. Bu alt sınıfa "cevre" diye bir metot oluşturulmuştur ve "Sekil" altındaki diğer alt sınıflar ve ortak bir metot olduğu için bu metot "Sekil" soyut sınıfının altına da eklenmiştir.
Kapsülleme, NYP'nin temel kavramlarından biridir. Genel tanımıyla kullanıcı tarafından verilen, sınıfların ve metotların ne kadarının görüntülenebileceği ve değiştirilebileceğinin sınırlarının konulmasını sağlar. Public (herkese açık), private (özel) ve protected (koruma altında) olmak üzere üç adet access modifier’dan (erişim dönüştürücüsü) bahsedilebilir.
Public olanlar herkes tarafından görülebilir ve değiştirilebilir yani en güvensiz sınıf çeşididir. Bir program yazılırken programın iç yapısını değiştirecek metotların Public olması önerilmez. Public modifier dış kullanıcı tarafından eklenmesi veya değiştirilmesi istenen veriler için kullanılır.
Protected modifier, public modifier’dan daha güvenli bir access modifier’dır. Aynı sınıf içinde görüntülenebilir veya erişilebilirler. Aynı zamanda üst sınıflar, ondan türetilmiş sınıflar ve aynı paket içinde bulunan sınıflar tarafından görüntülenebilir veya erişebilirler.
Private en güvenli access modifier’dır. Private olanlar yalnızca içinde olduğu sınıf tarafından görülebilir veya erişilebilirler. Sınıflar private olabileceği gibi özellikleri ve üstünde tuttuğu veriler de private olabilir.
Aşağıda objenin private, public ve protected üç özelliği görülmektedir. Öğrencinin isim, bölüm, gano bilgileri dış kullanıcı tarafından görüntülebilirken kimlik numarası yalnızca "Ogrenci" sınıfının içindeyken görüntülenebilmekte ve değiştirilebilmektedir. Bölüm sıralaması ise "Ogrenci" sınıfının içindeyken veya "Ogrenci" sınıfından türetilmiş sınıfların içindeyken görülebilir ve değiştirilebilir.
Çok biçimlilik, NYP'de programlama dilinin farklı tip verileri ve sınıfları farklı şekilde işleme yeteneğini belirten özelliğidir. Daha belirgin olmak gerekirse; metotları ve türetilmiş sınıfları yeniden tanımlama yeteneğidir.
Aşağıda çok biçimliliğin daha iyi anlaşılmasını sağlayacak bir ekran görüntüsü mevcuttur. "NesneCiz" adlı üst sınıfa "Kare" ve "Ucgen" alt sınıfları oluşturulmuştur. "Ciz" metotu kullanılarak farklı iki geometrik şekli doğru şekilde çizilmesi sağlanır.
Katılım, bir sınıftan başka bir sınıf türetirken aralarında bir alt-üst ilişkisi oluşturmayı ve bu sınıflar üzerinde ortak metotlar ve özellikler kullanılmasını sağlayan bir mekanizmadır. NYP'nin temel kavramlarından biridir. Hali hazırda var olan sınıfların üzerine başka bir sınıfların inşa edilmesini sağlar. Beş çeşit katılım çeşidinden söz edilebilir.
Aşağıda "Ogrenci" sınıfının bir alt sınıfı "FizikOgrenci" oluşturulmuştur. "FizikOgrenci" alt sınıfı, "Ogrenci" alt sınıfının metotlarını kullanabilen ancak daha spesifik bir nesne grubunu belirten bir sınıftır.
Henüz Tartışma Girilmemiştir
"Nesne Yönelimli Programlama" maddesi için tartışma başlatın
Soyutlama (Abstraction)
Kapsülleme (Encapsulation)
Çok Biçimlilik (Polymorphism)
Katılım (Inheritance)