ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ И ПРОЕКТИРОВАНИЕ

Save this PDF as:
 WORD  PNG  TXT  JPG

Размер: px
Начинать показ со страницы:

Download "ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ И ПРОЕКТИРОВАНИЕ"

Транскрипт

1 ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ» Кафедра «Программное обеспечение информационных технологий» ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ И ПРОЕКТИРОВАНИЕ Методические рекомендации к курсовому проектированию для студентов специальностей «Автоматизированные системы обработки информации» и «Информатика и вычислительная техника» Часть 1 Могилев 2015

2 2 УДК ББК 36.4 О 87 Рекомендовано к изданию учебно-методическим отделом Белорусско-Российского университета Одобрено кафедрой «Программное обеспечение информационных технологий» «09» июня 2015 г., протокол 9 Составитель ст. преподаватель Н. К. Борисов Рецензент канд. техн. наук, доц. В. В. Кутузов Методические рекомендации предназначены для проектирования программного обеспечения с использованием объектного подхода при выполнении курсового проекта студентами специальностей «Автоматизированные системы обработки информации» и «Информатика и вычислительная техника» Учебно-методическое издание ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ И ПРОЕКТИРОВАНИЕ Часть 1 Ответственный за выпуск Технический редактор Компьютерная верстка К. В. Овсянников А. А. Подошевко Н. П. Полевничая Подписано в печать. Формат 60 84/16. Бумага офсетная. Гарнитура Таймс. Печать трафаретная. Усл. печ. л.. Уч.-изд. л.. Тираж 56 экз. Заказ Издатель и полиграфическое исполнение: Государственное учреждение высшего профессионального образования «Белорусско-Российский университет». Свидетельство о государственной регистрации издателя, изготовителя, распространителя печатных изданий 1/156 от Пр. Мира, 43, , г. Могилев. ГУ ВПО «Белорусско-Российский университет», 2015

3 3 Cодержание Введение Диаграммы классов Основные понятия Пример диаграммы классов Детали Прецеденты Записывание прецедентов Альтернативные потоки событий Представление прецедентов на диаграммах Порождающие шаблоны проектирования Использование Перечень порождающих шаблонов Abstract Factory Абстрактная фабрика Builder Строитель Factory method Фабричный метод Prototype Прототип Singleton Одиночка Lazy initialization Ленивая инициализация Список литературы

4 4 Введение Многолетний опыт обучения студентов показывает, что освоение любого языка программирования обычно происходит постепенно: сначала осваивается элементарная техника программирования, затем изучаются более сложные элементы и приемы. Язык С# не является исключением. Язык С# [15, 16] и связанную с ним среду.net можно без преувеличения назвать самой значительной технологией для разработчиков программного обеспечения. Среда.NET такая среда, которая была создана для того, чтобы в ней можно было разрабатывать практически любое приложение для запуска в Windows, а C# такой язык программирования, который был специально создан для использования в.net Framework. Студенту в течение трех семестров для приобретения технических навыков объектно-ориентированного программирования и проектирования необходимо выполнить несколько десятков разнообразных упражнений и курсовой проект, в котором закрепляются знания, полученные на практических занятиях. При курсовом проектировании студент также овладеет навыками построения визуальной объектной модели поставленной задачи с использованием универсального языка моделирования UML [1, 2, 4, 5, 9] и шаблонов проектирования [3, 5, 6, 12, 14]. Унифицированный язык моделирования UML стал в настоящее время общепринятым языком разработки программных систем. Это визуальный язык, используемый для изложения основных идей проектирования программных систем. При разработке сложных систем важную роль играют паттерны. Паттерны проектирования программ позволяют описать фрагменты проектного решения, повторно использовать хорошие идеи и перенять полезный опыт других разработчиков. Шаблоны имеют имена и определяются в форме абстрактных эвристик, правил и лучших наработок объектноориентированной технологии. При выполнении курсового проекта студенту следует воспользоваться языком С# и средой.net Framework, которые в достаточной мере поддерживает система программирования Microsoft Visual Studio.NET [7, 10, 11, 13]. При проектировании программной системы можно также применять программы Enterprise Architect фирмы Sparx Systems и PowerDesigner фирмы Sybase [8].

5 5 1 Диаграммы классов Основной задачей логического проектирования при объектном подходе является разработка классов для реализации объектов, полученных при объектной декомпозиции, что предполагает полное описание полей и методов каждого класса. Физическое проектирование при объектном подходе включает объединение классов и других программных ресурсов в программные компоненты, а также размещение этих компонентов на конкретных вычислительных устройствах. UML-диаграммы классов позволяют описывать статический состав классов и отношения между ними. На диаграмме классов можно показать переменные-члены и методы, а также обозначить, что один класс наследует другому или хранит ссылку на другой. Иными словами, можно изобразить все зависимости между классами, существующие в исходном коде. Структуру зависимостей в системе гораздо проще воспринимать, глядя на диаграмму, а не на исходный код. Диаграмма позволяет точно передать структуру зависимостей. На ней сразу видны образуемые зависимостями циклы и оптимальные способы их разрыва, а следовательно, когда абстрактные классы зависят от конкретных, и можно выработать стратегию переориентации таких зависимостей. 1.1 Основные понятия Классы. На рисунке 1.1 показана простейшая диаграмма классов. Простым прямоугольником представлен класс Dialer. Диаграмме соответствует код, приведенный справа от нее. Рисунок 1.1 Значок класса Это наиболее распространенный способ изображения класса. На большинстве диаграмм ничего, кроме имени класса, и не нужно, чтобы понять происходящее. В прямоугольнике класса может быть несколько отделений. В верхнем записывается имя класса, в среднем переменные-члены, в нижнем методы. На рисунке 1.2 показаны отделения и соответствующий такому представлению код.

6 6 Рисунок 1.2 Значок класса с отделениями и соответствующий код Необходимо обратить внимание на символ, предшествующий именам переменных и методов в прямоугольнике класса. Минусом ( ) обозначаются закрытые (private) члены, решеткой (#) защищенные (protected), плюсом (+) открытые (public). Тип переменной или аргумента метода указывается после двоеточия, стоящего за их именами, а вслед за именем метода после двоеточия тип возвращаемого значения. UML-диаграммы не место для объявления переменных и методов. Это лучше делать в исходном коде. Использовать описанные дополнения следует лишь в том случае, когда они существенны с точки зрения назначения диаграммы Ассоциация. Ассоциации между классами чаще всего представляют переменные экземпляра, в которых хранятся ссылки на другие объекты. Например, на рисунке 1.3 показана ассоциация между классами Phone и Button. Направление стрелки говорит о том, что в Phone хранится ссылка на Button. Рядом со стрелкой указывается имя переменной экземпляра, а число говорит о том, сколько в этой переменной может храниться ссылок. Рисунок 1.3 Ассоциация На рисунке 1.3 с объектом Phone связано 15 объектов Button. На рисунке 1.4 показана ситуация, когда ограничения на количество нет. Объект Phonebook (Телефонная книга) может быть связан со многими объектами PhoneNumber (звездочкой обозначается понятие «много»). В C# такое отношение чаще всего реализуется с помощью класса ArrayList или иных классов коллекций. Можно было бы сказать: «Phonebook имеет много PhoneNumber». Следует стараться избегать слова имеет. Общеупотребительные в ООП

7 7 глаголы ИМЕЕТ и ЯВЛЯЕТСЯ не раз приводили к возникновению ошибок. Будем пользоваться словами, описывающими, что именно происходит в программе, например связан с. Рисунок 1.4 Ассоциация один-ко-многим Наследование. В UML нужно очень внимательно относиться к остриям стрелок (рисунок 1.5). Стрелка, указывающая на Employee, обозначает наследование. Если небрежно рисовать стрелки, то будет непонятно, имеется ли в виду наследование или ассоциация. Чтобы не возникало путаницы, лучше располагать классы, связанные отношением наследования, по вертикали, а отношением ассоциация по горизонтали. Рисунок 1.5 Наследование В UML направления всех стрелок определяются зависимостью в исходном коде. Так как имя Employee упомянуто в классе SalariedEmployee, а не наоборот, то стрелка указывает на Employee. Таким образом, в UML стрелка наследования всегда направлена в сторону базового класса. В UML есть специальная нотация для того вида наследования, который существует в C# между классом и интерфейсом. Это пунктирная стрелка наследования, показанная на рисунке 1.6. На рисунке 1.7 продемонстрирован еще один способ донесения той же информации. Интерфейсы можно рисовать в виде «леденцов на палочке», соединенных с классами, которые их реализуют. Такая нотация часто встречается в проектах, реализованных с помощью технологии СОМ.

8 8 Рисунок 1.6 Отношение «реализует» Рисунок 1.7 Обозначение интерфейса «леденцом на палочке» 1.2 Пример диаграммы классов На рисунке 1.8 приведена простая диаграмма классов, входящих в систему банкомата. Она интересна не только тем, что на ней показано, но и тем, что не показано. Следует обратить внимание, что помечены все интерфейсы. Важным является то, чтобы знать, какие классы сделать интерфейсами, а какие реализовать. Например, из диаграммы сразу видно, что класс WithdrawalTransaction общается с интерфейсом CashDispenser. Понятно, что в системе должен быть класс, реализующий CashDispenser, но в данном случае его конкретное воплощение не является существенным. Следует также отметить, что методы различных интерфейсов ИП подробно не документированы. Конечно, в интерфейсе WithdrawalUI будут и еще методы, кроме двух показанных, например PromptForAccount или InformCashDispenserEmpty. Но помещать их на эту диаграмму означало бы только загромоздить ее. Рекомендуется использовать репрезентативную выборку методов.

9 9 Рисунок 1.8 Диаграмма классов банкомата Также необходимо отметить соглашение о расположении ассоциаций по горизонтали, а наследования по вертикали. Это дает возможность не путать два принципиально различных вида отношений. Без такого соглашения было бы очень трудно извлечь смысл из переплетения стрелок. В диаграмме выделены три разные зоны. Транзакции и их действия находятся слева, различные интерфейсы ИП справа, а реализация ИП внизу. Важно, что соединений между группами немного и они расположены регулярно. В одном случае это три ассоциации, причем все направлены в одну сторону. В другом три отношения наследования, объединенные в одну линию. Такие группы и способ их соединения позволяют выделить взаимосвязанные части диаграммы.

10 Изучая диаграмму, можно увидеть код. Насколько код в листинге 1 близок к тому, как он реализовался бы ИП? Листинг 1. UI.cs public abstract class UI : WithdrawalUI, DepositUI, TransferUI private Screen itsscreen; private MessageLog itsmessagelog; public abstract void PromptForDepositAmount(); public abstract void PromptForWithdrawalAmount( ); public abstract void InformInsufficientFunds(); public abstract void PromptFoгEnvelоpe(); public abstract void PrоmptFоrТransferAmоunt(); public abstract void PrоmptFоrFrоmАссоunt(); public abstract void PromptForToAccount(); public void DisplayMessage(string message) itsmessagelоg.lоgmessage(message); itsscreen.displaymessagemessage); 1.3 Детали 10 UML-диаграмму классов можно снабдить многочисленными деталями и дополнениями. Как правило, делать этого не нужно. Но в некоторых случаях они бывают полезны Стереотипы классов. Стереотипы классов указываются в кавычках-«елочках», обычно над именем класса. Обозначение «interface» на рисунке 1.8 это стереотип класса. Программисты, пишущие на С#, могут использовать два стандартных стереотипа: «interface» и «utility». «Interface». Все методы классов, помеченных этим стереотипом, являются абстрактными. Ни один из них нельзя реализовывать. Кроме того, в таких классах не может быть переменных экземпляра. Допускается включать лишь статические переменные. Эта концепция в точности соответствует интерфейсам в языке С# (рисунок 1.9). Можно использовать сокращенную запись, показанную в нижней части рисунка 1.9. Это расходится со стандартом UML, но гораздо удобнее. В C# интерфейс не может содержать статических членов ни переменных, ни методов в отличие от Java.

11 11 «Utility». Все методы и переменные класса со стереотипом «utility» статические. Буч называет такие классы служебными (Class utilities) (рисунок 1.10). Рисунок 1.9 Стереотип класса «interface» Рисунок 1.10 Стереотип класса «utility» Можно определить собственные стереотипы, но для этого нужно понимать, что означает стереотип Абстрактные классы. В UML есть два способа показать, что класс или метод абстрактный. Можно либо записать его имя курсивом, либо воспользоваться свойством abstract. Оба варианта изображены на рисунке Свойства. Свойства, например abstract, можно включить в любой класс. Они сообщают дополнительную информацию, которая обычно не является частью класса. Можно и самим создавать любые свойства. Свойства записываются в виде списка пар имя/значение, разделенных запятыми:

12 12 author=маrtin, date= , file=shape.cs, private Показанные в этом примере свойства не являются частью UML. Кроме того, свойства необязательно должны быть как-то связаны с кодом, а могут содержать произвольные метаданные, abstract единственное определенное в UML свойство, полезное для программистов. Рисунок 1.11 Абстрактные классы Если для свойства не указано значение, предполагается булевское значение true. Следовательно, abstract и abstract = true одно и то же. Свойства записываются справа внизу под именем класса, как показано на рисунке Рисунок 1.12 Свойства Если не считать свойства как abstract, то практически их можно не применять на диаграммах UML Агрегирование. Агрегирование это частный случай ассоциации, подразумевающий отношение часть/целое. На рисунке 1.13 показано, как оно изображается и реализуется. Следует отметить, что реализация неотличима от ассоциации общего вида. Это просто подсказка.

13 13 Рисунок 1.13 Агрегирование Однако в UML нет строгого определения этого отношения. Это приводит к тому, что разные программисты и аналитики понимают под ним что-то свое. В версии UML 2.0 оно практически исчезло. В UML есть одно твердое правило, касающееся агрегирования: целое не может быть собственной частью. Поэтому экземпляры не могут образовывать циклы агрегирований. Один объект не может агрегировать себя самого, два объекта не могут агрегировать друг друга, три объекта не могут образовывать кольцо агрегирований и т. д. (рисунок 1.14). Рисунок 1.14 Недопустимые циклы агрегирования экземпляров Композиция. Композиция это частный случай агрегирования, который показан на рисунке Следует отметить, что реализация неотличима от ассоциации общего вида. Причина в том, что это отношение находит мало применений в программах на языке С#. Напротив, программисты, пишущие на C++, используют его постоянно. Рисунок 1.15 Композиция К композиции применимо то же правило, что и к агрегированию. Не должно быть циклов экземпляров. Владелец (Owner) не может быть од-

14 14 новременно владеемым (Ward). Однако в UML определение композиции более точное: ни один владеемый не может принадлежать одновременно двум владельцам. Диаграмма объектов на рисунке 1.16 некорректна. Однако соответствующая диаграмма классов вполне допустима. Владелец может передавать право владения другому владельцу; владелец несет ответственность за время жизни владеемого. Если владелец уничтожается, то и владеемый должен быть уничтожен вместе с ним. Если владелец копируется, то и владеемый должен быть скопирован вместе с ним. Рисунок 1.16 Недопустимая композиция В C# уничтожение объектов производится неявно сборщиком мусора, поэтому редко возникает необходимость управлять временем жизни объекта. Идея глубокого копирования не чужда С#, но отображать семантику глубокого копирования на диаграммах случается нечасто. Поэтому отношение композиции для описания программ на С# применяется довольно редко. На рисунке 1.17 показано, как композиция используется для обозначения глубокого копирования. Имеется класс Address, содержащий много строк (объектов String). В каждой строке хранится один компонент адреса. Понятно, что при копировании адреса хотелось бы, чтобы копию можно было изменять независимо от оригинала. Поэтому необходимо выполнять глубокое копирование. Отношение композиции между классами Address и String означает, что копирование должно быть глубоким Кратность. В объектах могут храниться массивы или коллекции других объектов либо несколько ссылок на однородные объекты в различных переменных экземпляра. В UML это может быть выражено путем размещения вы-

15 15 ражения кратности на дальнем конце ассоциации. В качестве выражения кратности могут выступать одиночные числа, диапазоны или сочетания того и другого. Например, на рисунке 1.18 показан класс BinaryTreeNode, в котором кратность равна 2. Рисунок 1.17 Глубокое копирование, подразумеваемое композицией Рисунок 1.18 Простой пример кратности

16 Далее приведены несколько допустимых форм записи кратности: 1) Цифра точное число элементов; 2) * или 0..* 0 или более; 3) или 1; в Java часто реализуется ссылкой, которая может быть равной null; 4) 1..* 1 или более; 5) 3..5 от трех до пяти; 6) 0,2..5,9 странно, но допустимо Стереотипы ассоциаций. Ассоциации можно помечать стереотипами, которые изменяют их интерпретацию. На рисунке 1.19 показаны наиболее часто используемые стереотипы. а) 16 б) в) г) Рисунок 1.19 Стереотипы ассоциаций

17 17 Стереотип «create» означает, что экземпляр класса на конце ассоциации создается экземпляром класса в ее начале. Иначе говоря, объектисточник создает объект-цель и затем передает его другим частям системы. В примере показана типичная фабрика. Стереотип «local» применяется, когда класс-источник создает экземпляр класса-цели и сохраняет его в локальной переменной. Отсюда следует, что созданный экземпляр живет не дольше, чем создавший его метод, то есть он не хранится ни в какой переменной экземпляра и не передается другим частям системы. Стереотип «parameter» показывает, что класс-источник получает доступ к объекту-цели через параметр одного из своих методов. Это означает, что источник забывает об этом объекте, как только метод возвращает управление. Объект-цель не сохраняется в переменной экземпляра. Использование пунктирной стрелки зависимости общеупотребимый и удобный способ обозначения параметров. Обычно его предпочитают стереотипу «parameter». Стереотип «delegate» используется, когда класс-источник переадресует вызов своего метода объекту-цели. Этот прием встречается в различных паттернах проектирования: Заместитель (Proxy), Декоратор (Decorator) и Компоновщик (Composite). При использовании этих паттернов стереотип является полезным Вложенные классы. Вложенные классы представляются в UML ассоциацией, дополненной перечеркнутым кружком, как показано на рисунке Рисунок 1.20 Вложенный класс Классы ассоциаций. Ассоциации с кратностью сообщают, что источник соединен с несколькими экземплярами цели, но диаграмма ничего не говорит о том, какой именно контейнер используется. Эту информацию можно представить с помощью класса ассоциации (рисунок 1.21). Класс ассоциации показывает, как реализована эта конкретная ассоциация. На диаграмме он выглядит как обычный класс, соединенный с ассоциацией пунктирной линией. В языке C# это интерпретируется следующим образом: класс-источник содержит ссылку на класс ассоциации, который, в свою очередь, содержит ссылку на объект-цель.

18 18 Рисунок 1.21 Вложенный класс Классами ассоциаций могут быть также классы, которые пишутся для хранения ссылок на экземпляры какого-то другого класса. Иногда эти классы навязывают бизнес-правила. Например, на рисунке 1.22 класс Company содержит несколько экземпляров класса Employee, хранящихся в объекте EmployeeContracts. Рисунок 1.22 Контракт с работником Квалификаторы ассоциаций. Квалификаторы ассоциаций используются, когда ассоциация реализована с помощью некоего ключа, а не обычной ссылки С#. В примере на рисунке 1.23 показан класс LoginTransaction, ассоциированный с Employee. Ассоциация опосредована переменной-членом empid, в которой хранится ключ объекта Employee в базе данных. Рисунок 1.23 Квалификатор ассоциации

19 Код данного квалификатора будет выглядеть (листинг 2). Листинг 2 19 public class BginTransaction private string empid; public string Name() get Employee e=db.getemp(empid); return.getname(); Эта нотация применяется крайне редко. Иногда удобно показать, что один объект ассоциирован с другим с помощью ключа базы данных или словаря. Также важно знать, как квалификатор используется для доступа к объекту. 2 Прецеденты Прецеденты (Use Cases), или варианты использования, достаточно сложны. Главная задача при работе с прецедентами в том, чтобы сделать их простыми. Рекомендуется отказаться от всяких бланков описания прецедентов; записывать их на чистом листе бумаги, или на чистой странице в простейшем текстовом редакторе, или на чистой учетной карточке; не стремиться выписать все подробности; не пытаться выявить сразу все прецеденты. 2.1 Записывание прецедентов Прецеденты не диаграммы, а текстовое описание требований к поведению программы, изложенное под некоторым углом зрения. Прецедент это описание поведения системы. Оно записывается с точки зрения пользователя, который только что попросил систему сделать нечто конкретное. В прецеденте отражена видимая последовательность событий, происходящих в системе в ответ на единственный поступивший от пользователя приказ. Под видимым событием понимается нечто, что пользователь может наблюдать. Прецеденты вообще не описывают скрытое поведение. В них не обсуждаются скрытые механизмы системы. Только то, что пользователь

20 20 может увидеть. Обычно описание прецедента разбито на два раздела. Первый это основной поток событий. В нем описывается, как система реагирует на приказ пользователя в предположении, что все идет нормально. Например, типичный прецедент для кассового терминала. Пробить товар: 1) кассир проводит товар над сканером; сканер считывает штрихкод; 2) описание и цена товара вместе с текущим подитогом отображаются на дисплее, обращенном к покупателю. Описание и цена товара появляются также на экране кассового терминала; 3) описание и цена товара печатаются в чеке; 4) система издает звуковой сигнал, подтверждающий, что штрихкод успешно прочитан. Это основной поток событий прецедента. Ничего более сложного и не нужно. Подробности в описании прецедента необходимы до тех пор, пока он не будет реализован. 2.2 Альтернативные потоки событий Некоторые детали будут относиться к случаям, когда что-то идет не так, как надо. Во время бесед с заинтересованными сторонами следует обсудить и сценарии ошибок. Впоследствии, когда дело будет близиться к реализации прецедента, можно будет более предметно подумать об альтернативных потоках событий, которые станут дополнением к основному потоку. Записывать их можно следующим образом. Штрихкод не считался: Если сканер не смог считать штрихкод, то система должна подать сигнал «просканировать повторно», извещающий кассира о необходимости повторить попытку. Если после трех попыток сканер так и не сумел считать штрихкод, кассир должен ввести его вручную. Штрихкод отсутствует: Если на товаре нет штрихкода, то кассир должен ввести цену вручную. Альтернативные потоки событий интересны, потому что напоминают о других прецедентах, которые не были выявлены при первоначальном исследовании. В данном случае необходимо предусмотреть возможность ручного ввода штрихкода или цены.

21 2.3 Представление прецедентов на диаграммах 21 Из всех UML-диаграмм диаграммы прецедентов самые бесполезные. Рекомендуется вообще их избегать, делая исключение только для диаграмм системных границ. На рисунке 2.1 изображена диаграмма системных границ. Большой прямоугольник обозначает границу системы. Все внутри него части разрабатываемой системы. За его пределами располагаются действующие лица (или актёры), которые воздействуют на систему. Действующие лица находятся вне системы и отдают ей приказы (стимулы). Как правило, действующие лица это люди. Но это могут быть и другие системы или даже аппаратные устройства, например таймеры. Рисунок 2.1 Диаграмма системных границ Внутри ограничивающего прямоугольника располагаются прецеденты. Линии соединяют действующих лиц с инициируемыми ими прецедентами. Не следует пользоваться стрелками никто не может объяснить, что означает в данном случае ее направление. Диаграмма почти, хотя и не совсем, бесполезна. Она содержит очень мало информации, интересной программисту, зато неплохо выглядит в качестве первой страницы презентации заказчикам.

22 22 Отношения между прецедентами попадают в категорию явлений, которые «когда-то казались отличной идеей». Их рекомендуют всячески избегать, т. к. они не добавляют ничего нового ни прецедентам, ни пониманию системы, а только приводят к бесконечным спорам по поводу того, что имеет место: «расширение» или «обобщение». 3 Порождающие шаблоны проектирования Порождающие шаблоны (англ. Creational patterns) шаблоны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту. 3.1 Использование Шаблоны оказываются важны, когда система больше зависит от композиции объектов, чем от наследования классов. Основной упор делается не на жестком кодировании фиксированного набора поведений, а на определении небольшого набора фундаментальных поведений, с помощью композиции которых можно получать любое число более сложных. Таким образом, для создания объектов с конкретным поведением требуется нечто большее, чем простое инстанцирование класса. Порождающие шаблоны инкапсулируют знания о конкретных классах, которые применяются в системе. Они скрывают детали того, как эти классы создаются и стыкуются. Единственная информация об объектах, известная системе, это их интерфейсы, определенные с помощью абстрактных классов. Следовательно, порождающие шаблоны обеспечивают большую гибкость при решении вопроса о том, что создается, кто это создает, как и когда. Можно собрать систему из «готовых» объектов с самой различной структурой и функциональностью статически (на этапе компиляции) или динамически (во время выполнения). Иногда допустимо выбирать между тем или иным порождающим шаблоном. Например, есть случаи, когда можно использовать как прототип, так и абстрактную фабрику. В других ситуациях порождающие шаблоны дополняют друг друга. Так, применяя строитель, можно использовать другие шаблоны для решения вопроса о том, какие компоненты нужно строить, а прототип часто реализуется вместе с одиночкой. Порождающие шаблоны тесно связаны друг с другом, их рассмотрение лучше проводить совместно, чтобы лучше были видны их сходства и различия.

23 3.2 Перечень порождающих шаблонов 1 Абстрактная фабрика (Abstract factory). 2 Cтроитель (Builder). 3 Фабричный метод (Factory method). 4 Прототип (Prototype). 5 Одиночка (Singleton). 6 Ленивая инициализация (Lazy initialization). 7 Объектный пул (Object pool). 3.3 Abstract Factory Абстрактная фабрика 23 Абстрактная фабрика (англ. Abstract factory) порождающий шаблон проектирования, позволяющий изменять поведение системы, варьируя используемые объекты, при этом сохраняя интерфейсы (рисунок 3.1). Он дает возможность создавать целые группы взаимосвязанных объектов, которые, будучи созданными одной фабрикой, реализуют общее поведение. Шаблон реализуется созданием абстрактного класса Factory, который представляет собой интерфейс для создания компонентов системы (например, для оконного интерфейса он может создавать окна и кнопки). Затем пишутся наследующиеся от него классы, реализующие этот интерфейс. Цель. Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов. Достоинства: изолирует конкретные классы; упрощает замену семейств продуктов; гарантирует сочетаемость продуктов. К недостаткам можно отнести сложность добавления поддержки нового вида продуктов. Применение: система не должна зависеть оттого, как создаются, компонуются и представляются входящие в нее объекты; входящие в семейство взаимосвязанные объекты должны использоваться вместе, необходимо обеспечить выполнение этого ограничения; система должна конфигурироваться одним из семейств составляющих ее объектов; требуется предоставить библиотеку объектов, раскрывая только их интерфейсы, но не реализацию.

24 24 Рисунок 3.1 Абстрактная фабрика Пример реализации Program.cs namespace AbstractFactory class Program public static void Main() Client client = null; client = new Client(new ConcreteFactory1()); client.run();

25 client = new Client(new ConcreteFactory2()); client.run(); AbstractFactory.cs namespace AbstractFactory abstract class AbstractFactory public abstract AbstractProductA CreateProductA(); public abstract AbstractProductB CreateProductB(); ConcreteFactory1.cs namespace AbstractFactory class ConcreteFactory1 : AbstractFactory public override AbstractProductA CreateProductA() return new ProductA1(); public override AbstractProductB CreateProductB() return new ProductB1(); ConcreteFactory2.cs namespace AbstractFactory class ConcreteFactory2 : AbstractFactory public override AbstractProductA CreateProductA() return new ProductA2(); public override AbstractProductB CreateProductB() 25

26 return new ProductB2(); AbstractProductA.cs namespace AbstractFactory abstract class AbstractProductA ProductA1.cs namespace AbstractFactory class ProductA1 : AbstractProductA ProductA2.cs namespace AbstractFactory class ProductA2 : AbstractProductA AbstractProductB.cs namespace AbstractFactory abstract class AbstractProductB public abstract void Interact(AbstractProductA a); ProductB1.cs 26 namespace AbstractFactory class ProductB1 : AbstractProductB

27 public override void Interact(AbstractProductA apa) Console.WriteLine(this + " interacts with " + apa); ProductB2.cs namespace AbstractFactory class ProductB2 : AbstractProductB public override void Interact(AbstractProductA apa) Console.WriteLine(this + " interacts with " + apa); Client.cs namespace AbstractFactory class Client private AbstractProductA abstractproducta = null; private AbstractProductB abstractproductb = null; public Client(AbstractFactory factory) this.abstractproducta = factory.createproducta(); this.abstractproductb = factory.createproductb(); 27 public void Run() this.abstractproductb.interact( this.abstractproducta);

28 Builder Строитель Строитель (англ. Builder) порождающий шаблон проектирования (рисунок 3.2). Рисунок 3.2 Строитель Цель. Отделяет конструирование сложного объекта от его представления, так что в результате одного и того же процесса конструирования могут получаться разные представления. Достоинства: позволяет изменять внутреннее представление продукта; изолирует код, реализующий конструирование и представление; дает более тонкий контроль над процессом конструирования. Применение: алгоритм создания сложного объекта не должен зависеть оттого, из каких частей состоит объект и как они стыкуются между собой; процесс конструирования должен обеспечивать различные представления конструируемого объекта. Объекты «моникер» в СОМ есть Строители, инициализируемые строкой. Более того, для их создания используется другой Строитель MkParseDisplayNameEx, который определяет по строке класс моникера, создает моникер и инициализирует его этой же строкой. Один из этих объектов, URL Moniker, применяется для всей загрузки страниц, вложений и документов в Microsoft Internet Explorer. Пример реализации Program.cs namespace Builder class Program

29 public static void Main() Builder builder = new ConcreteBuilder(); Director director = new Director(builder); director.construct(); Product product = builder.getresult(); product.show(); Director.cs namespace Builder class Director Builder builder; public Director(Builder builder) this.builder = builder; public void Construct() builder.buildparta(); builder.buildpartb(); builder.buildpartc(); Product.cs using System.Collections; namespace Builder class Product ArrayList parts = new ArrayList(); public void Add(string part) 29

30 30 parts.add(part); public void Show() foreach (string part in parts) Console.WriteLine(part); Builder.cs namespace Builder abstract class Builder public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract void BuildPartC(); public abstract Product GetResult(); ConcreteBuilder.cs namespace Builder class ConcreteBuilder : Builder Product product = new Product(); public override void BuildPartA() product.add("part A"); public override void BuildPartB() product.add("part B"); public override void BuildPartC() product.add("part C");

31 31 public override Product GetResult() return product; 3.5 Factory method Фабричный метод Фабричный метод (англ. Factory Method) порождающий шаблон проектирования, предоставляющий подклассам интерфейс для создания экземпляров некоторого класса (рисунок 3.3). В момент создания наследники могут определить, какой класс создавать. Иными словами, Фабрика делегирует создание объектов наследникам родительского класса. Это позволяет использовать в коде программы не специфические классы, а манипулировать абстрактными объектами на более высоком уровне. Также известен под названием виртуальный конструктор (англ. Virtual Constructor). Рисунок 3.3 Фабричный метод Цель. Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать. Фабричный метод позволяет классу делегировать создание подклассов. Применение: классу заранее неизвестно, объекты каких подклассов ему нужно создавать;

32 класс спроектирован так, чтобы объекты, которые он создаёт, специфицировались подклассами. Класс делегирует свои обязанности одному из нескольких вспомогательных подклассов, и планируется локализовать знание о том, какой класс принимает эти обязанности на себя. На рисунке 3.3 приняты следующие обозначения: Product (продукт) абстрактный класс, который служит для создания классов-наследников; ConcreteProductA и ConcreteProductB конкретные продукты, которые наследуют абстрактный класс Product; Creator (создатель) объявляет класс с фабричным методом, который затем может быть переопределен конкретными классамисоздателями, являющимися наследниками данного класса; ConcreteCreatorA и ConcreteCreatorA конкретные классысоздатели,которые переопределяют фабричный метод таким образом, чтобы он создавал и возвращал объекты классов ConcreteProductA или ConcreteProductB. Достоинства. Дает возможность сделать код создания объектов более универсальным, не привязываясь к конкретным классам (ConcreteProductA или ConcreteProductB), а используя лишь базовый класс Product; позволяет установить связь между параллельными иерархиями классов. К недостаткам можно отнести необходимость создания наследника Creator для каждого нового типа продукта (ConcreteProduct). Пример реализации Program.cs namespace FactoryMethod class Program static void Main() Creator creator = null; Product product = null; creator = new ConcreteCreatorA(); product = creator.factorymethod(); creator.anoperation(); 32 creator = new ConcreteCreatorB(); product = creator.factorymethod();

33 33 creator.anoperation(); Creator.cs namespace FactoryMethod abstract class Creator Product product; public abstract Product FactoryMethod(); public void AnOperation() product = FactoryMethod(); ConcreteCreatorA.cs namespace FactoryMethod class ConcreteCreatorA : Creator public override Product FactoryMethod() return new ConcreteProductA(); ConcreteCreatorB.cs namespace FactoryMethod class ConcreteCreatorB : Creator public override Product FactoryMethod() return new ConcreteProductB();

34 34 Product.cs namespace FactoryMethod abstract class Product ConcreteProductA.cs namespace FactoryMethod class ConcreteProductA : Product public ConcreteProductA() Console.WriteLine(this.GetHashCode()); ConcreteProductB.cs namespace FactoryMethod class ConcreteProductB : Product public ConcreteProductA() Console.WriteLine(this.GetHashCode()); 3.6 Prototype Прототип Прототип (англ. Prototype) порождающий шаблон проектирования (рисунок 3.4). Назначение. Задаёт виды создаваемых объектов с помощью экземпляра-прототипа и создаёт новые объекты путём копирования этого прототипа.

35 35 Рисунок 3.4 Прототип Проще говоря, это паттерн создания объекта через клонирование другого объекта вместо создания через конструктор. Применение. Паттерн используется, чтобы: избежать дополнительных усилий по созданию объекта стандартным путем (имеется в виду использование ключевого слова 'new', когда вызывается конструктор не только самого объекта, но и конструкторы всей иерархии предков объекта), когда это непозволительно дорого для приложения; избежать наследования создателя объекта (object creator) в клиентском приложении, как это делает паттерн Abstract factory. Этот шаблон проектирования используется, когда система не должна зависеть оттого, как в ней создаются, компонуются и представляются продукты: инстанцируемые классы определяются во время выполнения, например, с помощью динамической загрузки; для того чтобы избежать построения иерархий классов или фабрик, параллельных иерархии классов продуктов; экземпляры класса могут находиться в одном из нескольких различных состояний. Может оказаться удобнее установить соответствующее число прототипов и клонировать их, а не инстанцировать каждый раз класс вручную в подходящем состоянии. Пример реализации Program.cs namespace Prototype

36 36 class Program static void Main() Prototype prototype = null; Prototype original = null; prototype = new ConcretePrototype1(1); original = prototype.clone(); prototype = new ConcretePrototype2(2); original = prototype.clone(); Prototype.cs namespace Prototype abstract class Prototype public int Id get; private set; public Prototype(int id) this.id = id; public abstract Prototype Clone(); ConcreteProttype1.cs namespace Prototype class ConcretePrototype1 : Prototype public ConcretePrototype1(int id) : base(id) public override Prototype Clone() return new ConcretePrototype1(Id);

37 ConcretePrototype2.cs namespace Prototype class ConcretePrototype2 : Prototype public ConcretePrototype2(int id) : base(id) public override Prototype Clone() return new ConcretePrototype2(Id); 3.7 Singleton Одиночка 37 Одиночка (англ. Singleton) в программировании порождающий шаблон проектирования (рисунок 3.5). Рисунок 3.5 Одиночка Цель. Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. Существенно то, что можно пользоваться именно экземпляром класса, так как при этом во многих случаях становится доступной более широкая функциональность. Например, к описанным компонентам класса можно обращаться через интерфейс, если такая возможность поддерживается языком. Достоинства: контролируемый доступ к единственному экземпляру;

38 38 уменьшение числа имён; допускает уточнение операций и представления; допускает переменное число экземпляров; большая гибкость, чем у операций класса. Недостатки: глобальные объекты могут быть вредны для объектного программирования, в некоторых случаях приводя к созданию немасштабируемого проекта; усложняет написание модульных тестов и следование TDD. Применение: должен быть ровно один экземпляр некоторого класса, легко доступный всем клиентам; единственный экземпляр должен расширяться путем порождения подклассов, и клиентам нужно иметь возможность работать с расширенным экземпляром без модификации своего кода. Пример реализации Для отложенной инициализации Singleton'a в C# рекомендуется использовать конструкторы типов (статический конструктор). CLR автоматически вызывает конструктор типа при первом обращении к типу, при этом обеспечивая безопасность в отношении синхронизации потоков. Конструктор типа автоматически генерируется компилятором и в нем происходит инициализация всех полей типа (статических полей). Явно задавать конструктор типа не следует, так как в этом случае он будет вызываться непосредственно перед обращением к типу и JIT-компилятор не сможет применить оптимизацию (например, если первое обращение к Singleton'y происходит в цикле). Program.cs namespace Singleton class Program static void Main() Singleton instance1 = Singleton.Instance(); Singleton instance2 = Singleton.Instance(); Console.WriteLine(ReferenceEquals(instance1, instance2)); instance1.singletonoperation(); string singletondata = instance1.getsingletondata();

39 Console.WriteLine(singletonData); Singleton.cs namespace Singleton class Singleton static Singleton uniqueinstance; string singletondata = string.empty; protected Singleton() public static Singleton Instance() if(uniqueinstance == null) uniqueinstance = new Singleton(); return uniqueinstance; public void SingletonOperation() singletondata = "SingletonData"; public string GetSingletonData() return singletondata; Также можно использовать стандартный вариант потокобезопасной реализации Singleton с отложенной инициализацией: public class Singleton // Защищенный конструктор нужен, чтобы предотвратить // создание экземпляра класса Singleton protected Singleton() 39 private sealed class SingletonCreator

40 private static readonly Singleton instance = new Singleton(); public static Singleton Instance get return instance; public static Singleton Instance get return SingletonCreator.Instance; Если нет необходимости в каких-либо публичных статических методах или свойствах (кроме свойства Instance), то можно применять упрощенный вариант: public class Singleton private static readonly Singleton instance = new Singleton(); public static Singleton Instance get return instance; // Защищенный конструктор нужен, чтобы // предотвратить создание экземпляра класса Singleton protected Singleton() 3.8 Lazy initialization Ленивая инициализация 40 Отложенная (Ленивая) инициализация (англ. Lazy initialization) приём в программировании, когда некоторая ресурсоёмкая операция (создание объекта, вычисление значения) выполняется непосредственно перед тем, как будет использован её результат. Таким образом, инициализация осуществляется «по требованию», а не заблаговременно. Аналогичная идея находит применение в самых разных областях: например, компиляция «на лету» и логистическая концепция «Точно в срок». Частный случай Ленивой инициализации создание объекта в момент обращения к нему является одним из порождающих шаблонов проектирования. Как правило, он используется в сочетании с такими шаблонами, как Фабричный метод, Одиночка и Заместитель.

41 Достоинства: инициализация выполняется только в тех случаях, когда она действительно необходима; ускоряется начальная инициализация. Недостатки: невозможно явным образом задать порядок инициализации объектов; возникает задержка при первом обращении к объекту. Пример реализации Пример 1 Program.cs using System.Threading; /* Отложенная (ленивая) инициализация (англ. Lazy initialization). Приём в программировании, когда некоторая ресурсоёмкая операция (создание объекта, вычисление значения) выполняется непосредственно перед тем, как будет использован её результат. Таким образом, инициализация выполняется «по требованию», а не заблаговременно. Аналогичная идея находит применение в самых разных областях: например, компиляция «на лету» и логистическая концепция «Точно в срок». Частный случай ленивой инициализации создание объекта в момент обращения к нему является одним из порождающих шаблонов проектирования. Как правило, он используется в сочетании с такими шаблонами как Фабричный метод, Одиночка и Заместитель. */ namespace LazyInit public class LazyInitialization<T> where T : new() protected LazyInitialization() private static T instance; public static T Instance 41

42 42 get if (instance == null) lock (typeof(t)) if (instance == null) instance = new T(); return instance; public sealed class BigObject : LazyInitialization<BigObject> public BigObject() // Большая работа. Thread.Sleep(3000); Console.WriteLine("Экземпляр BigObject создан"); class Program static void Main() Console.WriteLine( "Первое обращение к экземпляру BigObject..."); // Создание объекта происходит только при // этом обращении к объекту. Console.WriteLine(BigObject.Instance); Console.WriteLine( "Второе обращение к экземпляру BigObject..."); Console.WriteLine(BigObject.Instance); // Delay. Console.ReadKey();

43 43 Пример 2 Program.cs using System.Threading; namespace LazyInit public class BigObject private static BigObject instance; private BigObject() //Большая работа. Thread.Sleep(3000); Console.WriteLine("Экземпляр BigObject создан"); public override string ToString() return "Обращение к BigObject"; // Метод возвращает экземпляр BigObject, при этом он // создаёт его, если тот ещё не существует. public static BigObject GetInstance() // Исключение возможности создания двух объектов // в многопоточном приложении. if (instance == null) lock (typeof(bigobject)) if (instance == null) instance = new BigObject(); return instance; class Program

44 static void Main() Console.WriteLine( "Первое обращение к экземпляру BigObject..."); // Создание объекта происходит только при // этом обращении к объекту. Console.WriteLine(BigObject.GetInstance()); Console.WriteLine( "Второе обращение к экземпляру BigObject..."); Console.WriteLine(BigObject.GetInstance()); // Delay. Console.ReadKey(); Пример 3 Program.cs using System.Threading; namespace LazyInit public sealed class BigObject public BigObject() // Большая работа. Thread.Sleep(3000); Console.WriteLine("Экземпляр BigObject создан"); 44 public void Operation() Console.WriteLine("Operation"); class Program static void Main() System.Lazy<BigObject> lazy = new Lazy<BigObject>();

45 45 Console.WriteLine( "Первое обращение к экземпляру BigObject..."); // Создание объекта происходит только при этом // обращении к объекту. lazy.value.operation(); Console.WriteLine( "Второе обращение к экземпляру BigObject..."); lazy.value.operation(); // Delay. Console.ReadKey(); Список литературы 1 Буч, Г. Объектно-ориентированный анализ и проектирование с примерами приложений : пер. с англ. / Г. Буч. М. : Вильямс, с. 2 Буч, Г. Язык UML. Руководство пользователя : пер. с англ. / Г. Буч, Д. Рамбо, И. Якобсон. М. : ДМК Пресс, с. 3 Приемы объектно-ориентированного проектирования. Паттерны проектирования / Э. Гамма [и др.]. СПб. : Питер, с. 4 Грэхем, И. Объектно-ориентированные методы. Принципы и практика : пер. с англ. / И. Грэхем. М. : Вильямс, с. 5 Ларман, К. Применение UML 2.0 и шаблонов проектирования. Практическое руководство : пер. с англ. / К. Ларман. М. : Вильямс, с. 6 Мартин, Р. Принципы, паттерны и методики гибкой разработки на языке C# : пер. с англ. / Р. Мартин, М. Мартин. СПб. : Символ-Плюс, с. 7 С# 5.0 и платформа.net 4.5 для профессионалов : пер. с англ. / К. Нейгел [и др.]. М. : Вильямс, с. 8 Нартова, А. Power Designer 15. Моделирование данных / А. Нартова. М. : Лори, с. 9 Новиков, Ф. А. Моделирование на UML. Теория, практика, видеокурс / Ф. А. Новиков, Д. Ю. Иванов. СПб. : Наука и Техника, с.

46 46 10 Visual Studio 2010 для профессионалов : пер. с англ. / Н. Рендольф [и др.]. М.: Вильямс, с. 11 Рихтер, Дж. CLR via C#. Программирование на платформе Microsoft.NET Framework 4.0 на языке C# / Дж. Рихтер. СПб. : Питер, с. 12 Тепляков, С. Паттерны проектирования на платформе.net / С. Тепляков. СПб. : Питер, с. 13 Троелсен, Э. Язык программирования C# 5.0 и платформа.net 4.5 : пер. с англ. / Э. Троелсен. М. : Вильямс, с. 14 Паттерны проектирования / Э. Фримен [и др.]. СПб. : Питер, с. 15 Язык программирования C#. Классика Computers Science / А. Хейлсберг [и др.]. СПб. : Питер, с. 16 Шилдт, Г. C# 4.0: полное руководство : пер. с англ. / Г. Шилдт. М. : Вильямс, с.

Методические указания для выполнения лабораторных работ по дисциплине «Объектно-ориентированный анализ и программирование»

Методические указания для выполнения лабораторных работ по дисциплине «Объектно-ориентированный анализ и программирование» МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Владимирский государственный университет имени Александра Григорьевича

Подробнее

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

Паттерны проектирования Паттерны проектирования Паттерн проектирования описывает типичную задачу, а также принцип ее решения, причем таким образом, что это решение можно использовать повторно, ничего не изобретая заново. Гамма

Подробнее

Лекция 2.1 Язык UML. Диаграммы вариантов использования

Лекция 2.1 Язык UML. Диаграммы вариантов использования Лекция 2.1 Язык UML. Диаграммы вариантов использования 1. Язык UML Содержание 2. Диаграммы вариантов использования Вариант использования Актеры Отношения 3. Пример диаграммы вариантов использования Графическая

Подробнее

Элементы графической нотации диаграммы компонентов

Элементы графической нотации диаграммы компонентов Лекция 3 часть 6: Элементы графической нотации диаграммы компонентов Аннотация: Назначение диаграммы компонентов, ее основные элементы. Особенности физического представления программных систем. Компоненты

Подробнее

Ключевые слова языка С#

Ключевые слова языка С# 1 abstract, см. также 11, 55 2 as, см. также 37 Ключевые слова языка С# Модификатор abstract используется при объявлении класса, метода или свойства. Использование модификатора abstract в объявлении класса

Подробнее

Семинар 5. Статические элементы данных и функции. Наследование. Виртуальные методы.

Семинар 5. Статические элементы данных и функции. Наследование. Виртуальные методы. Семинар 5. Статические элементы данных и функции. Наследование. Виртуальные методы. 1. Статическая (static) переменная класса Добавим в определение класса статическую переменную: private: // double x;

Подробнее

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

Паттерны проектирования Паттерны проектирования Введение Что такое «хороший дизайн» Точного универсального ответа на этот вопрос нет Есть стандартные решения для определенных задач паттерны Предложены хорошими специалистами Проверены

Подробнее

Диаграммы взаимодействия объектов в UML

Диаграммы взаимодействия объектов в UML Диаграммы взаимодействия объектов в UML В данной статье рассматриваются во всех подробностях диаграммы сотрудничества (collaboration diagram) и диаграммы последовательности взаимодействия (sequence diagram)

Подробнее

Функции ref out определении вызове Main()

Функции ref out определении вызове Main() Функции Функции представляют собой блоки кода, позволяющие выполнять одни и те же операции над различными значениями данных. Функции определяются один раз и могут вызываться из любой точки приложения.

Подробнее

Впервые Гамма, Хелм, ДжонсониВлиссидес изд. «Питер», 2003 «Паттерны проектирования» Банда четырех Демяненко Я.М., мехмат

Впервые Гамма, Хелм, ДжонсониВлиссидес изд. «Питер», 2003 «Паттерны проектирования» Банда четырех Демяненко Я.М., мехмат Паттерны Демяненко Я.М., мехмат 2014 1 Впервые Гамма, Хелм, ДжонсониВлиссидес изд. «Питер», 2003 «Паттерны проектирования» Банда четырех Демяненко Я.М., мехмат 2014 2 Основнойпринциппаттерна Введение новых

Подробнее

Лабораторная работа 1

Лабораторная работа 1 Лабораторная работа 1 Объектно-ориентированное программирование ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ УНИВЕРСИТЕТ ФАКУ ЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ И МЕХАТРОНИКИ Кафедра информационных технологий

Подробнее

ИНФОРМАТИКА И ПРОГРАММИРОВАНИЕ

ИНФОРМАТИКА И ПРОГРАММИРОВАНИЕ ВЕСТНИК ТОМСКОГО ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА 284 Декабрь 2004 УДК 681.3.068 ИНФОРМАТИКА И ПРОГРАММИРОВАНИЕ К.Ю. Войтиков, О.А. Змеев, А.Н. Моисеев, А.А. Якушев АРХИТЕКТУРА НАДСТРАИВАЕМЫХ ПРИЛОЖЕНИЙ КЛИЕНТ/СЕРВЕР

Подробнее

Проектирование архитектур программного обеспечения

Проектирование архитектур программного обеспечения Проектирование архитектур программного обеспечения лекция 3 Зозуля А.В. 2016 г. Ранее.. Элементы модели: объекты, отношения, службы, модули Расслоение системы Типовые решения организации бизнес-логики

Подробнее

АКТУАЛЬНЫЕ ШАБЛОНЫ ПРОГРАММИРОВАНИЯ ИМИТАЦИОННЫХ МОДЕЛЕЙ СЛОЖНЫХ СИСТЕМ В. Д. Левчук, П. Л. Чечет (Гомель)

АКТУАЛЬНЫЕ ШАБЛОНЫ ПРОГРАММИРОВАНИЯ ИМИТАЦИОННЫХ МОДЕЛЕЙ СЛОЖНЫХ СИСТЕМ В. Д. Левчук, П. Л. Чечет (Гомель) АКТУАЛЬНЫЕ ШАБЛОНЫ ПРОГРАММИРОВАНИЯ ИМИТАЦИОННЫХ МОДЕЛЕЙ СЛОЖНЫХ СИСТЕМ В. Д. Левчук, П. Л. Чечет (Гомель) Концепция объектно-ориентированного программирования в настоящий момент является базисом, на основе

Подробнее

Концепции языков программирования

Концепции языков программирования Объектно-ориентированные языки программирования Темы 1 История 2 3 4 5 История Абстракция данных: SIMULA 67 (1962 1967) Спроектирован в Норвегии Нигардом и Далем, главным образом, для моделирования сложных

Подробнее

Паттерн «Стратегия» (Strategy)

Паттерн «Стратегия» (Strategy) Глава 1 Паттерн «Стратегия» (Strategy) Назначение: определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Стратегия позволяет изменять алгоритмы независимо от клиентов,

Подробнее

ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРИЛОЖЕНИЙ БАЗ ДАННЫХ НА ОСНОВЕ ШАБЛОНОВ ПРОЕКТИРОВАНИЯ

ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРИЛОЖЕНИЙ БАЗ ДАННЫХ НА ОСНОВЕ ШАБЛОНОВ ПРОЕКТИРОВАНИЯ УДК 004.021 ТЕХНОЛОГИЯ РАЗРАБОТКИ ПРИЛОЖЕНИЙ БАЗ ДАННЫХ НА ОСНОВЕ ШАБЛОНОВ ПРОЕКТИРОВАНИЯ Горбунова И.С., студент кафедра «Система обработки информации и управление» Россия, 105005, г. Москва, МГТУ им.

Подробнее

Классы и объекты. ООП (объектно ориентированное программирование) - парадигма программирования в которой

Классы и объекты. ООП (объектно ориентированное программирование) - парадигма программирования в которой Классы и объекты ООП (объектно ориентированное программирование) - парадигма программирования в которой основными концепциями являются понятия объектов и классов. Класс (lat. группа ) - группа явлений

Подробнее

Элементы графической нотации диаграммы последовательности

Элементы графической нотации диаграммы последовательности Лекция 3 часть 4 Элементы графической нотации диаграммы Аннотация: Назначение диаграммы. Объекты, их графическое представление. Линия жизни и фокус управления. Особенности изображения моментов создания

Подробнее

Введение в объектно-ориентированное программирование.

Введение в объектно-ориентированное программирование. Лабораторная работа 12 Введение в объектно-ориентированное программирование. Цель работы. Изучение основ объектно-ориентированного программирования на языке Java. Содержание работы. В работе рассматриваются

Подробнее

НОРМИРОВАНИЕ ТОЧНОСТИ И ТЕХНИЧЕСКИЕ ИЗМЕРЕНИЯ

НОРМИРОВАНИЕ ТОЧНОСТИ И ТЕХНИЧЕСКИЕ ИЗМЕРЕНИЯ ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ» Кафедра «Технология машиностроения» НОРМИРОВАНИЕ ТОЧНОСТИ И ТЕХНИЧЕСКИЕ ИЗМЕРЕНИЯ Методические рекомендации

Подробнее

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

Паттерны проектирования Паттерны проектирования (Design patterns) Игорь Сухинский, Екатерина Неповинных ВМИ-311 Паттерн проектирования Паттерн проектирования (design pattern) повторимая архитектурная конструкция, представляющая

Подробнее

времени выполнения) компилирует ее содержимое в машинный код

времени выполнения) компилирует ее содержимое в машинный код 1. Объектно-ориентированное программирование 1 1.1. Введение в.net и С# Microsoft.NET это платформа для разработки прикладных программ, основанная и ориентированная на Интернет..NET основывается на двух

Подробнее

Оглавление. Часть I. Паттерны поведения. Об авторе Кому адресована эта книга Как читать эту книгу Отзывы...

Оглавление. Часть I. Паттерны поведения. Об авторе Кому адресована эта книга Как читать эту книгу Отзывы... Об авторе... 15 Кому адресована эта книга... 16 Как читать эту книгу... 17 Отзывы... 18 Благодарности... 19 От издательства.... 20 Предисловие... 21 GoF-паттерны на платформе.net.... 21 Отношение к паттернам

Подробнее

Классы, объекты и пакеты в Java

Классы, объекты и пакеты в Java Классы, объекты и пакеты в Java Алексей Владыкин 3 октября 2012 Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 1 / 42 1 Основы ООП 2 Объявление класса 3 Использование класса 4 Наследование

Подробнее

ÀÑÒÜ I. ÏÅÐÂÎÅ ÇÍÀÊÎÌÑÒÂÎ Ñ C++

ÀÑÒÜ I. ÏÅÐÂÎÅ ÇÍÀÊÎÌÑÒÂÎ Ñ C++ Ñîäåðæàíèå Введение 16 О чем эта книга 16 Прилагаемый компакт-диск 16 Что такое C++ 17 Соглашения, используемые в книге 17 Как организована эта книга 18 И еще... 18 Часть I. Первое знакомство с C++ 18

Подробнее

Лекция 2.5 Диаграмма развертывания. Диаграмма синхронизации 1 Диаграмма развертывания (deployment diagram) Артефакт 3. 1.

Лекция 2.5 Диаграмма развертывания. Диаграмма синхронизации 1 Диаграмма развертывания (deployment diagram) Артефакт 3. 1. Лекция 2.5 Диаграмма развертывания. Диаграмма синхронизации 1 Диаграмма развертывания (deployment diagram) 2 1.1 Артефакт 3 1.2 Узел 3 1.3 Соединения 5 1.3.1 Отношения зависимости 6 1.4 Рекомендации по

Подробнее

CASE-СРЕДСТВА РАЗРАБОТКИ ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ САПР. Лекция 5 «Разработка требований к информационному обеспечению»

CASE-СРЕДСТВА РАЗРАБОТКИ ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ САПР. Лекция 5 «Разработка требований к информационному обеспечению» CASE-СРЕДСТВА РАЗРАБОТКИ ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ САПР Лекция 5 «Разработка требований к информационному обеспечению» Объектно-ориентированный подход ООП основан на представлении предметнойобласти задачи

Подробнее

Основы платформы Microsoft.NET

Основы платформы Microsoft.NET Основы платформы Microsoft.NET Тема: Управление памятью Переменные величины и ссылки...1 Выделение памяти...2 Удаление объектов из памяти...4 Дефрагментация кучи...4 Поколения объектов...5 Деструкторы...7

Подробнее

Design Patterns. with examples in C# Author D

Design Patterns. with examples in C# Author D Design Patterns with examples in C# Author D Паттерны проектирования с примерами на языке C# Автор D 2012 2 Оглавление Вступление... 9 Порождающие шаблоны проектирования... 11 Использование... 11 Перечень

Подробнее

А. В. Гаврилов. Объектно-ориентированное программирование. Вопросы к экзамену

А. В. Гаврилов. Объектно-ориентированное программирование. Вопросы к экзамену МИНОБРНАУКИ РОССИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ АКАДЕМИКА С.П.КОРОЛЕВА

Подробнее

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ СТАВРОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ СТАВРОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ СТАВРОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ Экономический факультет Кафедра информационных систем УТВЕРЖДАЮ

Подробнее

Тема 2.1 Пакетирование, наследование и полиморфизм

Тема 2.1 Пакетирование, наследование и полиморфизм Тема 2.1 Пакетирование, наследование и полиморфизм Наследование в C++ Наследование классов мощная возможность в объектноориентированном программировании. Оно позволяет создавать производные классы (классы

Подробнее

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. Наследование в языке C++

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ. Наследование в языке C++ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Наследование в языке C++ НАСЛЕДОВАНИЕ 2 3 НАСЛЕДОВАНИЕ Наследование упорядочивает и ранжирует классы Механизм наследования классов позволяет строить иерархии,

Подробнее

Лабораторная работа 7: Основы UML

Лабораторная работа 7: Основы UML Цель: Лабораторная работа 7: Основы UML Целью данной работы является знакомство с базовыми приёмами проектирования систем и процессов с использованием универсального языка моделирования (UML) Задание:

Подробнее

Двухпанельные интерфейсы

Двухпанельные интерфейсы 17 Двухпанельные интерфейсы В этой главе мы создадим для CriminalIntent планшетный интерфейс, в котором пользователь может одновременно видеть и взаимодействовать со списком преступлений и подробным описанием

Подробнее

4 Унифицированный язык визуального моделирования Unified Modeling Language (UML)

4 Унифицированный язык визуального моделирования Unified Modeling Language (UML) 4 Унифицированный язык визуального моделирования Unified Modeling Language (UML) Диаграммы в UML. Классы и стереотипы классов. Ассоциативные классы. Основные элементы диаграмм взаимодействия объекты, сообщения.

Подробнее

Возможности использования 1С Web-расширения

Возможности использования 1С Web-расширения Возможности использования 1С Web-расширения Механизмы Web-расширения используются для решения задач нескольких уровней, в различных комбинациях с другими системами. Реализация веб-доступа к информационной

Подробнее

о значениях и ссылках

о значениях и ссылках 8 Основные сведения о значениях и ссылках Прочитав эту главу, вы научитесь: ¾ объяснять разницу между типом значений и типом ссылок; ¾ изменять способ передачи аргументов в качестве параметров методов

Подробнее

Содержание. Часть I. Введение 27. Предисловие 19 Введение 21. Глава 1. Объектно-ориентированный анализ и проектирование 29

Содержание. Часть I. Введение 27. Предисловие 19 Введение 21. Глава 1. Объектно-ориентированный анализ и проектирование 29 Содержание Предисловие 19 Введение 21 Образовательные и Web-ресурсы 22 Для кого предназначена эта книга 22 Что необходимо знать 22 Примеры на языке Java 22 Структура книги 23 Об авторе 23 Контакты 24 Дополнения

Подробнее

Объектно-ориентированны й анализ и программирование на языке C# (C_Sharp)

Объектно-ориентированны й анализ и программирование на языке C# (C_Sharp) Государственный университет Высшая школа экономики Факультет Бизнес-Информатики Кафедра Основ информатики и прикладного программного обеспечения Объектно-ориентированны й анализ и программирование на языке

Подробнее

Шаблоны. 1. Механизм шаблонов реализует в С++ параметрический полиморфизм.

Шаблоны. 1. Механизм шаблонов реализует в С++ параметрический полиморфизм. Шаблоны 1. Механизм шаблонов реализует в С++ параметрический полиморфизм. 2. Шаблон представляет собой предварительное описание функции или класса, конкретное представление которых зависит от параметров

Подробнее

Содержание. Часть I. Погружение в С++ Глава 1. Введение и настройка среды разработки...20

Содержание. Часть I. Погружение в С++ Глава 1. Введение и настройка среды разработки...20 Содержание Часть I. Погружение в С++ Глава 1. Введение и настройка среды разработки...20 Что такое язык программирования?...20 В чем различие между C и C++?.........................................21 Обязательно

Подробнее

ВВЕДЕНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

ВВЕДЕНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ ВВЕДЕНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 1 Основные понятия объектно-ориентированного программирования: инкапсуляция, наследование и полиморфизм Мы живем в мире объектов. Стол, автомобиль,

Подробнее

Учебно-программная документация

Учебно-программная документация Учебно-программная документация ПОЯСНИТЕЛЬНАЯ ЗАПИСКА Дисциплина «Программирование» ориентирована на освоение студентами базовых знаний, умений и навыков в области программирования. Основой для освоения

Подробнее

ГУВПО Белорусско-Российский университет. Кафедра Программное обеспечение информационных систем

ГУВПО Белорусско-Российский университет. Кафедра Программное обеспечение информационных систем 1 Министерство образования Республики Беларусь Министерство образования и науки Российской Федерации ГУВПО Белорусско-Российский университет Кафедра Программное обеспечение информационных систем Дисциплина

Подробнее

Дополнительная образовательная программа по курсу «Программирование на языке Java»

Дополнительная образовательная программа по курсу «Программирование на языке Java» МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего образования «Новосибирский национальный исследовательский государственный

Подробнее

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

Шаблоны проектирования Шаблоны проектирования П О В Е Д Е Н Ч Е С К И Е Ш А Б Л О Н Ы ( B E H A V I O R A L P A T T E R N S ) С Т РАТ Е Г И Я / S T R A T E G Y И Н К А П С У Л И Р У Е Т А Л Г О Р И Т М В Н У Т Р И К Л А С С

Подробнее

4 Классы. 4.1 Основы классов

4 Классы. 4.1 Основы классов 4 Классы Класс центральный компонент Java. Поскольку класс определяет форму и сущность объекта, он является той логической конструкцией, на основе которой построен весь язык. Как таковой, класс образует

Подробнее

Лабораторная работа 1. Диаграмма вариантов использования

Лабораторная работа 1. Диаграмма вариантов использования Лабораторная работа Диаграмма вариантов использования Цель работы:. Знакомство с основными понятиями UML 2. Знакомство со средой моделирования Rational Rose 3. Изучение компонентов модели 4. Построение

Подробнее

ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ

ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПРОГРАММНАЯ ИНЖЕНЕРИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ АНАЛИЗ ПРЕЦЕДЕНТА Деятельность UP «Анализ прецедента» включает: создание классов анализа реализации прецедентов Классы

Подробнее

Лабораторная работа 7.

Лабораторная работа 7. Лабораторная работа 7. ДИАГРАММЫ ПОСЛЕДОВАТЕЛЬНОСТИ. Диаграмма последовательностей показывает последовательность, в которой объекты в процессе взаимодействия обмениваются сообщениями. Схемы последовательностей

Подробнее

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 2 3 ООП Объектно-ориентированное программирование - это методология программирования, основанная на представлении программы

Подробнее

CASE технологии. Лекция 5

CASE технологии. Лекция 5 CASE технологии Лекция 5 1 Язык UML: виды диаграмм UML 1.5 определял двенадцать типов диаграмм, разделенных на три группы: четыре типа диаграмм представляют статическую структуру приложения; пять представляют

Подробнее

Тема 1.1 Функции в С. Понятие функции

Тема 1.1 Функции в С. Понятие функции Тема 1.1 Функции в С Понятие функции Опыт показывает, что для написания больших программ лучше пользоваться функциями. В таком случае программа будет состоять из отдельных фрагментов кода. Такой отдельный

Подробнее

Языки программирования и методы трансляции

Языки программирования и методы трансляции Языки программирования и методы трансляции Имена, связывание, области видимости 1 Время связывания 2 3 Статические области видимости Динамические области видимости Имя, область видимости и связывание Имя

Подробнее

Вестник науки Сибири (8)

Вестник науки Сибири (8) Вичугова Анна Александровна, ассистент кафедры автоматики и компьютерных систем Института кибернетики ТПУ. E-mail: anya@aics.ru Область научных интересов: бизнес-моделирование, структурный анализ, базы

Подробнее

UML диаграммы. Диаграмма классов (2) Диаграмма прецедентов (22) Диаграмма активности (35) Диаграмма взаимодействия (51)

UML диаграммы. Диаграмма классов (2) Диаграмма прецедентов (22) Диаграмма активности (35) Диаграмма взаимодействия (51) UML диаграммы Диаграмма классов (2) Диаграмма прецедентов (22) Диаграмма активности (35) Диаграмма взаимодействия (51) Диаграмма классов Класс (class) - категория вещей, которые имеют общие атрибуты и

Подробнее

Обобщения. Основные понятия

Обобщения. Основные понятия Обобщения. Основные понятия Термин «обобщение», по существу, означает параметризированный тип. Особая роль параметризированных типов состоит в том, что они позволяют создавать классы, структуры, интерфейсы,

Подробнее

Глава 15 Делегаты БИЛЛ ВАГНЕР ЭРИК ЛИППЕРТ

Глава 15 Делегаты БИЛЛ ВАГНЕР ЭРИК ЛИППЕРТ Глава 15 Делегаты Делегаты предназначены для случаев, в которых C++, Pascal и Modula используют указатели на функции. В отличие от последних в C++ делегаты являются полностью объектно-ориентированными.

Подробнее

Перейти на страницу с полной версией»

Перейти на страницу с полной версией» Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис» 100 95 75 25 5 0 УДК 681.3.06 ББК 32.97 Б43 Б43 Белов В. В., Чистякова В. И. Программирование в Delphi: процедурное, объектноориентированное,

Подробнее

ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ

ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ Министерство образования и науки Российской Федерации НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ Методические указания к лабораторным работам для студентов факультета

Подробнее

Лабораторная работа 1: Основы программирования на языке C#

Лабораторная работа 1: Основы программирования на языке C# Цель: Лабораторная работа 1: Основы программирования на языке C# Целью данной работы является получение базовых навыков программирования на языке высокого уровня C# в среде программирования Microsoft Visual

Подробнее

Семинар 6. Наследование. Включение объектов и закрытое наследование. Множественное наследование. Шаблоны классов.

Семинар 6. Наследование. Включение объектов и закрытое наследование. Множественное наследование. Шаблоны классов. Семинар 6. Наследование. Включение объектов и закрытое наследование. Множественное наследование. Шаблоны классов. 1. Наследование и динамическое распределение памяти Пусть в базовом классе осуществляется

Подробнее

«Наследование, перегрузка операторов, обработка исключений»

«Наследование, перегрузка операторов, обработка исключений» Лабораторная работа по теме «Наследование, перегрузка операторов, обработка исключений» 1) Исследуйте исходный код программы: 1.1 объясните, что такое интерфейс, что он может содержать и чем он отличается

Подробнее

Подсистема управления процессами и вычислениями ОГЛАВЛЕНИЕ

Подсистема управления процессами и вычислениями ОГЛАВЛЕНИЕ Приложение 4 Подсистема управления процессами и вычислениями ОГЛАВЛЕНИЕ 1. Общие сведения... 2 2. Моделирование состояний и рабочих процессов... 2 2.1. Управление списком групп состояний... 2 2.2. Создание

Подробнее

Внедрение зависимостей (DI, Dependency Injection) это механизм передачи классу его зависимостей. Существует несколько конкретных видов или паттернов в

Внедрение зависимостей (DI, Dependency Injection) это механизм передачи классу его зависимостей. Существует несколько конкретных видов или паттернов в УДК 519.683.8 Уваров Артем Николаевич студент ФМиИТ ФГБОУ ВО «МГУ им. Н.П. Огарева», г. Саранск, РФ E-mail: uvarov.artem16@yandex.ru ИНВЕРСИЯ УПРАВЛЕНИЯ И ВНЕДРЕНИЕ ЗАВИСИМОСТЕЙ. Аннотация В статье рассматривается

Подробнее

Отношения и их графическое изображение на диаграмме классов

Отношения и их графическое изображение на диаграмме классов Лекция 3 часть2: Отношения и их графическое изображение на диаграмме классов Ключевые слова: UML, ассоциация, association relationship, обобщение, generalization relationship, агрегация, композиция, представление,

Подробнее

Объектно-ориентированное программирование в PHP для начинающих

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

Подробнее

ВВЕДЕНИЕ В VISUAL BASIC FOR APPLICATIONS

ВВЕДЕНИЕ В VISUAL BASIC FOR APPLICATIONS 2 ВВЕДЕНИЕ В VISUAL BASIC FOR APPLICATIONS Информатика 2 семестр План лекции 1. Макросы и язык VBA 2. Объектно-ориентированные аспекты VBA 3. Переменные и типы данных 4. Ветвления 5. Циклы 6. Функции 7.

Подробнее

ОДОБРЕНА Предметной (цикловой) комиссией по спец.дисциплинам. /Е.М.Грибкова/ Подпись Ф.И.О.

ОДОБРЕНА Предметной (цикловой) комиссией по спец.дисциплинам. /Е.М.Грибкова/ Подпись Ф.И.О. 1 ОДОБРЕНА Предметной (цикловой) комиссией по спец.дисциплинам Разработана на основе Федерального государственного образовательного стандарта по специальности среднего профессионального образования 3001

Подробнее

программирование Б А К А Л А В Р И А Т Г.С. Иванова

программирование Б А К А Л А В Р И А Т Г.С. Иванова Б А К А Л А В Р И А Т Г.С. Иванова программирование Допущено УМО вузов по университетскому политехническому образованию в качестве учебника для студентов вузов, обучающихся по направлению 230100 «Информатика

Подробнее

RIGIDBUSBARS КОМПЬЮТЕРНАЯ ПРОГРАММА РАСЧЕТА ЭЛЕКТРОДИНАМИЧЕСКОЙ СТОЙКОСТИ ЖЕСТКОЙ ОШИНОВКИ С ПРОИЗВОЛЬНОЙ ОРИЕНТАЦИЕЙ ШИН И ИЗОЛЯТОРОВ

RIGIDBUSBARS КОМПЬЮТЕРНАЯ ПРОГРАММА РАСЧЕТА ЭЛЕКТРОДИНАМИЧЕСКОЙ СТОЙКОСТИ ЖЕСТКОЙ ОШИНОВКИ С ПРОИЗВОЛЬНОЙ ОРИЕНТАЦИЕЙ ШИН И ИЗОЛЯТОРОВ 26 УДК 621.316 RIGIDBUSBARS КОМПЬЮТЕРНАЯ ПРОГРАММА РАСЧЕТА ЭЛЕКТРОДИНАМИЧЕСКОЙ СТОЙКОСТИ ЖЕСТКОЙ ОШИНОВКИ С ПРОИЗВОЛЬНОЙ ОРИЕНТАЦИЕЙ ШИН И ИЗОЛЯТОРОВ Шпаковский А.А., Баран А.Г. Научный руководитель Климкович

Подробнее

Ответы на вопросы экзамена по курсу «Языки программирования»

Ответы на вопросы экзамена по курсу «Языки программирования» ы на вопросы экзамена по курсу «Языки программирования» 19.01.2015 В ответах курсивом выделены необязательные пояснения, которые можно опустить (особенно на экзамене) Вариант 1 Задача 1-1 Что означает

Подробнее

Лабораторная работа 2. «Диаграмма классов»

Лабораторная работа 2. «Диаграмма классов» Лабораторная работа 2 «Диаграмма классов» Оглавление Общее понятие... 3 Класс... 3 Атрибуты... 4 Операция... 6 Отношения между классами... 7 Отношение зависимости... 7 Отношение ассоциации... 8 Отношение

Подробнее

ООП. С++. Вопросы для проверки и закрепления знаний. 7. Проанализируйте ранее разработанные Вами программы

ООП. С++. Вопросы для проверки и закрепления знаний. 7. Проанализируйте ранее разработанные Вами программы ООП. С++. Вопросы для проверки и закрепления знаний. 1. Проанализируйте ранее разработанные Вами программы и ответьте на вопрос: в каких из них наблюдается слабая связь между структурой данных и функционированием

Подробнее

Абстрактные классы и методы

Абстрактные классы и методы Абстрактные классы и методы Абстрактные методы Абстрактные классы Расширение абстрактных классов Интерфейсы «Множественное наследование» в Java Вложенные интерфейсы Абстрактные классы и методы В ряде ситуаций

Подробнее

Задание 1. Ваша программа должна выполнять следующие действия:

Задание 1. Ваша программа должна выполнять следующие действия: Задание 1. Цель: Конструирование пользовательского типа данных структур, создание массива структур в динамической памяти, ввод исходных данных из файла, запись результатов работы в файл. Задание: Создать

Подробнее

А.М. Ноткин ИСПОЛЬЗОВАНИЕПАТТЕРНА «ХРАНИТЕЛЬ» ДЛЯ СЕРИАЛИЗАЦИИ ОБЪЕКТОВ

А.М. Ноткин ИСПОЛЬЗОВАНИЕПАТТЕРНА «ХРАНИТЕЛЬ» ДЛЯ СЕРИАЛИЗАЦИИ ОБЪЕКТОВ УДК 681.3 А.М. Ноткин Пермскийнациональныйисследовательский политехнический университет ИСПОЛЬЗОВАНИЕПАТТЕРНА «ХРАНИТЕЛЬ» ДЛЯ СЕРИАЛИЗАЦИИ ОБЪЕКТОВ 168 Рассматриваются вопросы сохранения и восстановления

Подробнее

Лекция 14. Порождающие и поведенческие шаблоны проектирования

Лекция 14. Порождающие и поведенческие шаблоны проектирования Название Основные определения шаблонов Лекция 14. Порождающие и поведенческие шаблоны проектирования Метапрограммирование в C ++ 28 апреля 2017 г. Лекция 14 1 / 37 Название Основные определения шаблонов

Подробнее

Шаблоны (параметризованные типы)

Шаблоны (параметризованные типы) Лабораторная работа 2 Шаблоны (параметризованные типы) Цель работы: изучить представление и правила работы с шаблонами в С++. Теоретические сведения Использование шаблонов призвано, облегчить процесс написания

Подробнее

Лекция 3. Концепция наследования

Лекция 3. Концепция наследования Лекция 3. Концепция наследования Рассмотрены вопросы, относящиеся к идеологии и обзору возможностей наследования - одной из фундаментальных концепций, на которых базируется объектно-ориентированное программирование

Подробнее

Кафедра фундаментальной информатики и оптимального управления

Кафедра фундаментальной информатики и оптимального управления ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Кафедра фундаментальной информатики и оптимального управления Рабочая программа «ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ» (3 курс, 5 семестр) Основная образовательная

Подробнее

Кафедра «Графические информационные системы» П р о г р а м м и р о в а н и е н а я з ы к е J a v a

Кафедра «Графические информационные системы» П р о г р а м м и р о в а н и е н а я з ы к е J a v a МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «Нижегородский государственный технический университет

Подробнее

Основы платформы Microsoft.NET

Основы платформы Microsoft.NET Основы платформы Microsoft.NET Тема: Обработка ошибок Понятие исключения...1 Обработка исключений...2 Блок try...2 Блок catch...3 Блок finally...3 Пример обработки исключений...3 Обработка нескольких исключений...5

Подробнее

«Применение шаблонов проектирования при разработке программного обеспечения»

«Применение шаблонов проектирования при разработке программного обеспечения» Государственное образовательное учреждение высшего профессионального образования Московской области «Международный университет природы, общества и человека «Дубна» (университет «Дубна») УТВЕРЖДАЮ проректор

Подробнее

Описание самостоятельной работы студентов (СРС) «Анализ и проектирование на UML»

Описание самостоятельной работы студентов (СРС) «Анализ и проектирование на UML» Санкт-Петербургский государственный университет информационных технологий, механики и оптики Описание самостоятельной работы студентов (СРС) «Анализ и проектирование на UML» Новиков Ф.А., Канд. физ.-мат.

Подробнее

ЯЗЫК VBA ОБЗОР ТИПОВ ДАННЫХ VBA

ЯЗЫК VBA ОБЗОР ТИПОВ ДАННЫХ VBA ЯЗЫК VBA Язык VBA является объектно-ориентированным. Это значит, что многие его команды имеют особенный формат. Типичная команда VBA имеет вид: ..< >.

Подробнее

Паттерны (шаблоны) проектирования Фундаментальные паттерны

Паттерны (шаблоны) проектирования Фундаментальные паттерны Паттерны (шаблоны) проектирования Фундаментальные паттерны Eugeny Berkunsky, Computer Science dept., National University of Shipbuilding eugeny.berkunsky@gmail.com http://www.berkut.mk.ua О чем вообще

Подробнее

Об авторе 16 О техническом рецензенте 17 Благодарности 18. Глава 1. PHP: проектирование и сопровождение систем 23. Глава 2.

Об авторе 16 О техническом рецензенте 17 Благодарности 18. Глава 1. PHP: проектирование и сопровождение систем 23. Глава 2. Содержание Об авторе 16 О техническом рецензенте 17 Благодарности 18 Предисловие 19 От издательства 20 Часть I. Введение 21 Глава 1. PHP: проектирование и сопровождение систем 23 Проблема 23 PHP и другие

Подробнее

ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ» Кафедра «Инженерная графика» ИНЖЕНЕРНАЯ ГРАФИКА

ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ» Кафедра «Инженерная графика» ИНЖЕНЕРНАЯ ГРАФИКА ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ» Кафедра «Инженерная графика» ИНЖЕНЕРНАЯ ГРАФИКА Методические рекомендации к практическим занятиям для

Подробнее

1 Основы Введение

1 Основы Введение 1 Основы 1.0. Введение После выхода операционной системы ios5 в программировании для iphone, ipad и ipod touch многое стало другим. Вся среда времени исполнения и способы написания кода на языке Objective-C

Подробнее

Лабораторная работа 9

Лабораторная работа 9 Лабораторная работа 9 Алгоритмизация и программирование ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ УНИВЕРСИТЕТ ФАКУ ЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ И МЕХАТРОНИКИ Кафедра информационных технологий и мехатроники

Подробнее

Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP. Осень-Зима 2014.

Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP. Осень-Зима 2014. Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP Осень-Зима 2014 Лекция 7 PHP Основы ООП Автор: Дмитрий Левин, Senior PHP Developer,

Подробнее

Образец пакета Modern SRS Package

Образец пакета Modern SRS Package Часть 2. Понимание потребностей пользователей Приложение В Образец пакета Modern SRS Package Ниже приводится схема пакета Modern Software Requirement Specification (SRS), в котором используются как традиционные

Подробнее

Институт радиоэлектроники и информационных технологий. Кафедра «Компьютерные технологии в проектировании и производстве»

Институт радиоэлектроники и информационных технологий. Кафедра «Компьютерные технологии в проектировании и производстве» МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Подробнее

МЕТОДИЧЕСКИЕ УКАЗАНИЯ И ЗАДАНИЯ к индивидуальной работе по дисциплине

МЕТОДИЧЕСКИЕ УКАЗАНИЯ И ЗАДАНИЯ к индивидуальной работе по дисциплине ГОУВПО ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ МЕТОДИЧЕСКИЕ УКАЗАНИЯ И ЗАДАНИЯ к индивидуальной работе по дисциплине «Конструирование программного обеспечения» (для студентов направления подготовки

Подробнее

МИНОБРНАУКИ РОССИИ ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФАКУЛЬТЕТ ИНФОРМАТИКИ

МИНОБРНАУКИ РОССИИ ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФАКУЛЬТЕТ ИНФОРМАТИКИ МИНОБРНАУКИ РОССИИ ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФАКУЛЬТЕТ ИНФОРМАТИКИ Рабочая программа дисциплины (модуля) Программирование 4 (ООП С++) Направление подготовки 010300 Фундаментальная информатика

Подробнее

ПРОГРАММНАЯ ИНЖЕНЕРИЯ. Классы анализа РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ

ПРОГРАММНАЯ ИНЖЕНЕРИЯ. Классы анализа РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ ПРОГРАММНАЯ ИНЖЕНЕРИЯ Классы анализа РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОЕКТИРОВАНИЕ ПОСРЕДСТВОМ UML РАДЧЕНКО Г.И., КАФЕДРА СП ЮУРГУ 2 НОТАЦИЯ ОБЪЕКТОВ UML Прямоугольник с двумя

Подробнее

Объектно-ориентированное

Объектно-ориентированное 10 Объектно-ориентированное программирование Большая часть профессиональных программ пишется на языках объектно-ориентированного программирования (Object-Oriented Programming, OOP), таких как Java, C#

Подробнее