面向对象分析与设计OOA&OOD1面向对象方法概述面向对象方法是一种运用对象、类、继承、消息传送、多态性等概念来构造系统的软件开发方法。OO=Objects+Classes+Inheritance+Communicationwithmessages1.1面向对象中的基本概念对象(object)一般意义来讲,对象是现实世界中存在的一个事物。可以是物理的,如一张桌子,也可以是概念上的,如一个开发项目。对象具有自己的静态特征(用数据描述)和动态特征(行为或具有的功能)。对象的分类:外部实体:与软件系统交换信息的外部设备、相关子系统、操作员或用户等。信息结构:问题信息域中的概念实体,如信号、报表、显示信息等。需要记忆的事件:在系统运行过程中可能产生并需要系统记忆的事件,如单击鼠标左键、击打键盘“”键等。角色:与软件系统交互的人员所扮演的角色,如经理、部长、技术支持等。组织机构:有关机构,如单位、小组等。位置:作为系统环境或问题上下文的场所、位置,如客户地址、收件人(机构)地址等。操作规程:如操作菜单、某种数据输入过程等。类(class)和实例(instance)把具有相同特征和行为的对象归在一起就形成了类。类成为对象的模板,抽象地描述了属于该类的全部对象的属性和操作。属于某个类的对象叫做该类的实例。王辉男湖南计算机控制1979.19#楼320室王辉属性看书实验上课运动服务杨芳杨芳女北京系统结构1979.125#楼418室属性看书实验上课运动服务姓名性别籍贯专业出生年月住址学生属性看书实验上课运动服务消息(message)•所谓的消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。•发送给一个对象的消息定义了一个操作名和一个参数表,并指定某一个对象。•由一个对象接收的消息则调用消息中指定的操作,并将传递过来的实际参数与参数表中相应的形式参数结合起来。•接收对象对消息的处理可能会改变对象中的状态,即改变接收对象的属性,并发送一个消息给自己或另一个对象。•可以认为,这种消息的传递大致等价于过程性范型中的函数调用。继承(inheritance)如果某几个类之间具有共性的东西(信息结构和行为),抽取出来放在一个一般类中,而将各个类的特有的东西放在特殊类中分别描述,则可建立起特殊类对一般类的继承。建立继承结构的好处:易编程、易理解代码短,结构清晰;易修改:共同部分只要在一处修改即可;易增加新类:只须描述不同部分。多态性(Polymophysim)多态性指一个操作在不同类甚至同一类中可以有不同的实现方式。1.2面向对象方法的特征面向对象方法强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。事物的静态特征用对象的属性表示,事物的动态特征用对象的服务表示。对象的属性与服务结合为一体,成为一个独立的实体,对外屏蔽其内部细节(称作封装)。对事物进行分类。把具有相同属性和相似行为的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。(后续)通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。持殊类继承一般类的属性与服务,从而简化系统的构造过程及其文档。复杂的对象可以用简单的对象作为其构成部分(称作聚合)。对象之间通过消息进行通信,以实现对象之间的动态联系。通过关联表达对象之间的静态关系。同名服务提供不同功能实现对象的多态性。用面向对象技术进行软件开发的好处:符合人类自然思维方式,易于理解、描述和实现。对需求变化有较好的适应性:封装机制和消息传递机制将需求变化影响限制在对象内部。支持软件复用:封装性有助于实现复用;派生、实例化实现了软构件复用;类库提供了大量公共代码。可维护性好:封装性和消息传递造成低耦合,错误定位和修改容易。开发过程衔接紧密:在软件生命周期各阶段可以使用同样的模型描述。1.3面向对象软件工程技术面向对象的软件工程方法是面向对象方法在软件工程领域的全面运用。它包括面向对象的分析(OOA)、面向对象的设计(OOD)、面向对象的编程(OOP)、面向对象的测试(OOT)和面向对象的软件维护(OOSM)等主要内容。OOA和OOD的理论与技术从80年代后期开始出现,到目前仍是十分活跃的研究领域。一系列关于OOA和OOD的专著问世,表明面向对象方法从早期主要注重于编程理论与技术,发展成了一套较为完整的软件工程体系。OOA强调直接针对问题域中客观存在的各项事物设立OOA模型中的对象。另外,OOA模型也保留了问题域中事物之间关系的原貌。OOD包括两方面的工作,一是把OOA模型直接搬到OOD,作为OOD的一个部分;另外是针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。这些部分与OOA采用相同的表示法和模型结构。在OOA-OOD-OOP这一软件工程的过程系列中,在OOA和OOD阶段对系统需要设立的每个对象类及其内部构成与外部关系都达到透彻的认识和清晰的描述,OOP工作就是用同一种面向对象的编程语言把OOD模型中的每个成分书写出来:用具体的数据结构来定义对象的属性,用具体的语句来实现服务流程图所表示的算法。在用OOPL编写的程序中,对象的封装性使对象成为一个独立的程序单位,只通过有限的接口与外部发生关系,从而大大减少了错误的影响范围。OOT以对象的类作为基本测试单位,查错范围主要是类定义之内的属性和服务,以及有限的对外接口所涉及的部分。有利OOT的另一个因素是对象的继承性。对父类测试完成之后,子类的测试重点只是那些新定义的属性和服务。OOSM:面向对象的软件工程方法中,程序与问题域是一致的,各个阶段的表示是一致的,从而大大减少了理解的难度。另外,系统功能被作为对象的服务封装在对象内部,使一个对象的修改对其它对象影响很少,避免了所谓的“波动效应”。2面向对象分析与设计面向对象分析:业务领域分析:确定系统业务规则、处理过程、系统边界、需求;分析系统与用户及其他系统的交互内容、步骤。发现和定义对象和类:识别对象和类,确定其属性、服务内部特征;抽取现实世界的概念模型。识别对象的外部联系:识别类、对象间的各种联系。建立系统静态结构模型:在类和对象分析的基础上绘制对象、类图,系统、子系统结构图,编制相应的说明文档。建立系统的动态行为模型:绘制用例图、交互图、活动图、状态图,编制相应文档;确定对象服务操作,对象间交互、工作流、事件流、消息传递、状态转换等。面向对象设计:设计对象和类:具体设计对象和类的属性和服务操作。设计类和对象的各种外部联系实现结构,设计消息和事件内容与格式。类和对象的设计应充分利用预定义的类库和现有类。设计系统结构:设计组件、子系统,以及他们之间的静态、动态联系。设计问题领域子系统:负责实现领域业务服务,包括与应用领域业务相关的所有类和对象。(后续)设计人机交互系统:主要任务是设计人机界面,包括用户分类,交互场景,人机交互命令,命令层次和操作顺序;交互过程,交互类,如窗口、对话框、菜单等。设计数据管理子系统:包括数据的录入、操作、检索、存储、访问控制等数据管理机制,主要任务是确定数据管理方法,设计数据库与数据文件的逻辑结构和物理结构,设计实现数据管理的对象类。设计任务管理子系统:设计软件系统得内部模块运行管理机制,即事件驱动、时钟驱动、优先级管理、任务管理,协调和管理进程,特别是并发进程。设计优化、性能调优:根据实际情况设计优化折衷方案,进行系统优化,提高系统性能和质量。2.2几种OO建模方法目前已经衍生许多种OO方法。每种方法都有各自的进行产品或系统分析的过程,有一组可描述过程演进的图形标识,以及能使得软件工程师以一致的方式建立模型的符号体系。现在广泛使用的OO方法有以下几种:Booch方法:Booch方法包含“微开发过程”和“宏开发过程”。Rumbaugh方法:对象模型化技术(OMT)用于分析、系统设计和对象级设计。分析活动建立三个模型:对象模型,动态模型和功能模型。Coad和Yourdon方法:建模符号相当简单,开发分析模型的导引直接明了,集中于建立类和对象模型。Jacobson方法:也称为OOSE(面向对象软件工程),特别强调使用实例。Wirfs―Brock方法:不明确区分分析和设计任务。从评估客户规格说明到设计完成,是一个连续的过程。统一的OOA方法(UML):把Booch、Rumbaugh和Jacobson等各自独立的OOA和OOD方法中最优秀的特色组合成一个统一的方法。3统一的建模语言(UnifiedModelingLanguage——UML)3.1UML概述UML是通过对早期面向对象研究的设计方法(OOSE及OMT等)的进一步扩展而得来的,是一种通用的图形化建模语言,是一种模型的标准表示规格,为可视化软件建模奠定了坚实的理论基础。UML制定了一整套完整的面向对象的标记和处理方法,主要体现在所规定的九种图和五种视图的使用上。对所有这些视图、图以及各种组成图的模型元素的描述标准就构成了UML。UML不是一种方法(或方法学),但允许任何一种方法使用它。方法是一种把人的思考和行动结构化的明确方式,需要定义软件开发的步骤、告诉人们做什么,如何做,什么时候做,以及为什么要这么做。而UML只定义了一些图、图中使用的符号和一组如何使用这些图和符号的规则,与方法无关。人们可以用各种方法来使用UML,无论方法如何变化,它们的基础都是UML的各种图,这就是UML的最终用途——为不同领域的人们提供一种统一的交流标准。UML主要提供了九种不同的图,可以分成两大类,一类是描述系统静态结构的图,包括用例图、类图、对象图、组件图、配置图;另一类是反映系统动态特性的图,包括序列图、协作图、状态图和活动图。UML所规定的九种图为:用例图(UseCaseDiagram),描述用户所需的系统功能。类图(ClassDiagram),描述系统的静态结构。对象图(ObjectDiagram),描述系统在某个时刻的静态结构。序列图(SequenceDiagram),按时间顺序描述系统元素间的交互。协作图(CollaborationDiagram),按照时间和空间顺序描述系统元素间的交互和它们之间的关系。状态图(StateDiagram),描述了系统元素的状态条件和状态改变。活动图(ActivityDiagram),描述了系统元素的活动。组件图(ComponentDiagram),描述了实现系统的元素的组织。布署图(DeploymentDiagram),描述了环境元素的配置,并把实现系统的元素映射到配置上。UML的九种图可以按一定的方法组合成各种视图(view)。每个视图是整个系统描述的一个投影,说明了系统的一个特殊侧面,若干个不同的视图可以完整地描述所建造的系统。UML的5种视图为:用户模型视图:描述从用户角度所需要的系统功能,主要包括用例图(常辅以活动图)。结构模型视图:展现系统静态结构组成及特征,主要包括类图、对象图。行为模型视图:表现系统动态或行为特征,主要包括序列图、协作图、状态图、活动图。实现模型视图:体现系统实现结构特征,主要包括组件图。环境模型视图:体现系统实现软硬件环境结构,主要包括布署图。UML各种图的分类及其主要作用视图名称包含的图主要作用用户模型视图用例图描述系统的功能结构模型视图类图描述系统的静态结构对象图描述系统在某个时刻的静态结构行为模型视图序列图按时间顺序描述系统元素间的交互协作图按照时间和空间顺序描述系统元素间的交互和它们之间的关系状态图描述了系统元素的状态条件和响应活动图描述系统元素的活动实现模型视图组件图描述了实现系统的元素的组织环境模型视图布署图描述了环境元素的配置,并把实现系统的元素映射到配置上UML视图组成结构模型视图实现模型视图软件配置管理行为模型视图环境模型视图系统拓扑结构