You are on page 1of 18

Міністерство освіти і науки України

Тернопільський національний технічний університет імені Івана Пулюя


Факультет комп'ютерно-інформаційних систем і програмної інженерії

Кафедра програмної інженерії

ЗВІТ
до лабораторної роботи №4
з навчальної дисципліни “Архітектура та проєктування програмного
забезпечення”

Тема: «Побудова архітектури ПЗ обраної предметної області в середовищі


IBM RSA з використанням структурних шаблонів проектування типу
«Замісник (Proxy)» та «Фасад (Facade)»»

Підготував:
студент групи СП-31
Гавриленко Артем Володимирович

Тернопіль 2023

Мета роботи: Реалізувати в системі IBM RSA архітектурні моделі


(AM) ПЗ - «Замісник(Proxy)» та «Фасад(Facade)» з використанням
інструментальних засобів розробки ПЗ IBM Rational Software Architect для
обраної предметної області.
Завдання роботи:

1. Опрацюйте теоретичний матеріал. Ознайомтесь з специфікою


архітектурного шаблону проектування «Замісник (Proxy)».
2. Спроектувати у середовищі IBM Rational Software Architect
власну ієрархію класів, яка б базувалася на патерні «Замісник (Proxy)».
Описати та прокоментувати використання ієрархії класів, інтерфейси,
розмежування атрибутів та методів конкретних класів.
3. Згенерувати програмний код реалізації спроектованої системи
згідно розглянутого шаблону проектування Замісник. Добавити коментарі та
нотації.
4. Опрацюйте теоретичний матеріал. Ознайомтесь з специфікою
архітектурного шаблону проектування «Фасад (Facade)».
5. Спроектувати у середовищі IBM Rational Software Architect
власну ієрархію класів, яка б базувалася на патерні «Фасад (Facade)».
Описати та прокоментувати використання ієрархії класів, інтерфейси,
розмежування атрибутів та методів конкретних класів.
6. Згенерувати програмний код реалізації спроектованої системи
згідно розглянутого шаблону проектування Фасад. Добавити коментарі та
нотації.
7. Підготувати звіт до лабораторної роботи.

Обрана предметна область:

Програмне забезпечення для управління створенням унікального


дизайну в інтернет-магазині "MaKSa Clothes" включатиме інтерактивний
інтерфейс для клієнтів, де вони зможуть переглядати різноманітний одяг та
аксесуари. Кожен клієнт матиме свій власний профіль, де він може зберігати
улюблені дизайни, переглядати історію замовлень та редагувати особисті
дані. Дизайнерам буде доступний інструментарій для створення та
редагування унікальних моделей, адміністраторам - можливість
відстежувати замовлення, керувати товарним асортиментом та вирішувати
технічні питання. ПЗ також забезпечить зручний процес оформлення
замовлення та визначення опцій оплати для клієнтів.

Діаграма варіантів використання для шаблону проектування


«Замісник» виглядає наступним чином:

Рисунок 1 – Діаграма варіантів використання


Рисунок 2 – діаграма послідовності

Діаграма класів шаблону проектування «Замісник» виглядає


наступним чином:
Рисунок 3 – Діаграма класів шаблону проектування «Замісник»

Для взаємодії з програмнім забезпеченням сутність Клієнт


використовує інтерфейс Clothes, який реалізує абстрактні методи для
контролю створення одягу. Сутність Клієнт може зробити запит про
створення чи відмінити його, змінити розмір та колір. Мною
використовувався паттерн Замісник (Proxy), завдяки цьому можна не
звертаємось на пряму до об’єкта класу newClothes, а отримувати доступ до
нього через інший клас – ClothesProxy. Сам клас ClothesProxy може
вирішувати, чи маємо ми доступ до цих функцій, оптимізовує процес роботи
програми, чи навіть може зв’язуватися з іншою частиною програми, яка
знаходиться, наприклад, на віддаленому сервері будь-якого типу.

Згенерований код виглядає наступним чином:

Client.h
#ifndef CLIENT_H #define CLIENT_H

//Begin section for file Client.h

//TODO: Add definitions that you want preserved

//End section for file Client.h

class Clothes; //Dependency Generated Source:Client


Target:Clothes

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" class Client

{ //Begin section for Client

//TODO: Add attributes that you want preserved

//End section for Client private:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" Clothes *
clothes;
public:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void start();

}; //end class Client

#endif

Clothes.h
#ifndef CLOTHES_H #define CLOTHES_H

//Begin section for file Clothes.h

//TODO: Add definitions that you want preserved

//End section for file Clothes.h

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" class Clothes

//Begin section for Clothes

//TODO: Add attributes that you want preserved

//End section for Clothes public:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" virtual void
makeQuery() = 0;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" virtual void
changeSize() = 0;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" virtual void
changeColor() = 0;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" virtual void
changePrint() = 0;

}; //end class Clothes #endif


newClothes.h
#ifndef NEWCLOTHES_H #define NEWCLOTHES_H

//Begin section for file newClothes.h

//TODO: Add definitions that you want preserved

//End section for file newClothes.h #include "Clothes.h"

class ClothesProxy; //Dependency Generated Source:newClothes


Target:ClothesProxy

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" class
newClothes : Clothes

//Begin section for newClothes

//TODO: Add attributes that you want preserved

//End section for newClothes private:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" size;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" type;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" ClothesProxy *
clothesProxy;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" amount;

public:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
makeQuery();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
changeSize();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
changeColor();
//@generated "UML to C++
(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
changePrint();

}; //end class newClothes

#endif

Діаграма варіантів використання для шаблону проектування


«Фасад» виглядає наступним чином:

Рисунок 4 – Діаграма варіантів використання


Рисунок 5 – Діаграма послідовності

Діаграма класів шаблону проектування «Фасад» виглядає наступним


чином:
Рисунок 5 – Діаграма класів шаблону проектування «Фасад»

Згенерований код виглядає наступним чином:

Client.h
#ifndef CLIENT_H #define CLIENT_H

//Begin section for file Client.h

//TODO: Add definitions that you want preserved

//End section for file Client.h

class ClothesFacade; //Dependency Generated Source:Client


Target:ClothesFacade

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" class Client

//Begin section for Client

//TODO: Add attributes that you want preserved

//End section for Client private:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" ClothesFacade *
clothesFacade;

public:
//@generated "UML to C++
(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void start();

}; //end class Client #endif

Clothes.h
#ifndef CLOTHES_H #define CLOTHES_H

//Begin section for file Clothes.h

//TODO: Add definitions that you want preserved

//End section for file Clothes.h

class Material; //Dependency Generated Source:Clothes


Target:Material class Picture; //Dependency Generated Source:Clothes
Target:Picture

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" class Clothes

//Begin section for Clothes

//TODO: Add attributes that you want preserved

//End section for Clothes private:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" name;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" color;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" size;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" Material *
material;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" Picture *
picture;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" material_0;

public:
//@generated "UML to C++
(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
getDescription();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
getPhoto();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
setMaterial();

}; //end class Clothes #endif

ClothesFacade.h
#ifndef CLOTHESFACADE_H #define CLOTHESFACADE_H

//Begin section for file ClothesFacade.h

//TODO: Add definitions that you want preserved

//End section for file ClothesFacade.h

class Picture; //Dependency Generated Source:ClothesFacade


Target:Picture

class ClothesFactory; //Dependency Generated


Source:ClothesFacade Target:ClothesFactory class Management;
//Dependency Generated Source:ClothesFacade Target:Management

class Clothes; //Dependency Generated Source:ClothesFacade


Target:Clothes

class PresentClothes; //Dependency Generated


Source:ClothesFacade Target:PresentClothes

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" class
ClothesFacade

//Begin section for ClothesFacade


//TODO: Add attributes that you want preserved

//End section for ClothesFacade private:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" Picture *
picture;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" ClothesFactory
* clothesFactory;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" Management *
managemant;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" Clothes *
clothes;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" PresentClothes
* presentClothes;

public:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void show();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void add();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void delete();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
getClothes();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
getMaterial();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void create();

}; //end class ClothesFacade #endif

ClothesFactory.h
#include "ClothesFactory.h"

//Begin section for file ClothesFactory.cpp

//TODO: Add definitions that you want preserved

//End section for file ClothesFactory.cpp

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
ClothesFactory::createDesign()

//TODO Auto-generated method stub return;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
ClothesFactory::editDesign()

//TODO Auto-generated method stub return;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
ClothesFactory::getReport()

//TODO Auto-generated method stub return;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
ClothesFactory::produceClothes()

//TODO Auto-generated method stub return;

Management.h
#ifndef MANAGEMENT_H #define MANAGEMENT_H

//Begin section for file Management.h

//TODO: Add definitions that you want preserved


//End section for file Management.h

class ClothesFactory; //Dependency Generated Source:Management


Target:ClothesFactory class Clothes; //Dependency Generated
Source:Management Target:Clothes

class PresentClothes; //Dependency Generated Source:Management


Target:PresentClothes

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" class
Management

//Begin section for Management

//TODO: Add attributes that you want preserved

//End section for Management private:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" status;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" ClothesFactory
* clothesFactory;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" Clothes *
clothes;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" PresentClothes
* presentClothes;

public:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void show();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void add();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void delete();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void
getStatus();
//@generated "UML to C++
(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void pause();

}; //end class Management #endif

Material.h
#ifndef MATERIAL_H #define MATERIAL_H

//Begin section for file Material.h

//TODO: Add definitions that you want preserved

//End section for file Material.h

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" class Material

//Begin section for Material

//TODO: Add attributes that you want preserved

//End section for Material private:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" name;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" amount;

public:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void getInfo();

}; //end class Material #endif

Picture.h
#ifndef PICTURE_H #define PICTURE_H

//Begin section for file Picture.h

//TODO: Add definitions that you want preserved

//End section for file Picture.h

class Clothes; //Dependency Generated Source:Picture Target:Clothes

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" class Picture

//Begin section for Picture


//TODO: Add attributes that you want preserved

//End section for Picture private:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" fileName;

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" Clothes *
clothes;

public:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void show();

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void update();

}; //end class Picture #endif

PresentClothes.h
#ifndef PRESENTCLOTHES_H #define PRESENTCLOTHES_H

//Begin section for file PresentClothes.h

//TODO: Add definitions that you want preserved

//End section for file PresentClothes.h

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" class
PresentClothes

//Begin section for PresentClothes

//TODO: Add attributes that you want preserved

//End section for PresentClothes private:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" name;

public:

//@generated "UML to C++


(com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" void show();

}; //end class PresentClothes #endif


Висновки

Під час виконання даної лабораторної роботи було досліджено паттерн


Замісник та Фасад, створено власну ієрархію класів на їх основі,
використовуючи конкретну предметну область. Розроблені архітектурні
моделі зададуть цілісність системам, стійкості та гнучкості при внесенні
змін. Використовуючи паттерн Замісник, ми отримали систему, яка
забезпечила надійність роботи користувача з конкретним класом, через
замісника. Використовуючи паттерн Фасад ми спростили взаємодію
користувача з системою, вивівши весь потрібний функціонал в клас Фасад,
тому користувачеві після цього не потрібно на пряму звертатися до
конкретних класів системи.

You might also like