Большая Тёрка / Мысли / Личная лента olegchir /
Небольшой обзор статьи в новый тэг #кунсткамера
Источник: https://habrahabr.ru/company/mailru/blog/307168/
> Эта проблема — ещё одна трещина в Столпе Наследования.
Это трещина не в наследовании, а в башке автора
1) ООП не предназначено для прямого уменьшения повторного использования, оно предназначено для корректного моделирования системы. Повторное использование если вообще и бывает, является
Дублирвание кода (текста) делается макросами или еще какой копипастой. Дублирование высокоуровнего смысла - это совсем другая область, другой логический уровень.
Соответственно, сама система должна быть спроектирована для увеличения повторного использования. А не говнокод которым ты это всё замоделил. Если ты моделируешь говно, то на выходе всегда получается говно, а на Java или Common Lisp оно получится - разница не чтобы сильно большая. Чтобы система была правильно спроектирована нужен хороший разработчик систем, например выделенный системный аналитик или архитектор.
Аналитика у человека не было, сам он не то чтобы гений проектирования, поэтому подпер убогую идею костылями на С++ и Java, и плачет теперь что говно почему-то С++, а не его подход к решению задачи.
Т.е. в проблеме поиска сотрудников (аналитиков, архитекторов) обвинили ООП. Хм, отличная отмаза. На менее подготовленного читателя даже проканало бы, но у нас в Инквизиции за такое сразу же сжигают на рее.
Кстати, все вопросы касательно экономики говна, заставляющей писать софт без аналитиков и анализа, т.е. на самом деле - на все актуальные вопросы современности вообще - отвечает вот эта статья:http://2k.livejournal.com/520078.html
2)
> Проблема с ОО-языками заключается в том, что они тянут за собой всё своё окружение. Вы хотели всего лишь банан, но в результате получаете гориллу, держащую этот банан, и все джунгли впридачу.
> Джо Армстронг
В 1986 году Джо Армстронг сделал Эрланг. Оперативная память стоила очень дорого, и Джо пришлось капитально попотеть, чтобы сэкономить хоть немного. И процессоры были очень медленные, анализ контекста в компиляторе занимал очень много вычислительных ресурсов.
А потом прошло 30 лет.
3)
> Я в течение десятилетий программировал на объектно-ориентированных языках.
> private ArrayList
Вместо private List используется private ArrayList. Абстрагирование, полиморфизм подтипов - не, не слышали. Загримированный под матерого ООП кодера, Штирлиц никогда не был так близок к провалу.
4)
> Возьмём следующий базовый класс
> public class Array { private ArrayList
Знаете, чем хороша Java? Тем что в ней, к счастью, нет такого базового класса.
Автор написал поверх класса List прокси с названием Array (sic!), и запроксировал в нем метод add(element). Потом запроксировал addAll, в котором полностью проигнорировал тот факт, что addAll и add это не какие-то произвольные операции, а жестко связанные. В addAll уже нельзя использовать оригинальный add, нужно использовать свой прокси. После столь свинского с собой обращения, всё похерилось. Конец был немного предсказуем, верно?
5)
> Мы должны работать только с интерфейсом. Это раздражающая тенденция...
...раздражающе мешающая писать говнокод, ясно.
6)
> Идея иерархии “общее/частное”...
> Каждый раз, создавая новую компанию, мне приходится решать проблему, связанную с выбором места для документации компании. Нужно ли мне сделать папку Документы, а внутри неё создать папку Компания? Или мне нужно сделать папку Компания, а внутри неё — Документы? Оба варианта рабочие, но какой из них правильный? Какой лучше?
Вы действительно хотите сделать лучше? Тогда вот мой совет как вашего адвоката:
Лучше всего курить дудку немного реже. Мужик, поверь старому норкоманту, это не доводит до добра. Папка документы - это частный случай сущности Компания, серьезно?
7)
> иерархия “общее/частное” не работает. Так для чего тогда хороши иерархии?
> Для включения (Containment).
Компания включает в себя папку. Если спиздить папку и утащить за пределы офиса Компании, мир рухнет, а автор статьи отвалится с сегфолтом. Ясно. К папкам нужно относиться весьма серьезно, это вопрос национальной безопасности.
С 1 сентября 1960 года (или когда там в продакшене появится ООП), писать на нем разрешается только отряду Мстители под руководством отца Тони Старка. (Marvel не похоже на людей, свято блюдущих хронологию)
8)
> Инкапсуляция, второй обрушившийся столп
Учитывая критически уменьшающийся объем текста, описывающий проблему, к этому моменту автор уже понял, что что-то пошло не так. Проклятое ООП не сдается даже на его территории - посте на Хабре.
9)
> The Reference Problem
Автор сам придумал этот термин?
Я вижу только https://en.wikipedia.org/wiki/Reference_class_problem
и это вообще из статистики, а не программирования
10)
> Если ссылка на объект передаётся конструктору объектов, то он кладёт её в приватную переменную, защищённую инкапсулированием. Но переданный объект небезопасен! Почему? Потому в какой-то части нашего кода содержится указатель на объект, то есть код, вызывающий конструктор. Но он ДОЛЖЕН иметь ссылку на объект, в противном случае он не сможет передать её конструктору.
Автор скорей всего как бы хотел сказать о паттернах fluent interface + builder, примененных в concurrent случае? Что кроме кроме религии запрещает ему сделать все доступы безопасными?
11)
> Конструктору придётся клонировать переданные объекты.
А, автор решил нам продать defensive copying! Об этом рассказывают на первом курсе универа на предмете "программирование на языке высокого уровня" (ПЯВУ). Так что, кто не пробовал поступить даже на первый курс, или никогда не читал классические тексты по Java, или википедию, или вообще ничего, эта информация безусловно будет вам очень полезной.
> в лучшем случае клонировать их бесполезно, а в худшем — невозможно. В каждом из мейнстримовых ОО-языков существует такая проблема. Прощай, инкапсуляция.
Ну а невозможно это потому что? Да черт его знает. Я уже задолбался писать этот комментарий, если честно :-)
12)
> Полиморфизм, третий обрушившийся Столп
> Куда бы они не отправились, он был с ними, но всегда на вспомогательных ролях.
Барбара Лисков и Джанет Винг, Андрей Александреску и Герб Саттер, Роберт "Uncle Bob" Мартин, Девид Хейден и Бертранд Мейер, и другие, менее популярные товарищи, плачут кровавыми слезами и крутятся в постелях как вентиляторы.
13)
> Блог компании Mail.Ru Group
Мэйлру капец. Ясно. Хорошая когда-то была компания.
В Новосибирске уже ночь, надо с этим заявязывать.
Спят усталые игрушки, книжки спят,
Одеяла и подушки ждут ребят.
Даже сказка спать ложится,
Чтобы ночью нам приснился
Мир, в котором ООП больше не работает