软件设计与体系结构实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1:ACME软件体系结构描述语言应用
一、实验目的
1)掌握软件体系结构描述的概念
2)掌握应用ACMESTUDIO工具描述软件体系结构的基本操作
二、实验学时
2学时。
三、实验环境
计算机及ACMESTUDIO。
四、实验内容
利用ACME语言定义软件体系结构风格,修改ACME代码,并进行风格测试。
五、实验操作步骤
一、导入Zip文档
建立的一个Acme Project,并且命名为AcmeLab2。
如下图:
接着导入ZIP文档,导入完ZIP文档后显示的如下图:
二、修改风格
在AcmeLab2项目中,打开families下的TieredFam.acme.如下图:
修改组件外观
1. 在组件类型中,双击DataNodeT; 在其右边的编辑器中,将产生预览;选择Modify
按钮,将打开外观编辑器对话框。
2. 首先改变图形:找到Basic shape section,在Stock image dropdown menu中选
择Repository类型.
3. 在Color/Line Properties section修改填充颜色为深蓝色。
4. 在颜色对话框中选择深蓝色,并单击 [OK].
5. 修改图形的边框颜色为绿色
7. 单击Label tab,在Font Settings section, 设置字体颜色为白色,单击[OK]
产生的图形如下图:
添加新元素类型
1. 在Component Types section选择New按钮
2. 在对话框中,类型名称输入LogicNodeT .
3. 选择TierNodeT 为父类型.
4. 单击 [Finish].
5. 按照修改外观的步骤,修改LogicNodeT的外观:填充颜色为浅绿色,边框颜色为黑色,大小为2,其他默认。
产生的图形如下图:
添加新属性类型
1. 选择Property Types
2. 选择New按钮
3. 在对话框中,类型名称为TierPropT
4. 类型选择enum
5. 值为:client, logic, data
6. 单击[OK].
添加属性
1. 激活属性视图页
2. 双击TierNodeT
3. 选择Properties tab
4. 右击空白位置,或者单击图标,选择新建属性
5. 属性名为tier.
6. 类型为TierPropT(找不到,则直接输入TieredFam.TierPropT)
7.单击 [OK].
添加规则
1. 单击Family editor中的TieredFam (Press to select).
2. 选择属性视图中的规则页
3. 单击生成新规则
4. 规则名为hostCheck,选择invariant单选项
5. 在规则框中输入(直接粘贴过去)
Forall t1 : TierNodeT in ponents |
!t1.allowShareHost -> (Forall t2 : TierNodeT in ponents | t1 != t2 -> t1.host != t2.host)
6. 单击 [Parse Rule] 以确认无语法错误,有错误,要重新写。
7. 在标签中输入“Tier nodes respect host assignment.”
8. 在出错标签中输入“Two nodes that cannot share a host must not reside on
the same host.”
9. 单击[OK] 。
若前面有语法错误,按钮是灰色的
10. 保存.
Acme代码编辑
1. 查看编辑器底端的区域,有3个区:Overview, Acme Source and Family –
TieredFam. 选择Source
2. 在代码中找到TierNodeT
3. 复制其中的属性内容
4. 定位至ClientNodeT,粘贴刚才复制的内容
5. 把tier属性的值赋值为client.
Component Type ClientNodeT extends TierNodeT with {
Property tier : TierPropT = client;
}
6. 同样把复制的内容粘贴在LogicNodeT和 DataNodeT中,前者的tier值为logic,后
者的tier值为data.
7. 单击TieredFam editor tab,若有错,将指出错误
添加可视变量
1. 编辑LogicNodeT 组件的外观
2. 选择Variants tab.
3. 单击 [New…] 创建新的变量
4. 名为:Not logic tier.
5. 选择基于条件的单选按钮
6. 下拉菜单选择allowSharedHost, 条件选择==, 值输入false
7. 设置填充颜色为深绿色
8. 单击 [OK]
测试风格
1.在Navigator的AcmeLab2中,单击右键,在弹出式菜单中选择New Acme System.
2. 系统名为TestSystem.
4. 单击[Next].
5. 在风格类型中,选择的内容如下图所示。
6.单击[Finish]
Notice the palette of types on the left from which you can drag and drop an element to create an instance.
7.在右边的palette面板中,拖入 4个 client nodes和1个logic node ,并具有4个
ports ,同时拖入4个connectors ,实现客户端和逻辑层的连接。
实验2:SOA实践
一、实验目的
1)初步了解SOA的体系结构
2)掌握用Web service技术实现SOA
二、实验学时
2学时。
三、实验环境
计算机及VS2005。
四、实验内容
Web service实现。
六、实验操作步骤
内容一:Web Services实现
步骤:
1 创建WEB服务
1)打开2005,新建一个网站,在对话框中选择“ WEB服务”,选择好位置,把Website1改为“IMPLEMENTWS”,单击确定。
2)展开解决方案资源管理器,在“APP_CODE”下创建3个文件夹,依次命名为:DA,Model,Util,见下图:
3)右击DA文件夹,选择添加新项,新增一个类:DataAccess.cs,按同样的方法,在MODEL 和UTIL文件夹中,添加入下图所示的类。
4)右击项目,选择添加引用(注意不是Web引用),选择浏览页,定位拷贝的DLL,见下
图
5)完成DATA.CS的代码
6)完成DataAccess.CS的代码
7)完成ActivityIdHeader.cs
8)双击Service.CS文件,完成代码
9)编译,并运行,查看效果。
一个WEB服务编写完成。
2 创建WINDOWS应用
1)右击解决方案,选择添加-》新项目2)按下图完成:
图
4)右击项目,新建文件夹,并在其下新增一个类,并完成代码,如下图所示
5)添加Web引用,右击项目,选择添加WEB引用,在URL中输入,WEB服务的地址,然后单击前进,可以修改引用名,单击“添加引用”按钮
6)双击FORM1.CS,在窗体上放置一个按钮和一个标签,其中标签命名为Result,按钮的text为“get data”
7)双击按钮,完成以下代码
8)右击项目,新增一个类:UptoLogEvents.cs
9)双击PROGRAM.CS,完成代码
10)设置APPFORWEBSERVICE为启动项目,运行,查看结果
实验3:MDA实践
一、实验目的
1)初步了解MDA的框架。
2)了解PSM到CODE的过程。
3)掌握应用ECO实现MDA过程。
二、实验学时
6学时。
三、实验环境
计算机及STARUML和VS2005。
四、实验内容
(1)StarUML实践
五、实验操作步骤
实验内容一:StarUML实践
1.安装:
首先,我们必须先安装将要使用的软件。
StarUML ,是一个开放源码软件,遵循GPL协议许可(GNU公共许可证),并免费提供下载。
2.启动
安装以后就可以启动该程序。
3.添加新工程
在New Project By Approach的对话框会弹出。
选择“Empty Project”并且按下"
确定"。
4.选择模块
在右边的“Model Explorer”框中选定“Untitled”模块。
5.添加模块
通过“Model”主菜单,或右击选定的模型,可以" Add/Model "
6.添加类图
通过“Model”主菜单,或右击选定模型,可以“Add Diagram/Class Diagram”:
7.设置profile
通过“Model/Profile...”菜单去设置工程所需的profile。
这决定了工程所使用的规则和约定。
根据语言,选择不同的Profile,比如JAVA,一定要包含"JAVA Porfile"
这一项目;比如C#,一定要包含"C# Porfile"这一项目。
8.保存工程
保存工程,命名为LAB3.UML
9.创造图表
从默认就在屏幕的左边的“Toolbox”选择“类”图标,然后左键单击diagram 窗口的某处。
这样就使用通用名字创造了一个新的类。
双击,将类改名为Circle。
10.添加属性
右击图中的目标,在弹出菜单中选择“Add”中的“Attribute”(被标示为绿色),为其添加一个属性(或者域),填入期望的名字“_radius”。
●具体的数据类型,在属性面板(右下侧的窗口),由双打字,在"类型"时段。
在窗体右下边的Properties面板中,找到“Type”输入框,输入double作为
_radius属性的类型。
●类的内部数据(域/属性)都是私有的,因为他们是严格由类内部使用的。
所
以,在Properties面板中将_radius设置为“私有”
11.继续进行设计
重复同样的过程,添加所谓的名字叫做Rectangle的类和double型的私有成员_width和_height。
12.创造 IShape interface
●从toolbox中,选择“Interface”,并点击图表的某处。
将其改名为IShape。
创建以后,选中它。
●在顶部工具栏,选择“Stereotype Display”下拉按钮,将值改变为“None”。
这将改变以往的圆形形状,使其变为成长方形。
●还是在顶部工具栏,取消选中" Suppress Operations "。
这将使我们能够看
到接口所拥有的方法。
●向IShape 接口添加返回值为double的getArea方法。
⏹可以通过右击interface的图标,在弹出菜单中点击红色的“Operation”
按钮,然后输入getArea。
⏹设定返回值类型。
在“Model Explorer”中展开IShape节点,右击你刚
刚创建的getArea方法,并选择“Add Parameter”。
在“Properties”
框中,将参数的名子变为空,将“DirectionKind”变为“RETURN”,将
“Type”变为dboule。
●将IShape和getArea的IsAbstract属性框打上勾,他们在图标上的名字将变
为斜体。
这是UML的标准,表示这是接口或者其他纯虚实体。
13.添加类和接口的关系
●可以通过从toolbox中选择表示“Realization”的箭头,并从Circle拖拽向
IShape,使Circle实现接口IShape。
重复同样的过程,为Rectangle添加实
现关系。
这是添加了Circle 和 Rectangle对于IShape接口的实现关系。
⏹如果想使连接线表现为直角的方式,右击连接线,并选择" Format/Line
Style/Rectilinear"菜单。
你通过这种方式,使箭头重叠在一起,可以使
你的图看起来更整洁。
14.添加类基于接口的行为
●由于Circle和Rectangle类都实现了IShape接口,就必须有同样的行为(方法)。
⏹在“Model Explorer”面板中,复制getArea法(按Ctrl-C或者右键点击并选
择Copy菜单),并粘贴到Circle和Rectangle类。
⏹这些实现了的方法在Circle和Rectangle类中都不是抽象的,而是具体的。
这是因为他们实际上是执行一些特定行为(例如,为一个圆形和长方形分别计
算面积),所以不要勾选IsAbstract框。
15.添加Pizza类
●向Pizza添加double型的私有域_price。
●添加返回double类型的共有操作getPrice。
16.为Pizza类添加IShape 的引用
●从toolbox中选择" DirectedAssociation "箭头,点击Pizza类,并向IShape拖
拽。
⏹选中箭头,在右边的“Properties”框上,将name一栏改为“has-a”,
“End1.Aggregation”一栏改为“AGGREGATE”(这个图示说明Pizza和shape
对象是“聚合“的关系)。
⏹将“”一栏改为_shape 。
这样就自动为Pizza添加一个名字为_shape,
使用IShape接口的私有域,的所谓_shape型ishape以pizza饼。
⏹将“End2.Visibility”改为私有。
●为_shape创建一个“获得者”方法,名字叫做getShape,返回IShape 。
这就是创
建一个行为,名字是getShape,返回IShape 。
17.为pizza类添加构造函数
●为Pizza添加构造函数,右击,在弹出的“Add”菜单中选择“Operation”。
从
这里,增加一个普通的带有dboule型price参数和IShape类型shape参数的操作
●增加一个输入参数,就像之前增加了一个返回型的输出参数一样,你指定的参数的
名称,如价格和形状等,以及适当的数据类型。
●为Circle增加一个带有double型的radius参数的构造函数。
●为Rectangle增加一个带有double型width和height参数的构造函数。
18.添加Test_Pizza类
为了说明UML类图更多的功能,又增加了一个叫做“Test_Pizza”的类,它用作测试目的,并使用到Pizza和IShape类。
●两个类之间的关系有多种形式。
举例来说,一个类可以实例化另一个类,而不是将
其作为一个成员。
又或,一类的方法可能需要另一个类作为输入参数,保留一个引用仅仅是为这个方法的执行。
●通过从toolbox中选择“Dependency”箭头,从一个类拖向他所以来的类,来添加
不通类之间的依赖关系。
在这个例子中, Test_Pizza 依赖于Pizza,Circle和
Rectangle类,因为它实例化了它们。
●从Properties box选择name属性,或者双击图表上的“依赖线”,可以为依赖关
系添加标签。
特别的是,当一类实例化另一个类,我们会把依赖线叫做
“instantiates”。
●你可以选中并拖动依赖线的标签,以达到更美观的效果。
●依赖关系不会影响代码生成。
19.生成代码:
●根据不同的语言,选择不同的菜单,若JAVA,点击主菜单的“Tools->Java”菜单,
选择“Generate Code”;若C#,点击主菜单的“Tools->C#”菜单,选择“Generate Code”。
●从对话框中选择你的模块(这里可能Model1),点击“Next”。
●为了使你的模块或者图标的所有类都生成stub code,选择“Select All”然后按
“Next”。
●选择一个有效的输出目录,“Next”。
●若C#,请务必选中“Generate the Documentation by C#Doc”,“Generate empty
C#Doc”,若JAVA,请务必选中“Generate the Documentation byJAVADoc”,“Generate empty JAVADoc”,所有其他复选框不选中,“Next”。
●现在StarUML将从你的图产生代码,点击“Finish”退出对话框。
●现在,您可以编辑生成的代码,以增加应用。
20.添加实现代码
现在就开始定义程序实际做的事情,例如,为图标中的类描述添加实现代码。
21.逆向工程
StarUML还可以从现有的Java/C#代码创建一个类图,这被称为“reverse engineering”,当想从现有的代码生成图表,或者你修改了SU生成的代码,并且
想在图表中反应出来的时候,逆向工程功能就非常有用了。
●到主菜单栏中选择“Tools/C#或Java/Reverse Engineer...”,可以将现有的代码
逆向工程。
●选择C#/Java代码所在的目录,并点击“Add”或“Add All”按钮,将它们包括在
逆向工程过程中,然后单击“Next”
●选择想将类加入的模块,这里可能是“Model1”,然后“Next”。
●在Option Setup里面:
⏹确认“public”,“package”,“protected”和“private”是选中的(这
是默认设置)。
⏹同样,在默认情况下,单选按钮“Create the field to the Attribute”也
是选中的。
⏹除非你想SU创建其他东西,例如布局很糟糕的包含所有类的图表,不要选中
“Create Overview Diagram”框。
⏹当你对选项做了检查后,点击“Run”。
⏹点击"完成"退出对话框时,就完成了。
●SU会向模块添加导入的类,但不是的图表。
为了将它添加到图,只需要简单地从
Model Explorer拖动它们即可。
实验4:MVC实践
一、实验目的
1)初步了解软件体系设计的基本概念
2)应用设计模式实现MVC
二、实验学时
2学时。
三、实验环境
计算机及VS2005。
四、实验内容
利用Observer模式实现MVC。
五、实验操作步骤
步骤:
1)打开2005,新建一个项目,项目类型选择Windows,模板选择Windows应用程序,名称为MVC_IMPL,选择好位置,单击确定。
2)右击项目,选择“添加->新建项”,在模板中选择“接口”,名称为Observer.cs,单击添加按钮。
3)同样方法,添加Subject.CS接口。
4)双击Observer.CS文件,在接口里面定义一个方法:
void sendNotify(string message);
5)双击Subject.CS文件,在接口里面定义一个方法:
void registerInterest(Observer obs);
6)展开解决方案资源管理器,将FORM1.CS修改为Controller.CS,在弹出的信息框中,单击确定按钮,单击窗体,在窗体的属性对话框中,设置Text属性为:颜色Controller。
修改后效果如下图1所示
图1
7)单击图上的红色圆圈的图标。
8)从左边的工具栏见图,拖一个GroupBox控件至窗体上,并拖动位置和设置大小效果,在属性对话框中,设置其Text属性为:颜色选择器,如图所示。
9)从工具箱拖三个radioButton控件,name属性分别设置为rbtnRed,rbtnGreen,rbtnBlue,Text属性分别设置为“红色”,“绿色”,“蓝色”,并设置好位置,效果如图3所示。
10)切换至代码模式,添加using System.Collections引用,添加controller的父接口:Subject,并添加一个私有成员,效果见图4。
图4
11)定义单击单选按钮方法,代码如图5所示。
图5
12)实现Subject接口的registerInterest方法,如图6所示。
图6
13)右击项目,选择“添加->新建项”,在模板中选择“Window窗体”,名称为ViewList.cs,单击添加按钮。
14)将ViewList窗体的Text属性设置为:列表视图。
15)从工具栏中拖入ListBox控件,设置Name为lbColor。
16)切换至代码模式,添加ViewList的父接口:Observer。
17)实现接口的方法,见图8。
图8
18)定义Init方法,见图9。
图9
19)修改ViewList的构造函数,见图10。
图10
20)右击项目,选择“添加->新建项”,在模板中选择“Window窗体”,名称为ViewColor.cs,单击添加按钮。
21)将ViewColor窗体的Text属性设置为:颜色视图。
22)从工具栏中拖入PictureBox控件,设置Name为pbColor,设置BackColor为ActiveCaptionText。
23)切换至代码模式,添加using System.Collections引用,添加ViewColor的父接口:
Observer,并定义一些私有成员,效果见图11。
图11 24)定义PictureBox绘图方法,见图12。
图12 25)定义Init方法,见图13。
图13 26)实现接口的方法,见图14。
图14 27)修改ViewColor的构造函数,见图15
图15
28)切换至Controller的代码模式,添加Init方法,并在Controller类的构造函数中调用它,见图16。
图16
实验5:产品族实践
一、实验目的
1)初步了解软件产品线和产品族的概念
2)应用设计模式实现产品族
二、实验学时
2学时。
三、实验环境
计算机及VS2005。
四、实验内容
利用抽象工厂模式实现产品族。
五、实验操作步骤
内容:利用抽象工厂模式实现产品族
步骤:
1)打开2005,新建一个项目,项目类型选择Windows,模板选择Windows应用程序,名称为PL_IMPL,选择好位置,单击确定。
2)右击项目,选择“添加->新建项”,在模板中选择“类”,名称为Plant.cs,单击添加按钮,并完成如图1所示的代码。
图1
3)同样方法,添加Garden.CS类,并完成如图2所示的代码。
图2
4)右击项目,选择“添加->新建项”,在模板中选择“类”,名称为VeggieGarden.cs,单击添加按钮,并完成如图3所示的代码。
图3
5)右击项目,选择“添加->新建项”,在模板中选择“类”,名称为MeatGarden.cs,单击添加按钮,并完成如图4所示的代码。
图4
6)右击项目,选择“添加->新建项”,在模板中选择“组件类”,名称为GardenPicture.cs,单击添加按钮,并完成如图5所示的代码。
图5
7)单击菜单,选择“生成->生成解决方案”,或者按F6。
8)展开解决方案资源管理器,将FORM1的Text属性设置为:“农/牧场主”。
9)在工具箱中,展开项目组件(本实验是PL_IMPL组件),将组件GardenPicture拖入Form1窗体,并设置BackColor属性为:ActiveCaptionText;BorderStyle为:Fixed3D;并调整好大小,见图6。
图6
10)从工具箱中,拖放3个CheckBox和2个RadioButton,属性设置见表1,见图6。
表1
11)选中Form1.cs,单击解决方案资源管理器中的“查看代码”图标。
12)在Form1类中,完成如图7所示的代码。
图7
13)切换至Form1.cs的设计环境,单击rbtnVeggie(农场单选框),并输入如下代码:
14)切换至Form1.cs的设计环境,单击rbtnMeat(牧场单选框),并输入如下代码:
15)切换至Form1.cs的设计环境,单击ckbCenter(Center多选框),并输入如下代码:
16)切换至Form1.cs的设计环境,单击ckbBorder(Border多选框),并输入如下代码:
17)切换至Form1.cs的设计环境,单击ckbShade(Shade多选框),并输入如下代码:
18)按Ctrl+F5,查看结果。
实验6:软件体系结构风格实践
一、实验目的
1)初步了解典型的软件体系结构
2)应用抽象数据类型风格实现KWIC系统
二、实验学时
2学时。
三、实验环境
计算机及VS2005。
四、实验内容
应用抽象数据类型风格实现KWIC系统。
五、实验操作步骤
KWIC描述:KWIC索引系统接受一些行,每行有若干字,每个字由若干字符组成;每行都可以循环移位。
重复地把第一个字删除,然后接到行末; KWIC把所有行的各种移位情况按照字母表顺序输出
1)打开2005,新建一个项目,项目类型选择Windows,模板选择控制台应用程序,名称为KWIC_ADT,选择好位置,单击确定。
2)右击项目,选择“添加->新建项”,在模板中选择“类”,名称为AbstractData.cs,单击添加按钮,并完成如图1所示的代码。
图1
3)同样方法,添加Shift.CS类,并完成如图2所示的代码。
图2
4)右击项目,选择“添加->新建项”,在模板中选择“类”,名称为Alphabetizer.cs,单击添加按钮,并完成如图3所示的代码。
图3
5)右击项目,选择“添加->新建项”,在模板中选择“类”,名称为Output.cs,单击添加按钮,并完成如图4所示的代码。
图4
6)右击项目,选择“添加->新建项”,在模板中选择“类”,名称为Input.cs,单击添加按钮,并完成如图5所示的代码。
图5
7)双击program.CS文件,完成如图6所示的代码
图6
8)在E盘创建一个kwic2.txt文件,内容如下:Hello World
Today is Wednesday
9)按Ctrl+F5,并查看结果。
出现的结果是倒数的输出上面的值。