高级软件工程(第十一章)-面向对象设计方法课件

上传人:沈*** 文档编号:241316253 上传时间:2024-06-17 格式:PPT 页数:33 大小:1.34MB
返回 下载 相关 举报
高级软件工程(第十一章)-面向对象设计方法课件_第1页
第1页 / 共33页
高级软件工程(第十一章)-面向对象设计方法课件_第2页
第2页 / 共33页
高级软件工程(第十一章)-面向对象设计方法课件_第3页
第3页 / 共33页
点击查看更多>>
资源描述
1第十一章第十一章面向对象的设计方法面向对象的设计方法1面向对象设计的主要任务面向对象设计的主要任务细化重组类细化重组类 细化和实现类间关系细化和实现类间关系,明确其可见性明确其可见性 增加属性增加属性,指定属性的类型与可见性指定属性的类型与可见性 分配职责分配职责,定义执行每个职责的方法定义执行每个职责的方法 对消息驱动的系统对消息驱动的系统,明确消息传递方式明确消息传递方式利用设计模式进行局部设计利用设计模式进行局部设计 画出详细的类图与时序图画出详细的类图与时序图 23OOOO设计过程程基于领域模型,创建设计类图的基础版本或基于领域模型,创建设计类图的基础版本或初步模型初步模型:包含属性名称等基本信息,以便:包含属性名称等基本信息,以便用来设计交互图;用来设计交互图;开发交互图开发交互图,即为每一个用例产生一个交互,即为每一个用例产生一个交互图:其决定哪些对象一起工作,及怎样协同图:其决定哪些对象一起工作,及怎样协同工作。工作。(系统设计的核心系统设计的核心);根据开发交互图时得到的信息,根据开发交互图时得到的信息,迭代迭代设计设计类类图图和开发和开发方法名称(方法名称(确定类的行为和职责确定类的行为和职责)用包图将设计类图分割成相关的功能用包图将设计类图分割成相关的功能。34用例的用例的实现 称称设计模型的最终开发结果设计模型的最终开发结果为为用例的实现用例的实现。术语术语实现实现指的是对每个用例的详细系统过程进指的是对每个用例的详细系统过程进行说明,是制定了软件的蓝图。行说明,是制定了软件的蓝图。OOOO的设计也是用例驱动的。的设计也是用例驱动的。也就是说,设计是也就是说,设计是由一个用例的实现接着一个用例的实现完成的。由一个用例的实现接着一个用例的实现完成的。用例的实现用例的实现:对每个用例的详细系统过程的说:对每个用例的详细系统过程的说明。明。4用例用例实现方案的方案的步步骤用例实现方案的设计方法有三个步骤:用例实现方案的设计方法有三个步骤:提取提取边界类、实体类和控制类;边界类、实体类和控制类;构造构造交互图;交互图;根据根据交互图精化类图。交互图精化类图。56设计类图与与领域模型域模型设计类图和详细交互图均使用对方作为设计时设计类图和详细交互图均使用对方作为设计时的输入,二者的开发过程是平行的。的输入,二者的开发过程是平行的。设计类图设计类图是是OOOO分析时开发的分析时开发的领域模型类图领域模型类图的扩的扩展展(分析阶段可忽略属性或方法分析阶段可忽略属性或方法)。领域模型领域模型揭示问题域类和它们之间的联系,揭示问题域类和它们之间的联系,是是概念类模型概念类模型。设计设计类图类图是领域模型的细化和扩展,是领域模型的细化和扩展,是软件类是软件类模型模型。通过集成来自交互图和其他模型的信息。通过集成来自交互图和其他模型的信息来完成。来完成。设计设计类图类图时,还要时,还要在以前的领域模型在以前的领域模型的基础上增加很多类的基础上增加很多类67标准准设计类实体类实体类边界类(接口类)边界类(接口类)控制类控制类78 实体体类实体类实体类:是问题域中的核心:是问题域中的核心类类。从客观世界中的从客观世界中的实体对象实体对象归纳和抽象出来归纳和抽象出来(来自来自域模型域模型)。用于长期保存在系统中的信息以及提。用于长期保存在系统中的信息以及提供针对这些信息的相关处理行为。实体类的对象供针对这些信息的相关处理行为。实体类的对象是永久性的,即是永久性的,即持久类持久类。持久类持久类:程序结束后仍然存在的对象类。在系统:程序结束后仍然存在的对象类。在系统关闭后这些数据仍存在。关闭后这些数据仍存在。保证持久的方法保证持久的方法:将它们写入文件或:将它们写入文件或DBDB。实体类。实体类在在DBDB中有相应的表,其属性对应中有相应的表,其属性对应DBDB中的字段。中的字段。8续续实实体体类类表表示示目目标标软软件件系系统统中中具具有有持持久久意意义义的的信信息息项项及及其其操操作作。实实体体类类的的操操作作具具有有“内内向向收收敛敛”特特征征,它它们们仅仅向向目目标标软软件件系系统统的的其其余余部部分分提提供供读读、写写信信息息项项内内容容的的必必要要的的操操作作接接口口,并并不不涉及业务逻辑处理。涉及业务逻辑处理。910 边界界类(接口接口类)从系统和外界进行交互的对象中归纳、抽象出来。从系统和外界进行交互的对象中归纳、抽象出来。是系统内对象和系统外的参与者的联系媒介,外是系统内对象和系统外的参与者的联系媒介,外界消息通过边界类的对象实例发送给系统。界消息通过边界类的对象实例发送给系统。(例例如,窗体、对话框、报表如,窗体、对话框、报表)边界类边界类:存在于系统的自动化边界上的类。:存在于系统的自动化边界上的类。10续续边边界界类类描描述述目目标标软软件件系系统统与与外外部部环环境境的的交交互互,主主要要任务:任务:1.1.界界面面控控制制:包包括括输输入入数数据据的的格格式式及及内内容容转转换换,输输出出结果的呈现,软件运行过程中界面的变化与切换等。结果的呈现,软件运行过程中界面的变化与切换等。2.2.外外部部接接口口:实实现现目目标标软软件件系系统统与与外外部部系系统统或或外外部部设设备备之之间间的的信信息息交交流流和和互互操操作作。主主要要关关注注跨跨越越目目标标软软件系统边界的通信协议。件系统边界的通信协议。3.3.环环境境隔隔离离:将将目目标标软软件件系系统统与与操操作作系系统统、数数据据库库管管理理系系统统、应应用用服服务务器器中中间间件件等等环环境境软软件件进进行行交交互互的的功功能能与与特特性性封封装装于于边边界界类类之之中中,使使目目标标软软件件系系统统的的其余部分尽可能地独立于环境软件其余部分尽可能地独立于环境软件。1112 控制控制类控制类控制类:在边界类和实体类中间起协调作用的:在边界类和实体类中间起协调作用的类,它包含了事件的类,它包含了事件的应用逻辑应用逻辑或或业务规则业务规则。它负责从边界类对象获取信息,然后发送到适它负责从边界类对象获取信息,然后发送到适当的实体类对象,就像是当的实体类对象,就像是域层域层和和可视层可视层之间的之间的一个一个控制器控制器。在一个用例中,一个在一个用例中,一个控制类控制类应该同一个且仅一应该同一个且仅一个个参与者参与者相关联。相关联。协调协调边界类边界类和和实体类实体类之间的消息及消息发送的之间的消息及消息发送的顺序。顺序。12续续控控制制类类作作为为完完成成用用例例任任务务的的责责任任承承担担者者,协协调调、控控制制其其他他类类共共同同完完成成用用例例规规定定的的功功能能或或行行为为。对对于于比比较较复复杂杂的的用用例例,控控制制类类通通常常并并不不处处理理具具体体的的任任务务细细节节,但但是是它它应应知知道道如如何何分分解解任任务务,如如何何将将子子任任务务分分派派给给适适当当的的辅辅助助类类,如如何何在在辅辅助类之间进行消息传递和协调。助类之间进行消息传递和协调。13提取提取边边界界类类、实实体体类类和控制和控制类类如如何何从从分分析析模模型型中中的的用用例例描描述述和和领领域域概概念念模模型型出出发获取这些类?发获取这些类?通通常常情情况况下下,参参与与者者与与用用例例之之间间的的一一种种通通信信连连接接对对应应一一个个边边界界类类。但但是是,如如果果两两个个以以上上的的用用例例与与同同一一参参与与者者交交互互,并并且且这这些些交交互互具具有有共共同同的的行行为为、完完成成相相同同或或类类似似的的任任务务,就就可可以以考考虑虑用用同同一一边边界界类类实实现现用用例例与与参参与与者者之之间间的的交交互互。这这就就意意味味着着边边界类的作用范围可以超越单个用例。界类的作用范围可以超越单个用例。14提取提取边边界界类类、实实体体类类和控制和控制类类实实体体类类源源于于领领域域模模型型。有有时时也也需需要要认认真真研研读读用用例描述,从中发掘具有持久意义的信息项。例描述,从中发掘具有持久意义的信息项。如如果果参参与与者者的的属属性性需需要要持持久久保保存存,也也可可以以建建立立相应于执行者的实体类。相应于执行者的实体类。假假设设一一个个实实体体类类A A仅仅仅仅被被系系统统中中的的另另一一个个类类B B引引用用,并并且且系系统统勿勿需需关关心心A A的的行行为为特特征征,那那么么,为为了了简简化化设设计计模模型型,应应将将A A中中信信息息项项直直接接作作为为B B的属性。的属性。如如果果A A被被系系统统中中的的多多个个类类引引用用,或或者者A A具具有有不不容容忽忽略略的的行行为为特特征征,那那么么应应将将A A作作为为独独立立的的实实体体类。类。15提取提取边边界界类类、实实体体类类和控制和控制类类一个用例通常对应一个控制类。一个用例通常对应一个控制类。如如果果不不同同用用例例的的任任务务有有较较多多类类似似之之处处,也也可可以以考考虑虑在在多多个个用用例例的的实实现现方方案案中中共共享享同同一一控控制制类类,此此种种情情况况应应审审慎慎对对待待,不不同同用用例例所所需需要要的的控控制制、协调行为往往会有差异。协调行为往往会有差异。对对于于那那些些事事件件流流非非常常简简单单的的用用例例,可可以以不不设设独独立立的的控控制制类类,直直接接在在边边界界类类中中设设置置控控制制、协协调调功功能能,边边界界类类在在实实体体类类的的帮帮助助下下完完成成用用例例要要求求的功能及行为。的功能及行为。16导航可见性导航可见性一个对象可看到另一个对象并与之交互一个对象可看到另一个对象并与之交互(导航、导航、可见性可见性)。一个对象可导航一个对象可导航(发送消息发送消息)到另一个对象。到另一个对象。一个对象通过发消息的方式和另一个对象进行一个对象通过发消息的方式和另一个对象进行联系,那么第二个对象对于第一个对象来说必联系,那么第二个对象对于第一个对象来说必须是可见的。须是可见的。对象具有能看见另一对象并与其交互的能力。对象具有能看见另一对象并与其交互的能力。1718用例用例实现与交互与交互图用例的实现是在交互图的开发过程中完成的,用例的实现是在交互图的开发过程中完成的,用例实现的过程就是确定哪些类通过发送消息用例实现的过程就是确定哪些类通过发送消息与其他类进行协作的过程。与其他类进行协作的过程。设计时开发的交互图设计时开发的交互图:顺序图或协作图顺序图或协作图。1819对象象职责一种由对象负责实施系统过程的设计准则。一种由对象负责实施系统过程的设计准则。集中确定一个系统必须支持的行为集中确定一个系统必须支持的行为,再设计实现再设计实现这些行为的方法。通过这些行为这些行为的方法。通过这些行为,确定对象职确定对象职责。责。1920用例控制器用例控制器每个用例含有许多来自外部参与者不同的消息。每个用例含有许多来自外部参与者不同的消息。作为作为OOOO分析一部分的系统顺序图能够描述出这些分析一部分的系统顺序图能够描述出这些输入消息,但只表示这些消息输入到系统中。输入消息,但只表示这些消息输入到系统中。在设计过程中,必须确定对象得到所有的消息。在设计过程中,必须确定对象得到所有的消息。为简化为简化搜集搜集和和处理处理用例所需要的用例所需要的全部消息全部消息的过程,的过程,系统设计者通常建立一个新类,该类用做输入消系统设计者通常建立一个新类,该类用做输入消息的息的采集点采集点,称其为,称其为用例控制器用例控制器。20构造交互构造交互图图在在标标识识边边界界类类、实实体体类类和和控控制制类类之之后后,接接下下来来的的任任务务是是,将将分分析析模模型型中中的的用用例例描描述述转转化化成成UMLUML交交互互图图,以以交交互互图图作作为为用用例例的的详详细细实实现现方方案。案。用用例例描描述述中中事事件件流流说说明明中中的的事事件件应应直直接接对对应应于于交交互互图图中中的的消消息息,而而事事件件间间的的先先后后关关系系体体现现为为交交互互图图中中的的时时序序,对对消消息息的的响响应应则则构构成成消消息息接接收者的职责。收者的职责。这这种种职职责责在在后后续续的的设设计计活活动动中中将将被被确确立立为为类类的的方法。方法。2122顺序序图初步初步设计的的规则接受每个输入消息并确定由这个输入消息产生接受每个输入消息并确定由这个输入消息产生的所有的内部消息。的所有的内部消息。在处理每个消息的时候,一定要辨别出受之影在处理每个消息的时候,一定要辨别出受之影响的类的完整集合,即从响的类的完整集合,即从领领域类图域类图中找到需要中找到需要的所有对象。的所有对象。充实消息的结构。添加迭代、真充实消息的结构。添加迭代、真/假条件、返假条件、返回值和传递参数。回值和传递参数。22构造构造顺序序图控控制制类类或或辅辅助助类类可可以以向向右右侧侧的的边边界界类类发发送送消消息息,将将消消息息或或外外部部处处理理请请求求由由边边界界类类传传向向外外部部系系统统(被动执行者)。(被动执行者)。在在用用例例描描述述中中,许许多多用用例例除除主主事事件件流流外外,往往往往还还包包含含备备选选事事件件流流,以以说说明明在在某某些些特特殊殊或或者者异异常常情情况况下下的的事事件件和和响响应应动动作作序序列列。为为易易于于理理解解,在在设设计计模模型型中中应应该该用用分分离离的的UMLUML交交互互图图分分别别表表示事件流和每个备选事件流。示事件流和每个备选事件流。23精化精化类图在在UMLUML交交互互图图中中,对对每每个个类类的的对对象象都都规规定定了了它它必必须须响响应应的的消消息息以以及及类类的的对对象象之之间间的的消消息息传传递递通通道道。前前者者对对应应于于类类的的操操作作,后后者者则则对对应应于于类类之之间间的的连连接接关关系系。因因此此,可可以以利利用用交交互互图图精精化化分分析析模模型型中中的的类类图图,将将交交互互图图中中出出现现的的新新类类添添加加到到原原有有类类图中,并且对相关的类进行精化,定义其属性和操作。图中,并且对相关的类进行精化,定义其属性和操作。原原则则上上,每每个个类类都都应应该该有有一一个个操操作作来来响响应应交交互互图图中中指指向向其其对对象象的的那那条条消消息息。但但是是,这这并并不不意意味味着着消消息息与与操操作作一一定定会会一一一一对对应应,因因为为类类的的一一个个操操作作可可能能具具有有响响应应多多条条消消息息的的能能力力。同同理理,两两个个类类之之间间的的一一条条连连接接关关系系也也可可以以为为多多条条消消息息提提供供传传递递通通道道。为为了了简简化化设设计计模模型型,也也为为了了提提高高重重用用程程度度,设设计计人人员员应应该该尽尽量量使使用用已已有有的的操操作作来来响响应应新新消消息息,并并尽尽量量使使用用已已存存在在的的连连接接路路径径作作为为消消息息传传递递的的通通道道。如如果果两两个个类类之之间间存存在在明明确确、自自然然的的聚聚合合或或组组合合关关系系,则则可可以以在在类类图图中中直直接接用用相相应应的的UMLUML图图元元符符号号表表示示类类间间的的聚聚合合和和组组成成关关系系,这这两两个个关关系系均均可可提提供供消消息传递通道。息传递通道。24系统中的每一个对象都应该只有一个单独的职责,而任系统中的每一个对象都应该只有一个单独的职责,而任何对象所关注的就是自身职责的完成。何对象所关注的就是自身职责的完成。合适的行为应该合适的行为应该出现在合适的类里。出现在合适的类里。一个类承担的职责越多,它被复用的可能性越小一个类承担的职责越多,它被复用的可能性越小。类的职责主要包括两个方面:类的职责主要包括两个方面:数据职责和行为职责数据职责和行为职责,数数据职责通过其属性来体现据职责通过其属性来体现,而,而行为职责通过其方法来体行为职责通过其方法来体现现。单一职责原则是实现单一职责原则是实现高内聚、低耦合高内聚、低耦合的指导方针,在很的指导方针,在很多代码重构手法中都能找到它的存在,它是最简单但又多代码重构手法中都能找到它的存在,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。分析设计能力和相关重构经验。单一职责原则单一职责原则(SRP)(SRP)25开开闭原原则(OCP)(OCP)一个软件实体应当一个软件实体应当对扩展开放,对修改关闭对扩展开放,对修改关闭。也就。也就是说在设计一个模块的时候,应当使这个模块可以是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。码的情况下改变这个模块的行为。“不能修改而可以扩展不能修改而可以扩展”是不允许更改系统的抽象是不允许更改系统的抽象层,而允许扩展的是系统的实现层。层,而允许扩展的是系统的实现层。如何做到既不修改,又可以扩展?如何做到既不修改,又可以扩展?抽象化抽象化是开闭原是开闭原则的关键。则的关键。让模块依赖于一个固定的抽象体,这样让模块依赖于一个固定的抽象体,这样它就是不可以修改的;同时,通过这个抽象体派生,它就是不可以修改的;同时,通过这个抽象体派生,就可以扩展此模块的行为功能。这样设计的程序只就可以扩展此模块的行为功能。这样设计的程序只通过增加代码来变化而不是通过更改现有代码来变通过增加代码来变化而不是通过更改现有代码来变化。化。26里氏代换原则可以通俗表述为:在里氏代换原则可以通俗表述为:在软件中如果软件中如果能够使用基类对象,那么一定能够使用其子类能够使用基类对象,那么一定能够使用其子类对象对象。把基类都替换成它的子类,程序将不会。把基类都替换成它的子类,程序将不会产生任何错误和异常,反过来则不成立,如果产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类的话,那么它一个软件实体使用的是一个子类的话,那么它不一定能够使用基类。不一定能够使用基类。里氏代换原则是实现开闭原则的重要方式之一,里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,由于使用基类对象的地方都可以使用子类对象,因此因此在程序中尽量使用基类类型来对对象进行在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类定义,而在运行时再确定其子类类型,用子类对象来替换父类对象对象来替换父类对象。里氏(里氏(LiskovLiskov)替换原则)替换原则(LSP)(LSP)27依依赖倒置原倒置原则(DIP)(DIP)高层模块不应该依赖于低层模块,二者都应该高层模块不应该依赖于低层模块,二者都应该依赖于抽象。依赖于抽象。抽象不应该依赖于实现细节,实现细节应该依抽象不应该依赖于实现细节,实现细节应该依赖于抽象。赖于抽象。依赖倒转原则的常用实现方式之一是依赖倒转原则的常用实现方式之一是在代码中在代码中使用抽象类,而将具体类放在配置文件中使用抽象类,而将具体类放在配置文件中。依赖倒置原则指依赖关系应该是尽量依赖依赖倒置原则指依赖关系应该是尽量依赖接口或抽象类,而不是依赖于具体类。接口或抽象类,而不是依赖于具体类。要针对要针对接口或抽象类编程,而不是针对具体类编程接口或抽象类编程,而不是针对具体类编程。28接口分离原接口分离原则接口分离原则指的是在设计时采用多个与特定接口分离原则指的是在设计时采用多个与特定客户类有关的接口比采用一个通用接口更好。客户类有关的接口比采用一个通用接口更好。也就是说一个类如果要被多个客户类使用,那也就是说一个类如果要被多个客户类使用,那么可以给每一个客户类创建一个接口,同时用么可以给每一个客户类创建一个接口,同时用这个类实现所有接口。不要在一个接口中包含这个类实现所有接口。不要在一个接口中包含所有客户类需要的方法。所有客户类需要的方法。客户端客户端不应该依赖不应该依赖那些那些它不需要的接口它不需要的接口。一旦一个一旦一个接口太大接口太大,则需要将它,则需要将它分割成一些更分割成一些更细小的接口细小的接口,使用该接口的客户端仅需知道与,使用该接口的客户端仅需知道与之相关的方法即可。之相关的方法即可。29课堂复堂复习1.1.在面向在面向对象象设计中使用哪三种中使用哪三种基本基本设计类?简述述这三种基本三种基本设计类。2.2.什么是什么是导航可航可见性?性?举例例说明。明。在在编程中是如何程中是如何实现的的?30开开闭原原则练习下图是一个针对不同打印机实现打印功能的类图设计,下图是一个针对不同打印机实现打印功能的类图设计,根据图中设计,如果现在需要添加一台根据图中设计,如果现在需要添加一台LegendLegend打印机,打印机,需做哪些修改?需做哪些修改?上图设计并不合理,因为如果需要新加一台新的上图设计并不合理,因为如果需要新加一台新的LegendLegend打印机的话,不但要增加一个新的打印机的话,不但要增加一个新的LegendLegend类,还要修改类,还要修改OutputOutput类的内部结构。不符合开闭原则。类的内部结构。不符合开闭原则。那么,应该如何改进呢?那么,应该如何改进呢?31p经常不断地学习,你就什么都知道。你知道得越多,你就越有力量pStudyConstantly,AndYouWillKnowEverything.TheMoreYouKnow,TheMorePowerfulYouWillBe写在最后感谢聆听不足之处请大家批评指导Please Criticize And Guide The Shortcomings结束语讲师:XXXXXX XX年XX月XX日
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!