აბსტრაქტული მეთოდები OOP-ში PHP-ში
აბსტრაქტულ კლასებს შეუძლიათ შეიცავდნენ აბსტრაქტულ მეთოდებს. ასეთ მეთოდებს არ უნდა ჰქონდეთ იმპლემენტაცია, მათი დანიშნულებაა მიუთითონ, რომ მსგავსი მეთოდები უნდა ჰქონდეთ მემკვიდრეებს. ხოლო თავად ამ მეთოდების იმპლემენტაცია - უკვე მემკვიდრეთა ამოცანაა.
იმისთვის, რომ მეთოდი გამოვაცხადოთ აბსტრაქტულად,
მის გამოცხადებისას უნდა დავწეროთ საკვანძო
სიტყვა abstract.
შევეცადოთ პრაქტიკაში. დავუშვათ, რომ ვარაუდობენ,
რომ User კლასის ყველა მემკვიდრემ
უნდა ჰქონდეს მეთოდი increaseRevenue.
ამ მეთოდმა უნდა აიღოს მომხმარებლის მიმდინარე შემოსავალი და გაზარდოს იგი გარკვეული ოდენობით, რომელიც გადაეცემა პარამეტრით.
თავად კლასს User არ ეცოდინება, რა სახის
შემოსავალი ექნება მემკვიდრეს - ბოლოს და ბოლოს, თანამშრომელს
ეს არის ხელფასი, ხოლო სტუდენტს - სტიპენდია. ამიტომ
ყველა მემკვიდრე ამ მეთოდს დააიმპლემენტირებს
საკუთარი გზით.
აქ არსი ისაა, რომ კლასის აბსტრაქტული მეთოდი
User აიძულებს პროგრამისტს დააიმპლემენტიროს
ეს მეთოდი მემკვიდრეებში, წინააღმდეგ შემთხვევაში PHP გამოიტანს შეცდომას.
ამ გზით თქვენ, ან სხვა პროგრამისტი,
რომელიც მუშაობს თქვენს კოდზე, ვერანაირად ვერ შეძლებთ
დაგავიწყდეთ საჭირო მეთოდის იმპლემენტაცია
მემკვიდრეში.
მოდით, შევეცადოთ პრაქტიკაში. დავამატოთ
აბსტრაქტული მეთოდი increaseRevenue
User კლასში:
<?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 ჯერ კიდევ დარჩეს
უცვლელი. ამ შემთხვევაში, მაშინაც კი, თუ არ
შევქმნით Employee კლასის ობიექტს,
არამედ უბრალოდ გავუშვებთ კოდს, რომელშიც განისაზღვრება
ჩვენი კლასები, - PHP გამოიტანს შეცდომას.
ახლა დავწეროთ მეთოდის იმპლემენტაცია
increaseRevenue Employee კლასში:
<?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;
}
}
?>
შევამოწმოთ ჩვენი კლასის მუშაობა:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
დააიმპლემენტიროს მეთოდი increaseRevenue
Student კლასშიც. მხოლოდ ახლა ჩვენი
მეთოდი გაზრდის უკვე სტიპენდიას:
<?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 კლასში იგივე
აბსტრაქტული მეთოდი increaseRevenue.
დაწერეთ ამ მეთოდის იმპლემენტაცია Employee და
Student კლასებში.
Figure კლასში გახადეთ აბსტრაქტული
მეთოდები ფიგურის ფართობისა და პერიმეტრის მისაღებად.