Паттерны поведения. Назначение, обобщенные свойства, применение. Пример реализации

Поведенческие шаблоны (англ. behavioral patterns) — шаблоны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов.

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

Command/Команда, Interpreter/Интерпретатор

Iterator/Итератор,Cursor,Mediator/Посредник Memento/Хранитель,Observer/Наблюдатель,

Наблюдатель - паттерн поведения объектов, устанавливающий систему оповещения объектами своих соседей в процессе их деятельности. Известен также под именами: Dependents (подчиненные), Publish-Subscribe (издатель-подписчик). оригинал источник codelab.ru codelab.ru

Очень часто в процессе функционирования и взаимодействия объектов системы нужно оповещать других участников по завершении какой-нибудь значимой операции.

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

Команда.

Инкапсулирует запрос как объект, позволяя тем самым задавать параметры

клиентов для обработки соответствующих запросов, ставить запросы в очередь

или протоколировать их, а также поддерживать отмену операций.

class Command {

public:

virtual ~Command ();

virtual void Execute () = 0;

protected:

Command ( ) ;

};

class OpenCommand : public Command {

public :

OpenCommand (Application*) ;

virtual void Execute ( ) ;

protected:

};

void OpenCommand::Execute () {

const char* name = AskUser();

if (name != 0) {

Document* document = new Document(name);

_application->Add(document);

document->0pen() ;}}


 

12. Язык XML: средства, назначения и особенности использования. XML и DTD.

XML-это потомок (одна из возможных реализаций спецификации, как и HTML) языка Standard Generalized Markup Language (SGML), который является очень мощным, но сложным языком разметки. XML используется для описания данных (объектов). Документы XML — это простые текстовые документы с независимым от платформы способом представления данных. XML чувствителен к регистру и требует либо открывающего и закрывающего тэгов, либо тэга, который как открывает, так и закрывает элемент. Название элемента должно начинаться с буквы, символа подчеркивания или двоеточия, хотя на практике двоеточие использовать не следует. Название не должно начинаться со строчки "XML" из любых комбинаций букв верхнего или нижнего регистров.

Документ XML состоит из необязательного пролога, который, как правило, описывает версию XML, тела, которое содержит информацию, и необязательного эпилога, который содержит комментарии или инструкции обработки.

<book> <chapter>
<title>Введение</title>
</chapter>
<chapter>
<title>История …</title>
<subChapter>
<title>Часть 1</title>
</subChapter>
<subChapter>
<title>Часть 2</title>
</subChapter>
</chapter>
<chapter>
<title>Содержание</title>
</chapter> </book>

DTD описывает схему документа для конкретного языка разметки посредством набора объявлений (объектов-параметров, элементов и атрибутов), которые описывают его класс (или тип) с точки зрения синтаксических ограничений этого документа. Также DTD может объявлять конструкции, которые всегда необходимы для определения структуры документа, но, зато, могут влиять на интерпретацию определённых документов.

<!ELEMENT people_list (person*)>

<!ELEMENT person (name, birthdate?, gender?, socialsecuritynumber?)>

<!ELEMENT name (#PCDATA) >

<!ELEMENT birthdate (#PCDATA) >

<!ELEMENT gender (#PCDATA) >

<!ELEMENT socialsecuritynumber (#PCDATA) >

Начиная с первой строки:Элемент <people_list> содержит любое число элементов <person> . Знак <*> означает что возможно 0, 1 или более элементов <person> внутри элемента <people_list>.

Элемент <person> содержит элементы <name>, <birthdate>, <gender> и <socialsecuritynumber>. Знак <?> означает что элемент необязателен. Элемент <name> не содержит <?>, что означает что элемент <person> обязательно должен содержать элемент <name>.Элемент <name> содержит данные.Элемент <birthdate> содержит данные.Элемент <gender> содержит данные.Элемент <socialsecuritynumber> содержит данные.Пример XML-документа, использующего этот DTD:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE people_list SYSTEM "example.dtd">

<people_list>

<person>

<name>Fred Bloggs</name>

<birthdate>27/11/2008</birthdate>

<gender>Male</gender>

<socialsecuritynumber>1234567890</socialsecuritynumber>

</person>

</people_list>

Язык XML и схемы данных.

XML-это потомок языка Standard Generalized Markup Language (SGML), который является очень мощным, но сложным языком разметки. XML используется для описания данных (объектов). Документы XML — это простые текстовые документы с независимым от платформы способом представления данных. XML чувствителен к регистру и требует либо открывающего и закрывающего тэгов, либо тэга, который как открывает, так и закрывает элемент. Название элемента должно начинаться с буквы, символа подчеркивания или двоеточия, хотя на практике двоеточие использовать не следует. Название не должно начинаться со строчки "XML" из любых комбинаций букв верхнего или нижнего регистров.

Схемы данных (Schemas) являются альтернативным способом создания правил построения XML-документов. По сравнению с DTD, схемы обладают более мощными средствами для определения сложных структур данных, обеспечивают более понятный способ описания грамматики языка, способны легко модернизироваться и расширяться. Безусловным достоинством схем является также то, что они позволяют описывать правила для XML- документа средствами самого же XML.

XML schema: XML-документы, определяющие типы данных, содержание, структуру и допустимые элементы в связанных документах. Схемы также используются для описания связанных с элементами документа инструкций семантической обработки.

Внешне документы схем очень похожи на те документы XML. Мы размечаем документ при помощи специальных элементов, выполняющих в схемах роль инструкций. Эти инструкции составляют набор правил, используя которые, программа-клиент будет делать вывод о том, корректен документ или нет. Схема данных, например, может выглядеть следующем образом:

<schema id="OurSchema">

<elementType id="#title">

<string/>

</elementType>

<elementType id="photo">

<element type="#title">

<attribute name="src"/>

</elementType>

<elementType id="gallery">

<element type="#photo">

</elementType>

</schema>

Если мы включим приведенные правила внутрь XML- документа, программа-клиент сможет использовать их для проверки. Т.е. она теперь сможет определить, что правильным будет являться следующий фрагмент:

<gallery>

<photo id="1"><title>My computer</title></photo>

<photo id="2"><title>My family</title></photo>

<photo id="3"><title>My dog</title></photo>

</gallery>