Home » Articles » Programming docs |
[ Исходный код yandex.disc (107 Кб) ] Автор: Mr2 ООП в действии: ОО парадигма хороша для больших программ, с перспективами изменения и расширения. Термены: Класс от которого производится наследование: Базовый класс, родительский класс. Класс который наследует: Производный класс, cуб класс, дочерний класс. Функции класса: Функция член, метод класса, интерфейс. Базовые элементы: Класс – самостоятельный программный модуль.(кусок кода и данных)
Инкапсуляция: Инкапсуляция – сокрытие данных.(блокировка прямого доступа к данным класса)
Абстракция: Абстракция – общее свойство объединяющее все суб классы.
Интерфейс: Интерфейс – способ взаимодействие с классом.(изменение данных класса)
Наследование: Наследование – модификация базового класса, или сборка суб класса, из нескольких классов(множественное наследование).
Полиморфизм: Полиморфизм – вытекает из наследования, позволяет использовать единые методы для суб классов(имеющих одининаковый базовый класс), работающие по-разному. Причём делается это автоматически, без каких либо проверочных условий со стороны пользователя. Как всё это работает: Для примера возьмём код отображения изображений различных форматов. Создадим абстрактный класс imageFormat, который будет содержать общие для изображений методы, и виртуальные методы, которые будут работать по разному для разных форматов.
* Присвоение виртуальным функциям нуля, говорит о том что класс абстрактный, и мы не сможем создать объект этого класса. Теперь наследуем абстрактный класс imageFormat, конкретными классами imageBMP и imagePNG. В классах imageBMP и imagePNG, мы определили виртуальным функциям специфичную реализацию, для каждого из форматов. То есть вызов load\show будет одинаковым для обоих объектов, но работать они будут по-разному. Напишем также две специальные функции для создания объектов изображения нужного формата:
Создаём конкретный объект, но работаем с ним как с абстрактным: Так как работа производится через интерфейсы, можно добавлять новые форматы изображений , не меняя логику работы с ними.(допустим создать и отобразить jpg изображение) * В больших программах внесение небольших изменений, может потребовать гигантской работы. Механизмы ООП во многом решают эту проблему. Реализация функций создания объекта изображения: getImageObj - скрывает создание конкретных объектов, и сосредотачивает область изменений кода в одной точке программы. То есть, чтобы добавить создание нового объекта, достаточно написать новый case в switch. Если бы switch был разбросан в разных местах программы, нужно было бы править каждый из них. Вот так будет выглядеть вывод изображения, в зависимости от прочитанного формата изображения в заголовке файла: Итог: Мы создали абстрактный класс imageFormat , в котором определили:
Написали классы конкретных форматов: imageBMP и imagePNG. Переопределили поведение суб классов в методах: load, show. Создали объект нужного формата, через специальную функцию getImageObj . Написали единый код для всех суб классов, работающий с созданными функцией getImageObj объектами. Паттерны проектирования - проектирование объектно-ориентированных программ с использованием проверенных решений. | |||||||||
Views: 914 | | |
Total comments: 0 | |