Pull to refresh

Comments 23

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

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

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

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

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

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

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

UFO just landed and posted this here
UFO just landed and posted this here

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

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

только ООП -- не паттерн, а парадигма. для поддержки и развития сложной логики -- лучше парадигмы пока нет. 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 не самый лучший вариант.

UFO just landed and posted this here

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to leave a comment.