Как стать автором
Обновить

Комментарии 23

многие программисты даже не задумываются о другой парадигме при написании ПО. ООП стало незыблемым стандартом.

На мой взгляд все ровно наоборот. Многие разрабы на JVM думаю, что пишут на ООП. При этом у них анемичная модель данных, Spring заставляет их работать в процедурном стиле, а в коде сплошь и рядом функторы и монады из ФП.

Так что непонятно, с какой реальностью дискутирует автор и какую предметную область имеет в виду. Все популярные языки давно уже мультипарадигменные. ООП в них просто полезная фича для ряда задач, а не какой-то угнетатель, который что-то кому-то навязывает.

А изрядная часть сервисов от Spring - это вообще AOP...

в коде сплошь и рядом функторы и монады из ФП.

Хорошо, хоть, если так. Потому что я всю дорогу наблюдаю как на интервью у всех сплошной SOLID, а потом смотришь код, а там как будто транспиляция из Алгола-68 :)

Это очень сильно зависит от реализации ООП в конкретном языке. Описанные проблемы это как раз проблемы реализации, а не самой парадигмы.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Справедливости ради, насчет медленности можно переформулировать так:
- реализации инструментов ООП в основных ЯП могут плохо сказываться на производительности по сравнению с другими реализациями (например императивной)

"это плохая игра, но это единственная игра в городе.." )

только ООП -- не паттерн, а парадигма. для поддержки и развития сложной логики -- лучше парадигмы пока нет. DDD для бизнес-логики, DOD для оптимизации игр и прочее -- это, вроде бы, все же конкретные методологии и, вполне себе, часть парадигмы ООП.

Как мне кажется ООП хорош для программирования ГУИ и для геймдева. Возможно для чего то ещё. Для скриптов по автоматизации и низкоуровнего программирования удобнее императивный линейный стиль, без перекрестного обмена данными между многочисленными объектами. Для веба, финансовой сферы лучше ФП. Для поддержки и развития сложной логики (например компиляторы и т.п.), а также для разработки системы с нечеткими требованиями, где потребудется постоянный рефакторинг и модификация кода лучше ФП тоже ничего нет. На ООП пишут не потому, что оно лучше подходит, а потому что ниже порог вхождения, больше специалистов и т.п.

Всё вышеперечисленное не претендует на истину, это лишь моё мнение, оно может отличаться от вашего.

Хорошо написано. ООП это просто методология со своими плюсами и минусами. Но, к сожалению, подходы зачастую воспринимают как аксиомы - от недостатка понимания сферы.

В копилку к чувакам, округляющим глаза на "в GET может быть тело" и "не бывает api кроме rest" ?

Насчёт чуваков, которые округляют глаза на "в GET может быть тело". Я думаю они справедливо их округляют, если они читали RFC7231 или RFC2616:

A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request.

The GET method means retrieve whatever information ([...]) is identified by the Request-URI.

A server SHOULD read and forward a message-body on any request; if the request method does not include defined semantics for an entity-body, then the message-body SHOULD be ignored when handling the request.

Там как бы в обоих подразумевается, что GET-запрос не может и не должен иметь тело. Это вообще может оказаться неожиданностью для клиента и сервера. А тех, кто так делает надо сжигать на костре прикладывать головой об распечатанный RFC вразумлять и исправлять.

А насчёт "не бывает api кроме rest", я надеюсь вы хотели сказать наоборот, что бывает, но есть те, кто не понимает расшифровки этой аббревиатуры? Ведь так?

Физически может? Может. Что делать с теми, кто применяет - это вопрос отдельный (в основном судить по статье УК РФ), а дыры в безопасности надо уметь закрывать, и знать о таких вещах для этого.

У вас с чувством юмора очень плохо - да, действительно, очень много "программистов" в принципе не понимают что rest это лишь методология, и считают что вообще не бывает никакого api кроме rest (для человека api становится синонимом rest api, даже rest) ?

Если тело в запросе GET открывает дыру в безопасности - это одно, и такую дыру надо закрывать, тут обсуждать нечего.

Но это не означает, что пишущий веб-сервер должен всерьёз поддерживать обработку GET запросов с телом.

Чтобы не создавались вышеописаные проблемы, кроме производительности, уже давно существуют принципы SOLID, нарушая которые все вышеприведенные примеры привели к приведенным в примерах проблемам. В случае необходимости достичь максимальной производительности соглашусь, OOP не самый лучший вариант.

НЛО прилетело и опубликовало эту надпись здесь

Про то, что наследование не следует использовать для повторного использования кода уже кто только не писал - и ГоФ, и Саттер, и Александреску, и Рихтер, и наверняка кто-то еще. Но нет же, продолжаем топтать те же грабли, а потом писать такие вот статьи.

VTable проверяется для динамической диспетчеризации нужного метода в среде исполнения.

У вас очень ошибочное представление о том как работает VTable. Смещение указателя на нужный метод в VTable определяется и известно уже на этапе компиляции и никакой "динамической диспетчеризацией" там даже и не пахнет.

Вообще-то,, доступ к VTable по фиксированному смещению как раз динамической диспетчеризацией и называется.

Да, тут я, пожалуй, попутал с поздним связыванием. Но, в любом случае, никакого "поиска" по VTable при вызове виртуального метода не происходит - операция не более затратная чем разыменование указателя.

В середине поста автор обещает рассказать нам чем именно опасен метод update, после чего отвлекается на VTable, дальше рассуждает о методе draw в совсем другой иерархии классов... и так и не возвращается к методу update.

Так всё-таки, в чём опасность наследования Player - Character - GameObject?

Ну, насколько я вижу, в примерах нарушается принцип Single Responsibility. Там перемешано представление и логика.

Проблема в том, что на ООП многое не выразить в нормальной форме. Помоему, время более строгих языков и парадигм, чем ООП.

"ООП мотивирует писать спагетти-код" можно заменить на "ЧТО УГОДНО мотивирует писать спагетти-код"

Ещё не видел, чтобы такие УТВЕРЖДАТЕЛИ написали как же задизайнить сложную систему, чтобы не было проблем (switch вместо наследования? VTable исчезнет, и ему на замену придёт полный пипец :-( ). Когда система начинает становиться слишком сложной (независимо что там ООП, функциональщина, процедурщина, и тд), нужно думать, думать, думать и рефакторить, а на это должны дать добро сверху))

Пусть автор глянет на сложные проекты на процедурщине (я как-то лет 20 назад заглянул в код putty или др терминала - там был сущий ад!!)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий