JavaRush /Курсы /Java Syntax Pro /Причины появления ООП

Причины появления ООП

Java Syntax Pro
8 уровень , 6 лекция
Открыта

1. История о компании

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

Жила-была небольшая компания, которая занималась доставкой товаров в космосе...

Назовем ее Galaxy Rush. И работало в ней 5 человек. Один занимался финансами, второй работал на складе, третий выполнял доставку, четвертый руководил рекламой, а пятый управлял всем этим.

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

И тут начались проблемы. Людей стало больше, и они начали друг другу мешать.

Маркетолог тратит все деньги на новую рекламную кампанию, и в кассе нет денег на закупку товара, который надо срочно отправлять.

На складе есть 10 коробок с новенькими гипер-двигателями, которые поставляют раз в месяц. Курьер полетел отвозить один гипер-двигатель, и заказ на 10 гипер-двигателей от другого клиента вынужден ждать еще месяц. Первый курьер просто не знал о другом заказе, который выполняет второй курьер.

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

Пытаясь проанализировать ситуацию, директор понял, что такие важные ресурсы, как корабль, наличность и товар расходуются не оптимально, а по принципу «кто первый встал — того и тапки». Любой мог взять нужный всем ресурс для своей работы, поставив при этом под удар остальных сотрудников, да и всю компанию в целом.

Нужно было что-то делать, и директор решил разделить монолитную компанию на несколько отделов. Появился отдел доставки, отдел маркетинга, отдел закупок, финансовый отдел и отдел запасов. Теперь уже никто не мог просто так взять корабль. Директор отдела доставки получал всю информацию о доставках и выдавал корабль тому курьеру, чей заказ был выгоднее для компании. Склад тоже не разрешал любому курьеру взять любой товар, а контролировал этот процесс. Финансовый отдел мог не дать денег на маркетинг, если знал, что скоро будет закупка. У каждого отдела было одно публичное лицо — его начальник. Внутреннее устройство каждого отдела было его внутренним делом. Если курьер хотел получить товар, он шел к начальнику склада, а не на склад. Если появлялась новая заявка, ее получал директор отдела доставки (public person), а не курьер (private person).

Другими словами, директор объединил в группы (отделы) ресурсы и действия над ними, а также запретил другим вмешиваться во внутреннюю структуру отделов. Контактировать можно было строго с определенным лицом.

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

Проблема была в том, что любой сотрудник мог бесконтрольно работать с любым ресурсом и отдавать команды любому человеку. Мы ввели небольшое ограничение, но получили больше порядка. А также смогли лучше контролировать все это.

Разделяй и властвуй в чистом виде.


2. Процесс создания программ

Хотелось бы затронуть еще один важный момент, который раскрывает еще одно преимущество ООП. Видите ли, программы больше напоминают не строения, а животных. Их не строят, их выращивают. Разработка — это постоянные изменения. В строительстве вы можете иметь хороший план и четко ему следовать. В случае с разработкой программ это не так.

Очень часто в программировании что-то нельзя сделать тем способом, который ты себе наметил вначале, и приходится многое переделывать. Еще чаще меняются требования заказчика.

А если заказчик проекта дал очень точную его спецификацию? Тогда все еще хуже. Взгляните на ситуацию с продуктом во времени.

Успех продукта приведет к тому, что заказчик захочет выпустить его новую версию, а затем еще и еще. И,конечно, нужно будет всего лишь добавить «небольшие изменения» в уже существующий продукт. Поэтому разработка продукта — это последовательность постоянных изменений. Только масштаб времени разный. Каждая новая версия может выходить раз в неделю, раз в месяц или раз в полгода.

И какой вывод можно сделать из всего этого? Внутреннюю структуру продукта нужно поддерживать в таком состоянии, которое позволит внести значительные (и не очень) изменения с минимальными переделками.

Связность объектов

Но сделать это сложнее, чем решить сделать. Мы уже говорили, что программа состоит из объектов, которые взаимодействуют между собой. Давайте нанесем на доску все объекты нашей программы, обозначив их жирными точками. И проведем от каждого объекта (точки) стрелочки ко всем объектам (точкам), с которыми он взаимодействуют.

Теперь мы будем объединять объекты (точки) в группы. Точки должны быть объединены в группу, если связи между ними гораздо интенсивнее, чем с остальными точками. Если большинство стрелочек от точки идет к точкам ее же группы, тогда разбиение на группы произошло правильно. Точки внутри одной группы мы будем называть сильно связанными, а точки из разных групп — слабо связанными.

Принцип слабой связности

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

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

Выбраны удачно. А что будет, если они выбраны неудачно? Тогда «запас изменений» быстро иссякнет и придется переделывать всю систему. Такое приходится делать время от времени. Нельзя предугадать, что будет в будущем, но можно свести количество переделок к минимуму.

Принцип Абстракции

Выбор структуры отделов и способа их взаимодействия — это «принцип Абстракции». В программировании он используется для определения, на какие части лучше разбить программу, и как эти части должны взаимодействовать. Данный принцип также можно применять к разделению полученных частей, пока мы не разобьем программу на отдельные классы.

А сокрытие внутренней структуры этих частей и жёсткие ограничения на взаимодействие с другими частями — это Инкапсуляция. Инкапсуляция + Абстракция — это краеугольные камни ООП. Хорошая программа обязана следовать этим двум принципам. В дальнейшем мы рассмотрим остальные принципы и поймем, какие преимущества они дают.

Комментарии (141)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Руслан Уровень 12
12 июля 2025
Очень хорошо обьяснили в видео суть ооп
Alexey Ulov Уровень 8
12 июля 2025
Поставьте лайк пожалуйста для достижения.
Anonymous #3585174 Уровень 16
8 июня 2025
like
w5277c Уровень 32
28 ноября 2024
Главная проблема в процессах создания программ - маркетинг. Развиваться в области разработки программ, грубо говоря, можно в двух направлениях - эмпирическом и теоретическом. Сейчас в моде только теоретическое - куча компаний зарабатывает хорошие деньги на обучении, сертификации и прочее. А быстрое железо и современный софт позволяет даже домохозяйке писать программы. Но для формирования прааавильных процессов создания программ нужно нечто большее - эмпирический подход, многолетний и всесторонний и он сильно отличается от теоретического. К сожалению этого очень многие не понимают, в том числе, особенно HR, вот поэтому мы и сталкиваемся с глючным софтом, который тормозит даже на современных машинах. Наше ИТ уже давно свернуло не туда, теперь это только способ выбивания бабла. Творчество, создание чего-то стоящего, создание шедевров - нет, это уже лишнее.
w5277c Уровень 32
28 ноября 2024
(C)Хочу рассказать вам одну историю - это просто стандартизация процессов и никакое не ООП. Хотя ООП это тоже стандартизация процессов. Не больше и не меньше. Носитесь с этим ООП как-будто это святой грааль. А по факту элементарный свод правил популярной модели реализации ПО.
Styuart Уровень 30
30 октября 2024
каждую лекцию я задаюсь вопросом: я должен все это учить наизусть или потом, в процессе обучения это все придет и уляжется в голове?? Пока что ощущение, что я не усваиваю лекции, знания, но задачки решаю.... а как у вас происходит процесс обучения?
Max Уровень 58
2 ноября 2024
Полиморфизм не совсем понятно, нужна практика. Законспектировал , дальше видно будет.
Илья Уровень 14
8 ноября 2024
Наизусть не нужно, нужно чтоб было понимание о чем речь. Многое уляжется в голове со временем, что-то просто не возможно и не нужно запоминать (например не нужно знать все методы какой-то библиотеки или класса -это все легко гуглится или можно смотреть через IDE).
Павел Уровень 16
15 ноября 2024
надо наизусть учить, однозначно. но не все конечно. Если не выучить и не повторять периодически или сразу не устроиться на работу, то через пару тройку месяцев половина вылетит из головы. надо ядро выучить
Амнистия Уровень 10
28 февраля 2025
надо делать так, как позволяет ваш мозг Если вы можете учить все подряд и не выгорать - супер правда я чет вижу, что на 15 уровне вы, все таки, видимо, выгорели)) Так что как знать
Rustam Уровень 26 Student
21 сентября 2024
Интересно изложили 👍
Раклов Сергей Уровень 13
18 августа 2024
Без примеров трудно усвоить, надеюсь дальше они будут.
i DoXa Уровень 16
7 августа 2024
Много букв 😂 ПРОЧИТАНО
Ruslan Machalov Уровень 14
1 мая 2024
Мне это нравится всё больше и больше) Каждый день узнаешь фишки, о которых даже не подозревал