PHPде ООПдо абстракттык методдор
Абстракттык класстар абстракттык методдорду да камтый алат. Мындай методдордун ишке ашырылышы болбошу керек, алар мураскорлордо кандай методдор болушу керек экенин көрсөтүү үчүн керек. Ал эми бул методдорду ишке ашыруу мураскорлордун милдети.
Методду абстракттык деп жарыялоо үчүн,
анын жарыяланган жеринде abstract деген ачкыч сөзүн жазуу керек.
Келгиле, практикада сынап көрөлү. User класcынын бардык мураскорлору
increaseRevenue методуна ээ болушу керек деп эсептейли.
Бул метод колдонуучунун учурдагы кирешесин алып, аны параметр аркылуу берүлгөн белгилүү бир суммага көбөйтүшү керек.
User класcынын өзү мурасчынын кандай киреше аларын билбейт -
анткени кызматкер үчүн бул эмгек акы, ал эми студент үчүн - стипендия.
Ошондуктан ар бир мураскор бул методду өзүнчө ишке ашырат.
Бул жердеги маани, User класcынын абстракттык методу
программачыны бул методду мураскорлордо ишке ашырууга мажбурлайт,
антпесе PHP ката берет.
Ошентип сиз же сиздин код менен иштеген башка программачы
керектүү методду мурасчыда ишке ашырууну эч качан унутуп кала албайсыз.
Ошентип, келгиле практикада сынап көрөлү. User класcына
increaseRevenue абстракттык методун кошолу:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Денесиз абстракттык метод:
abstract public function increaseRevenue($value);
}
?>
Employee класcыбыз өзгөрүлбөй калсын.
Бул учурда, эгерде Employee класcынын объектисин түзбөсө да,
жөн гана биздин класстар аныкталган коду иштетсек, - PHP ката берет.
Эми келгиле, Employee класcында
increaseRevenue методунун ишке ашырылышын жазалы:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Методдун ишке ашырылышын жазабыз:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Класcыбыздын иштешин текшеребиз:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
increaseRevenue методун Student класcында да ишке ашыралы.
Бирок бул жолу биздин метод стипендияны көбөйтөт:
<?php
class Student extends User
{
private $scholarship; // стипендия
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Метод стипендияны көбөйтөт:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
User класcыңызга ушул сыяктуу
абстракттык increaseRevenue методун кошуңуз.
Бул методдун ишке ашырылышын Employee жана
Student класстарында жазыңыз.
Figure класcында фигуранын аянтын жана периметрин алуу үчүн
абстракттык методдорду жасаңыз.