《软件工程-第13章.ppt》由会员分享,可在线阅读,更多相关《软件工程-第13章.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件工程软件工程第13章面向对象面向对象设计设计面向对象设计n面向对象设计(OOD)n在OOA的模型基础上运用面向对象方法,解决与实现有关的问题,产生一个符合具体实现条件的可编码实现的OOD模型,以驱动系统的实现nOOD是以OOA模型为基础,只需做必须的精化和调整,进一步设计某些细节,并增加与实现相关的部分即可n需要做出许多技术决策:简单的问题如选用的编程语言、数据库和人机交互等,n主要的活动有:划分子系统设计系统体系结构完成对象设计开发对象间的交互为系统开发持久模型13.1划分分析模型划分分析模型v对于一个大而复杂的系统,也要分解成若干较小的子系统,再对每个子系统进行分析求解。v子系统只是个
2、概念实体,可以把子系统当作大的类看待。v子系统结构可以简化类之间的交互模式,从而降低耦合。v通常通过寻找紧耦合的类,划分子系统。例:ATM子系统划分 13.2系统逻辑架构系统逻辑架构v系统按照层次分解好处每个一层次都是独立的有机整体可以很容易的用新的实现来替换原有层次的实现可以降低层与层之间的依赖分层有利于标准化利于各层逻辑的复用使系统易于扩展和维护缺点会带来级联修改过多的层次会影响性能经典三层架构v数据访问层、业务逻辑层和表现层多层架构v用户界面层实现了系统的主要用界面元素v系统的业务:业务层和控制器层。v持久层实现持久存储v系统类为应用提供支持性技术服务常用对象和子系统13.3类模型设计类
3、模型设计v设计关注在于系统具体实现解决方案领域通过提供设计细节精化分析类创建一组新的设计类,设计类实现了软件的基础设施以支持业务解决方案,类演化为不同类型:v用户接口类、业务领域类、过程类、持久类和系统类v良好的设计类特征完整性和充分性,简单性,高内聚性,低耦合性接口设计v接口设计有三个重要的元素用户界面;和其他系统、设备、网络或其他信息生产者或使用者的外部接口;各种设计构件之是的内部接口。属性、方法建模v设计需要决定属性的类型v考虑组合数据项v若属性有初始值或属性可取值的范围,以及对属性的一些约束,设计时也都应该描述出来也要给出。v方法是类的职责需要指明方法的可见性,方法的返回值,参数以及参
4、数的类型和默认值方法实现的算法通过注释或文档的形式加以说明属性访问通常使用setter和getter方法对象之间可见性设计v可见性是指一个对象看见其他对象或能够发送消息给其他对象,引用其方法的能力为了使发送消息对象能够向接收消息对象发送消息,发送对象必须具有接收对象的可见性,即发送对象必须拥有对接收对象的某种引用或指针。v可见性通常有四种方式属性可见性:B是A的属性。参数可见性:B是A中方法的参数。局部可见性:B是A中方法的局部对象。全局可见性:B具有某种方式的全局可见性用例迭代实现v对象职责的分配和协作的设计都是非常重要和具有创造性的步骤v设计对象交互和职责分配是对象设计的核心v明确了类的属
5、性和方法后,需要重新迭代设计用例的实现v合理且均匀的分配系统职责v设计中有创造性和困难的部分进行建模。应该保持设计的轻量化和简短,例:空闲时播放广告信息过程例:ATM身份验证用例实现过程重构v重构(Refactoring)是一种重新组织系统设计的技术,可以优化构件的设计而不改变其功能或行为。v即在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构v设计模式为重构提供指导v模式是面向对象设计的基石,而测试优先编程和严谨的重构则是设计演进的基石13.4类的设计原则类的设计原则开闭原则v开闭原则(Open Closed Principle,OCP)指的是“一个模块在扩展性方面应该是开放
6、的而在修改方面应该是封闭的”。v设计者应该采用一种直接增加代码,而无需对软件内部代码做修改就可以扩展软件功能的设计v尽量考虑使用接口封装机制、抽象机制和多态技术对封闭和扩展区域进行隔离。例:电视机类图Liskov替换原则v替换原则(Liskov Substitution Principle,LSP),“子类应当可以替换父类并出现在父类能够出现的任何地方”。v为了保证继承关系的正确性,满足替换原则的继承关系,只要继承实现了基类的子类,都可以被类的使用者使用,从而实现了系统的扩展。v如果建模的继承关系不能通过Liskov替换原则,则说明设计上可能存在问题例:实验室和设备类模型依赖倒置原则v依赖原则
7、(Dependency Inversion Principle,DIP),“在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类”。v具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。v正确应用对于创建可重用的框架来说是必须的例:开关面板与节能灯的类模型接口分离原则v接口分离原则(Interface Segregation Principle,ISP),“采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好”。v如果拥有一个针对多个客户的类,为每一个客户创建特定业务接口例:带有集成接口的服务类例:使用接口分离设计的类13
8、.5设计模式设计模式v设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结v使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性v设计模式有助于对框架结构的理解,成熟的框架通常使用了多种设计模式单件模式v单件模式(Singleton Pattern)要求一个类有且仅有一个实例,并且提供了一个全局的访问点v解决方案:对类定义静态方法用以返回单实例对象vSingleton类中的实例构造器应设置为不允许直接创建实例。v单件模式只考虑了对象创建的管理,没有考虑到销毁的管理单件模式模型抽象工厂模式v提供一个创建一系列相关或相互依赖对象
9、的接口,而无需指定它们具体的类。v解决方案:创建名为工厂的抽象对象处理多系列产品的创建职责。v适用场景:一个系统要独立于它的产品的创建、组合和表示一个系统要由多个产品系列中的一个来配置。强调一系列相关的产品对象的设计一并进行联合使用时提供一个类库,而只想显示接口。抽象工厂模式模型13.6对象持久性建模对象持久性建模v所谓持久数据存储就是即使在系统崩溃的情况下仍能存在的数据存储。v持久对象(Persistent Object)是指需要持久性存储的对象v存储机制主要三类对象数据库关系数据库其他机制:普通文件、XML文件映射对象v每个持久对象类在关系数据库中定义为一个表,而基本数据类型的对象属性映射
10、为表中的列v对象标识符(Object Identifier,OID)用于在关系数据库中惟一确定对象继承关系映射v三种基本的解决方法v对整个类层次使用一个数据表中增加objectType字段区别当前行的职责角色v每个具体类使用一个数据表v每个表代表着一个类,使得每张数据表即包含具体类的属性,又包含继承自父类的属性。v每个类使用一个数据表v父类与子类用同一个OID。子类的表的主键同时作为父类表的外键v程序员表和经理表中的employeeOID除了是表的主键外,同时还是职员表中的外键。关联和聚合映射v在关系数据库通常使用外键实现类之间关联v映射“一对一”在联时,需要知道关联的方向性v“一对多”的关联
11、,在“多”的一方维护添加外键如“职员”类与“任务”类之间是一对多的关系,一个职员同时做多个任务,一个任务分配给一个职员完成。这时只要把“职员”表的主键作为外键放入到“任务”表中v实现多对多的关联,需要用到关联表v关联表中包含的属性一般都是与这种关系有关的表中键的组合持久性框架v持久性框架(persistence framework)就是一组通用的、可复用的、可扩展的一组类,相互协作提供支持持久存储对象的服务,称为持久性服务。v为对象/关系映射服务(Object/Relational Mapping,ORM)v持久性框架将应用程序与其使用和操纵的数据源分离Hibernate持久性框架13.7部署建模v部署图描述了处理节点及运行在这些节点之上的构件运行时刻静态配置视图。v部署图中最基本的元素是节点设备节点执行环境节点v与系统采用的分布结构策略有很大关系。根据分布策略确定部署的节点以及节点间连接方式。进一步分析软件构件应当被分布到那个节点上。三层架构的系统部署图