钱能5 1.docx
- 文档编号:23615439
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:27
- 大小:31.12KB
钱能5 1.docx
《钱能5 1.docx》由会员分享,可在线阅读,更多相关《钱能5 1.docx(27页珍藏版)》请在冰豆网上搜索。
钱能51
2008级面向对象技术(O-O技术)第五讲2009/4
第五章功能模型—系统计算结构
§5.1功能模型
一.定义与表示
1.定义:
功能模型:
表示计算中如何从输入值推导出输出值,无需考虑被计算值的次序。
1它仅说明了计算的结果,不必指明如何或什么时候计算;
2也包含了对象模型内值之间的约束;
3由多个数据流图组成,每个数据流图说明了操作和约束的含义。
2.表示:
(1)数据流图:
描述数据流从外部输入值,经过计算和内部数据存储,再向外部输出的全过程。
1是一种传统描述方法;
2不表示控制和对象结构的信息。
(2)其它范型来表达功能模型
1伪码(pseudocode):
是一种提供顺序、条件和迭代的信息语言,可使用任何程序设计通用的结构以及数学上的结构;
2对象导航表示(ONN):
在功能上用对象进行表达的方法;
3ONN的伪码:
能把功能模型和对象模型紧紧系在一起,对象模型不仅描述数据结构,而且也表达潜在计算。
二.与动态模型、对象模型的关系
1.功能模型:
不仅说明了在对象模型中操作的意义和在动态模型中的动作,而且说明了在对象模型的约束。
2.功能模型说明发生了什么
动态模型说明了什么时候发生
对象模型说明了对象本身是什么
§5.2数据流图
数据流图:
表示系统中被计算值之间的功能关系,包括输入值,输出值和内部数据存储。
它是一张图,描述了数据流从数据对象中原始点,通过数据的处理转换,发送到在另一个对象中的目的地的过程。
数据流图包含了几种处理:
1
处理
数据转换的处理,用“”表示处理。
处理2
②转移数据的数据流,用“数据名(类型)”表示处理之间的数据流。
③(actor)产生和使用数据的施动者对象,用
处理
“d1d2”来表示。
(产生原始数据)(使用终结数据)
④(datastore)数据存储对象(或文件对象),用“”来表示。
数据存储
实例说明:
1窗口图形显示的数据流图p124图6。
1
屏幕缓冲区
图标定义
尺寸位置
图标名应用向量表窗口向量表
位置
屏幕向量表
像素操作
其中:
①应用向量表
(A1,B1,C1)
(A2,B2,C2)
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
(An,Bn,Cn)
Ai亮度,Bi色度,Ci饱和度
②窗口向量表:
向量形式像素形式
转换
③屏幕向量表Ai
Bi
Ci
0
4这个数据流图不但表示了所执行的序列的变化,而且也表示了影响计算外部值和一些对象(施动者|数据存储);
5图6.2与图6.1关系
显示图标
被除数商
图标名
像素操作
除数余数位置
(a)
(b)
图6.2b是图6.1的抽象:
将数据流图抽象成处理
图6.1是图6.2b的扩展:
将处理扩展成数据流图
一.处理——就是将数据值转换,是在对象类上操作的方法(或部分方法)的实现;
1.类型:
最低层的处理:
是不受影响的纯功能性(计算)的。
如图6.2(a);
高层的处理:
是一个完整的数据流图。
如图6.2(b);
(1)原子处理(最基本的处理):
必须用自然语言、数学方程式或用某些其它方法直接描述;如,“整数除法”能够用数学定义;
(2)高层处理中一般不出现表示数据存储对象,否则可能有副作用。
2.目标对象:
接受操作的对象
(1)通常是输入流之一,尤其是当同类对象作为输出流情况下;
(2)可能是隐含的。
二.数据流——连接对象的输出,或者另一个对象输入的处理,或是连接一个处理;
1.特征:
数据流表示了在计算内的中间数据值,该值在数据流中不改变;(使用见图6.1)
2.几种数据流表示:
(1)拷贝一个值(数据值复制):
d1
(2)数据值复合(聚合值):
d1
d2
d3
(3)聚合数据值分解:
d1
d3
d2
3.类型
数据流图的边界流:
是它的输入和输出;
数据流图的内部(数据)流:
表示计算的中间值,在现实世界中不一定有任何意义。
三.施动者(对象)和数据存储(对象)
1.施动者:
是一个主动对象,其对象是用产生和使用值的数据流图驱动的。
(1)它与数据流图的输入输出联系在一起;
(2)它在数据流图的边界上,作为数据的源和数据接收点来中止数据流图,称为终结点。
2.数据存储:
是数据流图中用来存取和存储的被动对象
(1)与施动者不同的是:
一个数据存储本身不产生任何操作,只对存储数据和访问数据请求作出响应,并允许以不同于产生的次序访问。
(2)数据存储的几种表示
1
处理
数据存储值的访问:
数据存储名
2数据存储值的更新:
处理
数据存储名
3数据存储值的访问和更新:
处理
数据存储名
4在数据存储中数据流结果(聚合值)
数据存储值
——
(3)实例说明p127——p128图6。
4、6。
5、6。
6帐户
气温最高温度余额
读取
最低温度提款
(a)(b)
查找重量
物品名周期表
价格表
价格原子重量
价格
物品名价格元素原子重量
(c)(d)
图6.4
更新
帐目
银行帐户
名字余额
要求
图6.5
顾客
帐目银行
名字
帐户
帐户号码
图6.6
(4)主要特征:
1具有输入或输出到数据存储的一个处理对应于两个方法:
其一是隐含的数据存储的选择方法;
其二是数据存储的更新方法。
2例如:
p1276。
5
更新
帐户
余额
3.施动者与数据存储对象的异同点
(1)相同处:
都是对象;
(2)不同点:
①它们的行为和使用一般是不同的,即在行为及使用上不同;
②施动者作为外部设备来实现,数据存储作为文件来实现,即在实现上不同。
4.关于目标对象说明。
目标对象的几种情况:
1如果对象的相同的类(同类对象)是输入又是输出,那么该对象是目标,而其他输入是自变量;
2如果这个处理的输出是数据存储,那么这个数据存储就是目标;
3如果这个处理的输入是数据存储,那么这个数据存储就是目标;
4如果输入或输出是一个施动者,那么它就是目标;
5如果输入是对象模型中一个对象,输出是该对象的一部分或对象模型中相邻对象,那么该对象就是目标;
6如果这些规则都不满足,那么通常这个目标是隐含的(既不是输入中的一个,也不是输出中的一个),通常一个处理的目标就是整个子图的目标。
例如:
p125图6.2显示图标的目标是接受像素操作的窗口;
又例如:
p146图6.19力的计算目标实际上是飞机;
显示座舱
机翼速度
控制压力温度加速度
控制表面力矩
引擎速度高度速度
引擎速度方位旋转
重量空间参数
空气
速度位置
方位
燃料
几何地形数据库
形状
颜色
映象转换
轮廓图座舱数据库
仪表映象
仪表地形映象
布局
背景映象
四、嵌套数据流图和控制流
1.嵌套数据流图:
是将一个高层处理可以扩展成另一个数据流图。
(1)高层处理的每个输入和输出分别作为新的数据流图的输入和输出;
(2)新的数据流图可以有数据存储,但这个数据存储不在高层数据流图中表示;
(3)自身引用的数据流图表示递归计算;
(4)数据流图嵌套到最后以简单功能为终结,这些功能必须作为“操作”来指定;
(5)实例p125图6.1、6.2;
2.控制流:
是影响处理是否有效的布尔值。
(1)它本身不是处理的输入值;
(2)用虚点线表示从产生布尔值的一个处理到另一个处理的控制;
(3)实例:
银行帐户取款的数据流图p129图6。
7
校验
帐户
口令代码
口令对余额
口令
数额
现金
思考题:
将更新处理扩张到类似校验控制流,以防透支现象发生,试修改图6.7实现之。
(4)特征:
重复了动态模型中的信息,应该很少用(∵复制了控制信息)
§5.3操作与约束
一.操作:
数据流图中的处理最终必须用对象上的操作来实现
1.操作的说明
(1)操作的外部说明(外部接口):
只描述了操作之外的可视变化,即外部可视对象值的改变;
(2)操作的详细说明包括署名和变换
1署名对操作定义了接口:
ⅰ)所需参数(个数,次序,类型),返回值(个数,次序,类型);ⅱ)实现一个操作的所有方法的署名必须匹配。
2变换(转换)定义了一个操作的影响:
由输入值导出输出值的功能,以及在对象上操作所产生的副作用;
3详细说明目的:
表示操作必须是逻辑上的,而不是如何实现上的。
4对象本身状态ⅰ)外部可视的信息ⅱ)私有内部信息
(3)操作的描述:
数学方程式,表格,输入/输出之间的约束,伪码等。
2、操作的分类:
查询,动作,活动,(三大类);访问操作,(导出)。
(1)查询:
是没有副作用的操作,可用纯粹功能实现;
①不具有参数(除非是目标对象)的查询是一个导出属性;
如:
点(x,y)点(γ,θ)前者是基本属性,后者是导出属性
②在大多数情况下,选择某些属性作为基本属性,其他的作为导出属性是
任意的。
如:
点(x,y)和点(γ,θ)哪一组作为基本属性是任意的。
(∵不能说哪一个更正确,∴任意的)
③查询操作:
根据对象模型中的路径或从对象模型的数据重新包装得到;
(2)动作(与事件有关):
是无持续时间的具有副作用的操作,可作为过程来完成。
①一个动作可以根据该动作的前后的系统状态定义,不需要控制成分(工作站窗口缩放动作)。
②通常动作从功能模型中的处理导出(动作是一种变换)。
③动作可用各种方式描述,重要的是规格说明清晰并且无二义性,而不是形式上的;如:
电话开关连接的动作的规格说明:
p131表6。
1
功能:
电话连接
输入:
电话线,拨号,当前开关设置
输出:
新的开关设置,连接状态
转换:
通过开关的闭合连接,连接所拨号的电话,并受以下约束:
约束:
任何一个回路一次只能连接两条线。
以前的连接不受干扰。
如果电话占线,则无开关闭合,并发出忙音。
如果因为太多开关正在使用而不能接通,则没有开关闭合,并发出程控开关机忙音。
④指定一个动作的一种方式是给出计算动作的算法(英语、伪码,实际代码)。
(3)活动(与状态有关):
是有持续时间的有副作用的操作,必须以任务方式加以实现。
①活动只说明施动者和本身执行操作的对象(被动对象没有数据存储库)。
例如:
输出假脱机技术:
一个os的端口监督程序,可看作施动者(它在信息流控制中充当主动角色)
②一个活动细节:
可在动态模型和功能模型中指定,不能仅作为一种变换;
③一个活动与动态模型的状态图相对应;p104
二.约束:
表示两个对象在相同时间的关系,或者表示同样对象在不同时间的不同值的关系。
1、一种约束可以表达成全部功能(一个值完全用其他值指定),或部分功能(一个值有其他值限定,但不是完全有其他值表示);
2、约束可以出现在每种模型
1对象约束:
则指定某些对象完全地或部分地依赖另一个对象;如下图所示;
2动态约束:
指定了不同对象状态,事件之间的联系;如恒温器(程控);
3功能约束:
指定了操作上的限制,如坐标变换可以指定X坐标的尺寸和Y坐标的尺寸是相等的。
工作
优先权
窗口
长度
宽度
雇员
工资
如:
{工资≤老板.工资}{0.8≤长/宽≤1.5}{优先权永不增大}
对象之间的约束特性之间的约束同一对象上的恒定约束
年代顺序
人
定义{排序}{排序}
列
{子集}
约束
约束主键值
点
{排序}
类或关联之间用带箭头虚线表示限制的范围。
约束
§5.4数据库应用中的功能模型
功能模型中可选择的表示法(不同种类的范型)——增强的伪码,决策表和方程式。
一.伪码
1.伪码:
是一种提供顺序,条件和迭代的信息语言,它类似于许多程序设计和数据库语言,(pseudocode)
伪码的特点:
可以使用任何程序设计通用的结构以及数学上的结构;
2.伪码概述
(1)顺序:
一系列伪码语句本身有一顺序,我们通常用分号将一连串的语句分隔开;
(2)条件:
if<条件1>then
<语句>
elseif<条件2>then
<语句>
else
<语句>
endif
(3)迭代循环:
1一种是通过集合进行迭代
foreach<集合中一个元素>in<集合>
<语句>
endforeach
2另一种通过固定的循环次数进行迭代
for<循环次数计数:
=循环最小值>to<循环最大值>
incrementby<循环增量>
<语句>
endfor
(4)方法签名(署名)——
类名:
:
操作名(参数表)返回域
(5)方法引用——
对象名#方法名(参数表)
(6)功能返回——return<值>
是一个方法执行的终结
(7)内含方法参数:
一个方法有执行该方法的对象的内含参数,self表示内含参数(相当于c++使用this)
二.ONN的伪码
1.定义:
用导航对象模型表示扩展伪码,这种表示称为对象导航表示ONN(ObjectNavigationNotation)
2.优点:
1能把功能模型和对象模型紧紧系在一起;
2对象模型不仅描述数据结构,而且也表达潜在的计算;
3可以用简单遍历对象模型的方式满足许多信息处理需求;
4ONN可以更加紧密地将三种模型集成在一起。
三.ONN的构造(均以民航航班预定系统类图为例说明p421)
1.简单二元关联遍历
(1)ObjectorSet.targetRole:
按照目标角色来遍历关联
一个角色一个类名
机场
机场代码
机场名
服务于城市的机场==aCity.Airport
旅行社代理商
雇主
.
为旅行社工作的旅行社代理商==aTravleAgency.TravelAgent
旅行社代理商的雇主==aTravleAgent.employer
==aTravelAgent.TravelAgency(无二义性可用类名)
(2)ObjectorSet.~SourceRole:
按源角色开始遍历二元关联
一个角色一个类名
例一:
同上。
服务于城市的机场==aCity.~City
。
为旅行社工作的旅行社代理商==aTravleAgency.~TravleAgency
==aTravleAgency.~employer
。
旅行社代理商的雇主==aTravleAgent.~TravleAgent
航班描述
离港时间表
续航时间表
次数
有效起始日期
有效停业日期
例二:
起始地
目的地
1在起始机场的航班描述==anAirport.~origin
2在到达机场的航班描述==anAirport.~destination
2.资格关联遍历:
ObjectorSet.role[qualifier=value]
(1)一条航线的航班描述(未使用资格符)==anAirline.FlightDestination
(2)
航班描述
…
对一条航线的特定的航班描述(使用资格符)==theTwAirline.FlightDestination[flightNumber=663]
3.概括遍历
(1)向上计算的概括:
ObjectorSet:
superclass==aTravelAgent:
Agent
(2)向下计算的概括:
ObjectorSet:
subclass==anAgent.TravelAgent
遍历方向由该模型的上下文含义决定(向上/向下)
应该小心谨慎使用向下计算:
空值:
anAgent.TravelAgent
具有基数的对象集合,它小于等于原始集合的基数
航线代理商
1/5个
0/2个1/3个
4.用链接遍历到对象-linkorset.role
·单个链接总是为给定的角色给出单个对象;
·链接的集合将产生给定角色的相关对象集合;
·对象集合的集的容量小于某个链接集合的集的容量(相同对象可以参与多个链接);
NanjingAirportForBeijing.city==
NanjingAirportForBeijing.~Airport==Beijing
P137见书还有!
5.用对象遍历到链接-有两种方式能从对象查找到链接的遍历
(1){role1=objectorSet1,role2=objectorSet2,…..,associationName}
·这个结构用多个角色寻找到链接;
·对二元关联最多能指定两个角色;即可以指定目标角色,也可以指定二元角色;
对三元关联最多能指定三个角色;必须指定目标角色;依此类推。
·实例:
(关联类)
Δ用表来授予权限=={grantee=allser,table=aTable},指定多个角色;
(使用一个链接)遍历到对象的方法:
linkorSet.role
Δ用户使用表权限.授予者==aUser
用户使用表权限.被授予者==aUserorSet
(2)objectorSet@role
·仅指定一个角色和符号操作来检索链接
·实例:
服务
相关的城市链接到它的机场==acity@Airport=={city=aCity,Serves},指定了一个角色和关联名
如:
Beijing@Airport=={city=Beijing,airport=Nanjing},
{city=Beijing,airport=Intercontinental}洲际机场
6.过滤器可以指定一般表达式,过滤一个对象集合;
可以指定一般表达式,过滤一个链接集合;
如:
目的地
SomeFlightDescriptions:
=anAirport.~orgin
theFlightDescriptions1Q2001:
=SomeFlightDescriptions
[StartEffectiveDate<=1-Jan-2001ANDstopEffectiveDate>=31-Mar-2001]
又如:
Beijing@Airport[airport=Nanjing]=={city=Beijing,airport=Nanjing}
7.从对象遍历到值可以用“·”操作符去查找一个对象的属性值。
(1)objectorSet.attribute
(2)实例:
机场代码,机场名
如:
theNangjingAirport.airportcode==Hou
又如:
theIntercontinentalAirport.ariportcode==IAH
再如:
Airport.airportcode={}属性值集
8.从链接遍历值也可以用“·”操作符去查找链接的属性值。
(1)格式:
linkorSet.attribute
(2)实例:
打分
在参赛项目中裁判对参赛者打分==aJudgedTrivial.score{属性值集}
账户
airlineFFALink:
=aFrequentFlyerAccount@Airline;
theAccountNumbe:
=airlineFFALink.accountNumber{属性值集}
四.组合ONN构造-任意复杂表达式(一般表达式)
1.ONN表达式(一般表达式)的例子
(1)thestMaoAirport.~orign.destination
·功能可找到从thest.Mao(毛泽东)机场出发,为直达飞行所有机场的服务;
·这个表达式遍历两个关联:
第一个遍历首先从遍历一个对象开始,而后产生一个对象集合;(避免基本ONN表达式中必须先判定对象还是对象集工作:
)
第二个遍历从对象集开始,并产生一个对象集;以返回联合(union)作为回答;
(2)theStMaoAirport.~origin.destination.~orgin.destination
·功能可找到从thest.Mao(毛泽东)机场出发,经由一站飞行的所有机场的服务;
·这个表达式的结果包含了thest.Mao机场(经由一站飞行能够到达的);
(3)aFrequentFlyerAccount@Airline.accountNumber
·功能查找常客飞行帐户的帐户号;
(4)aFlight.FlightDescription.AircraftDescription.modelNumber
·功能查找用于(某)一次飞行的飞机模型;
(5)aTripReservation.FlightReservation.Flight.FlightDescription.Airline
·功能该表达式指定一次旅行的航线;
2.与伪码组合的ONN例子。
(1)Airport:
:
findZeroOneStopsreturnsetofAirportreturnself.~origin.destination+self.~orgin.destionation.~origin.destination;
Δ这个方法找到从给定机场直达飞行或一站飞行的所有机场的服务;
(2)TripReservation:
:
hasonlyAisIsSeatsreturnboolean
foreachaFlightRevervationinself.FlightReservation
aSeat:
=aFlightReservation.Seat;
if
aSeatisNull
then
returnFALSE;
elseifaSeat.SeatDescription.aisleCenterorWindow<>”aisle”
thenreturnFALSE;
endif
endforeach
returnTRUE;
Δ这个方法在旅行订座时,查找所对应的每个航班是否都有过道座位,是返回有(true),否(false)作为回答;
五.添加ONN特性
1.数学特性ONN表达式是不可交换的,并且不是联合的;
如:
theStMaoAirport.~origion可作出判断;
而:
~origion.thestMaoAirport没有定义;
又如:
thestMaoAirport.(~origion.destination)是没有定义的
联合类型
·ONN表达式遵循闭包特性;参数、结果;
2.空值(NULL)ONN允许空值
·objectorset可以提供一个对象,一个对象集合或空值(Null);
·遍历关联中能够碰到空值;(aFlightReservation.S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 钱能5