You are on page 1of 13

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

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


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

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

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

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


IBM RSA з використанням структурних шаблонів проектування типу
«Декоратор (Picasso)» та «Пристосуванець (Flyweight)»»

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

Тернопіль 2023
Мета роботи: реалізувати в системі IBM RSA архітектурні моделі
(AM) ПЗ - «Декоратор (Picasso)» та «Пристосуванець (Flyweight)» з
використанням інструментальних засобів розробки ПЗ IBM Rational Software
Architect для обраної предметної області.

Завдання роботи:

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


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

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

"Мonefy" - зручний інструмент для ведення обліку особистих чи


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

Діаграма варіантів використання виглядає наступним чином:

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

Діаграма послідовності:

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


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

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

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

User.h
#ifndef USER_H

#define USER_H

//Begin section for file User.h

//TODO: Add definitions that you want preserved

//End section for file User.h

#include "Menu_2.h"

class Menu_0; //Dependency Generated Source:User Target:Menu_0

class Menu; //Dependency Generated Source:User Target:Menu


class User : Menu_2

private:

id;

name;

Menu_0 * product;

Menu_2 * menu;

Menu * menu2;

public:

void choose_menu();

};

#endif

User.cpp
#include "User.h"

//Begin section for file User.cpp

//TODO: Add definitions that you want preserved

//End section for file User.cpp

//@generated "UML to C++


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

void User::choose_menu()

//TODO Auto-generated method stub

return;

}
Menu.h
#ifndef MENU_H
#define MENU_H

class User;
class Menu
{

private:
User * user;

public:
virtual void display_statistics() = 0;

};

#endif

Statistic.h
#ifndef STATISTIC_H
#define STATISTIC_H

class Menu_2;

class Statistic
{

private:
Menu_2 * menu;

public:

virtual void display_expenses_statistic() = 0;


virtual void display_income_statistic() = 0;
virtual void set_period() = 0;

};
#endif

Period.h
#ifndef PERIOD_H
#define PERIOD_H

#include "Statistic.h" //Dependency Generated Source:Period


Target:Statistic
class Period
{
private:
day;
month;
year;

public:

void set_day();
void set_month();
void set_year();

};

#endif

Income_statistics.h
#ifndef INCOME_STATISTICS_H
#define INCOME_STATISTICS_H

#include "Statistic_0.h";

class Income_statistics : Statistic_0


{
public:
void get_income_statistics();

};

#endif

Expenses_statistics.h
#ifndef EXPENSES_STATISTICS_H
#define EXPENSES_STATISTICS_H

#include "Period.h"
#include "Statistic_0.h"

class Expenses_statistics : Period, Statistic_0


{

public:
void get_expenses_statistics();

};

#endif
Діаграма класів шаблону проектування «Пристосуванець» виглядає
наступним чином:

Рисунок 4 – Діаграма класів шаблону проектування «Пристосуванець»

User.h
#ifndef USER_0_H
#define USER_0_H
class Menu_3;

class User_0
{
private:
id;
name;
Menu_3 * menu;

public:
void choose_menu();

};

#endif

Menu.h
#ifndef MENU_3_H
#define MENU_3_H
#include "GoalType.h"
#include "GoalTypeColection.h"

class User;

class Menu
{

private:
User * user;

public:
void choose_option_financialGoal();
};

#endif

GoalTypeColection.h
#ifndef GOALTYPECOLECTION_H
#define GOALTYPECOLECTION_H
#include "FinancinalGoal.h"
class GoalType;
class GoalTypeColection
{
private:
GoalType * goalType;
FinancinalGoal * financinalGoal;

public:
void goal_type_col();

};

#endif

GoalType.h
#ifndef GOALTYPE_H
#define GOALTYPE_H
#include "FinancinalGoal.h"

class GoalTypeColection;
class GoalType
{

private:
goalType;
icon;
GoalTypeColection * goalTypeColection;
FinancinalGoal * financinalGoal;

public:
void display_inforamtion();
void get_icon();
};
#endif

FinancialGoal.h
#ifndef FINANCINALGOAL_H
#define FINANCINALGOAL_H

class FinancinalGoal
{
private:
goalType;
goalDescription;
targetAmount;
currentAmount;

public:
void setGoalDescription();
void setTargetAmount();
void setCurrentAmount();
void getGoalType();
void getGoalDescription();
void getTargetAmount();
void getCurrentAmount();

};
#endif
Висновки

Під час виконання даної роботи проведено ознайомлення з


Декоратором та Легковаговиком, на основі яких формалізовані вимoги до
проекту на основі UML Use case діаграми. Досліжено і розроблено
архітектурні моделі проектування ПЗ виходячи з даних шаблонів із
застоуванням інструментального засобу проектування ПЗ IBM Rational
Software Architect у вигляді моделі предметної області (МПО), описана
діаграмою класів (UML Class Diagram). Відповідно до вибраної АМ
проектування здійснена автоматична ґенерація програмного коду на мові C+
+. Побудувано діаграму ВВ (прецедентів) та діаграму класів,
використовуючи можливості середовища проектування IBM RSA.

You might also like