软件设计与体系结构实验指导书.docx
- 文档编号:5631677
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:44
- 大小:1.46MB
软件设计与体系结构实验指导书.docx
《软件设计与体系结构实验指导书.docx》由会员分享,可在线阅读,更多相关《软件设计与体系结构实验指导书.docx(44页珍藏版)》请在冰豆网上搜索。
软件设计与体系结构实验指导书
实验1:
ACME软件体系结构描述语言应用
一、实验目的
1)掌握软件体系结构描述的概念
2)掌握应用ACMESTUDIO工具描述软件体系结构的基本操作
二、实验学时
2学时。
三、实验环境
计算机及ACMESTUDIO。
四、实验内容
利用ACME语言定义软件体系结构风格,修改ACME代码,并进行风格测试。
五、实验操作步骤
一、导入Zip文档
建立的一个AcmeProject,并且命名为AcmeLab2。
如下图:
接着导入ZIP文档,导入完ZIP文档后显示的如下图:
二、修改风格
在AcmeLab2项目中,打开families下的TieredFam.acme.如下图:
修改组件外观
1.在组件类型中,双击DataNodeT;在其右边的编辑器中,将产生预览;选择Modify按钮,将打开外观编辑器对话框。
2.首先改变图形:
找到Basicshapesection,在Stockimagedropdownmenu中选择Repository类型.
3.在Color/LinePropertiessection修改填充颜色为深蓝色。
4.在颜色对话框中选择深蓝色,并单击[OK].
5.修改图形的边框颜色为绿色
7.单击Labeltab,在FontSettingssection,设置字体颜色为白色,单击[OK]
产生的图形如下图:
添加新元素类型
1.在ComponentTypessection选择New按钮
2.在对话框中,类型名称输入LogicNodeT.
3.选择TierNodeT为父类型.
4.单击[Finish].
5.按照修改外观的步骤,修改LogicNodeT的外观:
填充颜色为浅绿色,边框颜色为黑色,大小为2,其他默认。
产生的图形如下图:
添加新属性类型
1.选择PropertyTypes
2.选择New按钮
3.在对话框中,类型名称为TierPropT
4.类型选择enum
5.值为:
client,logic,data
6.单击[OK].
添加属性
1.激活属性视图页
2.双击TierNodeT
3.选择Propertiestab
4.右击空白位置,或者单击图标
,选择新建属性
5.属性名为tier.
6.类型为TierPropT(找不到,则直接输入TieredFam.TierPropT)
7.单击[OK].
添加规则
1.单击Familyeditor中的TieredFam(Presstoselect).
2.选择属性视图中的规则页
3.单击
生成新规则
4.规则名为hostCheck,选择invariant单选项
5.在规则框中输入(直接粘贴过去)
Forallt1:
TierNodeTinself.Components|
!
t1.allowShareHost->(Forallt2:
TierNodeTinself.Components|
t1!
=t2->t1.host!
=t2.host)
6.单击[ParseRule]以确认无语法错误,有错误,要重新写。
7.在标签中输入“Tiernodesrespecthostassignment.”
8.在出错标签中输入“Twonodesthatcannotshareahostmustnotresideonthesamehost.”
9.单击[OK]。
若前面有语法错误,按钮是灰色的
10.保存.
Acme代码编辑
1.查看编辑器底端的区域,有3个区:
Overview,AcmeSourceandFamily–TieredFam.选择Source
2.在代码中找到TierNodeT
3.复制其中的属性内容
4.定位至ClientNodeT,粘贴刚才复制的内容
5.把tier属性的值赋值为client.
ComponentTypeClientNodeTextendsTierNodeTwith{
Propertytier:
TierPropT=client;
}
6.同样把复制的内容粘贴在LogicNodeT和DataNodeT中,前者的tier值为logic,后者的tier值为data.
7.单击TieredFameditortab,若有错,将指出错误
添加可视变量
1.编辑LogicNodeT组件的外观
2.选择Variantstab.
3.单击[New…]创建新的变量
4.名为:
Notlogictier.
5.选择基于条件的单选按钮
6.下拉菜单选择allowSharedHost,条件选择==,值输入false
7.设置填充颜色为深绿色
8.单击[OK]
测试风格
1.在Navigator的AcmeLab2中,单击右键,在弹出式菜单中选择NewAcmeSystem.
2.系统名为TestSystem.
4.单击[Next].
5.在风格类型中,选择的内容如下图所示。
6.单击[Finish]
Noticethepaletteoftypesontheleftfromwhichyoucandraganddropanelementtocreateaninstance.
7.在右边的palette面板中,拖入4个clientnodes和1个logicnode,并具有4个ports,同时拖入4个connectors,实现客户端和逻辑层的连接。
实验2:
SOA实践
一、实验目的
1)初步了解SOA的体系结构
2)掌握用Webservice技术实现SOA
二、实验学时
2学时。
三、实验环境
计算机及VS2005。
四、实验内容
Webservice实现。
六、实验操作步骤
内容一:
WebServices实现
步骤:
1创建WEB服务
1)打开VS.NET2005,新建一个网站,在对话框中选择“ASP.NETWEB服务”,选择好位置,把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为“getdata”
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.添加新工程
在NewProjectByApproach的对话框会弹出。
选择“EmptyProject”并且按下"确定"。
4.选择模块
在右边的“ModelExplorer”框中选定“Untitled”模块。
5.添加模块
通过“Model”主菜单,或右击选定的模型,可以"Add/Model"
6.添加类图
通过“Model”主菜单,或右击选定模型,可以“AddDiagram/ClassDiagram”:
7.设置profile
通过“Model/Profile...”菜单去设置工程所需的profile。
这决定了工程所使用的规则和约定。
根据语言,选择不同的Profile,比如JAVA,一定要包含"JAVAPorfile"这一项目;比如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.创造IShapeinterface
●从toolbox中,选择“Interface”,并点击图表的某处。
将其改名为IShape。
创建以后,选中它。
●在顶部工具栏,选择“StereotypeDisplay”下拉按钮,将值改变为“None”。
这将改变以往的圆形形状,使其变为成长方形。
●还是在顶部工具栏,取消选中"SuppressOperations"。
这将使我们能够看到接口所拥有的方法。
●向IShape接口添加返回值为double的getArea方法。
⏹可以通过右击interface的图标,在弹出菜单中点击红色的“Operation”按钮,然后输入getArea。
⏹设定返回值类型。
在“ModelExplorer”中展开IShape节点,右击你刚刚创建的getArea方法,并选择“AddParameter”。
在“Properties”框中,将参数的名子变为空,将“DirectionKind”变为“RETURN”,将“Type”变为dboule。
●将IShape和getArea的IsAbstract属性框打上勾,他们在图标上的名字将变为斜体。
这是UML的标准,表示这是接口或者其他纯虚实体。
13.添加类和接口的关系
●可以通过从toolbox中选择表示“Realization”的箭头,并从Circle拖拽向IShape,使Circle实现接口IShape。
重复同样的过程,为Rectangle添加实现关系。
这是添加了Circle和Rectangle对于IShape接口的实现关系。
⏹如果想使连接线表现为直角的方式,右击连接线,并选择"Format/LineStyle/Rectilinear"菜单。
你通过这种方式,使箭头重叠在一起,可以使你的图看起来更整洁。
14.添加类基于接口的行为
●由于Circle和Rectangle类都实现了IShape接口,就必须有同样的行为(方法)。
⏹在“ModelExplorer”面板中,复制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对象是“聚合“的关系)。
⏹将“End2.Name”一栏改为_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类,因为它实例化了它们。
●从Propertiesbox选择name属性,或者双击图表上的“依赖线”,可以为依赖关系添加标签。
特别的是,当一类实例化另一个类,我们会把依赖线叫做“instantiates”。
●你可以选中并拖动依赖线的标签,以达到更美观的效果。
●依赖关系不会影响代码生成。
19.生成代码:
●根据不同的语言,选择不同的菜单,若JAVA,点击主菜单的“Tools->Java”菜单,选择“GenerateCode”;若C#,点击主菜单的“Tools->C#”菜单,选择“GenerateCode”。
●从对话框中选择你的模块(这里可能Model1),点击“Next”。
●为了使你的模块或者图标的所有类都生成stubcode,选择“SelectAll”然后按“Next”。
●选择一个有效的输出目录,“Next”。
●若C#,请务必选中“GeneratetheDocumentationbyC#Doc”,“GenerateemptyC#Doc”,若JAVA,请务必选中“GeneratetheDocumentationbyJAVADoc”,“GenerateemptyJAVADoc”,所有其他复选框不选中,“Next”。
●现在StarUML将从你的图产生代码,点击“Finish”退出对话框。
●现在,您可以编辑生成的代码,以增加应用。
20.添加实现代码
现在就开始定义程序实际做的事情,例如,为图标中的类描述添加实现代码。
21.逆向工程
StarUML还可以从现有的Java/C#代码创建一个类图,这被称为“reverseengineering”,当想从现有的代码生成图表,或者你修改了SU生成的代码,并且想在图表中反应出来的时候,逆向工程功能就非常有用了。
●到主菜单栏中选择“Tools/C#或Java/ReverseEngineer...”,可以将现有的代码逆向工程。
●选择C#/Java代码所在的目录,并点击“Add”或“AddAll”按钮,将它们包括在逆向工程过程中,然后单击“Next”
●选择想将类加入的模块,这里可能是“Model1”,然后“Next”。
●在OptionSetup里面:
⏹确认“public”,“package”,“protected”和“private”是选中的(这是默认设置)。
⏹同样,在默认情况下,单选按钮“CreatethefieldtotheAttribute”也是选中的。
⏹除非你想SU创建其他东西,例如布局很糟糕的包含所有类的图表,不要选中“CreateOverviewDiagram”框。
⏹当你对选项做了检查后,点击“Run”。
⏹点击"完成"退出对话框时,就完成了。
●SU会向模块添加导入的类,但不是的图表。
为了将它添加到图,只需要简单地从ModelExplorer拖动它们即可。
实验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文件,在接口里面定义一个方法:
voidsendNotify(stringmessage);
5)双击Subject.CS文件,在接口里面定义一个方法:
voidregisterInterest(Observerobs);
6)展开解决方案资源管理器,将FORM1.CS修改为Controller.CS,在弹出的信息框中,单击确定按钮,单击窗体,在窗体的属性对话框中,设置Text属性为:
颜色Controller。
修改后效果如下图1所示
图1
7)单击图上的红色圆圈的图标。
8)从左边的工具栏见图,拖一个GroupBox控件至窗体上,并拖动位置和设置大小效果,在属性对话框中,设置其Text属性为:
颜色选择器,如图所示。
9)从工具箱拖三个radioButton控件,name属性分别设置为rbtnRed,rbtnGreen,rbtnBlue,Text属性分别设置为“红色”,“绿色”,“蓝色”,并设置好位置,效果如图3所示。
10)切换至代码模式,添加usingSystem.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)切换至代码模式,添加usingSystem.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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件设计 体系结构 实验 指导书