Основы объектно-ориентированной технологии программирования Компьютерные методы моделирования оптических приборов кафедра прикладной и компьютерной оптики 2 Декомпозиция Декомпозиция – разделение сложной программной системы на меньшие подсистемы, каждую из которых можно создать и совершенствовать независимо Алгоритмическая декомпозиция – сложные или повторяющиеся действия выделяются в подпрограммы Объектно-ориентированная декомпозиция – явление или процесс представляется в виде совокупности объектов, каждый из которых является абстракцией реальных предметов, явлений, процессов. 3 Технология программирования Технология программирования – это набор правил, приемов и методов, которые помогут программисту описать и промоделировать процессы и явления реального мира Парадигма – набор правил и принципов для анализа явления или задачи, проектирования программы и непосредственно ее реализации на языке Объектно-ориентированная парадигма - взгляд на мир, когда явления, процессы выражаются в виде взаимодействий объектов 4 Принципы ООП Абстракция – формирование представления о свойствах и поведении предмета путем выделения существенных характеристик, отличающих его от других видов объектов Инкапсуляция – сокрытие внутреннего устройства, реализации объекта Сохраняемость – возможность объекта сохранить информацию о своём состоянии , а затем при необходимости восстановить его 5 Принципы ООП Наследование (иерархия) – такое отношение между классами, когда один объект заимствует структурную и функциональную часть другого Полиморфизм (типизация) – возможность принимать множество форм, изменять поведение в зависимости от ситуации Параллелизм – возможность параллельного сосуществования и взаимодействия объектов Модульность – возможность объединения и отделения набора объектов (организация предметных доменов) 6 Абстракция: объект Объект – абстракция множества предметов реального мира: все предметы имеют один и тот же набор характеристик все предметы подчинены и согласовываются с одним и тем же набором правил, нормами поведения, законами природы ОБЪЕКТ = набор характеристик + набор правил поведения Виды объектов: реальные объекты роли инцидент взаимодействия абстрактные объекты Примеры объектов: линза собирающая линза рассеивающая линза аберрация зрачок пучок лучей волновой фронт призма диафрагма источник приемник преломление отражение дифракция интерференция 7 Описание объекта Объект должен иметь: уникальное имя уникальное описание (короткое информативное утверждение, которое позволяет установить является ли реальный предмет экземпляром объекта данного типа или нет) Например, линза: Lens предмет изготовленный из оптического (т.е. прозрачного, однородного) материала, ограниченный двумя сферическими и одной цилиндрической поверхностью Lens 8 UML (Unified Modeling Language) UML – это язык (графическая система обозначений) для моделирования, то есть описания предметов и явлений с использованием системы обозначений графические обозначения помогают увидеть многое в малом, помогают мыслить и находить решения позволяет общаться и обсуждать проектные решения с другими разработчиками (не обязательно программистами) упрощает документирование проекта позволяет в ёмкой и точной форме выразить сложные вещи, при этом не способствует бюрократии и оставляет свободу выбора уровня конкретизации документации 9 Атрибуты объекта Атрибут – абстракция одной характеристики, которой обладают все абстрагированные как объект предметы уникальное имя тип данных Lens r2 r1 h n -m_r1 : double -m_r2 : double -m_d : double -m_n : double -m_h : double -m_ID : int -m_ID_OS : int d Типы атрибутов: описательные – представляют факты внутренне присущие каждому экземпляру объекта указывающие – используются для присвоения имени или обозначения экземпляров вспомогательные – используются для обеспечения связи экземпляра одного объекта с экземпляром другого 10 Жизненный цикл объекта Состояние – набор всех свойств (атрибутов) данного объекта, которые имеют конкретные значения. Переход из состояния в состояние представляет собой инцидент событие Состояние – стадия в жизненном цикле объекта Создание объекта Событие 1 Состояние 1 Разрушение объекта Состояние 2 Событие 2 11 Поведение объекта ОБЪЕКТ = АТРИБУТЫ + ПОВЕДЕНИЕ Конструктор – операция создания объекта и инициализации его атрибутов Деструктор – операция, освобождающая используемые объектом ресурсы и разрушающая его Утилита – операция высокого уровня выполняющая те или иные действия в зависимости от сущности объекта (RayTrace) Lens -m_r1 : double -m_r2 : double -m_d : double -m_n : double -m_h : double -m_ID : int -m_ID_OS : int +Lens() +~Lens() +...() +SetR1(in r1 : double) : void +GetR1() : double +...() +Power() : double +...() +RayTrace(inout ray : Ray, in n0 : double, in n2 : double) : bool +...() -Refraction(inout ray : Ray, in n : double, in n_ : double) : bool -Transfer(inout ray : Ray) : bool 12 Поведение объекта Модификатор – операция, которая изменяет состояние объекта (clear, pop, push, remove, set) Селектор – операция, считывающая состояние объекта, но не меняющая (length, height, width, isEmpty, getX, getY) Итератор – операция, позволяющая организовать доступ ко всем частям объекта в строго определенной последовательности (first, last, next, previous) Lens -m_r1 : double -m_r2 : double -m_d : double -m_n : double -m_h : double -m_ID : int -m_ID_OS : int +Lens() +~Lens() +...() +SetR1(in r1 : double) : void +GetR1() : double +...() +Power() : double +...() +RayTrace(inout ray : Ray, in n0 : double, in n2 : double) : bool +...() -Refraction(inout ray : Ray, in n : double, in n_ : double) : bool -Transfer(inout ray : Ray) : bool 13 Инкапсуляция Никакая часть сложной системы не должна зависеть от внутреннего устройства какой-либо другой части: объект –“черный ящик” class ИМЯ { private: ... protected: ... public: ... } пользователи функции-члены и друзья производных классов public protected private функции-члены и друзья самого класса 14 Сохраняемость Сохраняемость – способность объекта существовать во времени, переживая породивший его процесс, и в пространстве, перемещаясь из своего первоначального адресного пространства Сериализация – сохранение информации о состоянии объекта, с последующей возможность его восстановления void Lens::write(ostream& out) const { cout<<m_R1<<m_R2<<m_d<<m_D<<m_n; } void Lens::read(istream& in) { cin>>m_R1>>m_R2>>m_d>>m_D>>m_n; } 15 Параллелизм Параллелизм – возможность сосуществования и параллельного взаимодействия в системе любого количества объектов Виды взаимоотношений между объектами: ассоциация агрегация наследование 16 Ассоциация Ассоциация – наиболее общее отношение между объектами: объекты каким-то образом взаимодействуют OS Ray 17 Кратность ассоциации Кратность показывает сколько классов участвует или может участвовать во взаимоотношении Lens Medium 1 Ray 1 * OS Ray 1 1 * OS OS Lens Lens 1 * 1 1 * OS 1 Medium 1 1 * Medium * 18 Использование Использование - это равноправная связь между экземплярами классов ("клиент/сервер") Lens Window RayTracing OS Ray 19 Агрегация Агрегация – это такое отношение между классами, когда один из них является частью другого ("целое/часть") Композиция – наиболее сильная степень агрегации, при которой один экземпляр объекта незаменим и неотделим от другого Surface OS Lens Align Medium 20 Наследование Наследование – такое отношение между классами, когда один из них заимствует описание атрибутов и характеристики другого ("родитель/наследник", "общее/частное“) Detail Lens Mirror Prizm Grid Spherical surface Detail #D : double ... Fresnel Lens Mirror Lens -R1 : double -R2 : double -d : double -n : double Spherical mirror 21 Полиморфизм Полиморфизм – возможность принимать множество форм, иметь разный смысл в зависимости от ситуации Абстрактый объект – объект, у которого не может существовать экземпляра, только наследники Абстрактный метод – метод, который реализовывается только в наследниках Detail #D : double +RayTrace() +Draw() 22 Параметрический полиморфизм Параметрический полиморфизм – позволяет многократно использовать один и тот же код применительно к разным типам PAR Matrix -m_data : PAR* +SetValue(in value : PAR, in i : int, in j : int) : void +GetValue(in i : int, in j : int) : PAR Классы библиотеки STL: vector<double>, list<int> … 23 Модульность Модульность – позволяет объединить взаимодействующие объекты в пакеты и рассматривать одни наборы объектов независимо от других RayTracing Aberration Optimization 24 Список литературы Родионов С. А. Автоматизация проектирования оптических систем -Л. Машиностроение, Ленингр. отд-ние, 1982. Буч Г. Объектно-ориентированное проектирование с примерами приложений на С++ -М.: "Издательство Бином", СПб: "Невский диалект", 1998. Фаулер М., Скотт К. UML. Основы (2-е издание) -СПб.: Символ-Плюс. 2001. книги на диске example электронные учебники на сайте кафедры