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

лабы / отчет прога лаба 3

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

ФЕДЕРАЛЬНОЕ АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА

(РОСАВИАЦИЯ)

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)

Кафедра вычислительных машин, комплексов, сетей и систем.

Лабораторная работа защищена с оценкой ____________________

____________________

(подпись преподавателя, дата)

ЛАБОРАТОРНАЯ РАБОТА №3

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

Вариант 16

Тема: «Шаблоны проектирования.»

Выполнила студентка группы ИС2-1

Магальник Екатерина Борисовна

Руководитель: Надейкина Людмила Анатольевна

МОСКВА – 2023

Цель лабораторной работы:

Ознакомиться с основными шаблонами проектирования, научиться применять их при проектировании и разработке ПО.

Проблема (решаемая задача):

Как обеспечить унифицированный интерфейс с набором разрозненных реализаций или интерфейсов, например, с подсистемой, если нежелательно высокое связывание с этой подсистемой или реализация подсистемы может измениться?

Решение:

Определить одну точку взаимодействия с подсистемой — Фасадный объект, обеспечивающий общий интерфейс с подсистемой, и возложить на него обязанность по взаимодействию с её компонентами.

Фасад — это внешний объект, обеспечивающий единственную точку входа для служб подсистемы. Реализация других компонентов подсистемы закрыта и не видна внешним компонентам.

Теоретические сведения:

Задача каждого паттерна - дать четкое описание проблемы и ее решения в соответствующей области.

В общем случае описание паттерна всегда содержит следующие элементы:

1. Название паттерна. Представляет собой уникальное смысловое имя, однозначно определяющее данную задачу или проблему и ее решение.

2. Решаемая задача. Здесь дается понимание того, почему решаемая проблема действительно является таковой, четко описывает ее границы.

3. Решение. Здесь указывается, как именно данное решение связано с проблемой, приводится пути ее решения.

4. Результаты использования паттерна. Обычно приводятся достоинства, недостатки и компромиссы.

Существуют несколько типов паттернов проектирования, каждый из которых предназначен для решения своего круга задач:

• Порождающие паттерны, предназначенные для создания новых объектов в системе.

• Структурные паттерны, решающие задачи компоновки системы на основе классов и объектов.

• Паттерны поведения, предназначенные для распределения обязанностей между объектами в системе.

В общем случае описание каждого паттерна (шаблона) проектирования содержит следующие обязательные элементы:

1. Название паттерна (оригинальное и русскоязычное). Если паттерн имеет несколько имен, то они также приводятся.

2. Назначение паттерна. Здесь указывается решаемая паттерном задача.

3. Общее описание паттерна.

4. Структура паттерна в виде UML-диаграммы классов.

5. Реализация паттерна с примерами кода на C++.

6. Последствия применения паттерна.

Фасад — паттерн, структурирующий объекты.

Предоставляет унифицированный интерфейс вместо набора интерфейсов некоторой подсистемы. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы. Разбиение на подсистемы облегчает проектирование сложной системы в целом. Общая цель всякого проектирования — свести к минимуму зависимость подсистем друг от друга и обмен информацией между ними. Один из способов решения этой задачи — введение объекта фасад, который предоставляет единый упрощенный интерфейс к более сложным системным средствам.

Порядок выполнения лабораторной работы:

Листинг программы:

using PersonalComputer;

using System;

namespace PersonalComputer //лаба_4_3_сем_шарп

{

class Starting

{

public void Starting1()

{

Console.WriteLine("....Starting a PC....\n");

}

}

class LoadingOS

{

public void LoadindOS1()

{

//return "Starting processor\n";

Console.WriteLine("....Loading an operation system....\n");

}

}

class LoadingSW

{

public void LoadingSW1()

{

//return "Starting HDD card\n";

Console.WriteLine("....Loading a software....\n");

}

}

class ShuttingDown

{

public void ShuttingDown1()

{

//return "Starting video card\n";

Console.WriteLine("....Shutting the PC down....\n");

}

}

public class PCFacade

{

private Starting starting;

private LoadingOS loadingos;

private LoadingSW loadingsw;

private ShuttingDown shuttingdown;

public PCFacade()

{

starting = new Starting();

loadingos = new LoadingOS();

loadingsw = new LoadingSW();

shuttingdown = new ShuttingDown();

}

public void s1()

{

starting.Starting1();

}

public void s2()

{

loadingos.LoadindOS1();

}

public void s3()

{

loadingsw.LoadingSW1();

}

public void s4()

{

shuttingdown.ShuttingDown1();

}

}

}

class Program

{

static void Main(string[] args)

{

Console.WriteLine("What operation do you want to do?\n Type 1 for starting PC\n Type 2 for loading OS\n Type 3 for loading software\n Type 4 for shutting PC down\n Type 0 if you wanna exit");

m:

int i = Convert.ToInt32(Console.ReadLine());

if (i==1)

{

PCFacade facade = new PCFacade();

facade.s1();

goto m;

} else if (i==2)

{

PCFacade facade = new PCFacade();

facade.s2();

goto m;

} else if ( i==3)

{

PCFacade facade = new PCFacade();

facade.s3();

goto m;

} else if ( i==4)

{

PCFacade facade = new PCFacade();

facade.s4();

goto m;

} else if ( i==0)

{

Console.WriteLine("Exiting... ");

}

}

}

Результат работы программы:

  1. Какие существуют паттерны?

Существуют несколько типов паттернов проектирования, каждый из которых предназначен для решения своего круга задач:

• Порождающие паттерны, предназначенные для создания новых объектов в системе.

В состав входят: прототип, абстрактная фабрика, строитель.

• Структурные паттерны, решающие задачи компоновки системы на основе классов и объектов.

В состав входят: адаптер, компоновщик, заместитель, приспособленец.

• Паттерны поведения, предназначенные для распределения обязанностей между объектами в системе.

В состав входят: шаблонный метод, интерпретатор, посредник, цепочка обязанностей, наблюдатель, команда.

  1. Паттерны поведения

Паттерны поведения связаны с алгоритмами и распределением обязанностей между объектами. Речь в них идет не только о самих объектах и классах, но и о типичных схемах взаимодействия между ними. Паттерны поведения характеризуют сложный поток управления, который трудно проследить во время выполнения программы. Внимание акцентируется не на схеме управления как таковой, а на связях между объектами.

В паттернах поведения уровня класса для распределения поведения между разными классами используется наследование. В этой главе описано два таких паттерна. Из них более простым и широко распространенным является шаблонный метод, который представляет собой абстрактное определение алгоритма. Алгоритм здесь определяется пошагово. На каждом шаге вызывается либо примитивная, либо абстрактная операция. Алгоритм детализируется за счет подклассов, где определяются абстрактные операции. Другой паттерн поведения уровня класса представляет грамматику языка в виде иерархии классов и реализует интерпретатор как последовательность операций над экземплярами этих классов.

В паттернах поведения уровня объектов используется не наследование, а композиция. Некоторые из них описывают, как с помощью кооперации множество равноправных объектов справляется с задачей, которая ни одному из них не под силу. Важно здесь то, как объекты получают информацию о существовании друг друга. Одноранговые объекты могут хранить ссылки друг на друга, но это увеличит степень связанности системы. При максимальной степени связанности каждому объекту пришлось бы иметь информацию обо всех остальных. Эту проблему решает паттерн посредник. Посредник, находящийся между объектами-коллегами, обеспечивает косвенность ссылок, необходимую для разрыва лишних связей.