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

Болтушкин, Маркушин, Туранов, 712-2, лабораторная 2

.docx
Скачиваний:
0
Добавлен:
23.11.2024
Размер:
108.45 Кб
Скачать

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

Федеральное государственное автономное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОННИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ

Отчет по лабораторной работе №2

по дисциплине «Технологии и методы программирования»

Вариант №1

Студенты гр. 712-2: ___________ Л.С. Болтушкин

___________ В.Д. Маркушин

___________ А.В. Туранов __.__.2024

Руководитель Младший научный сотрудник кафедры КИБЭВС

_______ __________ Б.С. Лодонова

__.__.2024

Томск 2024

Введение

Целью данной лабораторной работы является изучение основных паттернов проектирования и реализации их на практике согласно варианту.

Вариант №1 – Разработать систему Кинопрокат. Пользователь может выбрать определенную киноленту, при заказе киноленты указывается язык звуковой дорожки, который совпадает с языком файла субтитров. Система должна поставлять фильм с требуемыми характеристиками, причем при смене языка звуковой дорожки должен меняться и язык файла субтитров и наоборот.

Задачи:

1. Ознакомиться с краткими теоретическими сведениями;

2. Для решения задачи по варианту выбрать необходимый паттерн;

3. Составить UML диаграмму классов для решения задачи;

4. Написать программу, реализовывая паттерн согласно варианту;

5. Составить отчет согласно ОС ТУСУР 01-2021.

1 Ход работы

Для выполнения лабораторной работы был выбран подходящий паттерн проектирования. В данном случае хорошо подойдет паттерн из каталога «Поведенческие» – «Наблюдатель» (Observer). Этот паттерн позволяет связать несколько объектов таким образом, чтобы изменение одного объекта автоматически отражалось на других. В данной системе мы можем использовать паттерн "Наблюдатель" для синхронизации изменений языка звуковой дорожки и файла субтитров.

На рисунке 1.1 представлена UML диаграмма классов согласно варианту №1.

Рисунок 1.1 – UML диаграмма

Также был написан код на С#, представленный в приложении А.

Результат работы программы изображен на рисунке 1.2.

Рисунок 1.2 – Результат работы программы

Заключение

В ходе выполнения лабораторной работы были изучены основные паттерны проектирования их реализация на практике согласно варианту №1.

Отчет составлен согласно ОС ТУСУР 01-2021.

Приложение А

(обязательное)

Код программы

using System;

using System.Collections.Generic;

// Интерфейс наблюдателя

public interface IObserver

{

void Update(string language);

}

// Интерфейс наблюдаемого объекта

public interface IObservable

{

void AddObserver(IObserver observer);

void NotifyObservers(string language);

}

// Класс звуковой дорожки (наблюдаемый объект)

public class AudioTrack : IObservable

{

private List<IObserver> observers;

private string language;

public AudioTrack(string language = "English")

{

this.language = language;

observers = new List<IObserver>();

}

public void AddObserver(IObserver observer)

{

observers.Add(observer);

}

public void NotifyObservers(string language)

{

foreach (var observer in observers)

{

observer.Update(language);

}

}

public void SetLanguage(string language)

{

this.language = language;

Console.WriteLine($"Звуковая дорожка изменена на: {language}");

NotifyObservers(language);

}

}

// Класс субтитров (наблюдатель)

public class Subtitles : IObserver

{

private string language;

public Subtitles(string language = "English")

{

this.language = language;

}

public void Update(string language)

{

this.language = language;

Console.WriteLine($"Субтитры изменены на: {language}");

}

}

public class Program

{

public static void Main(string[] args)

{

// Создание звуковой дорожки и субтитров

AudioTrack audioTrack = new AudioTrack("English");

Subtitles subtitles = new Subtitles("English");

// Добавление субтитров в список наблюдателей за изменениями звуковой дорожки

audioTrack.AddObserver(subtitles);

// Изменение языка звуковой дорожки, автоматически обновляя субтитры

audioTrack.SetLanguage("Russian");

audioTrack.SetLanguage("English");

}

}