nesne tabanlı programlama - oop - nyp

öncelikle oop nedir?

oop esasında bilgisayar programcısının program yazmaya dair bir yaklaşımıdır. bu yaklaşım bazı dillerde zorunlu olmakla beraber bazı dillerde zorunlu değildir.

oop nin diğer programlama türlerinden en önemli farkı, program yazarken kullanılan fonksiyonların bir nesneye bağlı olması ve bu nesnenin özellikleri olarak kullanılmasıdır.

fonksiyonel programlamada kullanılan fonksiyonlar (genel olarak) birbirinden bağımsız ve birinde oluşturulan sonuç diğerini bağlamaz iken oop de bu durum biraz daha birbirine bağımlıdır.

Bunu bir örnek ile düşünelim. Bir araba programı yazıyorsunuz. Fonksiyonel programlamada hizlan(), fren_yap(), korna_cal() gibi birbirinden bağımsız fonksiyonlarınız olur ve hangi arabanın hızlanacağını her seferinde parametre olarak göndermeniz gerekir. oop de ise önce bir Araba sınıfı yazarsınız. Rengi, modeli, hızı bu sınıfın özellikleri, hızlanmak ve fren yapmak da metodları olur. Sonra bu sınıftan istediğiniz kadar araba (nesne) türetirsiniz. Her araba kendi rengini, kendi hızını bilir ve kendi metodlarını kullanır.

class Araba{

public $renk;
public $hiz = 0;

public function hizlan(){
$this->hiz = $this->hiz + 10;
}

}

$araba1 = new Araba();
$araba1->renk = "kırmızı";
$araba1->hizlan();

$araba2 = new Araba();
$araba2->renk = "mavi";

echo $araba1->hiz; // 10
echo $araba2->hiz; // 0

Burada dikkat ederseniz iki araba da aynı sınıftan türedi ama birini hızlandırdığımızda diğerinin hızı değişmedi. Çünkü her nesne kendi değerlerini taşıyor. sınıf, metod ve nesne konularını Class (Sınıf), Method (metod) Tanımlama ve Çağırma yazımda daha detaylı anlattım.

Gelelim başlıktaki asıl soruya. Nesne yönelimli programlama ile nesne tabanlı programlama aynı şey mi? çok fazla detaya inmeden kısaca maddeleyecek olursak,

NESNE YÖNELİMLİ PROGRAMLAMA (OBJECT ORIENTED PROGRAMMING)

  • bir programlama yaklaşımıdır.
  • nesneleri kullanarak program yazmaya izin veren bütün dillerde kullanılabilir.
  • (programcının yoğurt yeme şeklidir diyebiliriz.)

NESNE TABANLI PROGRAMLAMA

  • programlama dilinin doğrudan nesnelerinin olması ve program geliştirme aşamasının nesne ile başlaması yada nesne üzerine geliştirilmesidir.
  • bir dil nesne yönelimli olup nesne tabanlı olmayabilir.
  • nesne tabanlı olan bir dil aynı zamanda nesne yönelimlidir.
  • Genellikle NYP ile OOP aynı şeyler olarak görülsede yukarıdaki açıklamalarımız neticesinde farklı şeylerdir.

Yoğurt yeme şekli dedik, biraz açalım. php buna güzel bir örnek. php de hiç sınıf kullanmadan sadece fonksiyonlarla da program yazabilirsiniz, sınıflarla da yazabilirsiniz. Dil size bir yol dayatmıyor, oop yaklaşımını kullanıp kullanmamak size kalmış. Yani php nesne yönelimli programlamayı destekleyen bir dil. Ama java gibi bazı dillerde ise en basit programı yazmak için bile bir sınıf oluşturmak zorundasınız, kodlarınız ister istemez nesneler üzerine kuruluyor.

Peki oop neden bu kadar çok kullanılıyor? Küçük bir script için gerçekten gerek yok. Ama proje büyüdükçe aynı kodları tekrar tekrar yazmamak, kodları düzenli tutmak ve bir yerde yaptığınız değişikliğin başka yerleri bozmasını engellemek için oop çok işinize yarar. Bunu sağlayan en önemli konular da erişim belirleyicileri ve miras alma. Bu konuları da ilgili yazılarımda örnekleri ile anlattım.