PHP'de OOP'de Soyut Metotlar
Soyut sınıflar aynı zamanda soyut metotlar da içerebilir. Bu tür metotların uygulaması olmamalıdır, amaç, alt sınıflarda bu tür metotların olması gerektiğini belirtmektir. Aslında bu metotların uygulanması artık alt sınıfların görevidir.
Bir metodu soyut olarak bildirmek için,
beyanında abstract anahtar kelimesi
yazılmalıdır.
Pratikte deneyelim. Varsayalım ki,
User sınıfının tüm alt sınıflarının
increaseRevenue metoduna sahip olması
gerekiyor.
Bu metod, kullanıcının mevcut gelirini almalı ve parametre olarak verilen bir miktar kadar artırmalıdır.
User sınıfının kendisi, hangi alt sınıfın
ne tür bir gelire sahip olacağını bilmez - sonuçta
bir çalışan için bu maaş, bir öğrenci için ise bursdur.
Bu nedenle
her alt sınıf bu metodu kendi
yöntemine göre uygulayacaktır.
Buradaki öz şudur ki, User sınıfının
soyut metodu, programcıyı bu metodu alt sınıflarda
uygulamaya zorlar, aksi takdirde PHP hata verecektir.
Böylece siz veya kodunuzla çalışan başka bir programcı,
bir alt sınıfta gerekli metodu uygulamayı
asla unutamaz.
Öyleyse, pratikte deneyelim. User
sınıfına increaseRevenue soyut metodunu
ekleyelim:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Gövdesi olmayan soyut metod:
abstract public function increaseRevenue($value);
}
?>
Employee sınıfımız şimdilik değişmeden
kalsın. Bu durumda, Employee sınıfından
bir nesne oluşturmasak bile,
sadece sınıflarımızı tanımlayan kodu çalıştırsak
bile - PHP hata verecektir.
Şimdi Employee sınıfında
increaseRevenue metodunun
uygulamasını yazalım:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Metodun uygulamasını yazalım:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Sınıfımızın çalışmasını test edelim:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
increaseRevenue metodunu
Student sınıfında da uygulayalım. Ancak şimdi
metodumuz bursu artıracak:
<?php
class Student extends User
{
private $scholarship; // burs
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Metod bursu artırır:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
User sınıfınıza aynı
soyut increaseRevenue metodunu ekleyin.
Bu metodun uygulamasını Employee ve
Student sınıflarında yazın.
Figure sınıfında, şeklin alanını ve
çevresini almak için soyut metotlar yapın.