Лабораторная работа 6 (ПКРПСиБД LAB6 Захаров А.Е.)

Посмотреть архив целиком

Национальный Исследовательский Университет

МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ

Институт автоматики и вычислительной техники

Кафедра прикладной математики





Лабораторная работа № 6

Реализация одного из структурных

шаблонов проектирования

Курс «Проектирование крупных распределенных программных систем и баз данных»



Выполнил

студент группы А-13-08

Захаров Антон

(8 вариант)


Преподаватель

к.т.н., доц. Куриленко Иван Евгеньевич


Цель работы

Научиться применять структурные шаблоны проектирования.

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

  1. С использованием одного из языков программирования из множества (C++, C#, Java) реализовать структурный шаблон проектирования «Адаптер»
    (8 вариант).

  2. Разработать UML модель.

Требования

  • Наличие работающей демонстрационной программы с исходным кодом.

  • Наличие UML-модели в электронном виде, иллюстрирующей шаблон, полученной с помощью специализированного диаграммера (Rational Enterprise Architect, Visual Paradigm, Visual Studio).

  • Наличие отчёта в печатном виде, содержащего теоретическое введение, UML-модель и исходный код.

Адаптер

Структурный шаблон проектирования

Описание

Адаптер (Adapter) – структурный шаблон проектирования, предназначенный для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс.

По схеме, используемой для работы с адаптируемым объектом, выделяют два варианта:

  • Адаптер объекта – использует композицию, т.е. содержит экземпляр адаптируемого объекта.

  • Адаптер класса – использует наследование от адаптируемого объекта для получения его функциональности.

Уместность применения

Шаблон следует применять, если необходимо создать класс, производный от вновь определяемого или уже существующего абстрактного класса.

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

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

Преимущества, достигаемые при применении шаблона

  1. Изменяет интерфейс объекта, не изменяя его функциональности. Может адаптировать несколько объектов к одному интерфейсу.

  2. Позволяет повторно использовать уже существующий код.

  3. Содержит или наследует адаптируемый объект.

  4. Простота реализации.

Недостатки шаблона

  1. Доступ к защищённым методам может привести к возникновению ошибок.

  2. Изменения адаптируемого класса может потребовать изменить код адаптера.



Детали реализации

Шаблон реализуется следующим образом:

1. Адаптер объекта

using System;

using System.Windows.Forms;


namespace lab6

{

public interface IGenerator

{

int getRandom();

int getRandom(int maxValue);

int getRandom(int minValue, int maxValue);

}


public class generatorAdapter : IGenerator

{

private readonly Random rand = new Random();


public int getRandom() {

return rand.Next();

}


public int getRandom(int maxValue) {

return rand.Next(maxValue);

}


public int getRandom(int minValue, int maxValue) {

return rand.Next(minValue, maxValue);

}

}


public partial class Form1 : Form

{

private IGenerator generator = new generatorAdapter();


public Form1() {

InitializeComponent();

generate();

}


private void buttonClick(object sender, EventArgs e) {

generate();

}


private void generate() {

label.Text = generator.getRandom(10, 100).ToString();

}

}

}


2. Адаптер класса

using System;

using System.Windows.Forms;


namespace lab6

{

public interface IGenerator

{

int getRandom();

int getRandom(int maxValue);

int getRandom(int minValue, int maxValue);

}


public class generatorAdapter : Random, IGenerator

{

public int getRandom() {

return Next();

}


public int getRandom(int maxValue) {

return Next(maxValue);

}


public int getRandom(int minValue, int maxValue) {

return Next(minValue, maxValue);

}

}


public partial class Form1 : Form

{

private IGenerator generator = new generatorAdapter();


public Form1()

{

InitializeComponent();

generate();

}


private void buttonClick(object sender, EventArgs e)

{

generate();

}


private void generate()

{

label.Text = generator.getRandom(10, 100).ToString();

}

}

}



UML-диаграммы

1. Адаптер объекта






2. Адаптер класса











Литература



  1. Приёмы объектно-ориентированного проектирования. Паттерны проектирования. – СПб.: Питер, 2011. – 368 с.: ил.

  2. PHP: объекты, шаблоны и методики программирования. 3-е изд.: Пер. с англ. – М. : ООО «И.Д. Вильямс», 2011. – 560 с. : ил. – Парал. тит. англ.

Москва, 2012


Случайные файлы

Файл
73993.rtf
30926.rtf
147616.rtf
34656.rtf
97261.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.