ПКРПСиБД LAB2 Бычков А.С. (Лабораторная работа 2)

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

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

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

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

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

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

Московский Энергетический Институт(Технический Университет)

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

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





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

по дисциплине:

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

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











Выполнил:

Бычков А.С.







Москва

2012 г.

Шаблон “IMMUTABLE OBJECT”

Категория

Фундаментальный

Описание

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

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

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

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



1) Исключает необходимость синхронизации доступа при многопоточном программировании

2) Позволяет безопасно копировать ссылки на объект, а не сам объект

Недостатки



Т.к при любом изменении объекта заново выделяется память и создается его копия, то при частом изменении возможны высокие затраты памяти и времени выполнения программы. Например именно по этому при трудоемкой работе со строками их не используют на прямую а прибегают к помощи вспомогательных классов (например StringBuffer Для Java).

Реализация

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace patternsimpl

{

public class ImmutableUser

{

public readonly String mUserName;

public readonly DateTime mUserBirthday;

public ImmutableUser(String aUserName, DateTime aUserBirthday)

{

mUserName = aUserName;

mUserBirthday = aUserBirthday;

}

public ImmutableUser setUserName(String aUserName)

{

return new ImmutableUser(aUserName, mUserBirthday);

}

public ImmutableUser setUserBirthday(DateTime aBirthday)

{

return new ImmutableUser(mUserName, aUserBirthday);

}

}

}

UML-диаграмма

DELEGATION PATTERN

Категория

Поведенческий

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

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



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

  • Легкость тестирования из за модульности

  • Более прозрачен для понимания

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

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

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

public interface IDesigner

{

void createDesign();

}

public class ProfessionalDesigner : IDesigner

{

public void createDesign()

{

Console.Out.WriteLine("Creating design....");

Thread.Sleep(3000);

Console.Out.WriteLine("Done!");

}

}

public class Freelancer : IDesigner

{

public Boolean isLowOnMoney = true;

public void createSite()

{

Console.Out.WriteLine("OK NOW I'M GONNA MAKE THIS BRILLIANT SITE");

createDesign();

createCode();

Console.Out.WriteLine("SITE IS FINALLY DONE");

}

public IDesigner hireDesigner()

{

if (isLowOnMoney)

{

return new HungryStudent();

}

else

{

return new ProfessionalDesigner();

}

}

public void createCode()

{

Console.Out.WriteLine("Started creating code");

System.Threading.Thread.Sleep(1500);

Console.Out.WriteLine("Done with coding");

}

public void createDesign()

{

hireDesigner().createDesign();

}

}

public class HungryStudent : IDesigner

{

public void createDesign()

{

Console.Out.WriteLine("Creating design....");

for (int i = 0; i < 4; i++)

{

System.Threading.Thread.Sleep(1000);

Console.Out.WriteLine("FAILED :(((");

}

Console.Out.WriteLine("WOOHO Done!");

}

}

UML-диаграммаклассов





MARKER INTERFACE

Категория шаблона

Фундаментальный

Описание

Маркерный интерфейс - интерфейс не содержащий ни одного метода.

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

Данный шаблон используют, когда необходимо показать, что какая-то часть класса обладает особым поведением.

Примеры для Java: Serializable, Clonable, Remote;

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

Легко проверить объект на особое поведение с помощью (obj is IMarker);

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

Невозможно отменить маркер для подклассов

Реализация



using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace patternsimpl

{

public interface IImmutableMarker

{

}

}



namespace patternsimpl

{

public class ImmutableUser : IImmutableMarker

{

public readonly String mUserName;

public readonly DateTime mUserBirthday;

public ImmutableUser(String aUserName, DateTime aUserBirthday)

{

mUserName = aUserName;

mUserBirthday = aUserBirthday;

}

public ImmutableUser setUserName(String aUserName)

{

return new ImmutableUser(aUserName, mUserBirthday);

}

public ImmutableUser setUserBirthday(DateTime aBirthday)

{

return new ImmutableUser(mUserName, aBirthday);

}

}

}



UML-диаграммаклассов




PROPERTY CONTAINER

Категория шаблона

Фундаментальный

Описание

Функция шаблона «Контейнер свойств» состоит в том, чтобы приложение, уже построенное и развернутое, могло динамически расширяться.

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

Если разработчику неизвестно, что такое Map и Dictionary.

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

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

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

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

Реализация

public interface IPropertyContainer

{

String getProperty(String aKey);

void addProperty(String aKey, String aValue);

void removeProperty(String aKey);

String[] getKeyset();

}

public class Film : IPropertyContainer

{

public readonly String mName;

public readonly DateTime mRealeaseDate;

private Dictionary mProperties = new Dictionary();

public Film(String aName, DateTime aRealeaseDate)

{

mName = aName;

mRealeaseDate = aRealeaseDate;

}

public String getName()

{

return mName;

}

public DateTime getRealeaseDate()

{

return mRealeaseDate;

}

public void addProperty(String aKey, String aValue)

{

mProperties.Add(aKey, aValue);

}

public String getProperty(String aKey)

{

return mProperties[aKey];

}

public void removeProperty(String aKey)

{

mProperties.Remove(aKey);

}

public String[] getKeyset()

{

return mProperties.Keys.ToArray();

}

}

UML-диаграммаклассов

ТЕСТИРОВАНИЕ

class Test

{

public static void Main(string[] args)

{

testImmutable();

testIMarker();

testPropertyContainer();

testDelegationPattern();

Console.ReadLine();

}

public static void testIMarker()

{

Console.Out.WriteLine(">>>>TEST IMARKER<<<<<");

ImmutableUser user = new ImmutableUser("me", DateTime.Now);

Object someObject = new Object();

Console.Out.WriteLine(user is IImmutableMarker);

Console.Out.WriteLine(someObject is IImmutableMarker);

Console.Out.WriteLine();

}

public static void testImmutable()

{

Console.Out.WriteLine(">>>>TEST IMMUTABLE<<<<<");

ImmutableUser user = new ImmutableUser("me", DateTime.Now);

Console.Out.WriteLine("user name is " + user.mUserName + " and his birthday is " + user.mUserBirthday.ToShortDateString());

user = user.setUserName("not_me");

Console.Out.WriteLine("user name is " + user.mUserName + " and his birthday is " + user.mUserBirthday.ToShortDateString());

Console.Out.WriteLine();

}

public static void testPropertyContainer()

{

Console.Out.WriteLine(">>>>TEST PROPERTY CONTAINER<<<<<");

Film film = new Film("MyFilm", DateTime.Now);

film.addProperty("author", "great person");

film.addProperty("staring", "great actor");

Console.WriteLine("Film name is " + film.mName + " released in " + film.mRealeaseDate.ToShortDateString());

Console.WriteLine("============ADDITIONAL INFO===========");

foreach (String property in film.getKeyset())

{

Console.WriteLine(property + " ---> " + film.getProperty(property));

}

Console.Out.WriteLine();

}

public static void testDelegationPattern()

{

Console.Out.WriteLine(">>>>TEST DELEGATION<<<<<");

Freelancer freelancer = new Freelancer();

freelancer.createSite();

freelancer.isLowOnMoney = false;

freelancer.createSite();

}

}

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