Java

ООП в java

Помогите пожалуйста. Изучаю java по книге "Изучаем Java" и не могу понять как работают ООП. Кто знает может объяснить и еще желательно пример как это записывать.
Carl Ber
Carl Ber
161
ООП - это мёртвая концепция. Сегодня она практически нигде не используется. Её ниша - симуляторы и графические фреймворки (собственно, область деятельности Страуструпа). Не трать на это время, если собираешься работать в другой сфере.

ООП не основано на проработанной математической концепции, в отличие от функциональных языков, реализующих лямбда-исчисление, типизированное лямбда-исчисление, теорию категорий; SQL, в основе которого - реляционное исчисление; и даже Ассемблера и машинно-ориентированных языков (Бейсик, Фортран), близких к машине Тьюринга.

ООП не имеет единого определения. Есть небольшое множество "объектных" свойств, нигде не реализованных в полной мере. Разные языки реализуют разные подмножества этих свойств. Апологеты ООП любят поминать "энкапсуляцию", "наследование", "полиморфизм" и "абстракцию", но как правило, имеют поверхностное представление о них и смешивают разные понятия в одну кучу. В этом опасность ООП - оно учит мыслить нечётко и строить из приложения мини-корпорацию. Чтобы хорошо понимать, что такое ООП, надо смотреть на него снаружи и с позиции математики. Вот, например, краткий анализ свойств ООП по существу, здесь их выделено девять: http://www.paulgraham.com/reesoo.html

Интересный момент, что эти свойства можно разделить на те, которые взяты из математики и присутствуют в необъектно-ориентированных языках (например, параметрический полиморфизм - это понятие из типизированного лямбда-исчисления, оно активно используется в функциональном программировании, а скрытие реализации на уровне модулей было доступно даже в древних процедурных языках), и те, которые присущи только ООП ("всё является объектом", пересылка сообщений как единственный способ взаимодействия объектов, наследование реализации). Отличительные свойства ООП критиковались индустрией уже во время его наивысшего расцвета, а лет 10 назад окончательно вышли из употребления. ООП активно продвигалось корпорациями (иерархия классов и дробление состояния соответствуют внутреннему корпоративному устройству), но если посмотреть на сегодняшнее типовое корпоративное приложение, то какие там объекты? Наследование реализации не применяется, оно только порождает лапшу. Классы имеют чёткую специализацию: сервисы ("бины"), утилиты, данные, значения. Сервисы с натяжкой можно было бы назвать объектами в объектном смысле, и то не везде. Утилиты - это набор не привязанных к объекту функций. Классы данных принципиально не содержат методов, кроме сеттеров и геттеров полей, а значения не содержат даже сеттеров. Языки, появившиеся в 2000-10-е годы, содержат средства описания специализированных классов на уровне синтаксиса, а некоторые императивные языки (например, Go) демонстративно отказываются от объектного подхода в принципе. Победило не объединение кода и данных, а разделение.

Попытки следования объектно-ориентированному подходу в приложениях порождают ещё худшую лапшу, чем была при процедурах. Сущности реального мира не моделируются иерархией классов, для этого больше подходят трейты. Попытки упорно соблюдать объектную иерархичность приводят лишь к обобщениям по неосновному признаку. От основной проблемы императивных приложений - состояния, которое может поменяться из тысячи мест программы, - ООП не защищает никак, несмотря на всю хвалёную "энкапсуляцию". Дробление состояния на множество мелких объектов тоже не решает проблему, только усложняет анализ зависимостей, а благодаря корпоративной бюрократии приводит ещё и к дублирующейся реализации одних и тех же функций в разных компонентах. Сейчас корпорации активно воспроизводят те же самые проблемы на новом уровне, вкладываясь в микросервисную архитектуру.

Так что учи лучше фундамент, а не ПТУшные поделки.
Лев Клебанов
Лев Клебанов
87 571
Лучший ответ
>Изучаю java по книге "Изучаем Java" и не могу понять как работают ООП
А нафига ты вообще взялся за Java, не врубившись для начала в ООП? Java - это ООП, только ООП, и сплошной ООП. И ООП - это отдельная большая тема, ее тут в двух словах не опишешь. Почитай статью в Википедии для начала, упирая на то, чтобы осознать, что такое наследование, каков принцип инкапсуляции, и как работает полиморфизм. Это такие три кита ООП. Затем возвращайся просветленный и задавай конкретные вопросы.
Иван Климов
Иван Климов
59 353
Стасян Сердцев а разве в Си и в Бейсике нет ООП?
если я правильно понял,то суть ООП в том как прописать в блоке кода часто повторяющиеся действия,назвав это классом,в других языках это называется создать и вызывать функцию,или создать и вызывать подпрограмму..
Владимир Бабларьян В современных Java-приложениях давно нет никакого ООП. Все отличительные свойства ООП тщательно банятся с самого начала разработки, а неотличительные вообще не являются свойствами ООП, т.к. присутствуют в необъектных языках и были разработаны задолго до ООП.
ООП это когда тонна повторяющегося говно-кода превращается в единый читаемый класс который можно инициализируется в код любой параграммы с программы к нему выполняться запросы такие как записывает , чтение, изменение, переменных а также выполнения множества операций функций которые лежат в данном классе с различными значениями параметров передаваемых в те самые функции которые лежат в классе. ООП это работа с классами программы шаблонириование программы с целью умещения длинны кода от 100 до 1000 строк. И сделать его более читаемы для других програмистов
вот простой пример
https://javarush.com/groups/posts/principy-oop
Вадим Малахов
Вадим Малахов
7 589
Лев Клебанов На практике ООП - это когда тонна повторяющегося говнокода превращается в 10 тонн говнокода, размазанного по 1000 классов.
Вы можете создать один класс и использовать его каждый раз когда необходимо, а не писать его каждый раз. Например если писать алгоритм открытия холодильника, у вас будет холодильник.открыть.на75градусов.держась за ручку... И еще кучу функций, а в ооп вы просто создаете класс открытие холодильника (градус){...}, и вызываете каждый раз когда его надо задавая наприпер градус открытия
Iiii op