Object Oriented – 1

Merhaba arkadaşlar, Core Java yazılarımıza devam ediyoruz.

Bu yazımda Object Oriented, Nesne Yönemlimli yaklaşıma bakacağız. Kısaca OOP

Öncelikle neden nesne yönelimli? sorusuna cevap bulmalıyız.

Aslında object , normal hayattaki nesneler gibidir(araba, kalem, masa vs). Karmaşık yapıları normal hayatımızdaki gibi modelleyerek karmaşıklığı azaltabiliriz. OOP dizaynının temelinde obje 2 kısma ayrılır. Bunlar; state ve behaviors. 

Her objenin bazı nitelikleri ve davranışları vardır. Örn; Car sınıfından türetilmiş objelerin renk, hız gibi nitelikleri ve git, dur vs. gibi davranışlarının olması beklenir. Burada data alanı instance değişkenleri, behaviors ise sınıf methodlarıdır. Daha sonra detaylı değiniceğim.

OOP bir yaklaşımdır, ben burada Java’daki uygulamasını göstermeye çalışacağım. OOP’u bir spec gibi düşünebiliriz. Programlama dilleri, kendi yapılarına göre OOP dizaynını implemente eder. Bu yüzden benim önerim Java ile OPP yada Python ile OOP gibi değilde OOP dizaynını kendi içerisinde öğrenilmesidir. Çünkü OOP dil bağımsızdır, bir yaklaşımdır.

Bu yazıda OOP’un prensiplerine giriş yapmış olacağız. Diğer yazılarda bu prensiplere detaylıca bakmış olacağız ve bunların nasıl yapıldığını Java programlama dilini kullanarak göstermeye çalışacağım.

OOP tasarımının temelini şu 3 prensip oluşturmaktadır;

  1. Encapsulation : Veriyi kapsüllemektir, korumaktır.
  2. Inheritance : Kalıtım, OOP’un temelini oluşturmaktadır.
  3. Polymorphism : Nesnenin, farklı nesne gibi davranmasıdır. Birden fazla form’a sahip olmasıdır.

OOP dizaynının bir prensibi de abstraction‘dur. Bunu Java’da abstract class veya interface kullanarak gerçekleştiririz. Abstraction‘un amacı bir işi soyutlamaktır. Bir arabayı sürebiliriz ama arabanın nasıl gittiğini, nasıl çalıştığı gibi teknik detaylarıyla ilgilenmeyiz. Sürücü ve arabayı birbirinden soyutlayarak karmaşıklığı en aza indirgeyebilir ve görev, sorumluluk ilişkisini doğru şekilde yapabiliriz. Sanırım hiçbir sürücü fren mekanizmasının nasıl çalıştığını bilmek zorunda olduğu bir sistemde araba sürmez

 

OOP dizaynının prosedürel yaklaşıma göre faydalarından söz edelim biraz;

  • Geliştirilmesi ve bakımı daha kolaydır. Proje büyüdükçe prosedürel yaklaşımda kodu yönetmek zorlaşmaktadır.
  • Data hiding sağlar. Aynı zamanda güvenliği de artırır. Prosedürel yaklaşımda bir veri paylaşmak isteniyorsa global olarak tanımlanır. Bu ise hem güvenliği zedeler hem de datanın doğruluğu için tehlike oluşturur, çünkü global değişkene her yerden ulaşılabilinir.
  • OOP yaklaşımıyla sorunları gerçek hayat ile ilişkilendirerek çok daha iyi bir şekilde sorunların anlaşılması sağlanır.
  • Yeniden kullanılabilirliği artırmaktadır. Yazılan kod miktarını azaltır.

NOT : Object Based ve Object Oriented biraz farklıdır. Object Based, tüm Object Oriented yaklaşımlarını destekler. Sadece Inheritance özelliği hariç. JavaScript, VBScript Object Based yaklaşımının örneklerindendir.

OOP & JAVA

Java’da OOP yaklaşımının gerçeklenmesinde Class ve Object kavramları rol oynar.

Class; objenin bir şablonudur, template, prototipidir.

Object; Class’ın örneklenmesidir. Class’ın vücut bulmasıdır.

Örn; Student classımız mevcut olsun. Student classımızın isim, soyisim ve numara gibi nitelikleri olsun. Aynı zaman da ödev yapma, derse girme gibi davranışları bulunsun. Burada student bir taslaktır. Alican, Abdullah, Ahmet isimlerine sahip öğrenciler ise objedir. Student sınıfının örneklenmesidir.

OOP dizaynındaki prensiplerin açıklamasını yapıp bitirelim. Bir sonraki yazıda ise bunların Java’da nasıl gerçekleştirebileceğimizi göreceğiz.

Encapsulation

OOP dizaynının önemli bir prensibidir. Veriyi korumak ve anormal değerler almasını engellemek için veri kapsüllenir. Bu sayede dış dünyadan gelebilecek yanlış değerlerden etkilenmez. Java’da kapsülleme genelde private access modifiers kullanarak gerçekleştirilir. Dış dünyaya ise public olan methodlarla açılır.

Kısaca Student sınıfının name adlı alanı kapsüllenerek geçersiz, yanlış değerler alması ve hatalarla karşılaşılmasının önüne geçilmektedir. Doğru bir OOP dizaynından loose coupling ve high cohesion bulunmalıdır. loose coupling encapsulation ile sağlanmaktadır. Daha sonra loose coupling ve high cohesion konularına detaylıca bakınacağız.

 

Inheritance

OOP dizaynının en önemli özelliklerindendir. Sınıfın nitelik ve davranışlarını başka bir sınıfa aktarmasıdır. Inheritance kod yazımını kısaltır ve kodların tekrar kullanılabilirliğini artırır. Java’da inheritance extends anahtar kelimesi ile sağlanmaktadır.

 

Polymorphism

Polymorphism, OOP jargonunda birden fazla form’a sahip olmak demektir. Bir nesne kendisi gibi davranabildiğine ek olarak başka nesneler gibi de davranabilir. Polymorphism, IS-A ilişkisi bulunan yada impelents ilişkisi bulunan class’lar arasında gerçekleşebilir. Bir subclass objesi her zaman super class nesnesi gibi davranabilir. Java’da çoklu kalıtım yoktur. Çok biçimlilik vardır. Bunlara daha sonra detaylıca değineceğiz.

Java’da iki tip polymorphism(çok biçimlilik) vardır. Bunlar; static(compile time) polymorphism ve dynamic(runtime) polymorphism’dır.

Compile time polymorphism : Method overloading olarak bilinir.

Dynamic Polymorphism(Run time) : Method overriding olarak bilinir. Subclass objesi oluşturulduğunda süperclassın özelliklerine de sahip olur. Android ve Blackberry burada Mobile sınıfının sublclass’larıdır. Bu methodlar override edilerek run time anında sublclass’lar değişik form’lara sahip olabilir.

 

Özet

  • Obje, Class’ın instance(örneği)’dir.
  • Encapsulation, veriyi gizleyerek güvenliği sağlar.
  • Inheritance, parent-child ilişkisi oluşturarak daha az kod yazılmasını ve kodların tekrar kullanılmasını sağlar.
  • Polymorphism, çok biçimlilik. Bir objenin birden fazla form’a sahip olmasıdır.
  • Abstracti0n, sorunu gerçek hayatla ilişkilendirerek simüle eder ve bildiğimiz sularda yüzmemizi sağlar

 

Bu yazımızda kısaca OOP dizayna giriş yaptık. Geniş ve kapsamlı bir konudur. Daha sonra detaylıca değineceğim.

Yazımı burada sonlandırıyorum arkadaşlar.

** Mutlu kalın, kod’la kalın ve bol bol Çay için

~ Alican Akkuş

 

1355 Total Views 2 Views Today