Недавно у меня спросили, чем ООП лучше процедурного подхода . Я подумал, что этот вопрос волнует большинство начинающих разработчиков, и решил написать статью на эту тему. Приятного прочтения.
Недавно у меня спросили, чем ООП лучше процедурного подхода. Я подумал, что этот вопрос волнует большинство начинающих разработчиков, и решил написать статью на эту тему. Приятного прочтения.
Введение
В начале следует запомнить: нет лучшего или худшего стиля программирования. Все, что можно написать на ООП, можно написать и в процедурном стиле и наоборот. Однако, ООП обладает некоторыми преимуществами, о которых мы и поговорим в этом материале.
Процедурный стиль программирования - это функции. Да-да, обычные функции, которые вы ежедневно используете в своем коде. У вас есть какие-то данные в каком-то типе, например, число. Вы загружаете эти данные в функцию, и она возвращает результат.
В ООП вы создаете единую сущность - ОБЪЕКТ! В нем есть нужные свойства и методы, необходимые для манипулирования данными. Вы загружаете данные в объект, делаете что-то и получаете результат.
ООП легче для понимая в том плане, что оно приближено к реальности. Например, на форуме есть участники, верно? Ну так создайте объект member, который будет обслуживать сущность "участник". Там будут храниться все их данные: имена, фамилии, пароли, методы регистрации, авторизации и многое другое.
Еще один плюс ООП - модульность. Вы можете разбить свой код на отдельные модули и, следовательно, его будет легче поддерживать и улучшать.
Но самый большой плюс ООП - наследование.
Наследование
К примеру, вы можете создать объект User, который, как понятно из названия(еще один плюс ООП), будет отвечать за пользователей. Он будет содержать примерно такие свойства и методы:
<?php
class User {
public $username;
private $login = false;
public function isLogin() {
if($this->login === false) {
return 'Пользователь вне сети';
} else {
return 'Пользователь в сети';
}
}
public function login() {
if($this->login === false) {
$this->login = true;
} else {
$this->login = false;
}
}
}
?>
У нас есть объект с полями, содержащими логин пользователя и полем, которое показывает, авторизован пользователь или нет. Также у нас есть метод, проверяющий это поле и возвращающий результат, и метод, который авторизует или деавторизует пользователя.
Теперь мы решили создать администратора. Но он ведь тоже обычный пользователь, верно? Да, с чуть большими правами, но все же он просто пользователь. Зачем все это переписывать? Просто унаследуем.
<?php
class Administrator extends User {
public function ban($username) {
// баним пользователя
}
}
?>
Теперь администратор может также авторизоваться как пользователь, у него есть свой ник, но также есть дополнительный метод, позволяющий банить других пользователей.
Главный принцип ООП - DRY(Dont't Repeat Yourself) - не дублируй код. И его следует соблюдать.
Тоже самое можно сказать и про перегрузку методов. Вам не нужно менять ВСЁ, вам нужно лишь поменять часть кода.
Надеюсь, это понятно. Еще один существенный плюс - типизация.
Типизация
Вы можете явно указать какой объект должен быть, и никакой другой не пройдет.
<?php
// ...
public function __construct(User $user) {
// ...
}
// ...
?>
Мы явно указали, что в конструктор должен быть передан пользователь, а не что-то другое.
<?php
$user = new User();
$something = new Something();
$a = new Obj($something);
?>
Здесь мы передаем something вместо пользователя и получим ошибку.
Следующий плюс ООП - исключения. Вы можете создать те исключения, которые вам нужны и которые будут делать то, что вам нужно. Дальше вы можете отлавливать ошибки и, если они случаются, то вызывать то или иное исключение. Таким образом ваш код станет более устойчивым, а устранять ошибки станет легче.
Итак, в этом материале я перечислил далеко не все плюсы ООП, которых, поверьте, намного больше, но затронул одни из самых важных. Надеюсь, что этот материал вам помогла понять, чем же ООП лучше, чем процедурный подход, однако, вы можете использовать тот стиль программирования, который вам нравится больше, и вы будете абсолютно правы.
Если кто-то хочет серъезно изучить ООП, то советую почитать следующую книжку:
Мэтт Зандстра - PHP: Объекты, шаблоны и методики программирования
В этой книге довольно неплохо рассказывается про то, какие плюсы у ООП, как его правильно использовать и что такое шаблоны проектирования. Дерзайте! Удачи!
