Подтвердить что ты не робот

Симптомы и альтернативы чрезмерному ООП

В последнее время я теряю доверие к ООП. Я уже видел много       жалобы на обычные злоупотребления ООП или просто простое злоупотребление. я не       означает общую путаницу между отношениями is-a и has-a. Я имею в виду       такие как проблемы ORM при работе с реляционными базами данных,       чрезмерное использование наследования с С#, а также несколько лет       при кодексе с тем же ложным инкапсуляционным убеждением, что Скотт Мейерс       упоминает в пункте 23 Эффективного С++

Мне интересно узнать больше об этом и о программном обеспечении OOP       шаблоны, которые могут решить определенные проблемы лучше, чем их ООП       двойники. Я убежден, что там много людей       давая хороший совет о том, как использовать это как преимущество с нечистым ООП       такие языки, как С++.

Кто-нибудь знает хорошую ссылку (автор, книга, статья), чтобы получить       начало?

Пожалуйста, обратите внимание, что я ищу две связанные, но разные вещи:

  • Общие злоупотребления концепциями ООП (например, пункт 23)
  • Шаблоны, где ООП не лучшее решение (с альтернативами)
4b9b3361

Ответ 1

Хорошо, я могу порекомендовать вам книгу Agile Principles, Patterns and Practices в С#. Примеры, конечно, есть в С#, но идея книги универсальна. Он не только охватывает Agile, но также фокусируется на плохих практиках и показывает в примерах, как преобразовать плохой код в хороший код. Он также содержит описания многих шаблонов проектирования и показывает, как их реализовать в полу-реальном примере приложения Payroll.

Ответ 2

Это нужно сделать, но если вы действительно хотите уйти от ООП или хотя бы взглянуть на концепции, которые не являются ООП, но используются с большой эффективностью: Узнайте у вас Haskell. Попробуйте новую парадигму программирования, а затем начните видеть, где вы можете применить многие концепции к языкам ООП. Это касается вашей второй пули, а не прямо, но поверьте мне, это поможет больше, чем вы можете думать.

Ответ 3

Немного странно, что вы упоминаете С#. У этого есть очень сильные ключевые слова, чтобы держать обычное наследование страдания под контролем. Первое должно быть внутренним ключевым словом. Понятие ограничения видимости для модуля. Эта концепция полностью отсутствует в С++, модель построения просто не поддерживает ее. В противном случае отличная концепция: "Я доверяю членам своей команды, чтобы все было правильно". Конечно, да.

Тогда есть slammer one, запечатанное ключевое слово. Чрезвычайно мощный, "доллар останавливается здесь, не возиться со мной". Используемый с хирургической точностью в .NET framework, я еще не нашел случая, когда запечатанное было использовано ненадлежащим образом. Также отсутствует в С++, но с неясными способами, чтобы это работало.

Но да, объектная модель WPF сосет довольно тяжелую. Унаследовать 6 уровней в глубину и использовать бэкдоры, как свойство зависимости, является оскорбительным. Наследование трудно, отпустите покупки.

Ответ 4

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

EDIT:

Сказав это, я не знаю, действительно ли я посмотрю на Unreal. Они делают некоторые странные вещи ради того, чтобы сделать контентный конвейер проще для разработчиков... он делает свой код... ну, посмотрите, действительно ли вы хотите знать.

Ответ 5

Одно распространенное избыточное использование - это принудительное выполнение ООП в программах/сценариях, которые вводят некоторый ввод, выводят его на вывод, а затем выводят (и не получают вход из любого места во время процесса). В этих случаях процедурный подход намного более чист.

Типичный пример этого - принудительное выполнение ООП в PHP-скриптах.