Оценок пока нет 2.ООП в PHP 5. Основы

Начнем с того, что такое класс и какую роль он играет в ООП. Данная часть поста может быть ориентирована на любой язык, в котором поддерживается ООП, так как ООП — по сути дела единая модель проектирования приложений и неважно на каком языке — будь-то Java, С#, C++, PHP… суть ООП во всех языках одна и та же — предоставить некий принцип, на основе синтаксиса языка, по которой можно было бы легко и быстро проектировать любой проект, за вами остается только изучить инструмент, в нашем случае PHP, познать все тонкости реализации ООП в этом языке, и используя их решать нашу задачу.

 Элементы ООП. Классы и объекты

     Базовым понятием в ООП является класс и объект(иногда его называют экземпляром класса). Суть ООП в том, что каждая сущность в нашем мире относится к какому то типу оъектов, по сути дела, это некая древовидная структура ибо так устроен наш мир, что есть корень, есть стержень, есть конечные ветки и плоды, но это не важно, абстрогируемся от материализма, нам сейчас нужна сама модель. Так вот, отнеся каждую сущность к определенному классу, мы можем эту сущность разделить на еще мелкие сущности и так до тех пор, пока мы не убедимся, что сможем реализовать эти мелкие сущности поочередно без какой-либо путаницы и в тоже время сам класс внутри себя реализует некое правило реализации и поведения конечного объекта, давайте посмотрим это все на примере:

Принцип ООП
Принцип ООП

В корне стоит класс, от которого наследуются другие классы, от которых другие и т.е.,  мы образуем иерархию сущносте относительно их принадлежности к тому или иному типу и определенным образом реализуем данный класс, при реализации классов мы сталкиваемся с правилами их взаимосвязи и вот тут-то мы вплотную походим к понятиям наследование, инкапсуляция и полиморфизм.

Дадим краткие описания всем 3-м этим понятиям:

1. Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом;

2. Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя;

3. Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта;

Из выше сказанного, на данном этапе у нас есть следующие основные понятия ООП: класс, объект, наследование, инкапсуляция и полиморфизм. Давайте добавим ще 2 понятия — свойство и метод. Нам осталось соединить все эти понятия в единое осмысленную последовательность и их роль для построения ООП.

Наследование

Как выше показано на картинке мы берем какую-то сущность, которая входит в нашу задачу, в данном случае, допустим, мы хотим создать базу данных по запчастям средств передвижения, я назвал эту базу данных как «Машина», который выступает и от него наследуются другие подобные машине сущности — паром, самолет, велосипед, грузовик и т.д., которые в свою очередь имеют свои собственные отличительные особенности, которые являются их свойствами и которые могут отличаться методами передвижения и у каждой такой сущности свои свойства и методы, которыми оперирует данная сущность.

Инкапсуляция

 

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

public,protected, private или еще — модификаторы доступа

На данном этапе. пока мы говорим об инкапсуляции, следует отметить о возможных вариантах инкапсуляции и их 3:

public — свойства и методы открыты и доступны из вне класса объектам данного класса и унаследованных классов;

protected — свойства и методы зашищены и доступны только внутри класса и и внутри унаследованных классов;

private — свойства и методы доступны только внутри класса и недоступны за его пределами , а также внутри унаследованных классов;

Так какую роль играют типы инкапсуляции — они дают разработчику определить общехарактерные признаки классов и их действия, а также запрещает использование нехарактерных признаков при наследовании и это правильно, потому что кошке не нужны жабры и лягушке не нужен клюв :).

Полиморфизм

       Нам осталось разобрать что такое полиморфизм. Вы только поразмыслите как это слово звучит — поли(множественность) и морфи(форма), что означает многоформенность. Возьмем из реальной жизни такие сущности или объекты как автомобиль, самолет, мотоцикл и попробуем в них найти сходные элементы и первое , что приходит на мысль — это колеса, то все они движутся благодаря вращению колеса с малыми отличиями. Если это все применить к ООП, то у нас должен быть главная сущность, от которого будут унаследованы все данные колесные средства передвижения и тогда у всех будет метод go(), который специфичен для каждого объекта, т.е. отличен в передвижении, к примеру, самолет должен набирать скорость постепенно до определенного уровня, чтобы взлететь, а автомобиль может иметь 4 — 5 скоростей и задний заезд, против переднего мотоцикла и в этой ситуации, когда все эти классы унаследованы от колесного класса возникает потребность в переопределении данных методов в унаследованных классах. И тут мы вплотную приближаемся к понятиям абстрактные классы и интерфейсы, которые служат начальной основой для переопределяемого кода в парадигме ООП.

Сначала определимся с новыми понятиями:

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

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

Покажем все это на примере кода:


abstract class 	Machine {
 //определяем базовый общий метод
 abstract public function go();
}

//Унаследуем абстрактный класс и реализуем его абстрактный метод
class Auto{
  //Переопределяем абстрактный метод езды применительно к машине
  public function go()
  {
    echo("Правила езды для автомобиля");
  }
}

class Plane{
  //Переопределяем абстрактный метод езды применительно к самолету
  public function go()
  {
    echo("Правила езды для самолета");
  }
}

class Moto{
  //Переопределяем абстрактный метод езды применительно к мотоциклу
  public function go()
  {
    echo("Правила езды для мотоцикла");
  }
}

//Создаем экземпляры(объекты) этих классов

autoObj = new Auto();
planeObj = new Plane();
motoObj = new Moto();

//Попытаемся использовать и тогда
autoObj->go();//Выведет "Правила езды для автомобиля"
planeObj->go();//Выведет "Правила езды для самолета"
motoObj->go();//Выведет "Правила езды для мотоцикла"

И таким образом, не смотря на то, что все класс унаследовали один и тот же класс с одним и тем же методом, но реализация у них разная — это и объясняетя полиморфизмом, т.е. много объектов, а член(метод) у всех один и он индивидуален для каждого объекта, в зависимости от реализующего его класса. В дальнейшем, мы будем подробно обсуждать каждый из всех этих пунктов ООП в PHP 5.

Пожалуйста, оцените материал

WebSofter

Web - технологии