Симптомы и альтернативы чрезмерно ООП - PullRequest
29 голосов
/ 14 января 2011

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

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 14 января 2011

Ну, я могу порекомендовать вам книгу Agile Принципы, Шаблоны и Практики в C # . Примеры есть в C #, конечно, но идея книги универсальна. Он не только охватывает Agile, но и фокусируется на плохих практиках и показывает на примерах, как преобразовать плохой код в хороший код. Он также содержит описания многих шаблонов проектирования и показывает, как их реализовать в полуреальном примере приложения Payroll.

2 голосов
/ 14 января 2011

Странно, что вы упоминаете C #. Он имеет очень мощных ключевых слов, чтобы контролировать обычные проблемы наследования. Первым должно быть ключевое слово internal . Понятие ограничения видимости для модуля . Эта концепция полностью отсутствует в C ++, модель сборки просто не поддерживает ее. В противном случае отличная концепция: «Я только доверяю членам моей команды, чтобы сделать это правильно». Конечно, вы делаете.

Тогда есть еще одно, ключевое слово загерметизированное . Необычайно мощный, «доллар останавливается здесь, не связывайтесь со мной». Используемый с хирургической точностью в .NET Framework, я еще никогда не обнаруживал случая, когда загерметизированный использовался не по назначению. Также отсутствует в C ++, но с неясными способами заставить это работать.

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

2 голосов
/ 14 января 2011

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

1 голос
/ 14 января 2011

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

EDIT:

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

0 голосов
/ 22 октября 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...