alex4answ
@alex4answ

Когда использовать ООП?

Добрый день, ~3 года писал на PHP исключительно в ООП стиле, далее перешел на JS + TypeScript, где почти все в процедурном или функциональном стиле (без ооп в общем, я уже запутался как это правильно называется).

И тут оглянувшись, я вижу что большинство вещей можно описать и с ООП подходом и ФП, но как будет правильно, когда и что использовать?

Я подходил к выбору с точки зрения:
Мне нужен объект, который будет хранить состояние/данные, и есть общие операции над этим состоянием?
Используем ООП плюшки (наследование/абстракцию/полиморфизм)?

- да = пишем в ООП стиле
- нет = пишем без ООП

Но, огромная куча вещей, начиная от MVC фреймворков, заканчивая маленькими библиотечками написана в ООП, независимо от того, нужно ли состояние, общие операции над данными и тп.

Яркий пример обычный контроллер в MVC:
class PageController {
  public actionIndex() {
    // что-то
  }

  public actionDelete() {
    // что-то удаляем
  }
}


Дак для чего и когда использовать ООП?
чтобы это было не просто "потому что я так привык"
  • Вопрос задан
  • 597 просмотров
Решения вопроса 3
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
ООП - это не только, когда вы берете какие-то сущности из предметной области и оборачиваете каждую в объект, который что-то умеет делать. Это больше подход к организации кода. Вы делите задачу на подзадачи, а данные на обособленные части, абстрагируете детали внутри объектов. Это позволяет снижать сложность архитектуры. Теоретически любую программу можно написать внутри одной огромной функции с кучей goto. Но так никто не делает, потому что это невозможно поддерживать и невероятно сложно написать. ООП - это логическое продолжение процедур. Теперь вы не только какие-то части программы абстрагируете в одном месте, но теперь еще и данные вмести с ними.

Мне нужен объект, который будет хранить состояние/данные, и есть общие операции над этим состоянием?


Вопрос: что значит нужен? Всегда можно взять глобальную переменную, написать функции, которые это состояние принимают и что-то с ним делают. Но довольно часто организация в виде объекта просто удобнее.
Ответ написан
DevMan
@DevMan
ФП – вообще про другое.
MVC – просто подход. спокойно реализуется и без ООП.

ООП – это управление сложностью/декомпозиция.
если вы делаете разовую маленькую задачу, заморачиваться им нет смысла.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
По простому. Вот есть у вас этот контроллер. В него нужно заинжектмть логгер а он используется в 10 методах, вы что будете писать 10 функций с ещё одним параметром? А добавим базу данных и репорты получается лапша. И самое главное человек в состоянии держать в голове примерно максимум 8 переменных у меня в классах получается от 5 до 20 что уже напрягает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Griboks
@Griboks
У каждого подхода/парадигмы есть какая-то цель. Если вы понимаете эту цель и действительно хотите использовать её преимущества и недостатки, тогда используйте. Если не понимаете - используйте другой подход, чью цель понимаете. Если нет таких подходов, используйте общепринятые.

p.s.
Любой код можно переписать для любого подхода.
Ответ написан
Комментировать
anton_reut
@anton_reut
Начинающий веб-разработчик
Для сравнения, процедурка и ООП это как старый советский гараж и как современный.

Процедурный код - много всего (в том числе ненужного, устаревшего), вроде работает и всё есть но без бутылки не разберешься что где лежит:
%D0%A5%D0%BB%D0%B0%D0%BC-%D0%B2-%D0%B3%D0%B0%D1%80%D0%B0%D0%B6%D0%B5-1280x720.jpg

ООП - все разложено по полочкам, порядок, каждый ящичек под строго определенный инструмент и подписан:
etapy-kosmeticheskogo-i-kapitalnogo-remonta-garazha-68399.jpg
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы