Технология программирования
Принципы объектно-ориентированного подхода
Принципы объектно-ориентированного подхода
Принципы объектно-ориентированного подхода
Принципы объектно-ориентированного подхода
Основные понятия объектного моделирования
Основные понятия объектного моделирования
Основные понятия объектного моделирования
Основные понятия объектного моделирования
Основные понятия объектного моделирования
Объекты
Объекты
Объекты
Классы
Классы
Наследование
Наследование
Наследование
Наследование
Наследование
Ассоциация
Агрегация
Реализация (realization/implementation)
Зависимость
Зависимость
Пакеты
Диаграммы UML
Описание статической структуры
Описание статической структуры
Диаграммы последовательности
Диаграммы последовательности
Описание вариантов использования
Описание дискретных автоматов
Описание активности
Описание взаимодействия
Описание взаимодействия
Описание взаимодействия
Описание взаимодействия
Описание размещения
Описание проектных решений
Описание проектных решений
Основные принципы детального проектирования
Основные принципы детального проектирования
Основные принципы детального проектирования
Принципы упаковки классов в архитектурные подсистемы
Документирование процесса проектирования
Документирование процесса проектирования
Документирование процесса проектирования
Документирование процесса проектирования
Документирование процесса проектирования
4.26M
Категория: ПрограммированиеПрограммирование

Технология программирования. Основы объектно-ориентированного моделирования

1. Технология программирования

Основы объектноориентированного
моделирования

2. Принципы объектно-ориентированного подхода

Принципы объектноориентированного подхода
Объектно-ориентированный анализ – это
методология системного анализа,
направленная на создание моделей, близких
к реальным явлениям. Требования к
проектируемой системе формируются на
основе понятий (классов и объектов),
составляющих словарь предметной области
(термины предметной области, необходимые
для рассматриваемой задачи)

3. Принципы объектно-ориентированного подхода

Логическая модель: структуры
классов и структуры объектов
Физическая модель: архитектура
модулей и архитектура процессов
Логическая
модель
Статическая
модель
Объектно-ориентированное
проектирование – это методология
проектирования на основе
объектной декомпозиции и объектного
синтеза логической модели,
физической модели, статической
модели и динамической модели
проектируемой системы
Логическая
модель
Логическая
модель
Физическая
модель
Динамическая
модель
Принципы объектноориентированного подхода
Модели объектно-ориентированного
проектирования

4. Принципы объектно-ориентированного подхода

Принципы объектноориентированного подхода
Объектно-ориентированное
программирование – методология
программирования, которая основана
на представлении программы в виде
совокупности объектов, каждый из
которых является реализацией
определенного класса, а классы
образуют иерархию наследования

5. Принципы объектно-ориентированного подхода

Принципы объектноориентированного подхода
Взаимосвязь анализа, проектирования и программирования
Объектноориентированный
анализ
Модели
реального
мира
Объектноориентированное
проектирование
Модели
проектируемой
системы
Объектноориентированное
программирование
Программная
система

6. Основные понятия объектного моделирования

1. Абстрагирование
struct Point {int x, int y};
class Figure
{
private:
Point _center;
public:
Figure();
void SetCenter(Point center);
virtual void Draw();
virtual void Hide();
Point GetCenter();
}

7. Основные понятия объектного моделирования

2. Инкапсуляция (ограничение доступа)
Point point = {1,3};
Figure figure;
figure.SetCenter(point);
figure.Draw();
figure._center = point; // Ошибка, т.к. ограничение доступа

8. Основные понятия объектного моделирования

3. Модульность
x.h
int g();
Раздел
интерфейса
Головная
процедура
class X
{
public:
int f()
}
Раздел
реализации
#include”x.h”
const int c=3;
int g()
{
return c;
}
#include “x.h”
void main()
{
int i=g();
X x;
i = x.f();
int X::f()
{
}
return c*f();
main.cpp
main.exe
x.obj
}
Физические модули: компонент, пакет (физическая группировка) x.cpp
Логические модули: класс, подсистема (логическая группировка)
Характеристики: связность модуля, сцепление модулей

9. Основные понятия объектного моделирования

4. Иерархия
Иерархия классов
Иерархия объектов
MotorCar
a : PassengerCar
-velocity
-engine : Engine
+Drive()
velocity = 20
engine : Engine
passenger : Person[]
Mike : Person
PassengerCar
Truck
-passenger : Person[]
-weight
-bodyCapacity
Engine
Nick : Person
: PetrolEngine
b : Truck
velocity
engine : Engine
PetrolEngine
Diesel
: Diesel
Person

10. Основные понятия объектного моделирования

class Engine {float power;}
class PetrolEngine : public Engine {}
class DieselEngine : public Engine {}
class Person {}
class MotorCar
{
double velocity;
Engine engine;
public:
void Drive() {}
}
class PassengerCar : public MotorCar
{
Person passengers[];
}
class Truck : public MotorCar
{
double weight;
double bodyCapacity;
}

11. Объекты

Объект – это сущность, обладающая
индивидуальностью, состоянием и
поведением
Изменение состояния объекта
a : PassengerCar
velocity = 20
engine : Engine
passengers : Person[] = {p1, p2}
Поведение объекта
b : PassengerCar
Cr
us
Ac h (m
ce o
l e r sq
at ito
e )
client
a : PassengerCar
velocity = 0
engine : Engine
passengers : Person[] = {p1}
PassengerCar
-velocity
-engine : Engine
-passengers : Person[]
+PassengerCar()
+~PassengerCar()
+GetVelocity() : double
+Accelerate(in newVelocity)
+Crush(inout bug)
class Stack
{
private:
int top;
int *s;
int size;
public:
void Push(int i);
int Pop();
int IsEmpty();
int IsFull();
void Copy(Stack *other);
Stack(int sz);
~Stack();
}

12. Объекты

Индивидуальность объекта
r : Stack
s[]
top : int = 3
s : int[]
size : int = 100
Stack r(100);
Stack q(300);
// …
q = r;
q : Stack
top : int = 1
s : int[]
size : int = 300
s[]
После
q=r;
r : Stack
top : int = 3
s : int[]
size : int = 100
q : Stack
top : int = 3
s : int[]
size : int = 100
s[]

13. Объекты

Связь
s1:Sensor
getValue()
:Valve
:Controller
setValue()
s2:Sensor
Отношения:
Связь – взаимодействие между
экземплярами сущностей
Агрегация (агрегация по ссылке,
разделяемая агрегация) отношение «часть-целое»
Композиция (агрегация по
значению) – строгая форма
агрегации, агрегируемый объект
принадлежит только одному
агрегату. Связаны жизненные
циклы.
getValue()
Агрегация
m : PassengerCar
velocity
engine : Engine
passengers : Person[]
p2 : Person
e : Engine
p1 : Person

14. Классы

Класс – это описание структуры и
поведения объектов, имеющих одинаковые
свойства, поведение и семантику
MotorCar
-velocity
-engine : Engine
+MotorCar()
+~MotorCar()
+GetVelocity() : double
+Accelerate(in newVelocity)
+Crush(inout bug)
AE3451
YS7688
velocity
engine : Engine
weight
bodyCapacity
velocity
engine : Engine
passengers : Person[]
QU4324
velocity
engine : Engine
passengers : Person[]

15. Классы

Отношения (relationship) между классами:
Наследование (inheritance, generalization) –
отношение при котором один класс разделяет
структуру и поведение другого класса
Ассоциация (association) – описание связей между
экземплярами классов
Реализация (implementation) – отношение между
интерфейсом и классом, его реализующим
Зависимость (dependency) – отношение между
классами, при котором изменения в одном классе
приводят к изменениям в другом классе
(наследование, ассоциация и реализация – частные
случаи отношения зависимости, имеющие особое
назначение и специальную нотацию)

16. Наследование

При наследовании подкласс может :
добавлять поля
добавлять методы
переопределять методы
замещать методы
уточнять методы
Принцип подстановки:
Экземпляр подкласса может быть
использован при тех же условиях, при
которых используется экземпляр
суперкласса

17. Наследование

class Figure
{
int _x, _y;
public:
virtual void Show() = 0;
virtual void Hide() {/*…*/ };
void Move(int x, int y) {
Hide();
_x=x; _y=y;
Show();
}
};
class Circle: public Figure
{
// добавление поля
int _radius;
public:
// замещение метода (реализация)
virtual void Show() {/*…*/ };
};
class Face: public Circle
{
int _eyeColor;
public:
// замещение метода
void Show();
// переопределение метода
void Move(int x, int y) {/*…*/}
// добавление метода
virtual void CloseEyes();
};

18. Наследование

int main()
{
Circle *cPtr;
cPtr=new Face; // фактический объект класса Face
cPtr->Show(); // вызывается метод Face::Show()
cPtr->Move(10,20); // вызывается Figure::Move(), так как невиртуальное
// замещение, а в нем методы Face::show() и
// Face::hide() в соответствии с фактическим
// классом объекта *cPtr.
// cPtr->closeEyes(); // ошибка компиляции
delete cPtr;
// ...
}

19. Наследование

Уточнение метода
class Circle: public Figure
{
virtual void Show()
{/*рисование окружности*/ };
};
class Face : public Circle
{
virtual void Show()
{
/* рисование глаз */
Circle::Show();
/* рисование рта и ушей */
};
};
int main()
{
Face face;
face.Show(); // вызывается также
// Circle::Show()
}
В С++ уточнение реализовано для
конструкторов и деструкторов

20. Наследование

Абстрактность и
полиморфизм

21. Ассоциация

class Controller
{
private:
Sensor _sensor[];
}
class Sensor
{
// нет ссылки на Conroller
}
Конец ассоциации:
- Прослеживаемость (navigability)
- Множественность (multiplicity)
- Имя роли в ассоциации (rolename)
- Ограничение видимости (visibility)
Valve
Sensor
1..*
Управляет
-измеритель
*
1
-вычислитель
Controller
0..1
class Job
{
public:
Company* company;
Person* person;
double salary;
}

22. Агрегация

PassengerCar
Engine
-passengers : Person[]
+PassengerCar()
+~PassengerCar()
Указывать надо или атрибут,
или сущность
1
*
-passengers
Person
+name()
1
1

23. Реализация (realization/implementation)

LinkedList
-_head : Element*
спецификация
«interface»
IList
+add(in item)
+remove(in item)
+insertAt(in index, in item)
+add(in item)
+remove(in item)
+insertAt(in index, in item)
реализация
LinkedList
-_head : Element*
IList
+add(in item)
add(in item)
+remove(in item)
remove(in item)
+insertAt(in index, in item)
insert()
DoubleLinkedList
DoubleLinkedList
-_front : Element*
-_back : Element*
+add(in item)
+remove(in item)
+insertAt(in index, in item)
class IList
{
public:
virtual void add(string& item) = 0;
virtual void remove(string& item) = 0;
virtual void insertAt(int index, string& item) = 0;
}
-_front : Element*
-_back : Element*
IList
+add(in item)
add(in item)
remove(in item) +remove(in item)
insert()
+insertAt(in index, in item)
class LinkedList : public IList
{
private:
Element* _head;
public:
void add(string& item)
{… Element * p = new Element(item) … }
void remove(string& item) {… delete p; …}
void insertAt(int index, string& item) { … }
}

24. Зависимость

Стереотипы отношения зависимости:
<<bind>> – назначение параметров шаблонному
классу для получения нового конкретного класса
<<call>> – метод одного класса вызывает операцию
другого класса
<<create>> – один класс создает экземпляр другого
класса
<<permit>> или <<friend>> – разрешение одному
классу использовать реализацию другого класса
<<use>> - общее обозначение

25. Зависимость

T
Array
List
«permit»
Element
Factory
+Create() : Product
class List;
class Element
{
friend class List;
}
class List
{
Element* _head;
}
«create»
Product
+operator[]() : T
«bind»(float)
+operator[]() : float
class Product
{
public:
Product() {}
}
class Factory
{
public:
Product Create()
{
return Product();
}
}
«bind»(int)
+operator[]() : int
template<class T>
class Array
{
public:
T operator[](int i) {…}
}
void main()
{
Array<int> intArray;
Array<float> floatArray;
// …
}

26. Пакеты

Пакет – механизм общего назначения для
распределения программных элементов по группам с
установлением владельца, а также средства для
предотвращения конфликтов имен
Top
Package::P1
C1
namespace P1
{
class С1 {}
P1::P2
C1
P1::P3
namespace P2
{
class C1 {}
}
}
int main()
{
P1::C1 x1;
P1::P2::C1 x2;
}

27. Диаграммы UML

Представление (View) – это подмножество конструкций UML, отражающих
один аспект системы.
Описание статической структуры (Static View)
Описание вариантов использования (Use
Case View)
Описание дискретных автоматов (State
Machine View)
Описание активности (Activity View)
Описание взаимодействия (Interaction View)
Описание размещения (Deployment View)
Описание проектных решений (Design View)
Рисунки из
Rumbaugh J., Jacobson I., Booch G. The Unified Modeling Language Reference
Manual. – 2nd ed. Addison-Wesley. 2005

28. Описание статической структуры

Диаграммы
классов

29. Описание статической структуры

Диаграмма объектов

30.

Диаграммы коммуникации

31.

Диаграммы коммуникации
В языке UML моделируются следующие разновидности
действий.

32.

Диаграммы коммуникации
Для записи сообщений в языке UML принят следующий
синтаксис:
имя Атрибута = имяСообщения (Аргументы):
ВозвращаемоеЗначение,
где имяАтрибута задает атрибут, куда помещается
возвращаемое значение.

33.

Диаграммы коммуникации
Поток синхронных сообщений.
Поток асинхронных сообщений.

34.

Диаграммы коммуникации
Итерация и ветвление.

35.

Диаграммы коммуникации
Для формирования диаграммы коммуникации
выполняются следующие действия:
1) отображаются участники взаимодействия;
2) рисуются связи, соединяющие этих участников;
3) связи помечаются сообщениями, которые посылают и
получают определенные участники.

36.

Диаграммы коммуникации
Диаграмма коммуникации системы управления полетом.

37.

Диаграммы последовательности
Диаграммы последовательности системы управления полетом.

38.

Диаграммы последовательности
Создание и
уничтожение
обобщенного
объекта.
Вложение
спецификаций
выполнения
(активаций)

39. Диаграммы последовательности

Наиболее популярны следующие
комбинированные фрагменты:
Использование взаимодействия (interaction use)
Цикл (ключевое слово loop).
Условный фрагмент (ключевое слово alt)
Необязательный фрагмент (ключевое слово opt)
Параллельный фрагмент (ключевое слово par)

40.

Диаграммы последовательности
Диаграмма
последовательности с
вложенными
фрагментами.

41. Диаграммы последовательности

Ограничения на количество итераций фрагмента-цикла
указываются в скобках после ключевого слова loop:
loop
lоор(количество)
lоор(мин, макс)
минимум = 0, максимум неограничен
минимум = максимум = количество
явное задание минимальной и максимальной грани
Границы числа итераций

42.

Диаграммы последовательности
Состояние объекта на диаграмме последовательности.

43. Описание вариантов использования

44. Описание дискретных автоматов

Диаграмма переходов состояний
[amount <= $25] – так правильно

45. Описание активности

46. Описание взаимодействия

Figure 9-2. Classifiers
Описание взаимодействия
Классификатор – модельный элемент, который описывает
поведенческие свойства (в виде операций) и
структурные свойства (в виде атрибутов).
Классификаторами являются: класс, интерфейс,
компонент, вариант использования, подсистема, узел
размещения и т.д.

47. Описание взаимодействия

Диаграмма
последовательности

48. Описание взаимодействия

Диаграмма
последовательности
с детализацией
выполнения

49. Описание взаимодействия

Коммуникационная диаграмма

50. Описание размещения

Диаграмма
размещения

51. Описание проектных решений

Структурированный класс
Структурированный класс с портами

52. Описание проектных решений

Описание
сотрудничества
объектов
Использование
шаблона

53. Основные принципы детального проектирования

Принцип открытия-закрытия Бертрана Мейера (ОСР —
The Open-Closed Principle)

54. Основные принципы детального проектирования

- Принцип подстановки Барбары Лисков (LSP — Liskov
Substitution Principle)
- Принцип инверсии зависимостей Роберта Мартина
(DIP — Dependency Inversion Principle)
- Принцип отделения интерфейса (ISP — Interface
Segregation Principle)

55. Основные принципы детального проектирования

- Принцип инверсии зависимостей
Роберта Мартина (DIP — Dependency
Inversion Principle)

56. Принципы упаковки классов в архитектурные подсистемы

- Принцип эквивалентности повторного применения (REP Release Reuse Equivalency Principle). Уровень детализации
повторного применения (reuse) должен соответствовать
желаемому уровню детализации новой версии.
- Принцип общего закрытия (ССР — Common Closure
Principle). Классы, входящие в состав пакета, должны быть
закрыты по отношению к одним и тем же изменениям.
Изменение, влияющее на пакет, оказывает воздействие на
все классы этого пакета, не затрагивая другие пакеты.
- Принцип общего повторного применения (CRP — Common
Reuse Principle). Классы, входящие в состав пакета, повторно
применяются совместно. Если вы повторно применяете один
из классов пакета, вы повторно применяете их все.

57. Документирование процесса проектирования

Стандарт IEEE Std 1016-2009 «Systems Design — Software
Design Descriptions» предлагает документировать весь этап
проектирования с помощью описания программного
проектирования (SDD — software design description).
Стандарт определяет следующие точки зрения:
□ Контекстная точка зрения. Отражает услуги, оказываемые
пользователям и другим заинтересованным лицам,
взаимодействующим с системой. Система рассматривается
как черный ящик.
□ Композитная точка зрения. Описывает систему как
структуру, состоящую из нескольких частей, и определяет
роль каждой части.

58. Документирование процесса проектирования

□ Логическая точка зрения. Выявляет существующие и
проектируемые типы, а также их реализацию (классы и
интерфейсы, их структурные статические отношения). Могут
использоваться экземпляры типов.
□ Точка зрения зависимостей. Определяются отношения
взаимодействия и доступа отдельных сущностей. Эти
отношения описывают разделяемую информацию, порядок
выполнения, параметры интерфейсов.
□ Информационная точка зрения. Точка зрения применима,
если ожидается присутствие персистентных (устойчивых)
данных.

59. Документирование процесса проектирования

□ Точка зрения с использованием паттернов.
Рассматривается сотрудничество паттернов, их абстрактные
роли и соединения.
□ Интерфейсная точка зрения. Обеспечивает
проектировщиков, программистов и тестировщиков
информацией о правильном использовании сервисов
системы. Здесь описываются детали внешних и внутренних
интерфейсов, не заданные в спецификации требований.
Предлагается набор интерфейсных описаний для каждой
сущности.
□ Структурная точка зрения. Используется для
документирования внутренних составляющих частей и
организации системы в терминах элементов.

60. Документирование процесса проектирования

□ Точка зрения взаимодействий. Определяет стратегии для
взаимодействия сущностей, выделяя почему, где, как и
зачем происходят действия. □ Точка зрения динамики
состояний. Применима к событийно-управляемым системам.
□ Алгоритмическая точка зрения. Детальное описание
операций (методов, функций), внутренние детали и логика
каждой сущности.
□ Ресурсная точка зрения. Моделируются характеристики и
использование ресурсов системы

61. Документирование процесса проектирования

Оглавление SDD имеет следующий вид.
1. Аннотация
Дата создания и статус
Выпускающая организация
Авторство
Перечень изменений
2. Введение
5. Основная часть
Цель
Заинтересованные лица и проектные понятия
Область действия
Проектная точка зрения 1
Контекст
Проектное представление 1
Выводы

3. Ссылки
Проектная точка зрения N
4. Словарь
Проектное представление N
Обоснование проектирования.
English     Русский Правила