Лабораторные работы РИСиБД (Lab2_Stepnoy)

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



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

«Московский Энергетический Институт»

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

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















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

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

На тему «Реализация шаблона проектирования»



Выполнила студентка

Группы А-13-08

Степная Е.В.



Проверил

Куриленко И.Е.







Москва, 2012





Неизменяемый объект

Категория – базовые шаблоны.

Описание

Неизменяемый объект - объект, который не может быть изменен после своего создания.

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

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

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

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

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

  • Сохранность изначального состояния объекта.

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

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

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

using System;

using System.Text;


public interface IImmutable

{

bool isImmutable { get; }

void makeImmutable();

}



public abstract class Immutable : IImmutable

{

private bool immutable;


public bool isImmutable

{

get { return immutable; }

}


public void makeImmutable()

{

immutable = true;

}


protected void checkImmutable()

{

if (immutable)

throw new Exception("Ошибка! Попытка изменить неизменяемый объект!");

}

}


namespace Lab2_1

{

public class Cvet : Immutable

{

private string element;

private string gColor;


public string Element

{

get { return element; }

set { checkImmutable(); element = value; }

}

public string GColor

{

get { return gColor; }

set { checkImmutable(); gColor = value; }

}

public Cvet(string element, string gColor)

{

this.element = element;

this.gColor = gColor;

makeImmutable();

}


}


}


UML-диаграммы

Диаграмма классов

Диаграмма последовательности

Литература





Маркерный интерфейс

Категория – базовые шаблоны.

Описание

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

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

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

Достоинства

  • Убирать и добавлять маркеры очень просто.

  • Уменьшение программного кода.

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

Недостатки

  • Так как интерфейс явно или неявно реализуется всеми классами-наследниками, нет возможности «снять» маркер с объектов этих классов.

  • Интерфейс определяет контракт на реализацию классов и наследуется всеми потомками.

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace Marker

{

interface Avtomat

{ }


class Student

{

public int ocenka;

}


class AvtomatStudent : Student, Avtomat

{

public AvtomatStudent(int o) { this.ocenka = o; }

}


class ProstoyStudent : Student

{

public ProstoyStudent(int o) { this.ocenka = o; }

}



class Program

{

static void GetFive(Student stud)

{

if (stud is Avtomat)

{

stud.ocenka=5;

}

}


static void Main(string[] args)

{

AvtomatStudent Ivanov = new AvtomatStudent(4);

ProstoyStudent Petrov = new ProstoyStudent(4);


Console.WriteLine("Оценка, которую получит Иванов, если будет сдавать экзамен:" + Ivanov.ocenka);


Console.WriteLine("Оценка, которую получит Петров, если будет сдавать экзамен:" + Petrov.ocenka);

Console.WriteLine();


GetFive(Ivanov);

GetFive(Petrov);


Console.WriteLine("Оценка Иванова " + Convert.ToString(Ivanov.ocenka));

Console.WriteLine("Оценка Петрова " + Convert.ToString(Petrov.ocenka));

Console.ReadKey();


}

}

}


UML-диаграммы

Диаграмма классов

Диаграмма последовательности

Литература





Контейнер свойств

Категория – базовые шаблоны.

Описание

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

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

Шаблон следует применять, если количество свойств объекта требуется динамически увеличивать или уменьшать.

Достоинства

  • Гибкость класса.

  • Возможность динамически расширять или уменьшать объект.

Недостатки

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

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;


namespace Konteyner

{

class PropertyContainer

{

private SortedList list = new SortedList(0);


public PropertyContainer(SortedList list = null)

{

if (list != null)

this.list = list;

}


public PropertyContainer Add(string name, object value = null)

{

if (list.Contains(name))

throw new Exception("Свойство с именем '" + name + "' уже есть");


list.Capacity++;

list.Add(name, value);

return this;

}



public object Get(string name)

{

if (!list.Contains(name))

throw new Exception("Свойство с именем '" + name + "' не задано");


return list.GetByIndex(list.IndexOfKey(name));

}


public PropertyContainer Set(string name, object value)

{

if (!list.Contains(name))

throw new Exception("Свойство с именем '" + name + "' не задано");


list.SetByIndex(list.IndexOfKey(name), value);

return this;

}


public PropertyContainer Remove(params string[] names)

{

foreach (string name in names)

{

if (!list.Contains(name))

throw new Exception("Свойство с именем '" + name + "' не задано");

}


foreach (string name in names)

list.Remove(name);


list.Capacity -= names.Length;

return this;

}

}


class Program

{

static void Main(string[] args)

{

PropertyContainer container = new PropertyContainer();


container.Add("a", 1).Add("b", "Строка");


Console.WriteLine("Значения свойств:\na = " + container.Get("a") + "\nb = " + container.Get("b"));

Console.ReadLine();



}

}

}




UML-диаграммы

Диаграмма классов

Диаграмма последовательности

Литература





Шаблон делегирования

Категория – базовые шаблоны.

Описание

Шаблон делегирования - это способ, которым объект внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту.

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

Шаблон даёт возможность изменить поведение конкретного экземпляра объекта вместо создания нового класса путем наследования. Таким образом, если при работе с объектом велика вероятность возникновения такой ситуации, следует использовать шаблон делегирования.

Достоинства

Применение шаблона делегирования ускоряет процесс внесения серьёзных изменений в логику работы программы.

Недостатки

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

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace Deleg

{

interface IDelegate

{

string Func();

}




class FirstCl : IDelegate

{

public string Func() { return "Функция из первого класса"; }

}


class SecondCl : IDelegate

{

public string Func() {return "Функция из второго класса";}


}


class Delegate : IDelegate

{

IDelegate Myobject = new FirstCl();


public string Func()

{

return Myobject.Func();

}


public void GetFunc(IDelegate m)

{

Myobject = m;


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

Файл
153468.rtf
73583.rtf
144243.rtf
36938.rtf
23113-1.rtf




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