Eğitim

Ders 9: Nesne Yönelimli Programlama (OOP) Temelleri

Giriş

Nesne Yönelimli Programlama (OOP), yazılım geliştirme sürecini daha modüler ve yönetilebilir hale getiren bir programlama paradigmasıdır. OOP, yazılımın bileşenlerini “nesneler” olarak tanımlayarak, bu nesnelerin etkileşimlerini ve özelliklerini yönetmeyi kolaylaştırır. PHP, nesne yönelimli programlamayı destekler ve bu makalede OOP’nin temel kavramlarını detaylı bir şekilde öğreneceksiniz.

OOP Temel Kavramları

  1. Sınıflar (Classes)
  2. Nesneler (Objects)
  3. Özellikler (Properties)
  4. Metodlar (Methods)
  5. Kalıtım (Inheritance)
  6. Polimorfizm (Polymorphism)
  7. Kapsülleme (Encapsulation)
  8. Abstraksiyon (Abstraction)

1. Sınıflar (Classes)

Sınıflar, nesnelerin şablonlarıdır ve nesnelerin sahip olacağı özellikleri ve yöntemleri tanımlar. Bir sınıf, nesnelerin nasıl davranacağını ve hangi özelliklere sahip olacağını belirler.

Örnek Sınıf:

<?php
class Araba {
// Özellikler
public $marka;
public $model;
public $yil;

// Yapıcı metod
public function __construct($marka, $model, $yil) {
$this->marka = $marka;
$this->model = $model;
$this->yil = $yil;
}

// Metod
public function arabaBilgisi() {
return "Marka: " . $this->marka . ", Model: " . $this->model . ", Yıl: " . $this->yil;
}
}
?>

2. Nesneler (Objects)

Nesneler, sınıflardan türetilir ve sınıfın tanımladığı özelliklere ve metodlara sahip olur. Nesneler, sınıfın somut örnekleridir.

Nesne Oluşturma ve Kullanma:

<?php
$benimAraba = new Araba("Toyota", "Corolla", 2020);
echo $benimAraba->arabaBilgisi();
?>

3. Özellikler (Properties)

Özellikler, bir sınıfın veri alanlarıdır ve genellikle public, protected, veya private erişim belirleyicileri ile tanımlanır. Özellikler, nesnelerin sakladığı verilerdir.

Özellik Tanımlama:

<?php
class Araba {
public $marka;
private $model; // Özel erişim belirleyici
}
?>

4. Metodlar (Methods)

Metodlar, bir sınıfın işlevselliğini tanımlar ve nesneler üzerinde işlemler yapar. Metodlar, özelliklere erişim sağlar ve nesneler üzerinde çeşitli işlemler gerçekleştirir.

Metod Tanımlama ve Kullanma:

<?php
class Araba {
public $marka;

public function setMarka($marka) {
$this->marka = $marka;
}

public function getMarka() {
return $this->marka;
}
}

$benimAraba = new Araba();
$benimAraba->setMarka("BMW");
echo $benimAraba->getMarka();
?>

5. Kalıtım (Inheritance)

Kalıtım, bir sınıfın başka bir sınıftan özellikler ve metodlar almasını sağlar. Bu, kod tekrarını azaltır ve kodun yeniden kullanılabilirliğini artırır.

Kalıtım Örneği:

<?php
class Araba {
public $marka;

public function __construct($marka) {
$this->marka = $marka;
}
}

class ElektrikliAraba extends Araba {
public $bataryaKapasitesi;

public function __construct($marka, $bataryaKapasitesi) {
parent::__construct($marka);
$this->bataryaKapasitesi = $bataryaKapasitesi;
}

public function bataryaBilgisi() {
return "Batarya Kapasitesi: " . $this->bataryaKapasitesi;
}
}

$benimElektrikliAraba = new ElektrikliAraba("Tesla", "100 kWh");
echo $benimElektrikliAraba->bataryaBilgisi();
?>

6. Polimorfizm (Polymorphism)

Polimorfizm, bir metodun birden fazla biçimde kullanılmasını sağlar. Aynı metod ismi, farklı sınıflarda farklı işlevler gerçekleştirebilir.

Polimorfizm Örneği:

<?php
class Hayvan {
public function sesCikar() {
return "Hayvan sesi";
}
}

class Kedi extends Hayvan {
public function sesCikar() {
return "Miyav";
}
}

class Kopek extends Hayvan {
public function sesCikar() {
return "Hav";
}
}

$hayvanlar = [new Kedi(), new Kopek()];
foreach ($hayvanlar as $hayvan) {
echo $hayvan->sesCikar() . "<br>";
}
?>

7. Kapsülleme (Encapsulation)

Kapsülleme, verilerin ve metodların sınıfın içinde gizlenmesini sağlar. Bu, sınıfın iç yapısının dışarıdan erişilmesini engeller ve sadece gerekli bilgilerin sağlanmasını sağlar.

Kapsülleme Örneği:

<?php
class Kullanici {
private $sifre;

public function setSifre($sifre) {
$this->sifre = $sifre;
}

public function getSifre() {
return $this->sifre;
}
}

$kullanici = new Kullanici();
$kullanici->setSifre("gizli_sifre");
echo $kullanici->getSifre();
?>

8. Abstraksiyon (Abstraction)

Abstraksiyon, yalnızca gerekli özelliklerin ve metodların tanımlandığı ve uygulanabilirliğin alt sınıflara bırakıldığı bir yapıyı ifade eder. Abstrakt sınıflar ve metodlar, bu prensibi uygulamanın yollarıdır.

Abstraksiyon Örneği:

<?php
abstract class Hayvan {
abstract protected function sesCikar();

public function tanimla() {
return "Ben bir hayvanım ve ses çıkarırım.";
}
}

class Kedi extends Hayvan {
public function sesCikar() {
return "Miyav";
}
}

$kedi = new Kedi();
echo $kedi->sesCikar() . "<br>";
echo $kedi->tanimla();
?>

Ödev

Bu derste öğrendiklerinizi pekiştirmek için aşağıdaki ödevleri yapmanız gerekmektedir:

  1. Personel Yönetim Sistemi: Bir personel sınıfı oluşturun ve bu sınıfı, çalışanın adı, soyadı, pozisyonu gibi özellikleri içerecek şekilde tasarlayın. Ayrıca, personelin maaşını hesaplamak için bir metod ekleyin.
  2. Şirket Sınıfları: Bir şirket sınıfı oluşturun ve bu sınıfı, farklı departmanları temsil eden alt sınıflarla genişletin. Şirketin toplam maaş giderini hesaplayan bir metod ekleyin.
  3. Oyun Karakterleri: Bir oyun karakteri sınıfı oluşturun ve bu sınıfı, farklı yetenekleri temsil eden alt sınıflarla genişletin. Her karakterin kendine özgü yeteneklerini tanımlayın ve bir oyun karakterinin yeteneklerini listeleyen bir metod ekleyin.

Bu ödevler, nesne yönelimli programlamanın temel kavramlarını uygulamanıza ve bu kavramları daha iyi anlamanıza yardımcı olacaktır.