Основы объектно-ориентированной технологии программирования Моделирование оптических систем кафедра прикладной и компьютерной оптики 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 электронные учебники на сайте кафедры Лабораторная работа №1. Вычисление параксиальных характеристик линзы Моделирование оптических систем кафедра прикладной и компьютерной оптики 26 Задание для работы Создать приложение на основе диалогового окна, вычисляющее параксиальные характеристики линзы. Организация вычислений Для выполнения задания создать классы, представленные на диаграмме. Последовательность вычислений указана на диаграмме последовательности. Литература: Родионов С.А. Основы оптики. Конспект лекций. – СПб ГИТМО (ТУ), 2000. (aco.ifmo.ru/opt_basics/) – Глава 6. Матричная теория Гауссовой оптики. Родионов С.А. Автоматизация проектирования оптических систем. §14. Расчет хода действительных лучей через оптическую поверхность. 27 Задание для работы Входные данные: радиусы кривизны поверхностей линзы показатель преломления линзы толщина линзы по оси световые высоты на поверхностях Результаты вычислений параксиальные характеристики вывести в отдельное диалоговое окно проверить правильность вычислений при помощи программы ОПАЛ 28 Surface Lens #m_h : double +Surface() +~Surface() +SetH(in h : double) +GetH() : double +GetTransformMatrix(out transform : &matrix<double>, in n : double, in n_ : double) : void SphericalSurface -m_r : double +GetTransformMatrix(out transform : &matrix<double>, in n : double, in n_ : double) : void +SphericalSurface() +~SphericalSurface() +SetR(in r : double) : void +GetR() : double -m_d : double -m_n : double -m_surface1 : SphericalSurface -m_surface2 : SphericalSurface +Lens() +~Lens() +AccessSurface1() : SphericalSurface& +GetSurface1() : const SphericalSurface& +AccessSurface2() : SphericalSurface& +GetSurface2() : const SphericalSurface& +SetN(in n : double) : void +GetN() : double +SetThickness(in d : double) : void +GetThickness() : double +CalculateParaxial(out paraxial : &Paraxial) : void matrix<double> DlgLens Paraxial DlgParaxial -m_paraxial : Paraxial +OnButtonCalculate() : void +m_F : double +m_F_ : double +m_SF : double +m_SF_ : double +m_SH : double +m_SH_ : double +Paraxial() +~Paraxial() Диаграммы классов 29 lensDlg paraxial lens m_surface1 m_surface2 OnButtonCalculate Paraxial() Lens() SphericalSurface() SphericalSurface() CalculateParaxial() GetTransformMatrix() GetTransformMatrix() Диаграммы последовательности