Nesne Yönelimli Programlama (OOP), bir programın ya da sistemin belirli nesnelerin ve bu nesneler arasındaki ilişkilerin modellenmesine dayalı bir programlama yaklaşımıdır. OOP’nin temel amacı, gerçek hayatta bulunan nesnelerin (örneğin insan, ev, araba gibi) programlama dünyasında da benzer şekilde ifade edilebilmesini ve yönetilebilmesini sağlamaktır.
OOP temelde 4 ana kavramdan oluşur ; Encapsulation, Polymorphism Abstraction ve Inheritance.
1) ENCAPSULATION
Nesnenin özellikleri ve davranışlarının bir arada toplanmasıdır. Nesnenin dış dünyadan nasıl çalıştığı gizlenir ve sadece belirli fonksiyonlar aracılığıyla erişilebilir. Bu, nesnenin güvenliğini ve bütünlüğünü sağlar.
Örneğin bir araba nesnesi oluşturabiliriz. Bu nesne, arabayı tanımlayan özellikler (renk, model, hız vb.) ve arabayı kullanma hakkına sahip olan fonksiyonlar (gaz, fren, vites değiştirme vb.) içerebilir. Araba nesnesi, dış dünya tarafından sadece belirtilen fonksiyonlar aracılığıyla yönetilebilir. Örneğin, arabanın hızının arttırılması sadece gaz pedalına basarak mümkün olabilir.
public class Car { private String color; private String model; private int speed;
public Car(String color, String model) { this.color = color; this.model = model; this.speed = 0; }
public void accelerate() { this.speed += 10; }
public void brake() { this.speed -= 10; }
public int getSpeed() { return this.speed; }}
Bu kodda, Car
sınıfı, arabanın rengi, modeli ve hızını tanımlayan özellikleri ve arabayı hızlandırma, yavaşlatma ve hızını okuma fonksiyonları içermektedir. Özellikler (renk, model ve hız) private olarak tanımlanmıştır ve sadece tanımlanmış fonksiyonlar aracılığıyla erişilebilir.
2)POLYMORPHISM
Birden fazla formda çalışması anlamına gelir. Aynı isimde fonksiyonların birden fazla formda tanımlanmasıdır.
Birden fazla sınıfın aynı isimli fonksiyonlarının bulunması durumunda, bu fonksiyonlar aynı isimle farklı şekillerde çalışabilir. Örneğin, birden fazla hayvan sınıfının her biri “Ses Çıkar” adında bir fonksiyon içerebilir. Her bir sınıfın fonksiyonu, kendi özgün hayvan sesini çıkarabilir.
abstract class Animal { abstract void makeSound();}
class Dog extends Animal { void makeSound() { System.out.println("Hav Hav"); }}
class Cat extends Animal { void makeSound() { System.out.println("Miyav Miyav"); }}
Bu kodda, Animal
sınıfı makeSound()
adında bir abstract fonksiyon tanımlar. Dog
ve Cat
sınıfları, bu fonksiyonu override ederek kendi özgün hayvan seslerini çıkarırlar.
3)ABSTRACTION
Sadece nesnenin gerekli olan özelliklerinin ve davranışlarının belirlenmesi anlamına gelir. Nesnenin nasıl çalıştığı veya nasıl gerçekleştirildiği gizlenir.
Örneğin bir araba nesnesinde, sürücün arabayı nasıl çalıştırdığının veya arabanın nasıl hareket ettiğinin bilgisini bilmesi gerekmez. Sürücü, sadece gaz pedalına basması, fren pedalına basması ve vites değiştirmesi gerektiğinde gereken yöntemleri kullanması gerekir. Bu, arabanın iç yapısının nasıl çalıştığının veya nasıl hareket ettiğinin gizlenmesi anlamına gelir.
abstract class Vehicle { abstract void startEngine(); abstract void stopEngine();}
class Car extends Vehicle { void startEngine() { System.out.println("Car engine started"); }
void stopEngine() { System.out.println("Car engine stopped"); }}
Vehicle
sınıfı, motorun başlatılması ve durdurulması için abstract fonksiyonlar tanımlar. Car
sınıfı, bu fonksiyonları override ederek kendi özgün motor başlatma ve durdurma işlemlerini tanımlar. Böylece, herhangi bir araba nesnesinin motorunun nasıl başlatılıp durdurulduğu bilinir, ancak bu işlemlerin nasıl gerçekleştiği bilinmez.
4) INHERITANCE
Inheritance, bir sınıfın (base class, superclass) başka bir sınıfa (derived class, subclass) geçirilmesini sağlar. Derived sınıf, base sınıftaki tüm özellikleri (alanlar, metodlar) ve fonksiyonları kalıtır. Ayrıca, kendine özgü ekstra özellikler ve fonksiyonlar ekleyebilir veya mevcut özellikleri override edebilir.
class Shape { int width, height;
public void setWidth(int width) { this.width = width; }
public void setHeight(int height) { this.height = height; }}
class Rectangle extends Shape { public int getArea() { return width * height; }}
Bu örnekte, Shape
sınıfı width
ve height
özelliklerini ve onları ayarlamak için fonksiyonları tanımlar. Rectangle
sınıfı ise Shape
sınıfından miras alır ve getArea()
fonksiyonunu ekler. Bu metod, dikdörtgenin alanını hesaplamak için width
ve height
değerlerini kullanır. Böylece, Rectangle
sınıfı Shape
sınıfından kalıtım alarak, inherit edilerek width
ve height
değerlerini kullanma ve getArea()
fonksiyonunu kullanma imkanına sahip olur.
Bu dört temel başlık, Nesne Yönelimli Programlama’nın en önemli özellikleridir ve bu özelliklerin tümü bir arada kullanıldığında, programların daha organize, okunabilir ve yönetilebilir hale gelmesini sağlar.
Hiç yorum yok:
Yorum Gönder
Görüş ve Düşüncelerinizi Bizimle Paylaşmayı Unutmayın.