PHP में OOP के अमूर्त तरीके

अमूर्त कक्षाओं में अमूर्त तरीके भी शामिल हो सकते हैं। ऐसे तरीकों को कार्यान्वयन की आवश्यकता नहीं होती है, बल्कि यह इंगित करने के लिए आवश्यक होते हैं कि वंशजों के पास ऐसे तरीके होने चाहिए। और वास्तव में ऐसे तरीकों का कार्यान्वयन पहले से ही वंशजों का कार्य है।

एक विधि को अमूर्त घोषित करने के लिए, इसकी घोषणा में कीवर्ड abstract लिखना चाहिए।

आइए व्यवहार में प्रयास करें। मान लीजिए कि यह माना जाता है, कि कक्षा User के सभी वंशजों के पास विधि increaseRevenue होनी चाहिए।

यह विधि उपयोगकर्ता की वर्तमान आय लेनी चाहिए और इसे एक निश्चित मात्रा से बढ़ाना चाहिए, जो पैरामीटर द्वारा पारित किया गया हो।

कक्षा User स्वयं नहीं जानती कि विशेष रूप से क्या आय वंशज प्राप्त करेगा - आखिरकार, एक कर्मचारी के लिए यह वेतन है, और एक छात्र के लिए - छात्रवृत्ति। इसलिए प्रत्येक वंशज इस विधि को लागू करेगा अपने तरीके से।

यहाँ मुद्दा यह है कि कक्षा की अमूर्त विधि User प्रोग्रामर को लागू करने के लिए मजबूर करती है वंशजों में इस विधि, अन्यथा PHP एक त्रुटि देगा। इस प्रकार आप, या कोई अन्य प्रोग्रामर, आपके कोड के साथ काम कर रहा है, किसी भी तरह से सक्षम नहीं होगा आवश्यक विधि को लागू करना भूल जाएं वंशज में।

तो, आइए व्यवहार में प्रयास करें। आइए जोड़ें अमूर्त विधि increaseRevenue कक्षा User में:

User.php<?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:

Employee.php<?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;
    }
  }
?>

आइए हमारी कक्षा के काम की जाँच करें:

index.php<?php
  $employee = new Employee;
  $employee->setName('john');
  $employee->setSalary(1000);
  $employee->increaseRevenue(100);
  
  echo $employee->getSalary();
?>

विधि increaseRevenue को लागू करें और कक्षा Student में। अब हमारा विधि छात्रवृत्ति बढ़ाएगी:

Student.php<?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;
    }
  }
?>
Задание 1

अपनी कक्षा User में समान जोड़ें अमूर्त विधि increaseRevenue। कक्षाओं में इस विधि का कार्यान्वयन लिखें Employee और Student।

Задание 2

कक्षा Figure में अमूर्त बनाएं आकृति का क्षेत्रफल और परिमाप प्राप्त करने के तरीके।