ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНЫХ СИСТЕМ
Природа объекта
Природа объекта
Состояние объекта
Пример изменения состояния
Пример изменения состояния
Поведение объекта
Идентичность объекта
Связи (отношения) между объектами (классами)
Ассоциативная связь
Агрегация
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНЫХ СИСТЕМ
Классификация
Особенности классификации
Подходы к выделению классов
Категоризация
Категоризация: кандидаты в классы
Анализ поведения
Вариант использования (Use Case)
Анализ описания задачи
Критерии качества классов и объектов
Связаность и зацепление
Достаточность и полнота
Как называть классы
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНЫХ СИСТЕМ
Наследование
Диаграмма классов
Код на языке C++
Полиморфизм
Пример полиморфизма
Пример полиморфизма
Типизация
Пример использования классов
Ещё кое-что о наследовании
Заключение
Заключение
195.00K
Category: programmingprogramming

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. Заключение

Объектно-ориентированная программа
состоит из иерархий классов
Наследование без полиморфизма
возможно, но бесполезно
Наследование и полиморфизм позволяют
повторно использовать
функциональность (код)
English     Русский Rules