Объектно-ориентированное программирование и проектирование
© Хуторова Ольга Германовна
Лекция 9
Темы лекции
Жизненный цикл ПО
1. Формирование требований к АС
2. Разработка концепции АС
3. Техническое задание
4. Эскизный проект
5. Технический проект
6. Рабочая документация
7. Ввод в действие
8. Сопровождение АС
Жизненный цикл ПО ГОСТ 34.601-90 Автоматизированные системы. Стадии создания
RUP. Начальная стадия
RUP. Уточнение (Elaboration)
Архитектура программного обеспечения (software architecture)
Документирование архитектуры программного обеспечения (ПО)
Жизненный цикл ПО и диаграммы UML анализ предметной области и сбор требований к ПО �
Жизненный цикл ПО и диаграммы UML Анализ полученных данных �
Жизненный цикл ПО и диаграммы UML Проектирование�
Детализация работы объектов
Диаграммы развертывания� (Deployment diagram)
Вычислительные Узлы
Компонент (component)
Компоненты в UML
IAirport
диаграммы компонентов
Компонент,
предоставляющий
интерфейс
Компонент,
использующий
интерфейс
Диаграммы компонентов �
Диаграммы топологии(развертывания)�Пример�
Компоненты, размещенные на узле
Диаграммы топологии (развертывания)�Deployment diagram
RUP-Построение. ГОСТ-19 – Рабочий проект
Реализация (кодирование, тестирование)
Диаграмма развертывания ИС атмосферной коррекции спутниковых данных
ИС атмосферной коррекции спутниковых данных таблица размещения компонент ИС на узлах
Реализация объектно-ориентированного проекта - перевод диаграмм в код �
Реализация на языке C++ �
Атрибуты, Методы, Наследование�
class Device {
public:
int serial_number = 12345678;
void turn_on() {
cout << "Device is on" << endl;
}
private:
int pincode = 87654321;
public:
// constructor
Device() {
cout << "Device constructor called" << endl;
}
// destructor
~Device() {
cout << "Device destructor called" << endl;
}
};
class Computer: public Device {
public:
void say_hello() {
turn_on();
cout << "Welcome to Windows!" << endl;
}
};
class Laptop: public Computer {
public:
Laptop() {
cout << "Laptop constructor called" << endl;
}
~Laptop() {
cout << "Laptop destructor called" << endl;
}
};
Порождение и удаление объектов
Laptop Comp1;
Comp1. serial_number=129926001;
Laptop *MyComp= new Laptop;
MyComp->serial_number=129926033;
….
delete MyComp;
Часть - целое
Генерация кода из диаграмм UML
Часть - целое
// Device.h
#include "Monitor.h"
#include "HDD.h"
class Device {
public:
int serial_number = 12345678;
HDD [4];
void turn_on();
void Device();
void ~Device();
private:
void pincode = 87654321;
Monitor *D;
};
// Monitor.h
class Monitor {
public:
string Model;
int Size;
void set_master();
void set_slave();
};
//HDD.h
class HDD {
public:
string Model;
float Volume;
void Reserve_copy();
private:
void Formate();
};
Реализация зависимостей помощью указателей�Пример: зависимость "много-к-одному" между классами Item и Group
class Item
{
public:
virtual void cut ();
virtual void move
(Length deltax, Length deltay) = 0;
virtual Boolean pick
(Length px, Length py) = 0;
virtual void ungroup () = 0;
private: Group* grou;
friend Group::add_item (Item*);
friend Group::remove_item (Item*);
public:
Group* get_group ()
{return grou; };
};
Методы Group::add_item и Group::remove_item могут изменять приватные (private) атрибуты класса Item, хотя они определены в его подклассе Group, так как они определены как дружественные (friends) для класса Item.
class Group: public Item
{
public:
void cut ();
void move (Length deltax, Length deltay);
Boolean pick (Length px, Length py) = 0;
void ungroup () { };
private:
ItemSet* items;
public:
void add_item (Item*);
void remove_item (Item*);
ItemSet* get_items ()
{return items;}
};
void Group::add_item (Item* item)
{ item->group = this; items->add (item); }
void Group::remove_item (Item* item);
{ item->group = 0; items->remove (item); }
Зависимые объекты и коллективные классы. �Пример: класс ItemSet (набор объектов)
class ItemSet
{
public:
ItemSet(); //создать пустой набор объектов
~ItemSet(); //уничтожить набор объектов
void add(Item*); //включить объект в набор
void remove(Item*); //исключить объект из набора
Boolean includes(Item*); //проверить наличие объекта в наборе
int size(Item*); //определить количество объектов
};
Жизненный цикл ПО и диаграммы UML Тестирование
Жизненный цикл ПО и диаграммы UML внедрение�
RUP – создается финальная версия продукта и передается от разработчика к заказчику. Это включает в себя программу бета- -, обучение пользователей, а также определение качества продукта. В случае, если качество не соответствует ожиданиям пользователей или критериям, установленным в фазе Начало, фаза Внедрение повторяется снова. Выполнение всех целей означает достижение вехи готового продукта (Product Release) и завершение полного цикла разработки.
ГОСТ 19 – подготовка и передача программы и программной документации, утверждение акта о передаче программы и ее сопровождении
Жизненный цикл ПО и диаграммы UML
Use case diagram
Activity diagram
Sequence diagram
Class diagram
Component diagram
Deployment diagram
UML Реинжиниринг. Разработка ПО не «с нуля»
UML Реинжиниринг
Расширение области применения UML
Литература к лекции