938, RE: А что такое объектно-ориентированное програм... Послано очевидневероят, 04-01-2006 14:37
>Вы может программисту объяснить на примере >(упаси бог - не абстрактно!) в чем суть ООП?
Мне не очень ясно, как пришить суть ООП к теме, но чтобы завершить это ответвление, предлагаю следующий вариант. ООП -- это концепция (парадигма), согласно которой программист должен оперировать не просто переменными памяти, а такими переменными, для которых предусмотрены определённые функции/процедуры. Для данных переменных программист не должен использовать никакие другие функции/процедуры, кроме предназначенных именно для этих переменных (точнее типов переменных). Очевидно, что качественное программирование подразумевает такое программирование по умолчанию, но старые компиляторы в принципе допускают "несанкционированное" использование непредусмотренных функций/процедур. Это нежелательное разрешение старых компиляторов обходилось тем, что в библиотеке функций/процедур именам функций/процедур приписывался признак (обычно префикс), указывающий на тип переменных, для которых предназначена данная функция/процедура, а в документации к библиотеке настоятельно рекомендовалось для данного типа использовать только данные функции/процедуры. В ООП-компиляторах отслеживание использования только предусмотренных функций/процедур помещено на сам компилятор. Пример. Пусть есть переменная памяти, ответственная за отображение цвета, и она для правильного отображения цвета должна принимать только значения от 0 до 3, но размер отведённой памяти допускает внесение в эту ячейку значений от 0 до 255. Таким образом программист для задания цвета может просто занести в эту переменную значение от 0 до 3, а для уменьшения ошибок программирования:
-- в не-ООП-компиляторе для переменных типа "цвет" разрабатывалась библиотека функций/процедур, глобальных констант и переменных примерно такого типа: void цвет_установить (переменная, цвет_номер); /* процедура для задания цевта */ int цвет_узнать (переменная); /* функция для получения цвета */ #define цвет_номер_чёрный 0 /* константа -- чёрный цвет */ #define цвет_номер_белый 1 /* константа -- белый цвет */ int цвет_текущий; /* глобальная переменная */
и рекомендовалось использовать только эти функции/процедуры
-- в ООП-компиляторе для переменных типа ("класса") "цвет" разрабатывается библиотека функций/процедур ("методов") и переменных ("свойств") (константы остаются обычными константами) примерно такого типа:
class цвет { void установить (цвет_номер); /* метод для задания цевта */ int узнать (); /* функция для получения цвета */ int текущий; /* переменная */ };
и соблюдение использования только эти функций/процедур полагается на компилятор. Все остальные качество ООП (инкапсуляция, наследование, полиморфизм, конструктор, деструктор, переопределение операторов и методов, специальный указатель "на себя") -- это логичное следствие такого взгляда на вещи. Таким образом, ООП -- это не новый и не более лёгкий способ программирования (обязанность программировать методы -- аналог библиотечных функций/процедур -- никуда не исчезла), а переложение на компилятор обязывания программистов программировать качественно. Одним словом, ООП -- это обычное программирование с наворотами для лентяев и для начинающих.
|