Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LABA4

.pdf
Скачиваний:
2
Добавлен:
25.05.2023
Размер:
338.08 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР) Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

Паттерны проектирования

Отчет по лабораторной работе №4 по дисциплине «Технологии и методы программирования»

Вариант №1

Выполнил Студент гр. 730-2

Подойницын К.В.

____Фатеев А.В.

____Астра Г.А.

23.01.2023

Принял Преподаватель каф. КИБЭВС

Давыдова Е.М.

23.01.2023

Томск 2023

Введение

В данной лабораторной работе необходимо изучить основные паттерны

проектирования и реализовать их на практике согласно варианту 1, это хранитель и

прототип.

2

Ход работы

Паттерн Хранитель используется для сохранения внутреннего состояния. В классе

«Originator» происходят все действия создания объекта и изменение его атрибутов.

Также обязательно имеются методы сохранения и возврата состояния. С помощью метода, в котором сохраняется состояние, происходит создания «воспоминания» с

состоянием «Originator». А все хранящиеся воспоминания находятся в классе

«Caretaker». В итоге можно с помощью метода возврата состояния к можно вернуть сохраненный воспоминания. Ниже представлен код примера. На рисунке 1.1 вывод работы программы.

//MEMENTO

class Memento

{

public string Color { get; private set; } public string Figure { get; private set; }

public string Transparency { get; private set; }

public Memento(string color, string figure, string transparency)

{

Color = color; Figure = figure;

Transparency = transparency;

}

}

//CARETAKER class SaveHistory

{

public Stack<Memento> History { get; private set; } public SaveHistory()

{

History = new Stack<Memento>();

}

}

//ORIGINATOR class Editor

{

private string Color; private string Figure; private string Transparency;

public Editor(string figure, string color, string transparency)

{

Color = color; Figure = figure;

Transparency = transparency;

Console.WriteLine($"Фигура создана. Характеристики: " +

$"Фигура = {Figure}, Цвет = {Color}, Прозрачность = {Transparency}\n");

}

public void SetColor(string color)

{

Color = color;

Console.WriteLine($"Установлен цвет -- {color}");

}

public void SetFigure(string figure)

{

Figure = figure;

3

Console.WriteLine($"Установленая фигура -- {figure}");

}

public void SetTransparency(string transparency)

{

Transparency = transparency;

Console.WriteLine($"Установленая прозрачность -- {transparency}");

}

public Memento Save()

{

Console.WriteLine($"Сохранение. Характеристики: " +

$"Фигура = {Figure}, Цвет = {Color}, Прозрачность = {Transparency}\n"); return new Memento(Color, Figure, Transparency);

}

public void ReturnSave(Memento memento)

{

Color = memento.Color; Figure = memento.Figure;

Transparency = memento.Transparency; Console.WriteLine($"Сохранение отменено. Характеристики: " +

$"Фигура = {Figure}, Цвет = {Color}, Прозрачность = {Transparency}\n");

}

public void GetFeature()

{

Console.WriteLine($"Характеристики: " +

$"Фигура = {Figure}, Цвет = {Color}, Прозрачность = {Transparency}\n");

}

}

static void Main(string[] args)

{

Editor editor = new Editor("Квадрат", "Желтый", "98%"); editor.SetFigure("Ромб");

SaveHistory history = new SaveHistory(); history.History.Push(editor.Save()); editor.SetColor("Зеленый"); editor.SetTransparency("43%"); editor.GetFeature(); editor.ReturnSave(history.History.Pop());

}

}

4

Рисунок 1.1 – Вывод работы программы

Паттерн прототип производит создание объекта на основе клонирования существующего объекта.

Далее приведен код, где есть родительский класс Interface Character, от которого идут потомки с теми же методами, но с другими типами данных.

class Program

{

static void Main(string[] args)

{

Character gamer = new Human(1500, 40); Character clonedgamer = gamer.Clone(); gamer.GetInfo(); clonedgamer.GetInfo();

gamer = new Human(100, 40); gamer.GetInfo(); clonedgamer.GetInfo();

gamer = new Knight("Тяжелый"); clonedgamer = gamer.Clone(); gamer.GetInfo(); clonedgamer.GetInfo(); Console.Read();

}

}

interface Character

{

Character Clone(); void GetInfo();

}

class Human : Character

{

int HP;

5

int damage;

public Human(int hp, int dmg)

{

HP = hp; damage = dmg;

}

public Character Clone()

{

return new Human(this.HP, this.damage);

}

public void GetInfo()

{

Console.WriteLine("Человек, твоё здоровье {0} и урон {1}", HP, damage);

}

}

class Knight : Character

{

string knight_class;

public Knight(string kn_cl)

{

knight_class = kn_cl;

}

public Character Clone()

{

return new Knight(this.knight_class);

}

public void GetInfo()

{

Console.WriteLine("Рыцарь, твой класс {0}", knight_class);

}

}

}

Рисунок 1.2 – Вывод работы программы

6

Заключение

В ходе выполнения лабораторной работы были созданы примеры паттернов

Хранитель и Прототип, и протестированы.

7

Соседние файлы в предмете Технологии и методы программирования