Распечатать страницу | Назад к предыдущей теме
Название форумаНовая Хронология
Название темыRE: А что такое объектно-ориентированное програм...
URL темыhttps://chronologia.org/dc/dcboard.php?az=show_topic&forum=263&topic_id=905&mesg_id=938
938, RE: А что такое объектно-ориентированное програм...
Послано очевидневероят, 04-01-2006 14:37
>Вы может программисту объяснить на примере
>(упаси бог - не абстрактно!) в чем суть ООП?


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

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

Пример.

Пусть есть переменная памяти, ответственная за отображение цвета, и она для правильного отображения цвета должна принимать только значения от 0 до 3, но размер отведённой памяти допускает внесение в эту ячейку значений от 0 до 255. Таким образом программист для задания цвета может просто занести в эту переменную значение от 0 до 3, а для уменьшения ошибок программирования:

-- в не-ООП-компиляторе для переменных типа "цвет" разрабатывалась библиотека функций/процедур, глобальных констант и переменных примерно такого типа:

void цвет_установить (переменная, цвет_номер); /* процедура для задания цевта */
int цвет_узнать (переменная); /* функция для получения цвета */
#define цвет_номер_чёрный 0 /* константа -- чёрный цвет */
#define цвет_номер_белый 1 /* константа -- белый цвет */
int цвет_текущий; /* глобальная переменная */

и рекомендовалось использовать только эти функции/процедуры

-- в ООП-компиляторе для переменных типа ("класса") "цвет" разрабатывается библиотека функций/процедур ("методов") и переменных ("свойств") (константы остаются обычными константами) примерно такого типа:

class цвет {
void установить (цвет_номер); /* метод для задания цевта */
int узнать (); /* функция для получения цвета */
int текущий; /* переменная */
};

и соблюдение использования только эти функций/процедур полагается на компилятор.

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