1、面向对象分析设计 Object-Oriented Analysis & Design,谭火彬,第01章 上升到面向对象,An Approach to the Object Orientation,-3-,内容安排,第一个案例 课程介绍 对象技术 对象和类 对象技术相关原则 上升到面向对象,-4-,内容安排,第一个案例 课程介绍 对象技术 对象和类 对象技术相关原则 上升到面向对象,-5-,素数问题,素数的定义: 除了1与本身之外,不能被其他正整数整除的数,叫作素数,也叫质数,按照习惯规定,1 不算素数,最小的素数是 2,其余的是 3、5、7、11、13、17、19等等,由定义判断素数对于数 n
2、 ,从i=2,3,4,5到 n-1 判断 n 能否被 i 整除,如果全部不能整除,则 n 是素数,只要有一个能除尽,则 n 不是素数,为了压缩循环次数,可将判断范围从 2 n-1 改为 2 sqrt(n),-6-,筛选法求素数序列,筛选法:生成 2 i n 的素数序列,设n=50,筛掉2的倍数:2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ,筛掉3的倍数:2 3 5 7 9 11 13 15 17 19 21 23 25 27 29 ,筛掉5的倍数:2 3 5 7 11 13 17 19 23 25 29 31 35 37 41 ,筛掉7的倍数:2 3 5 7
3、 11 13 17 19 23 29 31 37 41 43 47 49,留下素数序列:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47,-7-,思考?,用结构化思维解决上述问题 用对象思维解决上述问题 将解决思路用合适的方式记录下来 思考: 结构化思维与对象化思维有什么本质的不同?体现了怎样的思维差异?对象思想有何优势? 如何表达设计思想:代码?图形?,-8-,结构化实现,/PrimerNumber.c main()int *sieve,n;int iCounter=2, iMax, i;printf(“Please input max number:“);s
4、canf(“%d“, ,-9-,结构化设计,-10-,结构化小结,通过流程图(结构化建模)可以更清楚表达设计思想 针对过程的抽象 过程(函数)是系统的核心,通过过程实现系统功能 数据是静态的,由过程来控制对数据的访问 面向对象的方法如何解决呢?,-11-,Java实现-是对象思维吗?,import java.lang.Math; public class PrimerNumberpublic static void main(String args) int n=50;int sieve=new intn-1;int iCounter=2, iMax, i;for(i=0;in-1;i+) s
5、ievei=i+2;iMax=(int)Math.sqrt(n);while(iCounter=iMax)for (i=2*iCounter-2; in-1; i+=iCounter)sievei=0;iCounter+;for(i=0; in-1; i+)if (sievei!=0) System.out.println(sievei); ,-12-,用对象思维解决问题?,筛选法:生成 2 i n 的整数序列,设n=50,筛掉2的倍数:2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ,筛掉3的倍数:2 3 5 7 9 11 13 15 17 19 21 23
6、25 27 29 ,筛掉5的倍数:2 3 5 7 11 13 17 19 23 25 29 31 35 37 41 ,筛掉7的倍数:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 49,留下素数序列:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47,筛子:存储源数据,过滤器:表明当前过滤因子,计数器:记录当前正在筛选的数据,什么是对象?对象在哪?,-13-,这才是对象思维!,抽象基类,为程序提供多态,-14-,面向对象的编程C+语法,class Item public:Item* source;Item (Item* src)
7、source=src;virtual int out() return 0; ;,class Counter: public Itemint value; public:int out() return value+;Counter(int v):Item(0)value=v; ;,-15-,面向对象的编程-过滤器,class Filter:public Itemint factor; public:int out()while(1)int n=source-out();if (n%factor) return n;Filter(Item *src, int f):Item(src) fact
8、or=f; ;,-16-,面向对象的编程-筛子,class Sieve: public Item public:int out()int n=source-out();source= new Filter(source, n);return n;Sieve(Item *src):Item(src) ;,-17-,验证设计方案,void main()Counter c(2);Sieve s( ,关键代码只有一行, 筛子自己知道如何找出素数,-18-,对象方法小结,通过UML类图(面向对象建模)可以更清楚表达设计思想,并为代码实现提供框架 针对数据的抽象:类 类拥有自己的数据和行为,能够完成自身的
9、工作职责 过程是类的组成部分,为类提供行为 通过类的对象之间的协作完成系统功能,-19-,对象技术的思考,对象思维具有更大的灵活性,更好的模块化,可以进行更大规模的设计 面向对象设计和开发的难度更大,面临着对象识别、职责分配、多态抽象等一系列问题 学习更多知识和技术,并掌握一系列面向对象的设计原则和模式 图形化工具(UML)有助于表达和交流设计思想,并简化实现的过程,-20-,总结:结构化VS面向对象,结构化思维用过程刻画数据间关系 对象思维直接用类表达数据间关系 结构化中,数据是死的,全部依赖算法操作 对象思维中,数据是活的,“她”知道自己的信息(属性),并能完成自己的工作(操作) 结构化思
10、维更像是一个人在解决所有问题 对象思维更像是一个团队的分工协作,-21-,面向对象 VS 结构化-1,扬弃,不是否定,-22-,面向对象 VS 结构化-2,(程序)实现角度,-23-,面向对象 VS 结构化-3,-24-,内容安排,第一个案例 课程介绍 对象技术 对象和类 对象技术相关原则 上升到面向对象,-25-,课程介绍,课时 上课:30学时(10次课程) 作业:3次 考试:2小时 上课时间 第3, 614周六晚上6:009:00 地点 3-313,-26-,课程目标,三大目标: OO:建立对象的思维方式,对面向对象思想和理论有进一步的理解 UML:能够熟练地使用UML表达面向对象的设计思
11、想 Model:运用对象技术的一般原则和模式进行应用系统的分析和设计建模,-27-,课程目标(续),三大目标之间的关系 Model:建模是最终目的 OO:面向对象技术是一种建模理论 UML:统一建模语言是一种体现OO的建模语言,是将OO理论转化为实践的工具,-28-,关于本课程,本课程是软件工程类专业课程,侧重于工程实践能力的培养,强调分析和设计技能,不关注文档、过程、规范等,重点在建模方法的应用 过程驱动:围绕分析和设计过程,关注各阶段建模技术的应用 案例驱动:围绕具体案例,讲解面向对象分析和设计的思维方式和解决问题的方法 课程重点不是理论或知识,而是通过实践建立对象思维方式,并培养运用UM
12、L来表达这种思维方式的技能,从而完成面向对象分析和设计 通过课外阅读、作业和实践来弥补课堂不足 不考概念,不需死记硬背,在实践中掌握相关理论和方法,-29-,关于本课程,本课程部分内容来自IBM大学合作部Rational University Program培训课程 DEV475-Mastering Object Oriented Analysis and Design With UML 2 DEV275-Essentials of Visual Modeling with UML 2 DEV396-Essentials of Rational Software Architect RD211
13、-Fundamentals of Rational Rose,-30-,Rational University Curriculum,-31-,Rational University Curriculum,-32-,Rational University Curriculum,-33-,为什么选择本课程?,需要理由吗? 我们从事软件行业 面向对象是最主流的软件开发思想 UML是最主流的建模方法,UML,OOAD,软件工程师的“饭碗”,对于今天的软件开发者来说,UML是他们的面包和黄油,-34-,本课程适合我?,基础 知识储备:软件工程、面向对象程序设计 实践储备:了解工程项目的特点,最好有实际
14、工程项目开发背景 定位 从事软件相关行业工作:分析、设计、编码、测试或管理、维护工作,-35-,课程安排,1 基础(3): 上升到面向对象 2 基础(3) : 可视化建模技术 3 起源(2) : 业务建模 4 需求(4) : 用例建模 5 分析(3) : 用例分析,6 设计基础(3) : 面向对象设计原则 7 设计基础(3) : 面向对象设计模式 8 设计(3) : 构架设计 9 设计(3) : 构件设计 10 实现&展望(3) : 从模型到代码 模型技术的发展,-36-,学习路线图,-37-,考核方式,作业(50) 结合课程进度,围绕一个案例,安排三次实践作业 根据情况对作业进行详细讲解 考
15、试(50) 课程结束后安排考试 开卷,-38-,作业提交,作业提交方式 Web http:/ “文档中心面向对象分析设计”中提供课件下载和作业上传 Email ,参考资料,以课程讲义为主线理解,辅助参考书籍 Object-Oriented Analysis and Design with Applications (3rd) 面向对象分析与设计(第3版) UML创始人Grady Booch的代表作 Applying UML and Patterns - An Introduction to Object-Oriented Analysis and Design UML和模式应用-面向对象分析与
16、设计导论 The Unified Modeling Language User Guide(UML用户指南,第二版) Grady Booch, James Rumbaugh, Ivar Jacobson,-39-,-40-,内容安排,从结构化到面向对象 课程介绍 对象技术 对象和类 对象技术相关原则 上升到面向对象,-41-,对象技术,是一种看待计算机软件系统的观点 是一种系统分析和设计的思想 是一种编程方法 是一组设计原则和模式 是实践者的日常工作 是吹鼓手、骗子和市场人员口中的“万灵丹”,-42-,对象技术Object Technology,A set of principles (abs
17、traction, encapsulation, polymorphism, ) guiding software construction, together with languages, databases, and other tools that support those principles. (Object Technology - A Managers Guide, Taylor,1997.),-43-,对象技术利益-1,沟通 顺应人类思维习惯,让软件开发人员在解空间中直接模拟问题空间中的对象及其行为,PUSH EBX MOV EBX,EDX MOV EDX,EAX SHR
18、EDX,16 DIV BX,AHare.Run; ALion.Catch(AHare); ALion.Kill(AHare); AHare.Dead; ALion.Eat; ALion.Happy;,在计算机中模拟现实世界的事和物,-44-,实例:“东北一家人”,东北人都是活雷锋 人、东北人、雷锋 老张开车去东北 撞啦! 老张、汽车、开车 撞啦,-45-,class 人 Region 籍贯; class Region interface 雷锋 helpPeople() class 东北人 extends 人 implements 雷锋 籍贯 = 东北;helpPeople() ,class C
19、arDriveTo(Region) throws Exception (撞车)人 Driver; Main Program 人 老张;Car 夏利;夏利.Driver = 老张;try 夏利.DriveTo(东北); catch (Exception) ,面向对象的表示,-46-,对象技术利益-2,稳定 较小的需求变化不会导致系统结构大的改变 当需求变化时,功能:最易变 数据:较易变 对象:较稳定,稳定性增加,用较稳定把不稳定的包起来,-47-,对象技术利益-3,复用 代码重用:类库、框架等重用机制 能提高质量,减少由于编制新的系统代码而产生的成本 通过继承、关联、封装等手段,软件开发组越大,
20、组中每个成员的生产率就越低 -Philippe Kahn, Borland公司创始人,构造大型软件不能靠堆人,-48-,对象技术的发展历史,Simula基本思想,1967,1972,Smalltalk实用化,C+ 商业化,1980s,1995,Java 编程方法的成熟,UML 统一方法学,1997,2008+,构件、 服务、 云计算?,-49-,内容安排,从结构化到面向对象 课程介绍 对象技术 对象和类 对象技术相关原则 上升到面向对象,-50-,Object,Informally, an object represents an entity, either physical, concep
21、tual, or software Physical entityConceptual entitySoftware entity,化学过程,-51-,Object-Formal Definition,An object is an entity with a well-defined boundary and identity that encapsulates state and behavior. State is represented by attributes and relationships. Behavior is represented by operations, met
22、hods, and state machines.,-52-,对象的标识,每一个对象都有一个唯一的标识, 即使其状态有可能与其它对象一样,班机 747 on 11/10,班机 747 on 11/11,班机 747 on 11/12,-53-,对象的状态,一个对象的状态是它反映于现实世界的一系列属性: 属性的数值 (即与对象有关系的数据) 它与其它对象的关系 任一时刻的历史状态,可能的状态:停泊 运营着陆 终止,班机 747,-54-,对象的行为,定义当其它对象发出请求时,该对象如何反应 由为对象定义的一系列操作决定,-55-,Representing Objects in the UML,A
23、n object is represented as a rectangle with an underlined name.,Named Object,Anonymous Object,-56-,Class,A class is a description of a set of objects that share the same attributes, operations, relationships, and semantics An object is an instance of a class A class is an abstraction in that it Emph
24、asizes relevant characteristics Suppresses other characteristics,-57-,Sample-A Class,Class Employee,Properties Name Address Position Salary Start Date End Date,Behavior Hire Fire Promote Increase Salary Retire,-58-,Representing Classes in the UML,A class is represented using a rectangle with compart
25、ments.,属性,操作,-59-,属性,属性(attribute)是类的特征或特性 属性的值是某一特定对象的属性值 在类中属性名必须是唯一的 每一个类的实例都有为这个类定义的所有属性的值,银行帐户类属性帐号 银行名称 拥有者 金额,Mary的银行帐户属性值12345678 First National Bank Mary Smith $1024.48,-60-,属性取决于视点,从销售人员的角度 型号价格颜色里程数,一辆汽车具有的属性:,从维修人员的角度 马达类型传动类型维修记录,-61-,操作,操作(operation)访问或修改对象的属性值 对象的行为是由为此对象定义的一系列操作决定的 一
26、个类可能同时存在多个实例,也可能在某一时刻没有实例 一个类的所有实例都可以使用在这个类中定义的操作,从销售人员的角度 处理客户定单 准备销售合同 加入清单 从清单中删除,一辆汽车具有的操作:,从维修人员的角度 测试刹车 修理刹车 转动轮胎 检查马达速度,操作取决于视点,-63-,类和对象,对象,实体,类,抽象数据类型,计算机世界,实 例 化,抽 象,映 射,映 射,现实世界,-64-,类是生成对象的模板,类是生成对象的模板 类的定义中包含有产生和删除对象的操作 一个类定义了使用哪种数据表示法来描述属性 每一个实例都采用有属性值的数据表示法 一个类通过一系列操作来定义行为 这种操作能在每个实例中
27、激活,班机,-65-,类和对象的关系,每一个对象都是某一个类的实例 每一个类在某一时刻都有零个或更多的实体 类是静态的;它们的存在、语义和关系在执行前就已经定义好了 对象是动态的;它们在程序执行时可以被创建和删除,-66-,内容安排,从结构化到面向对象 课程介绍 对象技术 对象和类 对象技术相关原则 上升到面向对象,-67-,对象技术相关原则,对象技术基本原则(来自Rational) 抽象(Abstraction) 封装(Encapsulation) 模块(Modularity) 层次(Hierarchy) 对象技术相关机制 泛化(Generalization) 多态(Polymorphism
28、) ,-68-,抽象性Abstraction,The essential characteristics of an entity that distinguishes it from all other kinds of entities. Defines a boundary relative to the perspective of the viewer. Is not a concrete manifestation, denotes the ideal essence of something.,-69-,Example: Abstraction,一个项目的抽象依赖于定义抽象的上下
29、文,-70-,封装-Encapsulation,Hides implementation from clients. Clients depend on interface.,-71-,为什么要封装,结构化程序设计:程序 = 算法 + 数据结构,全局数据,算法,算法,算法,算法,如何保证数据的一致性?,-72-,范例:数据一致性,struct ShippingAddress long cityCode;String address; ,城市代码 例如:北京为01 上海为02,邮政地址 “北京朝阳区静安里6号”,操作这个数据结构的程序员,必须严格遵守一系列业务逻辑规则,否则很容易破坏数据的一致性
30、 结构化程序设计处理大项目时,多人协同开发时,本质上无法保证数据的一致性,class ShippingAddress private long cityCode;private string address;public long ModifyAddress(String address) ,-73-,封装:可见性问题,Visibility可见性 层次 public: + protected: # private: - 作用域(类/方法),默认作用域 friend 友元,-74-,模块-Modularity,Breaks up something complex into manageable
31、 pieces Helps people understand complex systems Cohesion, Coupling Class, Component, Package,-75-,Package,A general purpose mechanism for organizing elements into groups A model element that can contain other model elements. A package can be used: To organize the model under development. As a unit o
32、f configuration management.,-76-,A Package Can Contain Classes,The Package, University Artifacts, contains one package and five classes,-77-,层次-Hierarchy,Any ranking or ordering of abstractions into a tree-like structure Types of Hierarchy:Inheritance, Aggregation,Increasing abstraction,Decreasing a
33、bstraction,Elements at the same level of the hierarchy should be at the same level of abstraction,-78-,Generalization,A relationship among classes where one class shares the structure and/or behavior of one or more classes Defines a hierarchy of abstractions in which a subclass inherits from one or
34、more superclasses Single inheritance Multiple inheritance Is an “is a kind of” relationship.,-79-,单一继承,One class inherits from another,-80-,多重继承,A class can inherit from several other classes,Use multiple inheritance only when needed and always with caution!,-81-,What Is Inherited?,A subclass inheri
35、ts its parents attributes, operations, and relationships A subclass may: Add additional attributes, operations, relationships Redefine inherited operations (Use caution!) Common attributes, operations, and/or relationships are shown at the highest applicable level in the hierarchy,-82-,范例:继承什么?,clas
36、s Student protected string name; public string getName() public Account theAccount; class GraduateStudent extends Student 派生类(子类)从基类(超类、父类)中派生,继承了基类中全部的public和protected数据成员和方法。所以即使GraduateStudent中没有定义getName(),也会从Student中得到getName()方法的全部实现 派生类也会继承基类中的关系,因此GraduateStudent与Account也有聚合关系,-83-,What Is P
37、olymorphism?,The ability to hide many different implementations behind a single interface,-84-,范例:多态,class abstract Shape public abstract void draw(); class Rectangle extends Shape / 覆盖(override)基类方法public void draw() . /* 绘制矩形 */ class Circle extends Shape / 覆盖(override)基类方法 public void draw() /* 绘
38、制圆形 */ ,-85-,应用多态性,假设我们有一个数组sharr,里面放着一排Shape,但是不知道哪些是Rectangle,哪些是Circle。利用多态性,我们可以:for (int i = 0; i sharr.length; +i) Shape shape = (Shape)sharri;shape.draw(); 遍历整个数组的过程中,各个Shape自己知道应当如何在画布上绘制自己。shape.draw()这同一行代码在shape指向不同的对象时表现出不同的行为,这就是所谓多态性,-86-,内容安排,从结构化到面向对象 课程介绍 对象技术 对象和类 对象技术相关原则 上升到面向对象,
39、-87-,本节目标,通过简单通俗的事例来演绎对象建模的基本概念,初步认识UML模型 开阔视野,轻松树立面向对象的观点 掌握用面向对象方法分析问题的要领 为学习对象建模方法热身,-88-,实例1: OO观点的个人简介,tanHuobin是Teacher类的一个实例,该实例是基于beiHangUniversity对象的softwareSchool成员对象工作 类GraduateStudent的所有实例都可以通过Course类的对象ooTechnology建立关联,并可发送phone消息(消息内容:82338518-862)或email消息 (消息内容:),-89-,OO个人简介的UML表示,-90
40、-,实例2:对象思维分析问题,昨天我的一个朋友结婚了,-91-,问题分析-1,A. 这里面有什么东东? 月老,小伙,姑娘,恋人,玫瑰花 B. 每个东东看上去是什么样的? 月老,看上去有些年纪了,挺热心的 小伙,看上去很强壮,很诚实的 姑娘,看上去好漂亮,还很温柔 恋人,看上去很黏糊,当然就结婚了 玫瑰花,火红火红的,难怪姑娘动情了,-92-,问题分析-2,C. 每个东东能做点什么用? 月老:牵线搭桥,介绍认识 小伙:追求献花,表达爱意 姑娘:仰慕倾情,以身相许 恋人:拍拖,结婚 玫瑰花:令姑娘头晕,传情示爱,-93-,问题分析-3,D. 这些东东都呆在什么地方? 月老:婚介所,交友网站 小伙:
41、软件园,住回龙观 姑娘:人民医院,住望京 恋人:情侣路,电影院, 玫瑰花:花店里,小伙手中,姑娘手中,-94-,问题分析-4,E. 这些东东之间有什么关系?,-95-,问题分析-5,F. 这些东东是怎么成事的? 月老牵线搭桥,介绍小伙和姑娘认识 姑娘和小伙一见钟情,成为一对恋人 一对恋人开始拍拖 小伙追求献花,表达对姑娘的爱意 姑娘收到999火红玫瑰,激动得头晕目眩 小伙真心求婚,姑娘以身相许 一对恋人终于走入婚姻殿堂,-96-,上升到面向对象 用面向对象观点观看事物,-97-,用对象观点认识事物,A.这里面有什么东东? 类与对象 B.每个东东看上去是什么样的? 类的属性 C.每个东东能做点什
42、么用? 类的操作 D.这些东东都呆在什么地方? 类的行为、状态、部署 E.这些东东之间有什么关系? 类间的关联 F.这些东东是怎么成事的? 类间的协作(用例实现),-98-,我的一个朋友结婚了-A,A.这里面有什么东东? 对象 类 我 本剧与我无关 我的朋友 小伙 我朋友的妻子 姑娘 月老 恋人 玫瑰 ,A,-99-,我的一个朋友结婚了-B,B.每个东东看上去是什么样的? 每个事物看上去都有自己的属性,在每个属性上都有一个特征值(对象的属性) 小伙:体格,特征值:强壮 姑娘:性情,特征值:温柔 月老:年纪,特征值:较大 恋人:关系,特征值:黏糊 玫瑰花:颜色,特征值:火红,D,A,C,B,E,
43、F,-100-,我的一个朋友结婚了-C,C.每个东东能做点什么用? 每个事物都具备某种能力(对象的操作) 小伙:追求、送花、娶亲 姑娘:爱慕、相许、出嫁 月老:牵线搭桥 玫瑰:示爱,D,A,C,B,E,F,-101-,我的一个朋友结婚了-D,D.这些东东都呆在什么地方? 每个事物都会有它合理的或者必须的空间位置和逻辑位置。尤其当这些位置对事物的行为造成重要影响的时候,表明他们的位置极其重要 本剧列出的位置对故事主要情节没有太大的影响,系统中不予考虑,D,A,C,B,E,F,-102-,我的一个朋友结婚了-E,E.这些东东之间有什么关系? 事物之间的关系非常多,面向对象的观点一般分为主要的三类(
44、关系): 整体-部分关系(聚合和组合),甲是乙的一个组成部分:如恋人和小伙,恋人和姑娘的关系 抽象-具体关系(泛化),甲是乙的一个特例:如人和小伙,人和月老,人和姑娘的关系 协作关系(关联),甲会对乙做点什么:如月老和小伙、姑娘,小伙和玫瑰,小伙和姑娘的关系,D,A,C,B,E,F,-103-,我的一个朋友结婚了-F,F.这些东东是怎么成事的?(协作) 每个事物都会尽量利用伙伴的能力 整体事物的能力依靠部分事物的能力 抽象事物的属性和能力就是具体事物的属性和能力;具体事物除了有抽象事物的属性和能力外,还可以有自己特殊的 事物分工协作,互通信息,共同完成整体的目标 面向对象的分析和设计的核心,D,A,C,B,E,F,-104-,俗语和术语间的对应,-105-,利用UML描述分析过程,完整故事情节的静态模型,-106-,搞清过程的活动图,-107-,拍拖过程活动图,-108-,复述情节的顺序图,初次见面顺序图,-109-,求婚过程顺序图,-110-,理清头绪的通讯图,-111-,定点观察的状态机图,谢谢,