📄 200603101726185.html
字号:
<P><IMG src="200631023410512.jpg" tppabs="http://www.itisedu.com/manage/Upload/image/200631023410512.jpg" border=0></P>
<P> 4.确定属性</P>
<P> 属性是个体对象的性质,属性通常用修饰性的名词词组来表示.形容词常常表示具体的可枚举的属性值,属性不可能在问题陈述中完全表述出来,必须借助于应用域的知识及对客观世界的知识才可以找到它们。只考虑与具体应用直接相关的属性,不要考虑那些超出问题范围的属性。首先找出重要属性,避免那些只用于实现的属性,要为各个属性取有意义的名字。按下列标准删除不必要的和不正确的属性:</P>
<P> (1) 对象:若实体的独立存在比它的值重要,那么这个实体不是属性而是对象。如在邮政目录中,"城市"是一个属性,然而在人口普查中,"城市"则被看作是对象。在具体应用中,具有自身性质的实体一定是对象。<BR> (2) 定词:若属性值取决于某种具体上下文,则可考虑把该属性重新表述为一个限定词。<BR> (3) 名称:名称常常作为限定词而不是对象的属性,当名称不依赖于上下文关系时,名称即为一个对象属性,尤其是它不惟一时。<BR> (4) 标识符:在考虑对象模糊性时,引入对象标识符表示,在对象模型中不列出这些对象标识符,它是隐含在对象模型中,只列出存在于应用域的属性。<BR> (5) 内部值:若属性描述了对外不透明的对象的内部状态,则应从对象模型中删除该属性。<BR> (6) 细化:忽略那些不可能对大多数操作有影响的属性。</P>
<P> 5.使用继承来细化类</P>
<P> 使用继承来共享公共机构,以次来组织类,可以用两种方式来进行。<BR> (1) 自底向上通过把现有类的共同性质一般化为父类,寻找具有相似的属性,关系或操作的类来发现继承。例如"远程事务"和"出纳事务"是类似的,可以一般化为"事务"。有些一般化结构常常是基于客观世界边界的现有分类,只要可能,尽量使用现有概念。对称性常有助于发现某些丢失的类。<BR> (2) 自顶向下将现有的类细化为更具体的子类。具体化常常可以从应用域中明显看出来。应用域中各枚举字情况是最常见的具体化的来源。例如:菜单,可以有固定菜单,顶部菜单,弹出菜单,下拉菜单等,这就可以把菜单类具体细化为各种具体菜单的子类。当同一关联名出现多次且意义也相同时,应尽量具体化为相关联的类,例如"事务"从"出纳站"和"自动出纳机"进入,则"录入站"就是"出纳站"和"自动出纳站"的一般化。在类层次中,可以为具体的类分配属性和关联。各属性和都应分配给最一般的适合的类,有时也加上一些修正。</P>
<P> 应用域中各枚举情况是最常见的具体化的来源。</P>
<P> 6.完善对象模型</P>
<P> 对象建模不可能一次就能保证模型是完全正确的,软件开发的整个过程就是一个不断完善的过程。模型的不同组成部分多半是在不同的阶段完成的,如果发现模型的缺陷,就必须返回到前期阶段去修改,有些细化工作是在动态模型和功能模型完成之后才开始进行的。<BR> (1) 几种可能丢失对象的情况及解决办法:<BR> ·同一类中存在毫无关系的属性和操作,则分解这个类,使各部分相互关联;<BR> ·一般化体系不清楚,则可能分离扮演两种角色的类<BR> ·存在无目标类的操作,则找出并加上失去目标的类;<BR> ·存在名称及目的相同的冗余关联,则通过一般化创建丢失的父类,把关联组织在一起。</P>
<P> (2) 查找多余的类。<BR> 类中缺少属性,操作和关联,则可删除这个类。</P>
<P> (3)查找丢失的关联。<BR> 丢失了操作的访问路径,则加入新的关联以回答查询。</P>
<P> (4) 网络系统的具体情况作如下的修改:<BR> ①现金卡有多个独立的特性。把它分解为两个对象:卡片权限和现金卡。<BR> a.卡片权限:它是银行用来鉴别用户访问权限的卡片,表示一个或多个用户帐户的访问权限;各个卡片权限对象中可能具有好几个现金卡,每张都带有安全码,卡片码,它们附在现金卡上,表现银行的卡片权限。<BR> b.现金卡:它是自动出纳机得到表示码的数据卡片,它也是银行代码和现金卡代码的数据载体。<BR> ②"事务"不能体现对帐户之间的传输描述的一般性,因它只涉及一个帐户,一般来说,在每个帐户中,一个"事务"包括一个或多个"更新",一个"更新"是对帐户的一个动作,它们是取款,存款,查询之一。一个"更新"中所有"更新"应该是一个原子操作。<BR> ③"分理处"和"分离处理机"之间,"分行"和"分行处理机"之间的区别似乎并不影响分析,计算机的通信处理实际上是实现的概念,将"分理处计算机"并入到"分理处",将"分行计算机"并入到"分行"。</P>
<P><IMG src="200631023439684.gif" tppabs="http://www.itisedu.com/manage/Upload/image/200631023439684.gif" border=0></P>
<P>(三)建立动态模型</P>
<P> 1.准备脚本<BR> 动态分析从寻找事件开始,然后确定各对象的可能事件顺序。在分析阶段不考虑算法的执行,算法是实现模型的一部分。</P>
<P> 2.确定事件<BR> 确定所有外部事件。事件包括所有来自或发往用户的信息、外部设备的信号、输入、转换和动作,可以发现正常事件,但不能遗漏条件和异常事件。</P>
<P> 3.准备事件跟踪表<BR> 把脚本表示成一个事件跟踪表,即不同对象之间的事件排序表,对象为表中的列,给每个对象分配一个独立的列。</P>
<P><IMG src="200631023627358.jpg" tppabs="http://www.itisedu.com/manage/Upload/image/200631023627358.jpg" border=0></P>
<P><IMG src="200631023638608.jpg" tppabs="http://www.itisedu.com/manage/Upload/image/200631023638608.jpg" border=0></P>
<P><BR> 4.构造状态图<BR> 对各对象类建立状态图,反映对象接收和发送的事件,每个事件跟踪都对应于状态图中一条路径。</P>
<P><IMG src="20063102372384.gif" tppabs="http://www.itisedu.com/manage/Upload/image/20063102372384.gif" border=0></P>
<P>(四)建立功能建模</P>
<P> 功能模型用来说明值是如何计算的,表明值之间的依赖关系及相关的功能,数据流图有助于表示功能依赖关系,其中的处理应于状态图的活动和动作,其中的数据流对应于对象图中的对象或属性。</P>
<P> 1.确定输入值、输出值<BR> 先列出输入、输出值,输入、输出值是系统与外界之间的事件的参数。</P>
<P> 2.建立数据流图<BR> 数据流图说明输出值是怎样从输入值得来的,数据流图通常按层次组织。</P>
<P><IMG src="200631023725844.gif" tppabs="http://www.itisedu.com/manage/Upload/image/200631023725844.gif" border=0></P>
<P><IMG src="200631023737570.jpg" tppabs="http://www.itisedu.com/manage/Upload/image/200631023737570.jpg" border=0></P>
<P>(五)确定操作</P>
<P> 在建立对象模型时,确定了类、关联、结构和属性,还没有确定操作。只有建立了动态模型和功能模型之后,才可能最后确定类的操作。 </P>
<P><STRONG>七、面向对象的设计</STRONG></P>
<P> <a href="javascript:if(confirm('http://www.itisedu.com/phrase/200603050045535.html \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon. \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200603050045535.html'" tppabs="http://www.itisedu.com/phrase/200603050045535.html" target="_new">面向对象设计</a>是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。从面向对象分析到面向对象设计,是一个逐渐扩充模型的过程。</P>
<P> 瀑布模型把设计进一步划分成概要设计和详细设计两个阶段,类似地,也可以把面向对象设计再细分为系统设计和对象设计。系统设计确定实现系统的策略和目标系统的高层结构。对象设计确定解空间中的类、关联、接口形式及实现操作的算法。</P>
<P>(一)面向对象设计的准则</P>
<P> 1.模块化<BR> 面向对象开发方法很自然地支持了把系统分解成模块的设计原则:对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。<BR> 2.抽象<BR> 面向对象方法不仅支持过程抽象,而且支持数据抽象。<BR> 3.信息隐藏<BR> 在面向对象方法中,信息隐藏通过对象的封装性来实现。<BR> 4.低耦合<BR> 在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。低耦合是设计的一个重要标准,因为这有助于使得系统中某一部分的变化对其它部分的影响降到最低程度。<BR> 5.高内聚<BR> (1)操作内聚。<BR> (2)类内聚。<BR> (3)一般——具体内聚。</P>
<P>(二)面向对象设计的启发规则</P>
<P> 1.设计结果应该清晰易懂<BR> 使设计结果清晰、易懂、易读是提高软件可维护性和可重用性的重要措施。显然,人们不会重用那些他们不理解的设计。<BR> 要做到:<BR> (1)用词一致。<BR> (2)使用已有的协议。<BR> (3)减少消息<a href="200603061709535.html" tppabs="http://www.itisedu.com/phrase/200603061709535.html" target="_new">模式</a>的数量。<BR> (4)避免模糊的定义。</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -