cosmoskey
@cosmoskey
Студент 0 уровня

Почему ООП не ООП?

Мне стало интересно, что такое ООП. В университете мне сказали, что это про инкапсуляцию, полиморфизм и наследование. А по радио и телеку говорят, что это совсем другое, что нельзя создавать статические методы, нельзя делать синглтоны и вообще, что ООП (о, Боже) это не про наследование. А тот, кто придумал этот термин вообще сказал, что си++ это не ОО-язык.
Возникают вопросы. Есть ли ООП сейчас в том виде, в котором задумывал его Алан Кэй? Нужно ли то ООП, которое задумывал он? Реализовано ли где-то "труъ" ООП? Чем плохо ООП сейчас? Почему си++ не ОО?
Можете посоветовать источники по этому вопросу, книги, видео, что угодно. В какую сторону копать?
И ещё. Для чего оно надо? Какие проблемы у меня возникают при неиспользовании ООП? Какие оно решает?
  • Вопрос задан
  • 2043 просмотра
Решения вопроса 1
@chaetal
разработчик ПО и преподаватель
Есть ли ООП сейчас в том виде, в котором задумывал его Алан Кэй?

Существует несколько реализаций языка (если это язык) Smalltalk. Именно его Кэй со товарищи когда-то создали, развивая идеи, которые обозвал термином ООП. Очень рекомендую познакомиться: вероятность понять что такое ООП максимальна при его практическом использовании, а Smalltalk — самый что ни на есть практический ООП. Из существующих реализаций посмотреть рекомендую Pharo [http://pharo.org/]. Сам зарабатываю им на жизнь, кстати — так что это не "голая теория".

По некоторым аспектам к Smalltalk-у близок Ruby… Но он сам по себе уже гораздо сложнее и некрасивее.

Сейчас некогда искать, но сам Кэй также говорил, что, например, Lisp — объектно-ориентированный язык программирования. Что-то аналогичное он говорил (сейчас начинаю сомневаться, но вроде бы) про Erlang с его Акторами…

> Нужно ли то ООП, которое задумывал он?
На этот вопрос каждый должен ответить сам. Я считаю — необходимо (с некоторыми поправками).

> Реализовано ли где-то "труъ" ООП?
Я считаю, что (из существующих) Smalltalk и Self подошли максимально близко. Есть ценители ООП через ФП (правда при этом они время от времени говорят, что объекты им не особо и нужны — в общем, мутные они:)… Но Акторы точно заслуживают внимания (особенно учитывая что Хьюитт во многом вдохновился идеями Кэя, а Кэй еще до этого во многом вдохновился идеями Хьюитта).

> Чем плохо ООП сейчас?
Главным образом тем, что его извратили и загадили, не поняв.

> Почему си++ не ОО?
Потому что C++ — "мультипарадигменный" (хотя, поклонники этого термина, похоже, даже с его написанием никак не могут). Например, для меня это значит, что ни одну парадигму он хорошо не поддерживает.

> Можете посоветовать источники по этому вопросу, книги, видео, что угодно.
Источников — масса, но при этом посоветовать что-то — очень сложно. В основном потому, что ясность в этих вопросах пока не наступила ни у кого. На данный момент, наверное, каждый должен сам найти свой путь в этих дебрях (или остаться там навсегда… или не соваться в них).

> В какую сторону копать?
Я лично когда-то давно начал копать в сторону Smalltalk …и с тех пор все еще копаю :)

> И ещё. Для чего оно надо? Какие проблемы у меня возникают при неиспользовании ООП? Какие оно решает?
Если нет собственных нерешенных проблем, то, возможно, лучше подождать, когда они появятся, обдумать их самостоятельно и потом посмотреть вокруг (на то же ООП, и не только)… И дальше станет вдруг понятнее. Я примерно так и "вляпался": занимаясь несколько лет C++ (это были еще 90-е) не находил ответы на сокровенные вопросы; посоветовали скачать и посмотреть Smalltalk (тогда это был еще Dolphin); всего несколько часов "глядения" — и вот оно Озарение! :) Правда, вместо снятых вопросов она принесло на порядок больше новых, неотвеченных!
Ответ написан
Пригласить эксперта
Ответы на вопрос 8
gobananas
@gobananas
finishhim.ru
А по радио и телеку говорят, что это совсем другое

Не смотрите первый и второй канал, там всё врут

что это совсем другое

Эти высказывания друг другу не противоречат. Статические методы делать можно, только их избыток лишает ООП смысла и преимуществ

А тот, кто придумал этот термин вообще сказал, что ява и си++ это не ОО-языки

Прямую речь и автора в студию

В какую сторону копать?

В сторону реальных проектов, а не теоретических изысканий в телевизорах
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега IT-образование
build engineer
ООП позволяет писать большие проекты большим количеством разработчиков с минимальными конфликтами.

Когда программа помещается в голову одного программиста, желательно еще и в короткое время, никакие парадигмы не нужны. Если же программа слишком большая, и задач много - их нужно как-то делить на части, которые можно было бы программировать независимо друг от друга.

Модули - слишком большие. Разложить программу на функции и процедуры - недостаточно, куча зависимостей.

У ООП есть и свои проблемы - например сильный оверхед для простых задач.

Но в целом, эта идеология оказалась удобнее других в подавляющем большинстве случаев. Позволяет писать сложные продукты среднестатистическими программистами распарралеливая процесс.

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

Ну и понятно, что когда такой термин был произнесен впервые, в нем было далеко не то, во что ООП вылилось сейчас.
Ответ написан
@immaculate
Программист-путешественник
Есть идеальное ООП в вакууме, и есть реальные языки программирования и реальные задачи.

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

Можно писать объектно-ориентированный код на языках без поддержки ООП (на C, например). Можно писать процедурный код в ООП языках. Инкапсуляция и полиморфизм вообще используются в реальной жизни довольно редко, а вот стремление новичков всюду использовать полиморфизм, синглетоны, и так далее, приводит часто к совершенно катастрофическим результатам.

Понять, как именно помогает ООП, как именно мешает, что нужно использовать, что не нужно, можно только после нескольких лет практического программирования.
Ответ написан
Stalker_RED
@Stalker_RED
Для чего оно надо? Какие проблемы у меня возникают при неиспользовании ООП? Какие оно решает?
Для управления сложностью.
Для чего нужно ООП?
Ответ написан
Maksclub
@Maksclub
maksfedorov.ru
Это очень холиварная тема... доходит до крайностей
Например есть такой Егор Бугуенко, который топит за объект, против наследования, против анонимок, против ORM и . MVC
https://www.youtube.com/watch?v=ckjAWXJWZEY

Жаркий спор:
https://www.youtube.com/watch?v=AshxbePAbCM

Правда где-то посередине

И еще -- есть другие парадигмы, например функциональное программирование как номер один из крупных парадигм
Ответ написан
lxsmkv
@lxsmkv
Test automation developer
То о чем говорит например ("From Class-oriented Programming to Real OO") James Coplien, это то что в ява строго говоря Class Oriented Programming. Ты не можешь просто взять обьект, его нужно сперва создать. И этот обьект - это лишь экземпляр класса. Изменив экземпляр мы меняем только экземпляр. А "тру" ооп, это когда ты можешь например во время выполнения программы взять и изменить обьект в системе для всех, как в яваскрипте через prototype. И в руби вроде тоже. Но чтобы не наговорить лишнего, на этом и закончу.
Ответ написан
dllweb
@dllweb
Друже, а какая тебе разница, ты б поработал для начала с каким нибудь проектом, и тогда бы понял, что к чему, и что - для чего сгодится. Зачем тебе эти фобии, что правильно, или не правильно?
Ответ написан
Про фобии понравилось)))) Отвечу кратко на последний вопрос. Проблемы оно не решает, а при понимании взаимодействия помогает здорово сэкономить время при разработке приложений. Нет необходимости повторять куски кода, а обращаться к существующим классам и их функциям. Если нужно профиксить конкретную функцию, она профиксится во всем проекте сразу, сколько бы ты раз к ней не обращался и с любого места. При другом раскладе пришлось бы весь существующий код парсить и фиксить каждое включение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы