
Болтушкин, Маркушин, Туранов, 712-2, лабораторная 2
.docxМинистерство науки и высшего образования Российской Федерации
Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОННИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ
Отчет по лабораторной работе №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");
}
}