Nesne Yönelimli Programlama (Object-Oriented Programming)

Şub 05, 2019

Nesne Yönelimli Programlama (Object Oriented Programming) 

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. Bunlar: 
Encapsulation
• Inheritance
• Polymorphism
• Abstraction’dır.


Nesneler ve Sınıflar 

NYP’de her bir object belirli bir sınıfın (class) veya alt sınıfın (subclass) metotlarını(method) veya prosedürlerini (procedure) ve veri değişkenlerini barındıran birer örneğidir.
Sınıf belli tür bir nesnenin metotlarının ve değişkenlerinin şablon tanımıdır. Yani bir nesne bir sınıfın özel bir örneğidir ve değişkenlerden ziyade gerçek değişkenler barındırır. 
Örnek vermek gerekirse “Ogrenci” diye bir sınıf olsun. Bu sınıftaki her öğrenci birer nesnedir ve isim, soyisim, öğrencinin ganosu gibi özellikleri mevcuttur.
NYP’nin bu özelliği sayesinde ortak özellikler barındıran bir grubun her üyesi için özellik başlıkları (attributes) ayrı ayrı girilmesine gerek duyulmamaktadır. Onlar için özel bir sınıf oluşturulabilir ve her birine aynı özellikler verilebilir.

Ekte bir sınıf örneği görülmektedir. “Ogrenci” sınıfı için öğrencinin ismi bölümü ve ganosu gibi özellikleri atanmıştır. 

1
 
Ekte nesne örneği görülmektedir. Sınıfta belirlenen özelliklere veriler girilmiştir. 

2
 
Encapsulation 

Encapsulation (sarma) NYP’nin temel kavramlarından biridir. Genel tanımıyla kullanıcı tarafından verilerin, 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.

Ekte bir 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. 

3
 
Inheritance 

Inheritance (kalıtı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 sınıfların inşa edilmesini sağlar. 5 çeşit Inheritance çeşidinden söz edilebilir. 
Single Inheritance (Tekli Kalıtım): Alt sınıf tek bir üst sınıfın tüm özelliklerini taşır. 
Multiple Inheritance (Çoklu Kalıtım): Bir alt sınıf birden fazla üst sınıfın tüm özelliklerini taşır. 
Multilevel Inheritance (Çok Seviyeli Kalıtım): Bir sınıfın alt sınıfı oluşturulduktan sonra bu alt sınfın da bir alt sınıfının oluşturulmasına denir.  
Hierarchical Inheritance (Hiyerarşik Kalıtım): Bir üst sınıfın birden fazla alt sınıfa base class (temel sınıf)'lik yapmasına denir.
Hybrid Inheritance (Melez Kalıtım): Öbür Inheritance türlerinin 2 veya daha fazlasını barındıran Inheritance türüdür.

Ekte “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.

4
 

Polymorphism 

Polymorphism (ç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. Örnek olarak şekil diye bir sınıf olsun; polymorphism sayesinde programcı farklı şekillerin alanlarını farklı metotlar ile belirleyebilir. Şeklin ne olduğu fark etmeksizin program kullanıcıya doğru alanı verecektir. 

Ekte, polymorphism’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.  
 
5

Abstraction 

Abstraction (soyutlama) NYP’nin temel kavramlarından biridir. 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 metota sahip bir sınıf otomatik olarak kendisi de soyut hale gelir ve soyut sınıflardan nesne oluşturulmaz. 

Ekte soyutlamanın daha iyi anlaşılabileceği 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 öbür alt sınıflar ile ortak bir metot olduğu için bu metot “Sekil” soyut sınıfının altına da eklenmiştir. 

6