Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
OOP to me means only messaging, local retention and protection and
hiding of state-process, and extreme late-binding of all things. It
can be done in Smalltalk and in LISP. There are possibly other
systems in which this is possible, but I'm not aware of them.
Cheers,
Alan
2003-07-23
OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.
К сожалению то, что называется ООП везде никогда в рамки смолтока не входила. Еще создатели симулы были в удивлении от того что язык все используют не верно и не ловят сути.
Только для того чтоб автор залез таки в гугл (и как следствие написал эту статью) его пришлось изрядно потроллить…
(А пока не пнёшь никто же в гугл не полезет, все будут думать что и без гугла они самые умные, прямо с рождения) =D
… и что Гослинг с Липпертом имеют… гм… проблемы
инкапсуляция и наследование, но никто так и не доказал, что инкапсуляция и наследование — это круто
Иногда это превращается в полукилометровые вызовы get, кучи конструкторов копирования и прочие штуки.
Cи++ же склоняет к необходимости разделить всё на private/public/protected,
и стараются предугадать (в большинстве случаев некорректно), что же надо скрыть, что открыть.
Это всё в итоге приводит к нечитаемому коду, потому что менять уже нечто поздно, ибо понаписано N килострок с текущими абстракциями, вот и начинаются wrapper'ы, proxy, шаблоны и прочая маловнятная ерунда, только ради того, чтобы прочитать какой-нибудь простой флажок.
Ну, в общем-то ООП старается моделировать мир. По-своему конечно. Главное в программировании — управление сложностью. private/protected сложность скрывают, позволяя в каждый момент времени держать в голове только ограниченное количество кода.
Вообще-то, если вам приходится угадывать, что нужно открыть, а что закрыть, скорее всего, вы плохо представляете себе предметную область, которую моделируете
Классический пример кода, написанного программистом, который понятия не имеет о рефакторинге. Только к ООП это отношения не имеет. Все, что вы приводите в пример, может быть аналогично повторено неграмотным программистом на чистом С.
У меня нет никаких критериев.
Есть просто классический набор рекомендаций на тему 'как правильно писать на Си++'. Так вот, эта правильность и бросается сразу же в глаза.
противопоставлять императивное программирование и ООП это примерно то же самое, что противопоставлять мокрое и длинное :) Учите матчасть, всё такое.
О. Вы что, в самом деле думаете, что Линус держит весь код Linux в голове, потому что у него нет private и public? :)
К счастью, реальный мир намного сложнее, и попытки моделировать его при помощи ООП — это как минимум от незнания современной физики, и вообще полный fail.
ООП не мир моделирует.
ООП, пытается моделировать процесс мышления склонных к гиперформализации западных программистов.
Они абсолютно уверены, что ООП — это абсолютная истина, потому что, IMHO, такой стиль мышления действительно соответствует их восприятию мира. Но такое восприятие, как минимум, не особо соответствует действительности. И всё-равно приводит к генерации километров невнятного кода.
Вот в этом-то и главный философский диссонанс. Проблема не в том, что кто-то что-то плохо себе представляет, проблема в квантовой механике: если вы вмешиваетесь своими программами в предметную область, то предметная область меняется.
ООП же своим упором на инкапсуляцию и абстракцию интерфейсов не даёт достаточно гибкости для реального мира.
Хм. То есть, вы сейчас говорите, для программирования на Си++ человеку надо заморачиваться не только насчёт public/private, но ещё и думать о том, как он потом это всё рефакторить будет?
Конечно, и на Си можно написать подобную кашу. Но вероятность того, что кто-нибудь именно её напишет мала.Вы можете как-то подкрепить свой вывод? Выглядит довольно голословно. У вас есть исследования, подтверждающие ваш вывод относительно такой вероятности? Или она просто обязана быть очевидна всем, а если не очевидна — то только слепым и бездарным? :)
ООП эту всю динамику убивает, и не понятно, с какой целью.
Что вы подразумеваете под динамикой? Проиллюстрируйте, пожалуйста, как ООП ее убивает.
IMHO на этот счёт: с целью защиты от собственных же программистов.
Не говорите об ООП как о живом предмете, пожалуйста. Вы меня беспокоите.
Разве Том Хики пишет о том, что императивный стиль противопоставляется ООП парадигме? Он пишет о том, что решать те задачи, которые ставились перед ООП попытками введения ООП в императивные языки — это fail, это не верно.
Хотя, конечно, если вы считаете, что C++ и Java — это не ООП
От моделирования погоды она, естественно, очень сильно меняется. Например, у нас не падают и не взрываются ракеты, которые мы без моделирования не запускаем в ураганы. измерение влияет на систему. Моделирование же — это часть процесса измерения.
Но у вас уже понаписаны тысячи строк с этим интерфейсом. И менять код, который основан именно на этой абстрактной модели на порядки сложнее
Но в новых проектах. ООП просто нафиг всё убивает.… потому что этот ООП совсем не в тему, когда задача новая и предметная область неизведана
они должны знать, что ООП — это не серебрянная пуля. Там есть свои сложности
Буду рад, если кто-то это услышит и осознает. И хотя бы постарается посмотреть в сторону от индустриальных монстров вроде C++/Java/C#.
Коротко об истории объектно-ориентированного программирования