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

2015-08-23СтудИзба

Описание файла

Файл "ПКРПСиБД LAB2 Захаров А.Е." внутри архива находится в папке "Лабораторная работа 2". Документ из архива "Лабораторная работа 2", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.

Онлайн просмотр документа "ПКРПСиБД LAB2 Захаров А.Е."

Текст из документа "ПКРПСиБД LAB2 Захаров А.Е."

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

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

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

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

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

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

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

Выполнил

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

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

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

Куриленко Иван Евгеньевич

Москва, 2012

Цель работы

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

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

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

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

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

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

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

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

Требования

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

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

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

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

Основные шаблоны

Описание

Неизменяемый объект (англ. Immutable object) – шаблон для создания объектов, которые не могут быть изменены после их создания. Объект может быть неизменяемым как полностью, так и частично. В некоторых случаях объект считается неизменяемым с точки зрения пользователя класса, даже если изменяются его внутренние поля.

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

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

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

  1. Гарантия сохранения состояния объекта, в котором он находился на момент создания.

  2. Поскольку нет опасности, что неизменяемые объекты изменят своё значение, можно свободно кэшировать ссылки на них и быть уверенным, что эта ссылка обратится к этому же значению позже. Соответственно, поскольку их свойства не могут измениться, можно кэшировать их поля и результаты их методов.

  3. С неизменяемыми объектами легче работать, чем с изменяемыми. Они могут быть только в одном состоянии и поэтому всегда согласованы, и к ним легко организовать совместный доступ.

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

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

  2. Не возможно быть абсолютно уверенным, что не возникнет необходимости, описанной в 1 пункте.

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

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

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 Planet : Immutable

{

private string name;

private double mass;

private double g;

public string Name {

get { return name; }

set { checkImmutable(); name = value; }

}

public double M {

get { return mass; }

set { checkImmutable(); mass = value; }

}

public double G {

get { return g; }

set { checkImmutable(); g = value; }

}

public Planet(string name, double M, double g) {

this.name = name;

this.mass = M;

this.g = g;

makeImmutable();

}

}

class Program

{

static void Main(string[] args) {

Planet earth = new Planet("Земля", 5.9736 * Math.Pow(10, 24), 9.780327);

Console.WriteLine("Масса Земли " + earth.M + " кг");

Console.WriteLine("Пытаемся изменить массу планеты");

try {

earth.M = 10000000000;

}

catch (Exception e) {

Console.ForegroundColor = ConsoleColor.Red;

Console.WriteLine(e.Message);

Console.ResetColor();

}

Console.WriteLine("Масса Земли " + earth.M + " кг");

Console.ReadLine();

}

}

}

UML-диаграммы


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

Основные шаблоны

Описание

Маркерные интерфейсы (англ. Marker interface) – интерфейсы без каких-либо методов, действующие как маркеры. Они лишь говорят разработчику (или компилятору, для некоторых языков программирования), что объекты классов, реализующие этот интерфейс, должены иметь отличительные черты, восприниматься по-другому. Маркерные интерфейсы также известных как "теги", поскольку они добавляют общий тег ко всем унаследованным классам, объединяя их в одну категорию.

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

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

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

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

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

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

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

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

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

namespace Lab2_2

{

interface IMathExceptionMarker { }

abstract class MyException

{

public string Message;

}

class DivException : MyException, IMathExceptionMarker

{

public DivException() { Message = "Деление на ноль!"; }

}

class OverflowException : MyException

{

public OverflowException() { Message = "Переполнение стека"; }

}

class LgException : MyException, IMathExceptionMarker

{

public LgException()

{

Message = "lg(x), x > 0!!";

}

}

class Program

{

static void Main(string[] args)

{

List exceptions = new List();

exceptions.Add(new DivException());

exceptions.Add(new OverflowException());

exceptions.Add(new LgException());

foreach (MyException e in exceptions)

{

if(!(e is IMathExceptionMarker))

Console.WriteLine(e.Message);

}

Console.ReadLine();

}

}

}

UML-диаграммы


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

Основные шаблоны

Описание

Контейнер свойств (англ. Property Container) – шаблона, обеспечивающий динамическую расширяемость уже готового объекта.

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

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

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

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

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

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

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

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

using System;

using System.Collections;

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 PropertyContainer Add(SortedList list)

{

for (int i = 0; i < list.Count; i++)

Add(list.GetKey(i).ToString(), list.GetByIndex(i));

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;

}

}

namespace Lab2_3

{

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-диаграммы


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

Основные шаблоны

Описание

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

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

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

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

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

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

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

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

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

using System;

using System.Text;

namespace Lab2_4

{

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5280
Авторов
на СтудИзбе
419
Средний доход
с одного платного файла
Обучение Подробнее