1、单元 07 软件设计 1单元目标 面向对象设计概述 类设计学习任务任务描述了解什么是软件设计,面向对象设计的步骤和原则。什么是类设计,以及如何绘制 UML 类图。知识准备软件设计是从软件需求规格说明书出发, 根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。软件设计是把许多事物和问题抽象起来, 并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多, 它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。7.1 面向对象设计概述面向对象程序设计可以看作一种在程序中包
2、含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合, 或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。目前已经被证实的是, 面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。 此外,支持者声称面向对象程序设计要比以往的做法更加便于学习, 因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。反对者在某些领域对此予以否认。当我们提到面向对象的时候,它不仅指一种程序设计方法。它更多意
3、义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Oriented Design,简称OOD)方面的知识。OOD 遵循的原则如下:(一)模块化对象就是模块,把数据和方法结合在一起(二)抽象过程抽象数据抽象参数化抽象(某些 PDL)(三)信息隐藏通过对象的封装性实现(四)弱耦合降低交互耦合提高继承耦合7.2 类设计类(Class)定义了一件事物的抽象特点。通常来说,类定义了事物的属性和它可以做到的(它的行为)。举例来说,“狗”这个类会包含狗的一切基础特征,即所有“狗”都共有的特征或行为,例如它的孕育、毛皮颜色和吠叫的能力。类可以为程序提供模版和
4、结构。一个类的方法和属性被称为“成员”。对象(Object)是类的实例。例如,“狗”这个类列举狗的特点,从而使这个类定义了世界上所有的狗。 而莱丝这个对象则是一条具体的狗,它的属性也是具体的。狗有皮毛颜色,而莱丝的皮毛颜色是棕白色的。因此,莱丝就是狗这个类的一个实例。一个具体对象属性的值被称作它的“状态”。(系统给对象分配内存空间,而不会给类分配内存空间。这很好理解,类是抽象的系统不可能给抽象的东西分配空间,而对象则是具体的。)关键抽象是在系统范围上的一些重要概念, 主要是从需求中得到(例如词汇表、业务规约以及用例模型),这些概念也会涉及到系统所针对的业务领域知识。类的命名尽量应用领域中的术语
5、,应明确、无岐义,以利于相互交流和理解。 类的属性、 操作中的可见性使用+、 #、 分别表示 public、protected、private。类图类之间的关系是类图中比较复杂的内容。有关联、聚合、组合、泛化、依赖。关联:是模型元素之间的一种语义联系,是类之间的一种很弱的联系。关联可以有方向,可以是单向关联,也可以是双向关联。可以给关联加上关联名来描述关联的作用。 关联两端的类也可以以某种角色参与关联, 角色可以具有多重性, 表示可以有多少个对象参与关联。可以通过关联类进一步描述关联的属性、操作以及其他信息。关联类通过一条虚线与关联连接。对于关联可以加上一些约束,以加强关联的含义。聚合是一种特
6、殊的关联,聚合表示整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如舰队是由一系列的舰船组成。需求描述中“包含”、“组成”、“分为.部分”等词常意味着聚合关系。组合也是一种特殊的关联,也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。聚合和组合的区别:聚合关系是“hasa”关系,组合关系是“containsa”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强; 聚合关系中代表部分事物的对象与代表聚合事物的
7、对象的生存期无关, 一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。泛化定义了一般元素和特殊元素之间的分类关系, 类之间的这种泛化关系也就是继承关系。泛化关系是“akindof”关系,定义一般元素和特殊元素之间的分类关系。建立类图的步骤:(1)研究分析问题领域确定系统需求。(2)确定类,明确类的含义和职责、确定属性和操作。(3)确定类之间的关系。类的识别是一个需要大量技巧的工作,寻找类的一些技巧包括:名词识别法;根据用例描述确定类;使用 CRC 分析法;根据边界类、控制类、 实体类的划分来帮助分析系统中的类; 参考设计模式确定类;
8、对领域进行分析或利用已有领域分析结果得到类;利用 RUP 中如何在分析和设计中寻找类的步骤。1. 名词识别法:这种方法的关键是识别系统问题域中的实体。对系统进行描述,描述应该使用问题域中的概念和命名, 从系统描述中标识名词及名词短语, 其中的名词往往可以标识为对象, 复数名词往往可以标识为类。2. 从用例中识别类:用例图实质上是一种系统描述的形式, 自然可以根据用例描述来识别类。针对各个用例,可以提如下的问题辅助识别:用例描述中出现了那些实体?用例的完成需要哪些实体合作?用例执行过程中会产生并存储哪些信息?用例要求与之关联的每个角色的输入是什么?用例反馈与之关联的每个角色的输出是什么?用例需要操作哪些硬设备?在面向对象应用中, 类之间传递的信息数据要么可以映射到发送方的某些属性,要么该信息数据本身就是一个对象。综合不同的用例识别结果,就可以得到整个系统的类,在类的基础上,我们又可以分析用例的动态特性来对用例进行动态行为建模。任务实训实训目的 面向对象设计概述 类设计
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。