Similar presentations:
SEsem 2 (1)
1. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНЫХ СИСТЕМ
Кафедра информационных технологийОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ
ПОДХОД К РАЗРАБОТКЕ
ПРОГРАММНЫХ СИСТЕМ
ЕЩЁ КОЕ-ЧТО О КЛАССАХ
И ОБЪЕКТАХ
2. Природа объекта
• Нечто, воспринимаемое мышлением• Нечто, на что направлена мысль или действие
• Объект моделирует часть окружающей
действительности и таким образом существует
во времени и пространстве
• Объект представляет собой конкретный
опознаваемый предмет, единицу или сущность
(реальную или абстрактную), имеющую четко
определенное функциональное назначение в
данной предметной области
3. Природа объекта
• Объект обладает– состоянием,
– поведением и
– идентичностью
• Структура и поведение схожих
объектов определяет общий для них
класс
• Термины "экземпляр класса" и
"объект" взаимозаменяемы
4. Состояние объекта
• Состояние объекта характеризуетсяперечнем (обычно статическим) всех
свойств данного объекта и текущими
(обычно динамическими) значениями
каждого из этих свойств
• Состояние объекта может меняться
динамически
5. Пример изменения состояния
class CPoint : public IShape{
public:
CPoint(sCoordinate _coord);
virtual void Draw() const;
void set_Coordinate(sCoordinate _coord) {m_Coord =
_coord;};
sCoordinate get_Coordinate(){return m_Coord;};
protected:
sCoordinate m_Coord;
};
6. Пример изменения состояния
void main{
CPoint p({100, 100});
p.Draw();
p.set_Coordinate({200, 200});
p.Draw();
}
7. Поведение объекта
• Поведение - это то, как объектдействует и реагирует
• Поведение выражается в терминах
состояния объекта и передачи
сообщений
8. Идентичность объекта
• Идентичность - это такое свойствообъекта, которое отличает его от всех
других объектов
void main
{
CPoint p1({100, 100}), p2({200, 200});
p2.set_Coordinate({100, 100});
p1.Draw(); p2.Draw();//Объекты разные
}
9. Связи (отношения) между объектами (классами)
• Ассоциативная связь• Агрегация
10. Ассоциативная связь
• Ассоциация – смысловая связь междуобъектами (классами)
• Объект сотрудничает с другими
объектами через связи, соединяющие
его с ними
• Через связь объект-клиент
запрашивает услугу у объекта-сервера
11. Агрегация
• Описывает отношения целого и части• От целого (контейнера), можно прийти к
его частям (компонентам)
• Компоненты могут не существовать вне
контейнера (композиция)
• В описание класса включается ссылка\
указатель на другой класс, или
стандартный контейнер ссылок\
указателей на другой класс
12. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНЫХ СИСТЕМ
РОССИЙСКИЙ УНИВЕРСИТЕТ ДРУЖБЫ НАРОДОВКафедра информационных технологий
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ
ПОДХОД К РАЗРАБОТКЕ
ПРОГРАММНЫХ СИСТЕМ
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ
АНАЛИЗ И ПРОЕКТИРОВАНИЕ
13. Классификация
• Упорядочение знаний о решаемойзадаче – выделение классов и объектов
• Построение архитектуры:
– Определение иерархий классов
– Определение отношений между классами
ПРОБЛЕМА
• Множественность классификации
14. Особенности классификации
• Трудно построить простую понятнуюархитектуру
• Итеративность:
– За основу берётся какая-то архитектура,
которая постепенно совершенствуется
– Изменения архитектуры происходят на
основе опыта её использования
• Зависимость от точки зрения субъекта
Классификация – это искусство
15. Подходы к выделению классов
• Категоризация• Анализ поведения
• Анализ вариантов использования
• Анализ описания задачи
Подходы можно комбинировать
16. Категоризация
• Принцип: все вещи, обладающиенекоторым свойством (поведением),
составляют категорию
• Критерий похожести объектов –
родственность их свойств (поведения)
• Критерий различия объектов – наличие
или отсутствие свойств (поведения)
17. Категоризация: кандидаты в классы
• Предметы – осязаемые материальныеобъекты предметной области (товары)
• Роли, исполняемые пользователями
разрабатываемой системы (заказчик)
• События – нечто происходящее с чемто единовременно или
последовательно (доставка)
• Взаимодействия (заказ, встреча)
• Устройства (диск)
18. Анализ поведения
• Динамическое поведение – первоисточникобъектов и классов
• Выделение классов на основе
ответственности объектов – совокупности
услуг, предоставляемых пользователям
• Сопоставление поведения с частями
системы – выделение инициаторов и
исполнителей
• Классы могут совсем не соответствовать
сущностям предметной области
19. Вариант использования (Use Case)
• Вариант использования (прецедент) сценарий использования системы,начинающийся с того, что пользователь
системы инициирует операцию или
последовательность взаимосвязанных
событий
• Разложение сценария на шаги,
выделение объектов, участвующих в
сценарии, их обязанностей и
взаимодействия
20. Анализ описания задачи
• Необходимо описать задачу или еёчасть на естественном языке, затем
выделить существительные и глаголы.
• Существительные – кандидаты в классы
• Глаголы – имена операций
Недостаток – неточность
естественного языка
21. Критерии качества классов и объектов
• Связаность• Зацепление
• Достаточность
• Полнота
22. Связаность и зацепление
• Зацепление (cohesion) – степеньвзаимодействия операций интерфейса
класса: класс должен описывать
поведение абстракции, и ничего более.
• Связанность (coupling) – степень
глубины связей между классами.
23. Достаточность и полнота
• Достаточность – наличие в классе всегонеобходимого для реализации
эффективного поведения.
• Полнота – наличие в интерфейсе
класса всех характеристик абстракции,
гарантирующих взаимодействие с
объектами класса.
24. Как называть классы
• Название класса должно отражатьсущность описываемой абстракции
• Имена классов:
– Названия категорий
– Обозначение сущностей поведения:
• Загрузчик(Loader), Сохранитель (Saver)
• Вычислитель (Calculator)
• Менеджер (Manager)
25. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНЫХ СИСТЕМ
Кафедра информационных технологийОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ
ПОДХОД К РАЗРАБОТКЕ
ПРОГРАММНЫХ СИСТЕМ
НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ
26. Наследование
• Один класс (подкласс) повторяетструктуру и поведение другого класса
(суперкласса)
• В подклассе структура и поведение
исходного суперкласса дополняются
или переопределяются, расширяются
или ограничиваются
Польза: повторное использование
27. Диаграмма классов
A<<virtual,const>> SayHello()
B
C
<<virtual,const>> SayHello()
<<virtual,const>> SayHello()
28. Код на языке C++
class A{
public:
virtual void SayHello() { printf(“ A приветствует Вас ”); };
}
class B: public A
{
public:
virtual void SayHello() { printf(“ B приветствует Вас ”); };
}
class C: public A
{
public:
virtual void SayHello() { printf(“ C приветствует Вас ”); };
}
29. Полиморфизм
• Многообразие поведения объектовразных классов в иерархии
• Объект сам знает свой класс (тип)
• Аналог – переопределение оператора
«+»
• Позднее связывание – связь
реализации метода и его имени
происходит на этапе выполнения
• Динамическая подмена поведения
30. Пример полиморфизма
void SayHello(A& _object){
_object.SayHello();
}
main()
{
B b;
SayHello(b);
//кто же нас поприветствует?
}
31. Пример полиморфизма
main(){
A* a = new B(); // приведение указателя
a->SayHello();
//кто же нас поприветствует?
delete a;
}
32. Типизация
• Иерархия классов устанавливаетиерархию типов
• Подклассы являются подтипами
суперкласса
• Правило: присвоение объекту Y
значения объекта X допустимо, если тип
объекта X совпадает с типом объекта Y
или является его подтипом
• Приведение типов
33. Пример использования классов
main(){
B b; // создание объекта класса B
A a; // создание объекта класса A
С с; // создание объекта класса C
a = b; // можно
b = a; // нельзя
c = b; // можно ли?
}
34. Ещё кое-что о наследовании
• Абстрактный класс – класс для которогоэкземпляры не создаются
• Подклассы абстрактных классов
доопределяют их до жизнеспособных
абстракций, наполняя содержанием,
позволяя создавать экземпляры
• Абстрактный класс – «чистый»
интерфейс
• Наследование интерфейса против
наследования реализации
35. Заключение
• Объект характеризуется состоянием,поведением и идентичностью
• Чтобы объект X мог послать объекту Y
сообщение M, прямо или косвенно
класс X должен иметь доступ к классу
Y, т.е. между классами должно быть
установлено отношение
• Не забываем про снижение зацепления
36. Заключение
Объектно-ориентированная программасостоит из иерархий классов
Наследование без полиморфизма
возможно, но бесполезно
Наследование и полиморфизм позволяют
повторно использовать
функциональность (код)