Logo GenDocs.ru

Поиск по сайту:  


Загрузка...

Курсовой проект - Шаблоны проектирования. Исполнение модуля: файл динамической библиотеки dll - файл ПО.doc


Курсовой проект - Шаблоны проектирования. Исполнение модуля: файл динамической библиотеки dll
скачать (63.2 kb.)

Доступные файлы (1):

ПО.doc169kb.09.06.2008 13:34скачать

содержание
Загрузка...

ПО.doc

Реклама MarketGid:
Загрузка...
Содержание


Введение 5

1.2. Паттерн Abstract Factory 9

Абстрактная фабрика - паттерн, порождающий объекты. 9

Назначение 9

Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов. 9

Известен также под именем 9

Kit (инструментарий). 9

1. Брауде Э. Технология разработки программного обеспечения. – СПб.: Питер, 2004. – 655 с. 26



Введение



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

Образцы проектирования – это шаблоны взаимодействующих классов и методов, которые уже показали свое значение для многих приложений.

Образец проектирования – это найденная опытным путем комбинация компонентов, обычно классов или объектов, которая решает определенные общие проектировочные задачи.

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

Образцы проектирования могут быть применены на уровне архитектуры и (или) на уровне детального проектирования.

Применение каждого образца проектирования зависит от клиента – кода, который нуждается в сервисе, предоставляемом образцом проектирования. Клиент ссылается на точку входа образца проектирования (обычно это метод класса внутри образца). Кроме того, обычно подразумевается и третий тип кода, который можно назвать установочным кодом. Он устанавливает состояние образца проектирования. Установочный код не предназначен для повторного использования и предоставляет клиентам возможность легко взаимодействовать с образцом проектирования. В частности, для работы с образцом проектирования клиенту следует знать как можно меньше о его структуре и внутренней работе.

Целью курсового проекта являются следующие задачи: разработать программу управления лифтом, разработать диаграммы UML по заданию курсовой работы; изучить план управления конфигурациями и план-графика проекта; разработать программу тестирования и основную программу; оформить индивидуальную программную документацию. [3]

^ 1. Теоретические разделы


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


Шаблоны проектирования (паттерн, pattern) — это эффективные способы решения характерных задач проектирования, в частности проектирования компьютерных программ. Паттерн не является законченным образцом проекта, который может быть прямо преобразован в код, скорее это описание или образец для того, как решить задачу, таким образом, чтобы это можно было использовать в различных ситуациях. Объектно-ориентированные шаблоны зачастую показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться. Алгоритмы не рассматриваются как шаблоны, так как они решают задачи вычисления, а не проектирования.
Проектирование компьютерных программ
История
В 1987 году Кент Бэк (Kent Beck) и Вард Каннигем (Ward Cunningham) взяли идеи Кристофер Александра и разработали шаблоны применительно к разработке программного обеспечения для разработки графических оболочек на языке Smalltalk.

В 1988 году Эрих Гамма (Erich Gamma) начал писать докторскую работу при цюрихском университете об общей переносимости этой методики на разработку программ.

В 1989—1991 годах Джеймс Коплин (James Coplien) трудился над разработкой идиом для программирования на C++ и опубликовал в 1991 году книгу Advanced C++ Idioms.

В этом же году Эрих Гамма заканчивает свою докторскую работу и переезжает в США, где в сотрудничестве с Ричардом Хелмом (Richard Helm), Ральфом Джонсоном (Ralph Johnson) и Джоном Влиссидсом (John Vlissides) публикует книгу Design Patterns — Elements of Reusable Object-Oriented Software. В этой книге описаны 23 шаблона проектирования. Также команда авторов этой книги известна общественности под названием Банда четырёх (англ. Gang of Four, часто сокращается до GoF). Именно эта книга стала причиной роста популярности шаблонов проектирования.
Польза
Главная польза каждого отдельного шаблона состоит в том, что он описывает решение целого класса абстрактных проблем. Также тот факт, что каждый шаблон имеет свое имя, облегчает дискуссию об абстрактных структурах данных (ADT) между разработчиками, так как они могут ссылаться на известные шаблоны. Таким образом, за счёт шаблонов производится унификация терминологии, названий модулей и элементов проекта.
Правильно сформулированный паттерн проектирования позволяет, отыскав удачное решение, пользоваться им снова и снова. В отличие от идиом, шаблоны независимы от применяемого языка программирования.
Критика
Иногда шаблоны консервируют громоздкую и малоэффективную систему понятий, разработанную узкой группой. Когда количество шаблонов возрастает, превышая критическую сложность, исполнители начинают игнорировать шаблоны и всю систему, с ними связанную. Нередко шаблонами заменяется отсутствие или недостаточность документации в сложной программной среде.
^

1.2. Паттерн Abstract Factory



Название и классификация паттерна

Абстрактная фабрика - паттерн, порождающий объекты.

Назначение

Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.

^

Известен также под именем

Kit (инструментарий).



Применимость

Используйте паттерн абстрактная фабрика, когда:

- система не должна зависеть от того, как создаются, компонуются и представляются входящие в нее объекты;

- входящие в семейство взаимосвязанные объекты должны использоваться

вместе и вам необходимо обеспечить выполнение этого ограничения;

- система должна конфигурироваться одним из семейств составляющих ее

объектов;

- вы хотите предоставить библиотеку объектов, раскрывая только их интерфейсы, но не реализацию.
Участники:

1)AbstractFactory (WidgetFactory) - абстрактная фабрика:

- объявляет интерфейс для операций, создающих абстрактные объекты-

продукты;

2)ConcreteFactory (Mot if WidgetFactory, PMWidgetFactory) - конкретная фабрика:

- реализует операции, создающие конкретные объекты-продукты;

3)AbstractProduct (Window, ScrollBar) - абстрактный продукт:

- объявляет интерфейс для типа объекта-продукта;

4)ConcreteProduct (Mot if Window, Mot if ScrollBar) - конкретный продукт:

- определяет объект-продукт, создаваемый соответствующей конкретной

фабрикой;

- реализует интерфейс Abstract Product;

5) Client - клиент:

- пользуется исключительно интерфейсами, которые объявлены в классах

AbstractFactory и AbstractProduct.
Отношения:

- Обычно во время выполнения создается единственный экземпляр класса

ConcreteFactory. Эта конкретная фабрика создает объекты-продукты,

имеющие вполне определенную реализацию. Для создания других видов

объектов клиент должен воспользоваться другой конкретной фабрикой;

- AbstractFactory передоверяет создание объектов-продуктов своему

подклассу ConcreteFactory.
Результаты:

Паттерн абстрактная фабрика обладает следующими плюсами и минусами:

- изолирует конкретные классы. Помогает контролировать классы объектов,

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

Клиенты манипулируют экземплярами через их абстрактные интерфейсы. Имена изготавливаемых классов известны только конкретной фабрике, в коде клиента они не упоминаются;

- упрощает замену семейств продуктов. Класс конкретной фабрики появляется в приложении только один раз: при инстанцировании. Это облегчает замену используемой приложением конкретной фабрики. Приложение может изменить конфигурацию продуктов, просто подставив новую конкретную фабрику. Поскольку абстрактная фабрика создает все семейство продуктов, то и заменяется сразу все семейство. В нашем примере пользовательского интерфейса перейти от виджетов Motif к виджетам Presentation Manager можно, просто переключившись на продукты соответствующей фабрики и заново создав интерфейс;

- гарантирует сочетаемость продуктов. Если продукты некоторого семейства спроектированы для совместного использования, то важно, чтобы приложение в каждый момент времени работало только с продуктами единственного семейства. Класс AbstractFactory позволяет легко соблюсти это ограничение;

- поддержать новый вид продуктов трудно. Расширение абстрактной фабрики для изготовления новых видов продуктов - непростая задача. Интерфейс

AbstractFactory фиксирует набор продуктов, которые можно создать.

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

Вот некоторые полезные приемы реализации паттерна абстрактная фабрика:

- фабрики как объекты, существующие в единственном экземпляре. Как правило, приложению нужен только один экземпляр класса ConcreteFactory

на каждое семейство продуктов. Поэтому для реализации лучше всего применить паттерн одиночка;

- создание продуктов. Класс AbstractFactory объявляет только интерфейс для создания продуктов. Фактическое их создание - дело подклассов ConcreteProduct. Чаще всего для этой цели определяется фабричный метод для каждого продукта. Конкретная фабрика специфицирует свои продукты путем замещения фабричного метода для каждого из них. Хотя такая реализация проста, она требует создавать новый подкласс конкретной фабрики для каждого семейства продуктов, даже если они почти ничем не отличаются. Если семейств продуктов может быть много, то конкретную фабрику удастся реализовать с помощью паттерна прототип. В этом случае она инициализируется экземпляром-прототипом каждого продукта в семействе и создает новый продукт путем клонирования этого прототипа. Подход на основе прототипов устраняет необходимость создавать новый класс конкретной фабрики для каждого нового семейства продуктов.

Вот как можно реализовать фабрику на основе прототипов в языке Smalltalk. Конкретная фабрика хранит подлежащие клонированию прототипы в словаре под названием partCatalog. Метод make: извлекает прототип и клонирует его:

make: partName

^ (partCatalog at: partName) copy
У конкретной фабрики есть метод для добавления деталей в каталог:

addPart: partTemplate named: partName

partCatalog at: partName put: partTemplate
У конкретной фабрики есть метод для добавления деталей в каталог:

addPart: partTemplate named: partName

partCatalog at: partName put: partTemplate

Прототипы добавляются к фабрике путем идентификации их символом:

aFactory addPart: aPrototype named: #ACMEWidget
В языках, где сами классы являются настоящими объектами (например, Smalltalk и Objective С), возможны некие вариации подхода на базе прототипов. В таких языках класс можно представлять себе как вырожденный случай фабрики, умеющей создавать только один вид продуктов.

Можно хранить классы внутри конкретной фабрики, которая создает разные конкретные продукты в переменных. Это очень похоже на прототипы. Такие

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

Как и для только что рассмотренной фабрики на базе прототипов в Smalltalk,

в версии на основе классов будет единственная переменная экземпляра partCatalog, представляющая собой словарь, ключом которого является название детали. Но вместо хранения подлежащих клонированию прототипов partCatalog хранит классы продуктов. Метод make: выглядит теперь следующим образом:

make: partName

(partCatalog at: partName) new
- определение расширяемых фабрик. Класс AbstractFactory обычно определяет разные операции для каждого вида изготавливаемых продуктов. Виды продуктов кодируются в сигнатуре операции. Для добавления нового вида продуктов нужно изменить интерфейс класса AbstractFactory и всех зависящих от него классов.
^ Известные применения

В библиотеке Interviews [Lin92] для обозначения классов абстрактных фабрик используется суффикс «Kit». Так, для изготовления объектов пользователького интерфейса с заданным внешним обликом определены абстрактные фабрики WidgetKi t и DialogKit . В Interviews есть также класс Lay out Kit, который генерирует разные объекты композиции в зависимости от того, какая требуется стратегия размещения. Например, размещение, которое концептуально можно было бы назвать «в строку», может потребовать разных объектов в зависимости от ориентации документа (книжной или альбомной).

В библиотеке ЕТ++ [WGM88] паттерн абстрактная фабрика применяется для

достижения переносимости между разными оконными системами (например, X

Windows и SunView). Абстрактный базовый класс WindowSystem определяет интерфейс для создания объектов, которое представляют ресурсы оконной системы MakeWindow, MakeFont, MakeColor и т.п.). Его конкретные подклассы реализуют эти интерфейсы для той или иной оконной системы. Во время выполнения ЕТ++ создает экземпляр конкретного подкласса WindowSystem, который уже порождает объекты, соответствующие ресурсам данной оконной системы.
^ Родственные паттерны

Классы Abstract Factory часто реализуются фабричными методами, но могут быть реализованы и с помощью паттерна прототип.

Конкретная фабрика часто описывается паттерном одиночка. [1,2,3,4]

^ 2. Постановка задачи
Создать класс <Таймер>. Разработать для класса функцию установки времени начала отсчета таймера и чтения его текущих показаний.

Исполнение модуля: файл динамической библиотеки dll.

Образец проектирования: Factory.
^ 3. Разработка диаграмм UML
Диаграмма Use Case позволяет создать список операций, которые выполняет система. Данную диаграмму называют также диаграммой функций, так как на основе набора таких диаграмм создается список требований к системе и определяется множество выполняемых ею функций Диаграмма Use Case представлена на рисунке 1.



Диаграмма Class является основной для создания кода приложения. С ее помощью строится внутренняя структура программы. Диаграмма представлена на рисунке 2.




  1. ^ Формирование плана управления конфигурациями и план графика проекта


Ведущим конфигурацию проекта является разработчик приложения. Ведущий конфигурацию поддерживает данный документ (SCMP). Он отвечает за настройку и резервное копирование используемых инструментов управления конфигурациями.

План-график мероприятий по отчетам, архивации и обновлению конфигура­ции показан в таб. 1.

Таблица 1 План график проекта

№ п/п

Разделы

29.03.2007

19.04.2007

15.05.2007

26.05.2007

1.

Введение

+










2.

Теоретические разделы

+










3.

Подбор исходных данных




+







4.

Разработка диаграмм UML




+







5.

Формирование плана управления конфигурациями и план-графика проекта




+







6.

Разработка программ тестирования




+







7.

Разработка основной программы







+




8.

Оформление программной документации










+

9.

Заключение










+

10.

Литература

+













Защита проекта














Названия и элементы конфигураций представлены в разделе 6 данного отчета.

  1. ^ Разработка программы тестирования


unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

LibHandle: THandle = 0;

sec:integer;

Form1: TForm1;

function showform : integer; stdcall;

external 'Project1.dll';
implementation

procedure TForm1.Button1Click(Sender: TObject);

begin

sec:=StrToInt(Edit1.Text);

Read(sec);

Showform;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

LibHandle:= LoadLibrary('Project1.dll');

if LibHandle< 1 then

begin

ShowMessage(SysErrorMessage(GetLastError));

exit;

end

else

begin

// библиотека загружена успешно

ShowMessage('LOAD OKAY');

end;

end;
end.

Тесты dll:


Рис.3 Форма ввода sec Рис.4 Отсчёт времени

Рис.5 Конец отсчёта времени Рис.6 Сообщение об окончании времени
Если интервал не задан, то выводится сообщение (рис.7):

Рис.7 «Не задан интервал»

  1. Разработка основной программы


Приложение состоит из одного класса: clsTimer.
Текст программы:

1) Project1.dpr

library Project1;

uses

SysUtils,

Classes,

Forms,

ComServ,

Project1_TLB in 'Project1_TLB.pas',

Unit1 in 'Unit1.pas' {clsTimer: CoClass},

Unit2 in 'Unit2.pas' {Form2};

function ShowForm : integer; stdcall;

var

Form : TForm2;

begin

Form := TForm2.Create(application);

Result := Form.ShowModal;

Form.free;

end;

exports

DllGetClassObject,

DllCanUnloadNow,

DllRegisterServer,

DllUnregisterServer,

ShowForm;

begin

end.

2)Unit1.pas

unit Unit1;

interface

uses

ComObj, ActiveX, Project1_TLB, StdVcl,Dialogs,unit2,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;

type

TclsTimer = class(TAutoObject, IclsTimer)

protected

function Get_Read: Integer; safecall;

function Get_Start: Integer; safecall;

procedure Set_Read(sec: Integer); safecall;

procedure Set_Start(sec: Integer); safecall;

end;

uses ComServ;

function TclsTimer.Get_Read: Integer;

begin

//Unit2.Form2.Timer1.Enabled:=True;

end;

function TclsTimer.Get_Start: Integer;

begin

end;

procedure TclsTimer.Set_Read(sec: Integer);

begin

Unit2.Form2.Edit1.Text:=IntToStr(sec);

end;

procedure TclsTimer.Set_Start(sec: Integer);

begin

end;

TAutoObjectFactory.Create(ComServer, TclsTimer, Class_clsTimer,

ciMultiInstance, tmApartment);

end.

3)Unit2.pas
unit Unit2;
interface
uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;
type

TForm2 = class(TForm)

Label1: TLabel;

Timer1: TTimer;

Edit1: TEdit;

procedure Timer1Timer(Sender: TObject);
private

{ Private declarations }

public

{ Public declarations }

end;
var

Form2: TForm2;
implementation
{$R *.dfm}
var

// интервал

sec: integer; // количество секунд
procedure TForm2.Timer1Timer(Sender: TObject);

begin

sec := StrToInt(Edit1.Text);

sec := sec - 1;
if sec = 0 then

// заданный интервал истек
begin

Timer1.Enabled := False; // стоп

ShowMessage('Заданный интервал истек!');

Label1.Visible := False; // скрыть индикатор

// сделать видимыми поля ввода интервала

exit;

end;

end;


procedure ShowTime;

var

buf: string[20];

begin

// секунды выводим двумя цифрами
if sec < 10 then

buf := buf + '0' + IntToStr(sec)

else

buf := buf + IntToStr(sec);
Form2.Label1.Caption := buf;
end;
end.


Рис.8 Интерфейс программы
^ 7. Оформление индивидуальной программной документации
Таблица 2. Индивидуальная программная документация


Верификация и валидация

SVVP (План экспертизы программного обеспечения)

В данном проекте не используется

Контроль качества

SQAP (План контроля качества программного обеспечения)

В данном проекте не используется

Конфигурация

SCMP (План управления конфигурациями программного обеспечения)

См пункт 5 данного отчета

Статус проекта

SPMP (План управления программным проектом)

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

Риск №1, «неисполнение программного приложения в срок» связан с тем, что разработчик помимо данного приложения выполняет другие поручения и задачи, не связанные с курсовой работой.

В приложении для проектирования используется среда Rational Rose, а реализация ведется на языке Delphi.

Требования

SRS (Спецификация требований к программному обеспечению)

Требования представлены в таблице 1

Проектирование


SDD (Проектная документация программного обеспечения)

См пункт 7 данного отчета

Код


Исходный код

См пункт 6 данного отчета

Тестирование

STD (Документация по тестированию программного обеспечения)

См пункт 5 данного отчета

Использование

Руководство пользователя

В данном проекте не используется



Заключение

В результате проведенной работы была спроектирована программа запуска таймера и чтение его показаний.
Выполнены следующие задачи:

– приобретение дополнительных знаний в области проектирования, внедрения и сопровождения программного обеспечения;

– изучение аппаратных и программных средств автоматизированных систем управления;

– формулировка требования к системе, UseCase-диаграммы, диаграммы последовательности и диаграмму классов;

В данном курсовом проекте все поставленные цели и задачи выполнены.

Литература
^

1. Брауде Э. Технология разработки программного обеспечения. – СПб.: Питер, 2004. – 655 с.


2. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования.— СПб.: Питер, 2001.—368с.

3. Гради Буч Объектно-ориентированный анализ и проектирование с примерами приложений на С++, ВТОРОЕ ИЗДАНИЕ, Rational Санта-Клара, Калифорния.

4. Орлов С.А. Технологии разработки программного обеспечения: Учебник для вузов. 3-е изд. — СПб.: Питер, 2004. — 527 с.

5. Терри Кватрани. Rational Rose 2000 и UML. Визуальное моделирование

6. Цилькер Б.Я., Орлов С.А. Организация ЭВМ и систем. Учебник для вузов. – СПб.: Питер, 2006.— 668с.







Скачать файл (63.2 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru