Основы объектно-ориентированной технологии программирования Моделирование оптических систем кафедра

advertisement
Основы объектно-ориентированной
технологии программирования
Моделирование оптических систем
кафедра
прикладной и компьютерной оптики
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()
Диаграммы последовательности
Download