Учебники

17) Объектно-ориентированное программирование

Что такое ООП?

Объектно-ориентированный — это подход к разработке программного обеспечения, который моделирует приложение вокруг объектов реального мира, таких как сотрудники, автомобили, банковские счета и т. Д. Класс определяет свойства и методы объекта реального мира. Объект — это вхождение класса.

Три основных компонента ориентации объекта:

  • Объектно-ориентированный анализ — функциональность системы
  • Объектно-ориентированное проектирование — архитектура системы
  • Объектно-ориентированное программирование — реализация приложения

Принципы объектно-ориентированного программирования

Три основных принципа ООП являются;

  • Инкапсуляция — это связано с сокрытием деталей реализации и раскрытием только методов. Основное назначение инкапсуляции состоит в том, чтобы:
    • Уменьшите сложность разработки программного обеспечения — за счет сокрытия деталей реализации и только разоблачения операций использование класса становится простым.
    • Защита внутреннего состояния объекта — доступ к переменным класса осуществляется с помощью таких методов, как get и set, что делает класс гибким и простым в обслуживании.
    • Внутренняя реализация класса может быть изменена, не беспокоясь о нарушении кода, который использует класс.
  • Наследование — это связано с отношениями между классами. Отношения принимают форму родителя и ребенка. Ребенок использует методы, определенные в родительском классе. Основной целью наследования является;
    • Возможность повторного использования — количество детей может наследоваться от одного и того же родителя. Это очень полезно, когда мы должны предоставить общие функции, такие как добавление, обновление и удаление данных из базы данных.
  • Полиморфизм — это связано с наличием единой формы, но множеством разных способов реализации. Основным назначением полиморфизма является;
    • Упростите поддержку приложений и сделайте их более расширяемыми.

Концепции ООП в PHP

PHP является объектно-ориентированным скриптовым языком; он поддерживает все вышеперечисленные принципы. Вышеуказанные принципы достигаются с помощью;

  • Инкапсуляция — с использованием методов «get», «set» и т. Д.
  • Наследование — с помощью ключевого слова extends
  • Полиморфизм — с помощью ключевого слова Implements

Теперь, когда у нас есть базовые знания о ООП и о том, как он поддерживается в PHP, давайте рассмотрим примеры, которые реализуют вышеуказанные принципы

Что такое UML?

Унифицированный язык моделирования UML — это методика, используемая для проектирования и документирования объектно-ориентированных систем.

UML создает множество документов, но мы рассмотрим диаграмму классов, которая очень важна для объектно-ориентированного программирования php.

Пример диаграммы классов

PHP объектно-ориентированное программирование (ООП)

Ключ диаграммы классов

  • Окно Верхнего содержит имя класса
  • Среднее поле содержит переменные класса
  • Ниже окно содержит методы класса
  • Знак минус (-) означает частную область видимости
  • Знак плюс (+) означает общедоступную область
  • Знак хеша (#) означает защищенную область

Как создать класс в PHP

Ключевое слово class используется для определения класса в PHP. Ниже приведены правила создания класса в PHP.

  • Имя класса должно начинаться с буквы
  • Имя класса не может быть зарезервированным словом PHP
  • Имя класса не может содержать пробелы

Допустим, мы хотим создать класс для представления животных.

Мы начнем с определения характеристик, которые являются общими для всех животных.

  • Все животные принадлежат к семье, такой как травоядное животное, карнавал и т. Д.
  • Все животные едят пищу

Диаграмма ниже показывает диаграмму для животного

PHP объектно-ориентированное программирование (ООП)

Давайте теперь код нашего класса животных

<?php
class Animal
{
    private $family;
    private $food;
    public function __construct($family, $food)
    {
        $this->family = $family;
        $this->food   = $food;
    }
    public function get_family()
    {
        return $this->family;
    }
    public function set_family($family)
    {
        $this->family = $family;
    }
    public function get_food()
    {
        return $this->food;
    }
    public function set_food($food)
    {
        $this->food = $food;
    }
}
?> 

  ВОТ,

  • «Private $ family, $ food» означает, что переменные не могут быть доступны непосредственно вне класса (Encapsulation).
  • Public function __construct ($ family…) — это метод конструктора php. Эта функция вызывается всякий раз, когда создается экземпляр класса. В этом случае мы устанавливаем семью и еду.
  • «Public function get… ()» — это метод, используемый для доступа к семейной или пищевой ценности (инкапсуляция)
  • «Public function set… ()» — это метод, используемый для установки значения семьи или питания (инкапсуляция)

Как реализовать наследование в PHP

Мы будем работать с коровой и львом. И корова, и лев унаследованы от класса животных.

Диаграмма классов ниже показывает отношения.

PHP объектно-ориентированное программирование (ООП)

Обратите внимание, что корова наследует от класса животных и определяет свою собственную переменную и методы тоже.

Давайте теперь кодировать класс Корова

<?php
class Cow extends Animal
{
    private $owner;
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
    public function set_owner($owner)
    {
        $this->owner = $owner;
    }
    public function get_owner()
    {
        return $this->owner;
    }
}
?>

  Давайте теперь кодировать класс Lion

<?php
class Lion extends Animal
{
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
}
?>

  ВОТ,

  • «Class… extends Animal» заставляет корову и льва использовать методы из класса Animal (Наследование).

Как создать объект класса

Для простоты все классы Animal, Cow и Lion должны находиться в одном каталоге.

Давайте теперь создадим приложение, которое использует наши классы.

Пример класса PHP

<?php
require 'Animal.php';
require 'Cow.php';
require 'Lion.php';
$cow  = new Cow('Herbivore', 'Grass');
$lion = new Lion('Canirval', 'Meat');
echo '<b>Cow Object</b> <br>';
echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>';
echo '<b>Lion Object</b> <br>';
echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food();
?>

 

Тестирование нашего приложения

Давайте теперь посмотрим наше приложение в веб-браузере

, PHP объектно-ориентированное программирование (ООП)

Фантастическое право! Давайте теперь посмотрим на третий принцип ООП, полиморфизм.

Допустим, мы хотим разработать приложение, которое подключается к различным механизмам баз данных, таким как MySQL и SQL Server, но использует один и тот же унифицированный интерфейс.

Мы можем создать интерфейс, который определяет стандартные методы, и абстрактный класс, который реализует общие методы.

  • Интерфейс — это похоже на класс. Он определяет только методы и параметры.
  • Абстрактный класс — это класс, который нельзя использовать для непосредственного создания объекта. Его целью является предоставление частичной или полной реализации общих методов.

Диаграмма классов ниже иллюстрирует отношения между нашим абстрактным классом, интерфейсом и классами реализации.

PHP объектно-ориентированное программирование (ООП)

Давайте теперь создадим наш абстрактный класс

<?php
abstract class DBCommonMethods
{
    private $host;
    private $db;
    private $uid;
    private $password;
    public function __construct($host, $db, $uid, $password)
    {
        $this->host     = $host;
        $this->db       = $db;
        $this->uid      = $uid;
        $this->password = $password;
    }
}
?>

  ВОТ,

  • «Абстрактный класс» означает, что класс нельзя использовать напрямую для создания объекта php
  • $ Host, $ db… — это переменные класса, общие для всех реализаций
  • «Function __construct (…)» — это метод конструктора класса php, который устанавливает значения общих переменных при инициализации

Давайте теперь создадим интерфейс, который содержит стандартные методы, которые будут реализованы по-разному в зависимости от механизма базы данных.

<?php
interface DBInterface
{
    public function db_connect();
    public function insert($data);
    public function read($where);
    public function update($where);
    public function delete($where);
}
?>

  ВОТ,

  • «Интерфейс» — это ключевое слово для создания интерфейсов
  • «Публичная функция… (…)» — это стандартные методы, которые должны быть реализованы

Давайте теперь создадим конкретные классы, которые будут расширять класс DBCommonMethods и расширять интерфейс DBInterface. MySQLDriver.php

<?php class MySQLDriver extends 
DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) 
{ 
parent::__construct($host, $db, $uid, $password); } 
public function db_connect() { //connect code goes here } 
public function delete($where) { //delete code goes here } 
public function insert($data) { //insert code goes here } 
public function read($where) { //read code goes here } 
public function update($where) { //update code goes here } 
} ?>

  MSSQLServerDriver.php

<?php 
class MSSQLServerDriver extends 
DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password)
 { 
 parent::__construct($host, $db, $uid, $password); } 
 public function db_connect() { //connect code goes here } 
 public function delete($where) { //delete code goes here }
 public function insert($data) { //insert code goes here }
 public function read($where) { //read code goes here }
 public function update($where) { //update code goes here }
 } ?>

  ВОТ,

  • «Класс… расширяет DBCommonMethods» использует методы из DBCommonMethods
  • «… Реализует DBInterface» гарантирует, что класс предоставляет стандартные методы независимо от используемого драйвера базы данных.

Использование приведенного выше кода Код, использующий приведенный выше класс, будет выглядеть следующим образом

<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>

Или

<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>

Остальная часть кода будет одинаковой для обоих драйверов, таких как;

<?php
$db->db_connect();
$db->insert($data);
?>

Резюме

  • Объектно-ориентированное программирование ООП — это мощный технический инструмент, который моделирует приложения после объектов реального мира.
  • Класс — это представление объектов реального мира со свойствами и методами.
  • Три основных принципа ООП:
    • Инкапсуляция
    • наследование
    • Полиморфизм