Lab2_Stepnoy (Лабораторные работы РИСиБД)
Описание файла
Файл "Lab2_Stepnoy" внутри архива находится в папке "Лабораторные работы РИСиБД". Документ из архива "Лабораторные работы РИСиБД", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.
Онлайн просмотр документа "Lab2_Stepnoy"
Текст из документа "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;
}
}
class Program
{
static void Main(string[] args)
{
Delegate MyO = new Delegate();
Console.WriteLine(MyO.Func());
MyO.GetFunc(new FirstCl());
Console.WriteLine(MyO.Func());
MyO.GetFunc(new SecondCl());
Console.WriteLine(MyO.Func());
Console.ReadLine();
}
}
}
UML-диаграммы
Диаграмма классов
Диаграмма последовательности
Литература