Основные понятия и принципы ООП
Принципы ООП (объектно ориентированного программирования) – это парадигмы на которых базируется подход в основе которого лежит объектная модель.
Объект – это совокупность характеристик и поведений, которое соответствует некой сущности.
Чтобы создать объект в программе, нужно описать шаблон для этого объекта, который называется классом. Объекты создаются на основе уже существующих классов.
Характеристики объекта в классе описываются в виде переменных, которые называются полями.
Поведение объекта в классе описывается функциями, которые называются методами.
Объектно ориентированное программирование базируется на принципах:
- инкапсуляция
- наследование
- абстракция
- полиморфизм
Инкапсуляция – объединение полей и методов в классе, с целью закрыть прямой доступ к полям и открыть его для методов, которые этими полями управляют.
Согласно инкапсуляции, доступ к полям рекомендуется закрывать используя соответствующие спецификаторы доступа. Чтобы предоставить возможность вносить изменения или получать значения полей, создаются специальные методы.
Метод, возвращающий значение поля, называется геттер (от английского get – “получать”).
Метод, устанавливающий значение поля, называется сеттер (от английского set – “устанавливать”).
public function getField()
{
return $this->field;
}
public function setField($newValue)
{
if ($newValue < 0) {
$newValue = -1;
}
return $this->field = $newValue;
}
Методы SET должны проверять правильность заносимых значений в поля и если значение не правильно, то корректировать его или генерировать ошибку.
Например, в минуте не может быть более 60 секунд и так далее.
Наследование – позволяет создавать классы на основе уже существующих. Тем самым облегчая задачу по созданию новых классов с точки зрения использования уже существующего программного кода. Класс, от которого произошло наследование, называется базовым или родительским. Классы, которые произошли от базового, называются потомками, наследниками или производными классами. В PHP также используются абстрактные классы.
Абстрактный класс — это класс, содержащий хотя бы один абстрактный метод. Он описан в программе, имеет поля, методы и не может использоваться для непосредственного создания объекта. То есть от абстрактного класса можно только наследовать. Объекты создаются только на основе производных классов, наследованных от абстрактного.
Полиморфизм (греч. “многообразие форм”) – в программировании означает возможность использования одного имени для методов разных классов находящихся в одной иерархии наследования (т.е. в родственных классах) с целью выполнения схожих действий.
Создание в производном классе метода с таким же именем что и имя метода родительского класса, называется переопределением метода.
Суть переопределения метода – производный класс в переопределяемом методе делает похожее, но отличающееся действие, чем действие метода родительского класса.
abstract class Post {
abstract public function printType();
}
class News extends Post {
public function printType()
{
echo "News";
}
}
class Article extends Post {
public function printType()
{
echo "Article";
}
}
В примере выше, приведен некий абстрактный класс от которого происходит наследование. В классах-потомках используется метод с таким же именем как у родителя (переопределяется). В каждом случае он выполняет одну и ту же задачу – выводит тип которому соответствует конкретный пост.