资源描述
实验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 self.Components |
!t1.allowShareHost -> (Forall t2 : TierNodeT in self.Components |
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) 打开VS.NET2005,新建一个网站,在对话框中选择“ASP.NET 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)按下图完成:
3)右击项目,选择添加引用(注意不是Web引用),选择浏览页,定位拷贝的DLL,见下图
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”。
l 具体的数据类型,在属性面板(右下侧的窗口) ,由双打字,在"类型"时段。 在窗体右下边的Properties面板中,找到“Type”输入框,输入double作为_radius属性的类型。
l 类的内部数据(域/属性)都是私有的,因为他们是严格由类内部使用的。所以,在Properties面板中将_radius设置为“私有”
11. 继续进行设计
重复同样的过程,添加所谓的名字叫做Rectangle的类和double型的私有成员_width和_height。
12. 创造 IShape interface
l 从toolbox中,选择“Interface”,并点击图表的某处。将其改名为IShape。创建以后,选中它。
l 在顶部工具栏,选择 “Stereotype Display” 下拉按钮,将值改变为“None”。这将改变以往的圆形形状,使其变为成长方形。
l 还是在顶部工具栏,取消选中" Suppress Operations "。这将使我们能够看到接口所拥有的方法。
l 向IShape 接口添加返回值为double的getArea方法。
n 可以通过右击interface的图标,在弹出菜单中点击红色的“Operation”按钮,然后输入getArea。
n 设定返回值类型。在“Model Explorer”中展开IShape节点,右击你刚刚创建的getArea方法,并选择“Add Parameter”。在“Properties”框中,将参数的名子变为空,将“DirectionKind”变为“RETURN”,将“Type”变为dboule。
l 将IShape和getArea的IsAbstract属性框打上勾,他们在图标上的名字将变为斜体。这是UML的标准,表示这是接口或者其他纯虚实体。
13. 添加类和接口的关系
l 可以通过从toolbox中选择表示“Realization”的箭头,并从Circle拖拽向IShape,使Circle实现接口IShape。重复同样的过程,为Rectangle添加实现关系。这是添加了Circle 和 Rectangle对于IShape接口的实现关系。
n 如果想使连接线表现为直角的方式,右击连接线,并选择" Format/Line Style/Rectilinear"菜单。你通过这种方式,使箭头重叠在一起,可以使你的图看起来更整洁。
14. 添加类基于接口的行为
l 由于Circle和Rectangle类都实现了IShape接口,就必须有同样的行为(方法)。
n 在“Model Explorer”面板中,复制getArea法(按Ctrl-C或者右键点击并选择Copy菜单),并粘贴到Circle和Rectangle类。
n 这些实现了的方法在Circle和Rectangle类中都不是抽象的,而是具体的。这是因为他们实际上是执行一些特定行为(例如,为一个圆形和长方形分别计算面积) ,所以不要勾选IsAbstract框。
15. 添加Pizza类
l 向Pizza添加double型的私有域_price。
l 添加返回double类型的共有操作getPrice。
16. 为Pizza类添加IShape 的引用
l 从toolbox中选择" DirectedAssociation "箭头,点击Pizza类,并向IShape拖拽 。
n 选中箭头,在右边的“Properties”框上,将name一栏改为“has-a”,“End1.Aggregation” 一栏改为“AGGREGATE”(这个图示说明Pizza和shape对象是“聚合“的关系)。
n 将“End2.Name”一栏改为_shape 。这样就自动为Pizza添加一个名字为_shape,使用IShape接口的私有域,的所谓_shape型ishape以pizza饼。
n 将“End2.Visibility”改为私有。
l 为_shape创建一个“获得者”方法,名字叫做getShape,返回IShape 。这就是创建一个行为,名字是getShape,返回IShape 。
17. 为pizza类添加构造函数
l 为Pizza添加构造函数,右击,在弹出的“Add” 菜单中选择“Operation”。从这里,增加一个普通的带有dboule型price参数和IShape类型shape参数的操作
l 增加一个输入参数,就像之前增加了一个返回型的输出参数一样,你指定的参数的名称,如价格和形状等,以及适当的数据类型。
l 为Circle增加一个带有double型的radius参数的构造函数。
l 为Rectangle增加一个带有double型width和height参数的构造函数。
18. 添加Test_Pizza类
为了说明UML类图更多的功能,又增加了一个叫做“Test_Pizza”的类,它用作测试目的,并使用到Pizza和IShape类。
l 两个类之间的关系有多种形式。举例来说,一个类可以实例化另一个类,而不是将其作为一个成员。又或,一类的方法可能需要另一个类作为输入参数,保留一个引用仅仅是为这个方法的执行。
l 通过从toolbox中选择“Dependency”箭头,从一个类拖向他所以来的类,来添加不通类之间的依赖关系。在这个例子中, Test_Pizza 依赖于Pizza,Circle和Rectangle类,因为它实例化了它们。
l 从Properties box选择name属性,或者双击图表上的“依赖线”,可以为依赖关系添加标签。特别的是,当一类实例化另一个类,我们会把依赖线叫做“instantiates”。
l 你可以选中并拖动依赖线的标签,以达到更美观的效果。
l 依赖关系不会影响代码生成。
19. 生成代码:
l 根据不同的语言,选择不同的菜单,若JAVA,点击主菜单的“Tools->Java”菜单,选择“Generate Code”;若C#,点击主菜单的“Tools->C#”菜单,选择“Generate Code”。
l 从对话框中选择你的模块(这里可能Model1),点击“Next”。
l 为了使你的模块或者图标的所有类都生成stub code,选择“Select All”然后按“Next”。
l 选择一个有效的输出目录,“Next”。
l 若C#,请务必选中“Generate the Documentation by C#Doc”,“Generate empty C#Doc”,若JAVA,请务必选中“Generate the Documentation byJAVADoc”,“Generate empty JAVADoc”,所有其他复选框不选中,“Next”。
l 现在StarUML将从你的图产生代码,点击“Finish”退出对话框。
l 现在,您可以编辑生成的代码,以增加应用。
20. 添加实现代码
现在就开始定义程序实际做的事情,例如,为图标中的类描述添加实现代码。
21. 逆向工程
StarUML还可以从现有的Java/C#代码创建一个类图,这被称为“reverse engineering”,当想从现有的代码生成图表,或者你修改了SU生成的代码,并且想在图表中反应出来的时候,逆向工程功能就非常有用了。
l 到主菜单栏中选择“Tools/C#或Java/Reverse Engineer...”,可以将现有的代码逆向工程。
l 选择C#/Java代码所在的目录,并点击“Add”或“Add All”按钮,将它们包括在逆向工程过程中,然后单击“Next”
l 选择想将类加入的模块,这里可能是“Model1”,然后“Next”。
l 在Option Setup里面:
n 确认“public”,“package”,“protected”和“private”是选中的(这是默认设置)。
n 同样,在默认情况下,单选按钮“Create the field to the Attribute”也是选中的。
n 除非你想SU创建其他东西,例如布局很糟糕的包含所有类的图表,不要选中“Create Overview Diagram”框。
n 当你对选项做了检查后,点击“Run”。
n 点击"完成"退出对话框时,就完成了。
l SU会向模块添加导入的类,但不是的图表。为了将它添加到图,只需要简单地从Model Explorer拖动它们即可。
实验4:MVC实践
一、实验目的
1)初步了解软件体系设计的基本概念
2)应用设计模式实现MVC
二、实验学时
2学时。
三、实验环境
计算机及VS2005。
四、实验内容
利用Observer模式实现MVC。
五、实验操作步骤
步骤:
1)打开VS.NET2005,新建一个项目,项目类型选择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)打开VS.NET2005,新建一个项目,项目类型选择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
控件
Name属性
Text属性
CheckBox1
ckbCenter
Center
CheckBox2
ckbBorder
Border
CheckBox3
ckbShade
Shade
RadioButton1
rbtnVeggie
农场
RadioButton2
rbtnMeat
牧场
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)打开VS.NET2005,新建一个项目,项目类型选择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,并查看结果。
出现的结果是倒数的输出上面的值。
展开阅读全文