Разработка встроенного модуля среды Rational Rose для автоматизированного преобразования диаграмм деятельностей в диаграммы Use case

Методы моделирования в системе Rational Rose, требования, предъявляемые к разрабатываемой системе. Выбор средства для реализации поставленной задачи и особенности интегрированной среды разработки Borland Delphi 5. Возможности отладчика ИСР Delphi 5.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 21.11.2010
Размер файла 460,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Разработанное приложение позволяет существенно упростить процесс проектирования автоматизированных систем на стадии бизнес- моделирования и анализа требований. Это достигается за счет автоматизации процесса преобразования описания бизнес-процессов в функциональные требования к системе и отражения их на диаграммах Use-Case. Такая технология позволяет также сократить количество ошибок на ранних стадиях проектирования системы.

Методика преобразования диаграмм была использована в проекте автоматизации электролампового завода, где подтвердилась ее эффективность, и в настоящее время активно используется в других проектах.

Приложения

unit Structura;

{Модуль содержит описание структуры классов, с помощью которых

осуществляется преобразование данных

Автор - Хабибрахманов М.А.

Последняя модификация - 12.04.2001}

interface

uses

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

StdCtrls, OleServer, RationalRose_TLB;

Type

{$M+}

TDiagramm = class(TObject)

public

Name: String;

Departs: TList;

SubDiagram : TDiagramm;

constructor Create;

procedure AddDeparts(var ActivColl: TRoseActivityCollection);

procedure MakeCategories(var UseCaseCat : TRoseCategory);

end;

TDepart = class(TObject)

public

Name: String;

UseCases: TList;

Actors: TStringList;

SuperDepart : String;

constructor Create;

procedure AddData(var Activ: TRoseActivity);

procedure MakeActorsAndUC(var UseCaseCat : TRoseCategory; var Diagram : TRoseClassDiagram);

end;

TUseCase = class(TObject)

public

Name: String;

Documents: TStringList;

SubDiagramm: TDiagramm;

constructor Create;

procedure AddDocuments(var Activ: TRoseAbstractState{TRoseActivity});

procedure AddSubDiagramm(var AbState :TRoseAbstractState{Activ: TRoseActivity});

procedure MakeUseCase(var UseCaseCat: TRoseCategory; var Diagram : TRoseClassDiagram);

procedure MakeSubCategories(var UseCaseCat: TRoseCategory);

end;

var

g_category_name : string;

g_Department : string;

g_Actor : string;

g_Use_case : string;

g_Document : string;

Function CompNAME(fild,stereo:string):boolean;

implementation

constructor TDiagramm.Create;

Begin

Inherited Create;

Departs := TList.Create;

//SubDiagram := TDiagramm.Create;

end;

constructor TDepart.Create;

Begin

Inherited Create;

UseCases := TList.Create;

Actors := TStringList.Create;

end;

constructor TUseCase.Create;

Begin

Inherited Create;

Documents := TStringList.Create;

SubDiagramm := TDiagramm.Create;

end;

procedure TDiagramm.AddDeparts(var ActivColl: TRoseActivityCollection);

var i : integer;

activ : TRoseActivity;

Depart: TDepart;

NewDiag : TDiagramm;

SubActivColl: TRoseActivityCollection;

begin

activ := TRoseActivity.Create(nil);

SubActivColl:= TRoseActivityCollection.Create(nil);

for i:=1 to activcoll.Count do

begin

activ.ConnectTo(activcoll.getat(i));

if compname(G_department,{Ansi}LowerCase(activ.Stereotype)) then

begin

depart := TDepart.Create;

depart.Name := Activ.Name;

depart.AddData(activ);

Departs.Add(depart);

end;

if compname(g_use_case,LowerCase(activ.Stereotype)) and (activ.SubActivities.Count<>0) then

begin

SubDiagram := TDiagramm.Create;

//showmessage(activ.name);

//newDiag := Tdiagramm.Create;

SubActivColl.ConnectTo(activ.SubActivities);

SubDiagram.AddDeparts(SubActivColl);

end;

end;

activ.Disconnect;

activ.Free;

SubActivColl.Disconnect;

SubActivColl.Free;

end;

procedure TDiagramm.MakeCategories(var UseCaseCat : TRoseCategory);

var i : integer;

depart: tdepart;

Category: TRoseCategory;

Diag: TRoseClassDiagram;

RootDiagramm: iRoseClassDiagram;

SubCategory: iRoseCategory;

begin

try

depart := TDepart.Create;

category := TRoseCategory.Create(nil);

diag := TRoseClassDiagram.Create(nil);

if (SubDiagram = nil) then

rootdiagramm := Usecasecat.ClassDiagrams.GetFirst('Main')

else

RootDiagramm := UseCasecat.AddClassDiagram('Main');

for i:=0 to Departs.Count-1 do

begin

depart := Departs.items[i];

//category.ConnectTo(Usecasecat.AddCategory(depart.Name));

SubCategory := Usecasecat.AddCategory(depart.Name);

RootDiagramm.AddCategory(SubCategory);

category.ConnectTo(SubCategory);

Diag.ConnectTo(Category.AddClassDiagram(Depart.Name));

depart.MakeActorsAndUC(category,diag);

end;

diag.Disconnect;

diag.Free;

category.Disconnect;

category.Free;

except

end;

if not(SubDiagram = nil) then

SubDiagram.MakeCategories(UseCasecat);

end;

procedure TUseCase.AddDocuments(var Activ: TRoseAbstractState{RoseActivity});

var k : integer;

Begin

if activ.Transitions.Count <>0 then

begin

for k:=1 to activ.Transitions.Count do

begin

if compname(g_document,{Ansi}LowerCase(activ.Transitions.GetAt(k).GetSupplier.Stereotype)) then

documents.add(activ.Transitions.GetAt(k).GetSupplier.Name);

if compname(G_document,{Ansi}LowerCase(activ.Transitions.GetAt(k).GetClient.Stereotype)) then

documents.add(activ.Transitions.GetAt(k).GetClient.Name);

end;

end;

end;

procedure TUseCase.AddSubDiagramm(var AbState :TRoseAbstractState{Activ: TRoseActivity});

var SAC : TRoseActivityCollection;

rosi: troseitemcollection;

ast: troseabstractstatecollection;

begin

sac := TRoseActivityCollection.Create(nil);

sac.ConnectTo(abstate.SubActivities);

//sac.

//ast.ConnectTo(activ.SubActivities as iroseabstractstatecollection);

if abstate.SubActivities.Count <> 0 then

begin

Subdiagramm.Name := 'Детализация '+Name;

Subdiagramm.AddDeparts(sac);

end;

sac.Disconnect;

sac.Free;

end;

procedure TUseCase.MakeUseCase(var UseCaseCat: TRoseCategory; var Diagram : TRoseClassDiagram);

var i,j : integer;

UC: TRoseUseCase;

DocClass : IRoseClass;

ClassDiag: TRoseClassDiagram;

begin

UC:= TRoseUseCase.Create(nil);

//diagram.AddUseCase(UseCaseCat.AddUseCase(Name));

ClassDiag:= TRoseClassDiagram.Create(nil);

UC.ConnectTo(diagram.GetUseCases.GetAt(diagram.GetUseCases.Count));

classDiag.ConnectTo(UC.AddClassDiagram('Документы '+Name));

if documents.Count<>0 then

for i:=0 to documents.Count-1 do

begin

try

DocClass := UseCaseCat.AddClass(documents.strings[i]{+inttostr(i)+name});

classDiag.AddClass(DocClass{UseCaseCat.AddClass(documents.strings[i]+inttostr(i)+name)});

except

for j:=1 to usecasecat.GetAllClasses.Count do

begin

Docclass := usecasecat.GetAllClasses.GetAt(j);

if docclass.Name = documents.strings[i] then

classDiag.AddClass(DocClass);

end;

end;

end;

UC.Disconnect;

UC.Free;

ClassDiag.Disconnect;

ClassDiag.Free;

end;

procedure TUseCase.MakeSubCategories(var UseCaseCat: TRoseCategory);

var cat : TRoseCategory;

begin

cat := TRoseCategory.Create(nil);

if Subdiagramm.name <> '' then

begin

cat.connectto(UseCaseCat.AddCategory(Subdiagramm.name));

Subdiagramm.MakeCategories(cat);

end;

end;

procedure TDepart.AddData(var Activ: TRoseActivity);

var k : integer;

UC : TUseCase;

UCA : TRoseActivity;

RState : TROseStateVertex;

ras:troseabstractstate;

isv:irosestatevertex;

irAbs:iroseabstractstate;

begin

ras := troseabstractstate.Create(nil);

if activ.Transitions.Count <>0 then

begin

for k:=1 to activ.Transitions.Count do

begin

if compname(G_actor,{Ansi}LowerCase(activ.Transitions.GetAt(k).GetSupplier.Stereotype)) then

actors.add(activ.Transitions.GetAt(k).GetSupplier.Name);

if compname(g_use_case,{Ansi}LowerCase(activ.Transitions.GetAt(k).GetSupplier.Stereotype)) then

begin

UC := TUseCase.Create;

UC.Name := activ.Transitions.GetAt(k).GetSupplier.Name;

isv:= activ.Transitions.GetAt(k).GetSupplier as irosestatevertex;

irAbs:= isv as iroseabstractstate;

ras.ConnectTo(irabs);

UC.AddDocuments(RAS);

UC.AddSubDiagramm(RAS);

UseCases.add(UC);

end;

end;

RAS.Disconnect;

RAS.Free;

end;

procedure TDepart.MakeActorsAndUC(var UseCaseCat : TRoseCategory; var Diagram : TRoseClassDiagram);

var i,j,k: integer;

UC: TUseCase;

RoseClass : TRoseClass;

iRoseAss : IroseAssociation;

SubCat : TRoseCategory;

iSubCat : iRoseCategory;

SubDiagram : TRoseClassDiagram;

iUseCase : iRoseUseCase;

flag : boolean;

begin

UC := TUseCase.Create;

SubCat := TRoseCategory.Create(nil) ;

RoseClass := TRoseClass.Create(nil);

SubDiagram := TRoseClassDiagram.Create(nil);

{if usecases.Count<>0 then

begin

for i:=0 to usecases.Count-1 do

begin

uc := usecases.items[i];

uc.MakeUseCase(UseCaseCat,Diagram);

uc.MakeSubCategories(UseCaseCat);

end;

end; }

if actors.Count<>0 then

for i:=0 to actors.Count-1 do

begin

try

iSubCat := UseCasecat.AddCategory('Функции ' + actors.strings[i]);

diagram.AddCategory(isubcat);

SubCat.ConnectTo(iSubCat);

//Usecasecat:= SubCat;

SubDiagram.ConnectTo(SubCat.AddClassDiagram('Функции ' + actors.strings[i]));

SubDiagram.AddClass(SubCat.AddClass(actors.strings[i]{+inttostr(i)}));

RoseClass.ConnectTo(SubDiagram.GetClasses.GetAt(SubDiagram.GetClasses.Count));

RoseClass.Stereotype:='actor';

{Установка связей}

if usecases.Count<>0 then

begin

for j:=0 to usecases.Count-1 do

begin

uc := usecases.items[j];

subdiagram.AddUseCase(SubCat.AddUseCase(UC.Name+inttostr(i)));

//showmessage(inttostr(subdiagram.GetAssociations.Count));

iUseCase := SubDiagram.GetUseCases.GetAt(SubDiagram.GetUseCases.count);

IroseAss := RoseClass.AddAssociation('','');

// showmessage(inttostr(roseclass.GetAssociations.Count));

//iroseass.LinkClass:= SubDiagram.GetClasses.GetAt(SubDiagram.GetClasses.Count);

// iroseass.Role1. :=SubDiagram.GetClasses.GetAt(SubDiagram.GetClasses.Count).GetRoseItem ;

iroseass.Role1.SupplierName:=iUseCase.Name;

// iroseass.SetRoleForNameDirection(iroseass.Role2);

subdiagram.AddAssociation(iroseass);

iusecase.Name := uc.Name;

uc.MakeUseCase(SubCat,SubDiagram);

uc.MakeSubCategories(SubCat);

end;

end;

{Конец Установка связей}

RoseClass.Disconnect;

Subdiagram.Disconnect;

Subcat.Disconnect;

except

//UseCasecat.DeleteCategory(iSubCat);

end;

end;

RoseClass.Disconnect;

RoseClass.Free;

Subdiagram.Disconnect;

Subdiagram.Free;

Subcat.Disconnect;

Subcat.free;

Uc.Free;

end;

Function CompNAME(fild,stereo:string):boolean;

var

c:string;

i,j:integer;

begin

i:=1;

//for j:=1 to n_of_item do begin

c:='';

result:=false;

repeat

// i:=i+1;

c:=c+fild[i];

i:=i+1;

if fild[i]=',' then

begin

if c = stereo then

begin

result:= true;

exit;

end

else

begin

c:='';

i:=I+1;

end;

end;

if i>=length(fild) then

begin

c:=c+fild[i];

if c = stereo then result:= true;

exit;

end;

until (i>=length(fild));

//if C='' then showmessage('djdfjfjfk');

end;

end.

unit Action;

{Модуль содержит описание интерфейса пользователя

Автор - Хабибрахманов М.А.

Последняя модификация - 06.04.2001}

interface

uses

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

StdCtrls, OleServer, RationalRose_TLB, Structura, Menus, ComCtrls, Registry;

type

TTransForm = class(TForm)

RoseActivity1: TRoseActivity;

RoseApplication1: TRoseApplication;

Memo1: TMemo;

RoseActivity2: TRoseActivity;

StatusBar1: TStatusBar;

Button1: TButton;

Edit1: TEdit;

Label1: TLabel;

Label2: TLabel;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

TransForm: TTransForm;

a: iroseusecase;

swml:TRoseSwimLane;

AllActivity:tlist;

diag: tdiagramm;

actcoll: Troseactivitycollection;

categor:TRoseCategory;

reg : Tregistry;

implementation

uses About, Dialog1;

{$R *.DFM}

procedure TTransForm.Button1Click(Sender: TObject);

var

ind :integer;

begin

try

try

button1.Enabled := false;

button2.Enabled := false;

Structura.g_category_name := Edit1.Text;

Structura.g_Department := Edit2.Text;

Structura.g_Actor := Edit3.Text;

Structura.g_Use_case := Edit4.Text;

Structura.g_Document := Edit5.Text;

RoseApplication1.visible:=false;

StatusBar1.Panels[0].Text := 'Идет преобразование';

Transform.Refresh;

{создание образа}

categor := TRoseCategory.Create(nil);

diag:= Tdiagramm.Create;

actcoll:=Troseactivitycollection.Create(nil);

actcoll.ConnectTo(roseapplication1.currentmodel.RootUseCaseCategory.StateMachineOwner.StateMachines.getat(1).activities);

diaG.AddDeparts(actcoll);

diag.Name := roseapplication1.currentmodel.RootUseCaseCategory.StateMachineOwner.StateMachines.getat(1).name;

if roseapplication1.currentmodel.RootUseCaseCategory.Categories.FindFirst(g_category_name)= 0

then

begin

//showmessage('Не существует');

categor.ConnectTo(roseapplication1.currentmodel.RootUseCaseCategory.AddCategory(g_category_name));

end

else

begin

ExsistDlg.showmodal;

if ExsistDlg.Status =1 then

begin

ind:=roseapplication1.currentmodel.RootUseCaseCategory.Categories.FindFirst(g_category_name);

categor.ConnectTo(roseapplication1.currentmodel.RootUseCaseCategory.Categories.getat(ind));

end

else

begin

ind:=roseapplication1.currentmodel.RootUseCaseCategory.Categories.FindFirst(g_category_name);

//categor.ConnectTo(roseapplication1.currentmodel.RootUseCaseCategory.Categories.getat(ind));

roseapplication1.currentmodel.RootUseCaseCategory.DeleteCategory(roseapplication1.currentmodel.RootUseCaseCategory.Categories.getat(ind));

//roseapplication1.currentmodel.RootUseCaseCategory.Categories.Remove(roseapplication1.currentmodel.RootUseCaseCategory.Categories.getat(ind));

categor.ConnectTo(roseapplication1.currentmodel.RootUseCaseCategory.AddCategory(g_category_name));

end;

end;

diag.MakeCategories(categor);

Categor.Disconnect;

Categor.Free;

//N3.Enabled := false;

StatusBar1.Panels[0].Text := 'Готово';

finally

RoseApplication1.visible:=true;

Close;

end;

except

ShowMessage('Ошибка преобразования');

//StatusBar1.Panels[0].Text := 'Ошибка преобразования';

end;

end;

procedure TTransForm.Button2Click(Sender: TObject);

begin

Close;

end;

procedure TTransForm.FormShow(Sender: TObject);

begin

reg := Tregistry.Create;

reg.OpenKey('Software\Rational Software\Rose\Conv',true);

//showmessage(reg.CurrentPath);

//reg.GetValueNames(memo2.Lines);

if reg.HasSubKeys then showmessage('!!!!!');

//reg.GetDataInfo('Product Feature',rr);

//showmessage(reg.ReadString('Actor'));

edit2.Text:=reg.ReadString('Department');

edit3.text:=reg.ReadString('Actor');

edit4.Text := reg.ReadString('Use_case');

edit5.Text := reg.ReadString('Document');

//reg.WriteString('Department','Dep1');

end;

procedure TTransForm.FormClose(Sender: TObject; var Action: TCloseAction);

begin

reg.WriteString('Department',edit2.Text);

reg.WriteString('Actor',edit3.text);

reg.WriteString('Use_case',edit4.Text);

reg.WriteString('Document',edit5.Text);

end;

end.

unit Dialog1;

interface

uses

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

StdCtrls, ExtCtrls;

type

TExsistDlg = class(TForm)

OkButton: TButton;

CancelBtn: TButton;

RadioGroup1: TRadioGroup;

//property Pstatus

procedure CancelBtnClick(Sender: TObject);

procedure OkButtonClick(Sender: TObject);

private

{ Private declarations }

public

Status : integer;

{ Public declarations }

end;

var

ExsistDlg: TExsistDlg;

implementation

{$R *.DFM}

procedure TExsistDlg.CancelBtnClick(Sender: TObject);

begin

close;

end;

procedure TExsistDlg.OkButtonClick(Sender: TObject);

begin

if radiogroup1.ItemIndex=0 then status := 0

else status := 1 ;

close;

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Характеристика CASE-засобу Rational Rose 98/2000. Дослідження призначення панелей інструментів середовища. Причини, що стримують застосування CASE-засобів. Особливості робочого інтерфейсу Rational Rose. Відмінність між нотаціями Booch, OMT та Unified.

    лабораторная работа [260,8 K], добавлен 10.11.2021

  • Использование CASE-средств для поддержки процессов создания и сопровождения информационных систем. Задачи графического редактора диаграмм, документатора и администратора проекта. Основные возможности IBM Rational Professional Bundle и IBM Rational Rose.

    реферат [28,1 K], добавлен 30.05.2012

  • Среда проектирования программного обеспечения Rational Rose. Унифицированный язык моделирования UML. Требования к функциональности, к безопасности, интерфейсу, настраиваемости, информационной и программной совместимости, программная документация.

    курсовая работа [582,0 K], добавлен 20.07.2011

  • Классификация автоматизированных информационных систем (АИС). Проектирование АИС складского учета с использованием CASE-средства Rational Rose. Подходы к проектированию, анализ CASE-средств. Программная реализация профессионально ориентированной АИС.

    курсовая работа [1,4 M], добавлен 06.03.2012

  • Разработка информационной системы для ведения каталога книг/читателей, поисковой системы и системы предварительных заказов на приобретение книг. Среда Rational Rose. Внесение изменений в объект. Основные операции классов и атрибуты типов данных.

    лабораторная работа [417,6 K], добавлен 17.05.2013

  • Загальна характеристика мови моделювання UML. Розробка діаграм UML з метою автоматизації продаж в магазині. Rational Rose як засіб візуального моделювання об'єктно-орієнтованих інформаційних систем. Зворотне проектування як головна перевага Rational Rose.

    контрольная работа [1,7 M], добавлен 23.10.2014

  • UML как стандарт для создания модели информационной системы. Особенности работы в средстве проектирования Rational Rose 2003. Назначение операций главного меню File и Edit. Особенности разработки диаграммы развертывания в среде IBM Rational Rose 2003.

    дипломная работа [524,1 K], добавлен 27.09.2010

  • Особенности среды визуального проектирования Borland Delphi 7.0. Этапы разработки программы и составления блок-схемы алгоритмов. Способы вычисления кусочно-заданной функции одной переменной. Рассмотрение компонентов среды Delphi, ее предназначение.

    контрольная работа [703,8 K], добавлен 24.09.2012

  • Характеристика программных продуктов Open Source: Umbrello - среды UML-моделирования на языке, Rational Rose - средства визуального моделирования объектно-ориентированных информационных систем. Описание и сравнение сайтов по созданию онлайн UML диаграмм.

    контрольная работа [1,5 M], добавлен 03.11.2013

  • Unified modeling language як мова об'єктно-орієнтованого моделювання. Дослідження сучасних сase-засобів моделювання бізнес процесів. Кодогенератор для забезпечення зв'язку між Delphi і Rose. Перелік основних інструментів для створення моделі в ERwin.

    дипломная работа [3,2 M], добавлен 22.10.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.