面向对象分析与设计Object-OrientedAnalysis&Design谭火彬第01章上升到面向对象AnApproachtotheObjectOrientationCopyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-3-这才是对象思维!抽象基类,为程序提供多态Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-4-总结:结构化VS面向对象结构化思维用过程刻画数据间关系对象思维直接用类表达数据间关系结构化中,数据是死的,全部依赖算法操作对象思维中,数据是活的,“她”知道自己的信息(属性),并能完成自己的工作(操作)结构化思维更像是一个人在解决所有问题对象思维更像是一个团队的分工协作Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-5-面向对象VS结构化-1扬弃,不是否定顾客取款功能帐号、数额订单PK订单ID下单日期税金运费总价订单项PK订单项ID购买数量价格FK1订单ID顾客提款机1:请办理提款(帐号,金额)Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-6-面向对象VS结构化-2(程序)实现角度数据结构+算法=程序设计以对象为中心组织数据与操作数据对象属性操作对象的行为类型与变量类与对象实例函数(过程)调用消息传递类型与子类型一般类与特殊类,继承构造类型整体-部分结构,聚合指针关联Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-7-面向对象VS结构化-3传统结构化方法面向对象方法(UML)需求模型输入I、处理P、输出O的视角,面向功能的文档(用户需求规格说明书)需求变化,其功能变化,所以系统的基础不稳固从用户和整体角度出发使用系统抽象出用例图、活动图,获取需求;如需求变化,对象的性质相对功能稳定,系统基础稳定分析模型面向过程的数据流图DFD、实体—关系图ERD、数据字典DD表示分析模型功能分解,数据和功能/过程分开把问题作为一组相互作用的实体,显式表示实体间的关系数据模型和功能模型一致类、对象图表示分析模型,状态、顺序、通信、活动图细化说明设计模型功能模块(SC图),模块之间的连接/调用是模块的附属形式类和对象实现,类/对象的关联、聚集、继承等连接、连接规范和约束作为显式定义实现模型伪代码、算法等构件图,部署图测试模型根据文档进行单元测试,集成测试,确认测试单元测试采用类图,集成测试用实现图和交互图,确认测试采用用例图Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-8-内容安排第一个案例课程介绍对象技术对象和类对象技术相关原则上升到面向对象Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-9-课程目标三大目标:OO:建立对象的思维方式,对面向对象思想和理论有进一步的理解UML:能够熟练地使用UML表达面向对象的设计思想Model:运用对象技术的一般原则和模式进行应用系统的分析和设计建模Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-10-课程目标(续)三大目标之间的关系Model:建模是最终目的OO:面向对象技术是一种建模理论UML:统一建模语言是一种体现OO的建模语言,是将OO理论转化为实践的工具Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-11-内容安排从结构化到面向对象课程介绍对象技术对象和类对象技术相关原则上升到面向对象Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-12-对象技术是一种看待计算机软件系统的观点是一种系统分析和设计的思想是一种编程方法是一组设计原则和模式是实践者的日常工作是吹鼓手、骗子和市场人员口中的“万灵丹”Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-13-对象技术ObjectTechnology对象技术是一系列指导软件构造的原则(如抽象、封装、多态等),并通过语言、数据库和其它工具来支持这些原则从本质上讲,对象技术对一系列相关原则的应用对象技术=类+对象+抽象+封装+继承+多态+消息…Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-14-对象技术优势-2稳定较小的需求变化不会导致系统结构大的改变当需求变化时……功能:最易变数据:较易变对象:较稳定稳定性增加用较稳定把不稳定的包起来Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-15-对象技术优势-3复用代码重用:类库、框架等重用机制能提高质量,减少由于编制新的系统代码而产生的成本通过继承、关联、封装等手段软件开发组越大,组中每个成员的生产率就越低--PhilippeKahn,Borland公司创始人构造大型软件不能靠堆人)/(150003yearLOCnLnCopyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-16-内容安排从结构化到面向对象课程介绍对象技术对象和类对象技术相关原则上升到面向对象Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-17-对象对象(Object)是一个实体、一件事、一个名词,可以获得的某种东西,可以想象有自己标识的任何事物物理实体概念实体软件实体化学过程链表Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-18-对象-正式定义对象是一个实体,这个实体:具有明确定义的边界和标识边界意味着对象是一个封装体,通过封装来与其它对象分隔标识则表明每一个对象都是唯一的对象封装了状态和行为对象的状态通过对象的属性(attribute)和关系(relationship)来表达对象的行为通过对象的操作(operation)、方法(method)和状态机(statemachine)来表达Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-19-类类就是一系列对象的抽象描述,这些对象共享相同的属性、操作、关系和语义一个具体的对象是该类的一个实例类是一种抽象将相似的实体抽象成相同的概念抽象过程强调相关特征而忽略其它的特征Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-20-UML中的类在UML中,采用矩形框表示类,可以将矩形框划分为三个区域,分别表示类名、属性和操作属性操作Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-21-属性属性(attribute)是类的特征或特性属性的值是某一特定对象的属性值在类中属性名必须是唯一的每一个类的实例都有为这个类定义的所有属性的值银行帐户类属性帐号银行名称拥有者金额Mary的银行帐户属性值12345678FirstNationalBankMarySmith$1024.48Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-22-操作操作(operation)访问或修改对象的属性值对象的行为是由为此对象定义的一系列操作决定的一个类可能同时存在多个实例,也可能在某一时刻没有实例一个类的所有实例都可以使用在这个类中定义的操作Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-23-类和对象的关系每一个对象都是某一个类的实例每一个类在某一时刻都有零个或更多的实体类是静态的;它们的存在、语义和关系在执行前就已经定义好了对象是动态的;它们在程序执行时可以被创建和删除Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-24-内容安排从结构化到面向对象课程介绍对象技术对象和类对象技术相关原则上升到面向对象Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-25-对象技术相关原则对象技术基本原则抽象(Abstraction)封装(Encapsulation)泛化(Generalization)多态(Polymorphism)……Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-26-抽象-Abstraction抽象是揭示事物区别于其他事物的本质特征的过程是一个分析和理解问题的过程抽象的结果取决于使用者的目的,应该包括使用者所感兴趣的那些职责,而忽略掉其它不相关的部分对象到类的过程就是抽象即将所见到的具体实体抽象成概念,从而在计算机世界中进行描述和各种操作Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-27-示例:抽象一个项目的抽象依赖于定义抽象的上下文Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-28-封装-Encapsulation封装是对客户(使用者)隐藏具体实现细节客户只依赖于接口通过封装实现信息隐藏和数据抽象Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-29-为什么要封装结构化程序设计:程序=算法+数据结构全局数据算法算法如何保证数据的一致性?Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-30-范例:数据一致性structShippingAddress{longcityCode;Stringaddress;}城市代码例如:北京为01上海为02邮政地址“北京朝阳区静安里6号”操作这个数据结构的程序员,必须严格遵守一系列业务逻辑规则,否则很容易破坏数据的一致性结构化程序设计处理大项目时,多人协同开发时,本质上无法保证数据的一致性classShippingAddress{privatelongcityCode;privatestringaddress;publiclongModifyAddress(Stringaddress)}Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-31-封装:可见性问题Visibility-可见性层次public:+package:~protected:#private:-作用域(类/方法),默认作用域friend友元TestClass-pri_attr:int#pro_attr:int+pub_opt:voidCopyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-32-泛化-Generalization是类之间的一种“是”(isa/iskindof)关系,通过该关系一个类(子类)可以共享另外一个或多个类(父类)的结构和行为采用继承(Inheritance)实现泛化关系通过泛化关系,可以建立类之间的层次结构,根据继承层次中父类的个数不同,分为:单一继承多重继承Copyright©thbin@buaa.edu.cnCollegeofSoftware,BUAA-33-单一继承一个类继承另外一个类Copyright©thbin@buaa.edu.cnColle