В чем смысл ООП (объектно-ориентированного программирования)?

Сколько книг написано, а понять всё равно почему-то сложно, когда сталкиваешься с этим в первый раз. Да ладно в первый - я 10 лет писал на PHP, и всё равно до конца не понимал. Давайте быстро разберемся.

Что такое ООП, своими словами?

Первое, что хочется сказать: программирование состоит в управлении сложностью. Сложность решаемой проблемы накладывается на сложность машины, на которой эта проблема решается. То есть, чтобы запрограммировать что-то сложное, например, банковскую систему, нельзя взять в руки ассемблер и начать писать. Сложность такой фиговины будет так высока, что человек (или сотня человек, не важно) вряд ли вообще решит ее.

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

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

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

Принципы ООП

Академический подход к ООП по Алану Кею такой:

1) Всё является объектом

2) Программа - это набор объектов, указывающих друг другу, что делать, посредством системы сообщения (т.е. вызывая методы друг друга)

3) Каждый объект имеет "память", состоящую из других объектов (например, принтер может хранить данные о накладной, которую надо распечатать)

4) У каждого объекта есть тип

5) Все объекты определенного типа могут получать одинаковые сообщения (то есть взаимозаменяемые; например: два разных принтера могут получать команду, указывающую, что надо что-то распечатать)

 

Комментарии

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

DeveloperNotes.ru © 2018 — 2020