В единственном блоге разработчиков, который я прочитал, этот парень Joel-On-Software-Founder-of-SO давным-давно прочитал, что объектно-ориентированный подход не приводит к увеличению производительности. Автоматическое управление памятью делает. Прохладно. Кто может опровергнуть данные?
Я по-прежнему считаю, что объектно-ориентированное программирование для не-объектно-ориентированного программирования - то же самое, что программирование с функциями для программирования всего встраиваемого.
(И я должен знать, поскольку я начал с GWBasic.) Когда вы реорганизуете код для использования функций, он
variable2654
становится
variable3
методом, которым вы пользуетесь . Или, еще лучше, у него есть имя, которое вы можете понять,
и если функция короткая , он называется,
value
и этого достаточно для полного понимания.
Когда код без функций становится кодом с методами, вы можете удалить мили кода.
Когда вы реорганизовывать код , чтобы быть действительно OO, b
, c
, q
, и Z
стать this
, this
, this
и this
. А поскольку я не верю в использование этого this
ключевого слова, вы можете удалить мили кода. Фактически, вы можете это сделать, даже если используете this
.
Я не думаю, что объектно-ориентированный объект - естественная метафора.
Я также не думаю, что язык является естественной метафорой, и не думаю, что «запахи» Фаулера лучше, чем слова «этот код неприятен на вкус». Тем не менее, я думаю, что объектно-ориентированный подход - это не естественные метафоры, и люди, которые думают, что
объекты просто появляются
у вас , в основном упускают из виду суть.
Вы определяете объектную вселенную, и более совершенные объектные юниверсы приводят к тому, что код становится короче, легче для понимания, лучше работает или все это (и некоторые критерии, которые я забываю). Я думаю, что люди, которые используют естественные объекты клиентов / предметной области в качестве программных объектов, теряют способность переопределять вселенную.
Например, когда вы используете систему бронирования авиабилетов, то, что вы называете бронированием, может вообще не соответствовать юридическому / бизнес-бронированию.
Некоторые из основных концепций - действительно крутые инструменты
Я думаю, что большинство людей преувеличивают, говоря «когда у вас есть молоток, они все гвозди». Я думаю, что и обратная сторона медали / зеркала так же верна: когда у вас есть гаджет, подобный полиморфизму / наследованию, вы начинаете находить применения, которые подходят, например, перчатка / носок / контактная линза. Инструменты OO очень мощные. Я думаю, что одинарное наследование абсолютно необходимо для того, чтобы люди не увлекались, несмотря на мою собственную программу
множественного наследования.
В чем смысл ООП?
Я думаю, что это отличный способ справиться с огромной базой кода. Я думаю, что это позволяет вам организовать и реорганизовать код и дает вам язык для этого (помимо языка программирования, на котором вы работаете), а также модулирует код довольно естественным и простым для понимания способом.
ООП суждено быть неправильно понятым большинством разработчиков
Это потому, что этот процесс открывает глаза, как и жизнь: вы все больше и больше понимаете объектно-ориентированный подход с опытом и начинаете избегать определенных шаблонов и использовать другие по мере того, как становитесь мудрее. Одним из лучших примеров является то, что вы перестаете использовать наследование для классов, которые вы не контролируете, и вместо этого предпочитаете паттерн
Фасад .
По поводу вашего мини-эссе / вопроса
Я хотел упомянуть, что вы правы. Возможность повторного использования - по большей части несбыточная мечта. Вот цитата Андерса Хейильсберга на эту тему (блестяще) отсюда :
Если вы попросите начинающих программистов написать элемент управления календарем, они часто думают про себя: «О, я собираюсь написать лучший в мире элемент управления календарем! Он будет полиморфным по отношению к типу календаря. У него будут средства отображения, и мунджеры, и то, и то, и другое ". Им нужно отправить календарное приложение в течение двух месяцев. Они помещают всю эту инфраструктуру в систему управления, а затем тратят два дня на написание дрянного календаря поверх нее. Они будут думать: «В следующей версии приложения я сделаю гораздо больше».
Однако как только они начинают думать о том, как они на самом деле собираются реализовать все эти другие конкретизации своего абстрактного дизайна, оказывается, что их дизайн полностью ошибочен. А теперь они загнали себя в угол и вынуждены все выбросить. Я видел это снова и снова. Я твердо верю в минимализм. Если вы на самом деле не собираетесь решать общую проблему, не пытайтесь создать структуру для решения конкретной, потому что вы не знаете, как эта структура должна выглядеть.