ПРОГРАММНАЯ ИНЖЕНЕРИЯ
План курса
ПРОГРАММНАЯ ИНЖЕНЕРИЯ. ЧАСТЬ I. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНЫХ СИСТЕМ
Этапы процесса разработки
Типы моделей жизненного цикла ПС
Типы моделей жизненного цикла ПС
Спиральная модель жизненного цикла
Принципы анализа и проектирования
Моделирование
Анализ
Подходы к моделированию
Анализ требований
Нотация диаграмм вариантов использования
Пример диаграммы прецедентов
Анализ требований
Анализ. Архитектура
Пример диаграммы компонентов
Пример диаграммы потоков данных
Проектирование
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНЫХ СИСТЕМ
Стадии разработки ПС
Особенности построения объектной модели
Абстрагирование
Абстрагирование поведения
Инкапсуляция
Иерархия
Сущность класса
Интерфейс класса
Реализация операций
Типы отношений между классами
Нотация диаграммы классов
Пример диаграммы классов
Нотация диаграмм последовательности действий
Пример диаграммы последовательности действий
Код на языке C++
Пример использования классов
Код на языке C++
Код на языке C++
Пример использования классов
Заключение
Заключение
Литература
1.05M
Category: programmingprogramming

SEsem 1 (1)

1. ПРОГРАММНАЯ ИНЖЕНЕРИЯ

РОССИЙСКИЙ УНИВЕРСИТЕТ ДРУЖБЫ НАРОДОВ
КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
ПРОГРАММНАЯ
ИНЖЕНЕРИЯ
Иван Валентинович Смирнов
доцент, к.ф.-м.н.
[email protected]

2. План курса

• 15 занятий
• Две части
– Объектно-ориентированный анализ и
проектирование
– Программная инженерия
• Лабораторная работа по каждой части
• Домашнее задание
• 0.1* Посещение + 0.2*Лабораторные + 0.6*ДЗ
+ 0.1*Ответ
• Можно сделать доклад (до 20 баллов)

3. ПРОГРАММНАЯ ИНЖЕНЕРИЯ. ЧАСТЬ I. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНЫХ СИСТЕМ

Процесс разработки программных систем

4. Этапы процесса разработки

1. Постановка проблемы
2. Анализ
3. Проектирование
4. Программирование
5. Тестирование
6. Ввод в эксплуатацию

5. Типы моделей жизненного цикла ПС

• Каскадная модель
– Все этапы выполняются один раз

6. Типы моделей жизненного цикла ПС

• Спиральная или итеративная модель
– Все этапы выполняются итеративно
несколько раз. На каждой итерации
происходит уточнение и доработка
функциональности системы, реализуется
прототип

7. Спиральная модель жизненного цикла

8. Принципы анализа и проектирования

• Анализ - разделение системы на более
мелкие составляющие компоненты
• Синтез – объединение составляющих
компонентов в более крупные
компоненты
• Определение взаимодействия между
компонентами
• Анализ – что? Проектирование – как?

9. Моделирование

• Модель системы – упрощенный взгляд на
систему с какой-либо одной точки зрения
• Моделирование – создание моделей –
содержание работ на этапах анализа и
проектирования
• Моделируются все компоненты системы
• Языки моделирования позволяет записывать
и фиксировать модели в диаграммах

10. Анализ

• Модель требований
• Модель архитектуры

11. Подходы к моделированию

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

12. Анализ требований

• Функциональные требования
– Что должна выполнять система. Как
взаимодействовать с пользователем или
другими системами
• Модель прецедентов
– Прецедент – вариант использования
системы
– Актер - Участник – пользователь системы,
использующий её функциональность

13. Нотация диаграмм вариантов использования

Актер
Вариант
Моделируемая
использования
система
Использование
UseCase2
«uses»
System
UseCase1
Actor1
Actor2
Обобщение
«extends»
«extends»
Проверить пароль
Клиент
Коммерческий клиент
Проверить клиента

14. Пример диаграммы прецедентов

Просмотр систематического каталога
«uses»
Посетитель библиотеки
«uses»
Заказ книги

15. Анализ требований

• Нефункциональные требования
– Масштабируемость
– Надежность
– Требования к документации
– и прочее
• Масштабируемость – способность
системы легко подстроиться под новые
требования или укрупнение

16. Анализ. Архитектура

• Архитектура – состав компонентов системы с
описанием их взаимодействия на высоком
уровне.
– Модель логической компонентной
архитектуры. Подсистемы, модули и их
взаимодействие.
– Модель потоков данных. Какие процессы
выполняются и какие данные пересылаются.
– Физическая архитектура. Узлы с
работающими модулями на них.

17. Пример диаграммы компонентов

Learning System
Knowledge Base
Crawler
Crawler
Frontier
Crawler
Storage

18. Пример диаграммы потоков данных

19. Проектирование

• Для каждого модуля
– Модель архитектуры классов – диаграмма
классов
– Модель последовательности действий –
диаграмма последовательности действий

20. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К РАЗРАБОТКЕ ПРОГРАММНЫХ СИСТЕМ

Кафедра информационных технологий
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ
ПОДХОД К РАЗРАБОТКЕ
ПРОГРАММНЫХ СИСТЕМ
ОБЪЕКТНАЯ МОДЕЛЬ
КЛАССЫ И ОБЪЕКТЫ

21. Стадии разработки ПС

• ООА – выделение сущностей –
абстракций предметной области
• OOD – изобретение абстракций и
механизмов, обеспечивающих
требуемое поведение
• OOP – реализация ОО-моделей на ООязыке программирования.

22. Особенности построения объектной модели

При создании объектной модели всегда
помним о следующих принципах:
• Абстрагирование
• Инкапсуляция
• Иерархия (наследование)

23. Абстрагирование

• Выделение существенных
характеристик некоторого объекта,
отличающих его от всех других видов
объектов
• Определение концептуальных границ
объекта с точки зрения наблюдателя
• Отделение существенных особенностей
поведения объекта от несущественных

24. Абстрагирование поведения

• Существенные характеристики объекта
выделяются с точки зрения его
ответственности перед другими объектами поведения.
• Интерфейс объекта – полный набор
операций, которые могут осуществляться над
объектом
Виды абстракций:
• Абстракция сущности предметной области
• Абстракция поведения

25. Инкапсуляция

• Отделение интерфейса объекта от его
реализации
• Сокрытие деталей внутреннего
представления абстракции и
реализации поведения
• Сокрытие данных, необходимых для
реализации поведения

26. Иерархия

Упорядочение абстракций, расположение
их по уровням.
Наследование:
• объединяет абстракции отношением
общее-частное («kind of», «is a»,
родитель-потомок);
• позволяет расширять и
модифицировать поведение сущностей.

27. Сущность класса

• Абстракция существенного в объекте
• Некоторое множество объектов,
имеющих общую структуру и общее
поведение
• Контракт между абстракцией и теми, кто
использует её
• Объект является экземпляром класса

28. Интерфейс класса

• Выражает обязательства класса
• Операции, поддерживаемые
экземплярами классов
• Части интерфейса:
– открытая(public) – видимая всем клиентам
– защищенная(protected) – видимая самому
классу и его подклассам
– закрытая(private) – видимая только самому
классу

29. Реализация операций

• Скрытая (инкапсулированная)
реализация операций интерфейса
класса
• Члены-данные класса скрыты от
пользователей и предназначены для
реализации операций класса

30. Типы отношений между классами

• Ассоциация – смысловая связь между
классами
• Использование – передача в
параметрах операции
• Наследование – иерархия классов
• Агрегация

31. Нотация диаграммы классов

Класс
Интерфейс
Customer
Имя класса
iSecureInformation
name
address
Атрибуты класса
«interface»
phone
iPaint
Операции класса
birthday
buy()
makeComplaint()
Ассоциация
Class A
Роль А Роль Б
Class B
Примечание
(нота)
Имя интерфейса
Наследование
Агрегация
Композиция
Shape
University
University
Зависимость
Class A
1
Class B
1
Кардинальные
числа
1..*
*
Faculty
Student
Реализация
Class A
«interface»
Interface
Rectangle

32. Пример диаграммы классов

Компания
Вуз
1..*
-сотрудник
1
*
*
1
-Начальник
Отдел
name
1..*
Офис
address
voice
Штаб-квартира
Персона
name
employeeID
title
getPhoto()
getSoundBite()
getContactInformation()
getPersonalRecords()
Запись кадрового учета
Студент
name
studentID
1..*
1..*
1..*
1
Контактная информация
0..1
1..*
-посещает
*
*
Курс
name
courseID
1..*
-читает
*
1..*
0..1
-декан
*
1..*
-работает
1
-обучается в
1
Факультет
name
addInstructor()
removeInstructor()
getInstructor()
getAllInstructors()
name
-состоит из
address
phone
1
addStudent()
1..*
removeStudent()
getStudent()
getAllStudents()
addDepartment()
removeDepartment()
getDepartment()
getAllDepartments()
Преподаватель
name

33. Нотация диаграмм последовательности действий

Взаимодействующий
объект
Линия жизни
объекта
Фокус
управления
Уничтожение Ограничение
объекта
Object1
{}
Класс объекта
Вызов
Message4
Синхронное
сообщение
Message3
Асинхронное
сообщение
Сообщение
возврата
Message1
Message2
Отметки
времени
а:
b:

34. Пример диаграммы последовательности действий

s : Caller
: Switch
liftReceiver
Время
tone
r : Caller
setDialTone()
* dialDigit(d)
{dialed – tone < 30
sec}
dialed
routeCall(s,n)
"create"
c : Conversation
ring()
liftReceiver
connect(r,s)
connect(r)
После соединения
абоненты r и s
могут обмениваться
информацией
connect(s)

35. Код на языке C++

class Entity
{
public:
void SayHello() { printf(“%s
приветствует Вас ”, name); };
Entity(char* _name){ name = _name;};
private:
char * name;
}

36. Пример использования классов

main()
{
Entity b(“B”); // создание объекта
Entity a(“A”); // создание объекта
a.SayHello();
b.SayHello();
}

37. Код на языке C++

class Helper
{
public:
void SayMyName() { printf(“%s”, name);
};
Helper(char* _name){ name = _name;};
private:
char * name;
}

38. Код на языке C++

class Entity
{
public:
void SayHello() { printf(“Объекту %s
помогает объект”, name,);
helper.SayMyName();};
Entity(char* _name, Helper& _helper){ name =
_name; helper = _helper};
private:
char * name;
Helper helper;
}

39. Пример использования классов

main()
{
Helper b(“B”); // создание объекта
Entity A(“A”, b); // создание объекта
a.SayHello();
//Объекту А помогает объект B
}

40. Заключение

Анализ и проектирование – важные этапы
разработки программных систем
Моделирование – способ лучше понять
будущую систему, выяснить, как она
будет работать
Основная проблема – как правильно
выполнить разбиение системы на
компоненты

41. Заключение

• Абстрагирование, Инкапсуляция,
Наследование – основные принципы
создания объектной модели
• Класс описывает поведение множества
объектов в виде интерфейса – набора
операций, реализация которых скрыта
• Объекты – экземпляры классов

42. Литература

• Буч Г. Объектно-ориентированный
анализ и проектирование с примерами
приложений на С++
English     Русский Rules