Поздравляем вас с завершением шестого, самого короткого, уровня CS50! Думаем, переход от всех этих указателей и структур данных к более наглядному веб-программированию дался вам легко! К тому же в этом уровне не было практического задания, и у вас как раз появилось время подвести итоги первой половины курса. Если вы уже решили, что программирование вам интересно, вам определённо стоит попробовать Java!

Синтаксис этого языка похож на Си, но он следует совсем другой парадигме программирования — объектно-ориентированной. Это когда всё-всё в программе представляется как объект, у которого есть состояние и поведение.

Все вещи в физическом мире состоят из атомов. Атомы могут быть разных типов: водород, кислород, железо, уран, … Комбинируя такие атомы можно создавать различные молекулы, вещества и предметы. В мире Java все очень похоже. Программы состоят из объектов, которые бывают разных типов (классов). Различные классы в свою очередь имеют различную внутреннюю структуры: переменные и методы.

Но чем же плох был подход Си, где главной структурой программы была функция? Пользу ООП начинающим программистам понять сложно. Тем не менее, попытаемся вам объяснить, приведя часть лекции из курса JavaRush:

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

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

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

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

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

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

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

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

Благодаря такому разделению и ограничению в компании воцарил порядок. А также смогли лучше контролировать все это».

Сработал принцип «разделяй и властвуй», который вы уже неоднократно встречали в CS50!

Хотите знать больше про ООП? Присоединяйтесь к курсу JavaRush!