《面向对象分析和设计讲座面向对象方法学.ppt》由会员分享,可在线阅读,更多相关《面向对象分析和设计讲座面向对象方法学.ppt(74页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、上海交通大学计算机系上海交通大学计算机系面向对象分析和设计讲座面向对面向对象分析和设计讲座面向对象方法学象方法学现在学习的是第1页,共74页内容内容w历史回眸历史回眸w开发模式开发模式w传统方法学传统方法学w面向对象方法学面向对象方法学w面向对象基本概念面向对象基本概念w对象组成对象组成w面向对象分析面向对象分析/设计设计/编程编程w信息系统建模信息系统建模现在学习的是第2页,共74页1.历史回眸历史回眸w现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎的图灵于的图灵于1937年提出的图灵机模型。年提出的图灵机模型。随后不到十年,
2、电子随后不到十年,电子计算机就诞生了计算机就诞生了(1945)。(埃尼亚克埃尼亚克)w它当时的主要任务之一就是用于导弹弹道轨迹的计算。当时的软件它当时的主要任务之一就是用于导弹弹道轨迹的计算。当时的软件开发开发(如果可以称之为软件开发的话如果可以称之为软件开发的话)与现在的大不相同。为了与现在的大不相同。为了算一道题,要有人事先把完成加减乘除等各类运算的部件像算一道题,要有人事先把完成加减乘除等各类运算的部件像搭积木那样搭起来,如果换一道题,则要把这些部件分解开搭积木那样搭起来,如果换一道题,则要把这些部件分解开来,根据新的要求重新搭建,效率极低来,根据新的要求重新搭建,效率极低(与现在比与现
3、在比)。现在学习的是第3页,共74页w现代电子计算机的体系结构及实际计算模型来自冯现代电子计算机的体系结构及实际计算模型来自冯.诺依曼的诺依曼的思想。思想。1946年他和他的同事们发现了埃尼亚克的缺陷,发年他和他的同事们发现了埃尼亚克的缺陷,发表了一份报告,提出了程序放入内存,顺序执行的思想,这表了一份报告,提出了程序放入内存,顺序执行的思想,这样,当算一道新题时就只需采取改变计算机中的程序的样,当算一道新题时就只需采取改变计算机中的程序的“软软”的方法。的方法。w英国的科学家维尔克斯实现了冯英国的科学家维尔克斯实现了冯.诺依曼的思想,领导研制了诺依曼的思想,领导研制了“艾克萨克艾克萨克”。w
4、因此,现在的计算机通常被称为冯因此,现在的计算机通常被称为冯.诺依曼计算机。诺依曼计算机。现在学习的是第4页,共74页w早期程序员们使用机器语言来进行编程运算;随着编译技术早期程序员们使用机器语言来进行编程运算;随着编译技术的出现,人们设计了许多更高级别的语言;这些语言摆脱了的出现,人们设计了许多更高级别的语言;这些语言摆脱了机器语言繁琐的细节,更接近于人的自然语言,迅速流行开机器语言繁琐的细节,更接近于人的自然语言,迅速流行开来。来。w据统计,全世界的高级语言起码有几千种,但从可计算性的角度看,据统计,全世界的高级语言起码有几千种,但从可计算性的角度看,它们的计算能力都等价于图灵机。它们的计
5、算能力都等价于图灵机。已经证明,一个计算机语言,已经证明,一个计算机语言,只要除了赋值语句之外,还包括顺序语句,条件语句和循环语句,只要除了赋值语句之外,还包括顺序语句,条件语句和循环语句,它的计算能力即相当于图灵机。它的计算能力即相当于图灵机。这里当然要排除其他技术因素的这里当然要排除其他技术因素的影响,如程序长度,变量个数,数据精度等。影响,如程序长度,变量个数,数据精度等。现在学习的是第5页,共74页w由于图灵机的想法是把问题转化为一步一步按规由于图灵机的想法是把问题转化为一步一步按规则执行的机械求解过程,各种计算机语言也不过则执行的机械求解过程,各种计算机语言也不过都是某种形式语言,因
6、此软件开发的过程实质上都是某种形式语言,因此软件开发的过程实质上就是程序员们对客观世界问题域的形式化的过程。就是程序员们对客观世界问题域的形式化的过程。w程序员们先建立问题的模型程序员们先建立问题的模型(形式化形式化),再用计算,再用计算机语言加以合适的表达,最后再输入计算机里进机语言加以合适的表达,最后再输入计算机里进行计算。行计算。现在学习的是第6页,共74页w最早的高级语言大约诞生于最早的高级语言大约诞生于1945年,是德国人年,是德国人楚译为他的楚译为他的Z-4计算机设计的计算机设计的PlanCalcul,比第,比第一台电子计算机还早几个月;在电子计算机上实一台电子计算机还早几个月;在
7、电子计算机上实现的第一个高级语言是美国尤尼法克公司于现的第一个高级语言是美国尤尼法克公司于1952年研制成功的年研制成功的ShortCode;而真正得到推;而真正得到推广使用,至今仍在流行的第一个高级语言是美国广使用,至今仍在流行的第一个高级语言是美国的计算机科学家巴科斯设计,并于的计算机科学家巴科斯设计,并于1956年首先年首先在在IBM公司的计算机上实现的公司的计算机上实现的FORTRAN语言。语言。现在学习的是第7页,共74页w早期的高级语言主要是应用于科学和工程计算,早期的高级语言主要是应用于科学和工程计算,其代表作有其代表作有FORTRAN和和ALGOL60。计算机进。计算机进入商业
8、和行政管理领域以后,出现了入商业和行政管理领域以后,出现了COBOL和和RPG等便于商界使用的语言。等便于商界使用的语言。w这类语言和数据库技术,图形界面技术这类语言和数据库技术,图形界面技术(可视化可视化编程编程),面向对象的思想及,面向对象的思想及RAD(RapidApplicationDevelopment)的概念相结合,形的概念相结合,形成了一批更方便使用的所谓第四代语言成了一批更方便使用的所谓第四代语言(4GL),如如Powerbuilder,Delphi,VB等。等。现在学习的是第8页,共74页w前一类应用于科学和工程计算的大型语言相对来前一类应用于科学和工程计算的大型语言相对来说
9、更为基础,因而也更为灵活,应用范围更为广说更为基础,因而也更为灵活,应用范围更为广泛。泛。在在FORTRAN,BASIC(学习型学习型)之后,自之后,自70年代以来,模块特征更明显,简单易用,可年代以来,模块特征更明显,简单易用,可靠性强的靠性强的PASCAL异军突起,在世界范围内广泛异军突起,在世界范围内广泛流行。流行。但进入但进入80年代以后,它的地位又逐渐为年代以后,它的地位又逐渐为更实用的更实用的C语言替代。语言替代。到现在,到现在,C语言的地位已语言的地位已相当于一种相当于一种“高级汇编语言高级汇编语言”了。了。现在学习的是第9页,共74页w80年代后期,面向对象的语言开始浮出水面,
10、年代后期,面向对象的语言开始浮出水面,C+借助使用借助使用C语言的庞大程序员队伍,一举建语言的庞大程序员队伍,一举建立了面向对象语言的老大地位。从而立了面向对象语言的老大地位。从而OO的思想的思想正式统治了整个软件开发界。正式统治了整个软件开发界。C+的流行甚至的流行甚至使得美国军方从使得美国军方从80年开始大力扶植的年开始大力扶植的Ada语言还语言还未及推广便胎死腹中了。未及推广便胎死腹中了。现在学习的是第10页,共74页w90年代以后,计算机世界更是发生了天翻地覆的年代以后,计算机世界更是发生了天翻地覆的变化,原先的单机平台让位于变化,原先的单机平台让位于WEB,“网络就网络就是计算机是计
11、算机”,新的语言不仅要是,新的语言不仅要是OO的,的,Visual的,更要是基于的,更要是基于WEB的。的。Java语言借语言借INTERNET的东风,横空出世,一夜红遍天下。的东风,横空出世,一夜红遍天下。w上述这些变化,表面是不同的编程工具的流行,上述这些变化,表面是不同的编程工具的流行,但其背后反映的却是一种更为深刻的认识论的改但其背后反映的却是一种更为深刻的认识论的改变,即你是用何种观点来认识这个世界的?变,即你是用何种观点来认识这个世界的?现在学习的是第11页,共74页2.开发模式(开发模式(Paradigm)w开发模式又称为范型、范例、风范或模式开发模式又称为范型、范例、风范或模式
12、(Pattern)。开发模式定义了。开发模式定义了特定问题和应用的开发过程中将遵循的步骤;特定问题和应用的开发过程中将遵循的步骤;确定将用于表示问题和解的那些成分的类型;确定将用于表示问题和解的那些成分的类型;利用这些成分表示与问题解决有关的抽象;利用这些成分表示与问题解决有关的抽象;直接得到问题的结构。直接得到问题的结构。现在学习的是第12页,共74页w开发模式的选择影响到整个软件开发生存期。就开发模式的选择影响到整个软件开发生存期。就是说,它支配选择:是说,它支配选择:n设计方法设计方法n编码语言编码语言n测试和检验技术测试和检验技术现在学习的是第13页,共74页3.传统方法学传统方法学w
13、传统方法学:瀑布模型,结构化分析传统方法学:瀑布模型,结构化分析/设计设计/编码编码w瀑布模型的缺点:僵化瀑布模型的缺点:僵化n瀑布模型要求:生命周期各阶段间遵守严格的顺序,瀑布模型要求:生命周期各阶段间遵守严格的顺序,实际情况是:软件开发往往在反复实践中完成实际情况是:软件开发往往在反复实践中完成n瀑布模型要求:预先定义并瀑布模型要求:预先定义并“冻结冻结”软件需求,实际软件需求,实际情况是:某些系统的需求的一个逐渐明确的过程,且情况是:某些系统的需求的一个逐渐明确的过程,且预先定义的需求到软件完成时可能已经过时预先定义的需求到软件完成时可能已经过时现在学习的是第14页,共74页wSA-SD
14、-SP技术的缺点:技术的缺点:n本质上是功能分解,以实现功能的过程为中心,而用本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构变化较大,设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好稳定性不好n系统有明确的边界定义,且系统结构依赖于系统系统有明确的边界定义,且系统结构依赖于系统边界的定义,这样的系统不易扩充和修改边界的定义,这样的系统不易扩充和修改n数据与操作分开处理,可能造成软构件对具体应用环数据与操作分开处理,可能造成软构件对具体应用环境的依赖,可重用
15、性境的依赖,可重用性(reusability)较差较差现在学习的是第15页,共74页4.面向对象方法学的起源面向对象方法学的起源w维特跟斯坦是本世纪乃至人类哲学史上最伟大的维特跟斯坦是本世纪乃至人类哲学史上最伟大的哲学家之一。哲学家之一。他生前只于他生前只于1922年出版了一本著年出版了一本著作作逻辑哲学论逻辑哲学论(TractatusLogico-Philosophicus)。在该书中,他阐述了一种世在该书中,他阐述了一种世界观,或者说一种认识世界的观点,这种观点,界观,或者说一种认识世界的观点,这种观点,在六七十年后的今天,终于由一种哲学思想沉淀在六七十年后的今天,终于由一种哲学思想沉淀到
16、技术的层面上来,成为计算机业界的宠儿,这到技术的层面上来,成为计算机业界的宠儿,这就是就是“OO”,Object-Oriented,面向对象。,面向对象。现在学习的是第16页,共74页w维特根斯坦在维特根斯坦在逻辑哲学论逻辑哲学论一书中提出了一书中提出了如下思想:如下思想:n世界可以分解为事实世界可以分解为事实(Theworlddividesintofacts.)事实是由原子事实事实是由原子事实(atomicfacts)组成的。组成的。n一个原子事实是多个对象一个原子事实是多个对象(objects)的组合。的组合。n对象是简单的对象是简单的(基本的基本的)TheObjectissimple。n
17、对象形成了世界的基础。对象形成了世界的基础。现在学习的是第17页,共74页杭杭 州州北北 京京Post-officeMessageSend by method对象对象ObjectObject=数据数据AttributeAttributes:location;employee;+操作操作MethodMethods:send;sell;注意:注意:Object内部的内部的attributes不允许外部用户直接改动,只有当它提供了相应的服务不允许外部用户直接改动,只有当它提供了相应的服务method时,用户才能通过发送时,用户才能通过发送message来提请它执行。来提请它执行。我想把邮局搬到我想把
18、邮局搬到我家门口,多加几个我家门口,多加几个邮递员,邮递员,24小时都开门小时都开门对不起,对不起,本邮局不提供本邮局不提供此类服务此类服务唉,那就先送束花吧唉,那就先送束花吧 Post_office.Send(request,payment)现在学习的是第18页,共74页w特点:尽可能模拟人类习惯的思维方式,即问题域特点:尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统以数据或信息为主线,把数据和处理结合构成统一体一体对象。这时程序不再是一系列工作在数据上对象。这时程
19、序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。的函数集合,而是相互协作又彼此独立的对象的集合。现在学习的是第19页,共74页5.面向对象方法学的要素面向对象方法学的要素现在学习的是第20页,共74页4.1 对象:世界由对象构成对象:世界由对象构成w对象是面向对象开发模式的基本成份。对象是面向对象开发模式的基本成份。w每个对象可用它本身的一组属性和它可以执行的每个对象可用它本身的一组属性和它可以执行的一组操作来定义。一组操作来定义。w属性一般只能通过执行对象的操作来改变。属性一般只能通过执行对象的操作来改变。w操作又称为方法或服务,它描述了对象执行的功操作又称为方法或
20、服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。能,若通过消息传递,还可以为其它对象使用。现在学习的是第21页,共74页4.2 类:物以类聚类:物以类聚w类是一组具有相同数据结构和相同操作的对象的类是一组具有相同数据结构和相同操作的对象的集合。集合。w类的定义包括一组数据属性和在数据上的一组合类的定义包括一组数据属性和在数据上的一组合法操作。法操作。w类定义可以视为一个具有类似特性与共同行为的类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。对象的模板,可用来产生对象。现在学习的是第22页,共74页w在一个类中,每个对象都是类的实例在一个类中,每个对象都
21、是类的实例(Instance),它们都可使用类中提供的函数。,它们都可使用类中提供的函数。w对象的状态则包含在它的实例变量,即实例的属对象的状态则包含在它的实例变量,即实例的属性中。性中。现在学习的是第23页,共74页例例:class Post_office private:loc_type location;emp_type employee;public:void send(req_type request,money_type payment);void sell(int goods,money_type payment);main()Post_office My_PO;req_type
22、 My_request;money_type My_payment;My_PO.Send(My_request,My_payment);现在学习的是第24页,共74页w继承继承(inheritance):类可分层,下层子类与上层:类可分层,下层子类与上层父类有相同特征,称为继承父类有相同特征,称为继承w继承是使用已存在的定义做为基础建立新定义的技术。继承是使用已存在的定义做为基础建立新定义的技术。w新类的定义可以是既存类所声明的数据和新类所增加新类的定义可以是既存类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改的声明的组合。新类复用既存的定义,而不要求修改继承类。继承类
23、。w既存类可当做基类来引用,则新类相应地可当做派生既存类可当做基类来引用,则新类相应地可当做派生类来引用。类来引用。4.3 继承:世界的相似性与多样性继承:世界的相似性与多样性现在学习的是第25页,共74页现在学习的是第26页,共74页w使用继承设计一个新类,可以视为描述一个新的使用继承设计一个新类,可以视为描述一个新的对象集,它是既存类所描述对象集的子集合。对象集,它是既存类所描述对象集的子集合。w这个新的子集合可以认为是既存类的一个特殊化。这个新的子集合可以认为是既存类的一个特殊化。Quadrilateral类是类是Polygon类的特殊化。类的特殊化。Quadrilateral是限制为四
24、条边的多边形。我们是限制为四条边的多边形。我们还可以进一步地把类还可以进一步地把类Quadrilateral特殊化为特殊化为Rectangle。现在学习的是第27页,共74页w类类Quadrilateral的界面可以等同于类的界面可以等同于类Polygon的界面,而的界面,而Rectangle类的界面又与类的界面又与Quadrilateral类的界面相同。类的界面相同。w新类的界面还可以被看做是既存类界面的一个扩新类的界面还可以被看做是既存类界面的一个扩充界面。例如,从一个既存的车辆类派生的四轮充界面。例如,从一个既存的车辆类派生的四轮驱动车类可能不仅是车辆类子集合定义的特殊化,驱动车类可能不
25、仅是车辆类子集合定义的特殊化,而且还可能在新类的界面中引入新的能力。而且还可能在新类的界面中引入新的能力。现在学习的是第28页,共74页现在学习的是第29页,共74页w在类的继承层次中,在类的继承层次中,Quadrilateral的实际参数的实际参数可以替换可以替换Polygon的形式参数。的形式参数。w类类Quadrilateral的界面与类的界面与类Polygon的界面是的界面是相容的相容的wQuadrilateral的界面可响应的界面可响应Polygon界面的所界面的所有消息。有消息。现在学习的是第30页,共74页4.4 消息:合作之道消息:合作之道w消息消息(message):对象间只
26、能通过发送消息进行:对象间只能通过发送消息进行联系,外界不能处理对象的内部数据,只能通过联系,外界不能处理对象的内部数据,只能通过消息请求它进行处理(如果它提供相应消息的话)。消息请求它进行处理(如果它提供相应消息的话)。现在学习的是第31页,共74页w消息是一个对象与另一个对象的通信单元,是要消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。求某个对象执行类中定义的某个操作的规格说明。发送给一个对象的消息定义了一个方法名和一个发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。参数表(可能是空的),并指定某一个对象。w一个对象
27、接收的消息则调用消息中指定的方法,一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。并将形式参数与参数表中相应的值结合起来。现在学习的是第32页,共74页OOM=Object +Class +Inheritance +Communication with messages现在学习的是第33页,共74页w传统方法:面向过程设计,以计算为核心,数据传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解与操作分离,不易理解wOOM:以:以object为核心,强调对现实概念的模为核心,强调对现实概念的模拟而不强调算法。拟而不强调算法。“面向对象方法学的基本原则,
28、面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件开发出尽可能直观、自然地表现求解方法的软件系统系统”。nClass:由特殊到一般的归纳:由特殊到一般的归纳(induction)nInheritance:由一般到特殊的演绎:由一般到特殊的演绎(deduction)4.4 传统方法与传统方法与OO的比较的比较现在学习的是第34页,共74页w传统方法:结构依赖于功能,不稳定。传统方法:结构依赖于功能,不稳定。wOOM:以:以object模拟实体,需求变化不会引起结构的整体变化,模拟实体,需求变化不
29、会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。因为实体相对稳定,故系统也相应稳定。w传统方法:通过建立标准函数库来重用软构件。但标准函数缺少传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的必要的“柔性柔性”,难以适应不同场合的不同需要,难以适应不同场合的不同需要wOOM:一个:一个class所有的所有的instances都可重用它的代码;由都可重用它的代码;由inheritance派生出的新的派生出的新的class可重用其父类的代码,并且可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。可以修改、扩充而不影响其父类的使用。现在学习的是第35页,共74页w传统
30、方法:可维护性是最令人头痛的问题。传统方法:可维护性是最令人头痛的问题。wOOM:从以下几方面改善了可维护性:从以下几方面改善了可维护性n稳定性好:软件功能需求的变化不牵动全局,只需局稳定性好:软件功能需求的变化不牵动全局,只需局部修改;部修改;nClass独立性强:只要修改不涉及独立性强:只要修改不涉及class的对外接口,的对外接口,则内部修改完全不影响外部调用;则内部修改完全不影响外部调用;nInheritance和多态性和多态性(polymorphism)使其很容易被使其很容易被修改和扩充;修改和扩充;n容易理解;容易理解;n容易测试、调试。容易测试、调试。有这一条就什么都好办了!有这
31、一条就什么都好办了!这一点还可商榷这一点还可商榷现在学习的是第36页,共74页wOOM并不是减少了开发时间,而是通过提高可并不是减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。等,从长远角度改进了软件的质量。wOOM与与Prototyping结合使用效果好。结合使用效果好。现在学习的是第37页,共74页6.对象概念对象概念现在学习的是第38页,共74页f1 f2f3fifnfi(X)Sgi(X,S)S输输出出输输出出1、Object:=ID+Method+Attribute+Message现在学习
32、的是第39页,共74页w特点:特点:以数据为中心,不设与数据无关的操作;以数据为中心,不设与数据无关的操作;Object主动处理而不主动处理而不被动地等待被处理,外部只能通被动地等待被处理,外部只能通过过message请求操作;请求操作;具有黑盒性:外部操作时,无须知道该具有黑盒性:外部操作时,无须知道该object内部的数内部的数据结构及算法;据结构及算法;具有并行性:不同具有并行性:不同object各自独立地处理自身数据,彼各自独立地处理自身数据,彼此间仅通过传递此间仅通过传递message完成通信;完成通信;模块独立性好:内聚强(模块独立性好:内聚强()、耦合松()、耦合松()现在学习的
33、是第40页,共74页2、Class:具有相同数据和相同操作的一组对象;:具有相同数据和相同操作的一组对象;3、Instance:某个:某个class描述的具体对象;描述的具体对象;4、Message:=object_ID.method_ID(parameter(s);5、Method:object能做的操作,亦称为能做的操作,亦称为service、responsibility,在在 class 中须定义相应的代码;中须定义相应的代码;6、Attribute:object 的固有数据;的固有数据;7、Inheritance:子类自动共享父类的:子类自动共享父类的attributes 和和meth
34、ods,而不,而不必重复定义。必重复定义。现在学习的是第41页,共74页Class 中国人中国人中国人中国人 Attributes中国人中国人 Methods张山张山(instance)Class 中国人中国人 张山的张山的 AttributesClass 上海人上海人(子类子类)上海人上海人 Attributes 上海人上海人 Methods Class 中国人中国人李士李士(instance)中国人李士的中国人李士的 Attributes上海人李士的上海人李士的 Attributes Class 上海人上海人例:例:现在学习的是第42页,共74页w特点:特点:n若上海人的若上海人的meth
35、ods中有与中国人的同名,则李士中有与中国人的同名,则李士执行该执行该method时以上海人为准,不执行中国人中定时以上海人为准,不执行中国人中定义的同名义的同名method。n传递性传递性(transitivity):AB、BCAC,一个一个class继承了上层全部继承了上层全部classes的一切性质。的一切性质。n一个子类只一个子类只有有一一个父类称为单个父类称为单继继承承(singleinheritance),一个子类可有多个父类称为多重继承一个子类可有多个父类称为多重继承(multipleinheritance).“低层性质低层性质override高层性质高层性质”“县官不如现管县官
36、不如现管”现在学习的是第43页,共74页注意:注意:multiple inheritance 在定义中应避免二义性(ambiguity),即二个父类中定义重名,但各具不同性质。例:例:FemaleChineseScholarICardDeckGraphicalObjectGraphicalDeckMethod:Draw:=take a card from a deckMethod:Draw:=displaya graphical objectMethod:Draw:=?例:例:现在学习的是第44页,共74页w8Polymorphism:不同层次的不同层次的classes可共享一个可共享一个me
37、thod名,但按各自的方式来实现这种名,但按各自的方式来实现这种method。C+中定义了虚函数中定义了虚函数(virtualfunction)来实现这一功能。即一个来实现这一功能。即一个method有多个版本,运行时才决定执行有多个版本,运行时才决定执行哪一个。故亦称为动态联编哪一个。故亦称为动态联编(dynamicbinding)或滞后联编或滞后联编(latebinding)修改与扩充可以很容易地通过派生子类来修改与扩充可以很容易地通过派生子类来完成完成 Which formdo youneed,master?AladdinsGenie现在学习的是第45页,共74页double avg(c
38、onst double a,int size);double avg(const int a,int size);double avg(const double a,int size);double sum=0.0;for(int i=0;i size;+i)sum+=ai;return(sum/size);double avg(const int a,int size);int sum=0;for(int i=0;i size;+i)sum+=ai;return(double)sum/size);main()int k3=1,2,3 ;double x3=1.1,2.2,3.3 ;cout
39、avg(k,3)“int average n”;cout avg(x,3)“double average n”;9、Overloading Function(or parameter)overloading:不同函数共用不同函数共用一个名字,而一个名字,而调用参数的特调用参数的特征不同。征不同。例:例:现在学习的是第46页,共74页 Operator overloading:同一运算符同一运算符(operator)作用于不同类型的操作数作用于不同类型的操作数(operand)上面。上面。在编译在编译(compile)阶段就决定了使用类型及执行代阶段就决定了使用类型及执行代码,故亦称为静态联编码
40、,故亦称为静态联编(staticbinding)或先前或先前联编联编(earlybinding)。现在学习的是第47页,共74页7.面向对象的分析面向对象的分析/设计设计/编程编程现在学习的是第48页,共74页7.1 概述概述w面向对象的分析(面向对象的分析(OOA)n分析问题论域,找出问题解决方案,发现对象,分析分析问题论域,找出问题解决方案,发现对象,分析对象的内部构成和外部关系,建立软件系统的对象模对象的内部构成和外部关系,建立软件系统的对象模型型w面向对象的设计(面向对象的设计(OOD)n根据已确定的系统对象模型,运用面向对象技术,进根据已确定的系统对象模型,运用面向对象技术,进行系统
41、软件设计行系统软件设计w面向对象的编程(面向对象的编程(OOP)现在学习的是第49页,共74页7.2 面向对象的分析面向对象的分析w问题论域分析问题论域分析n业务范围,业务规则,业务处理过程,确定系统的责任,范围和边界,确业务范围,业务规则,业务处理过程,确定系统的责任,范围和边界,确定系统的需求定系统的需求w发现和定义对象和类发现和定义对象和类n识别对象和类,确定它们的内部特征:属性和操作,这是一个抽象过程识别对象和类,确定它们的内部特征:属性和操作,这是一个抽象过程w识别对象的外部联系识别对象的外部联系n对象与对象,类与类之间的各种外部联系,包括一般与特殊,整体与部分,实例连接对象与对象,
42、类与类之间的各种外部联系,包括一般与特殊,整体与部分,实例连接(关联),消息连接等(关联),消息连接等w建立系统的静态结构模型建立系统的静态结构模型n对象类图和对象图,系统与子系统结构图等,绘制相应的图对象类图和对象图,系统与子系统结构图等,绘制相应的图w建立系统的动态行为模型建立系统的动态行为模型n对象之间的交互关系等对象之间的交互关系等现在学习的是第50页,共74页7.3 面向对象的设计面向对象的设计w设计对象和类设计对象和类n具体设计对象和类的属性,操作,设计对象与类的各种外部联系的实现结具体设计对象和类的属性,操作,设计对象与类的各种外部联系的实现结构,设计消息与事件的内容、格式等构,
43、设计消息与事件的内容、格式等w设计系统结构设计系统结构n设计组件与子系统,以及它们的相互的静态和动态关系设计组件与子系统,以及它们的相互的静态和动态关系w设计问题论域子系统设计问题论域子系统n负责领域的业务服务负责领域的业务服务w设计人机交互系统设计人机交互系统w设计数据管理子系统设计数据管理子系统w设计任务管理子系统设计任务管理子系统n进程管理进程管理w设计优化,提高系统性能设计优化,提高系统性能现在学习的是第51页,共74页w详细的面向对象设计与语言有关。详细的面向对象设计与语言有关。w一般地,所有的语言都可以完成面向对象实现,一般地,所有的语言都可以完成面向对象实现,但某些语言能够提供更
44、丰富的语法,能够显式地但某些语言能够提供更丰富的语法,能够显式地描绘在面向对象分析和面向对象设计过程中所使描绘在面向对象分析和面向对象设计过程中所使用的表示法。用的表示法。7.4 面向对象的编程面向对象的编程现在学习的是第52页,共74页w过程型语言只直接支持过程抽象过程型语言只直接支持过程抽象w可以增加数据抽象及封装可以增加数据抽象及封装(如利用结构化设计的信如利用结构化设计的信息隐蔽模块息隐蔽模块)w无法明确地表示继承性。也无法明确支持整体与无法明确地表示继承性。也无法明确支持整体与部分、类与成员、对象与属性等关系。部分、类与成员、对象与属性等关系。w具有面向对象特性的过程型语言可以成为一
45、种实具有面向对象特性的过程型语言可以成为一种实用的且可行的语言。用的且可行的语言。现在学习的是第53页,共74页w基于对象的语言,也叫做面向软件包的语言,如基于对象的语言,也叫做面向软件包的语言,如Ada等,能够直接支持过程抽象、数据抽象、封等,能够直接支持过程抽象、数据抽象、封装和对象与属性关系装和对象与属性关系w它无法表示继承性,也无法表示类与成员、整体它无法表示继承性,也无法表示类与成员、整体与部分的关系。与部分的关系。w基于对象语言的面向对象设计代表一种可行的开基于对象语言的面向对象设计代表一种可行的开发方法。发方法。现在学习的是第54页,共74页w面向对象的程序设计语言,包括面向对象
46、的程序设计语言,包括C+、Smalltalk、Objective-C、Actor、Eiffel等,等,都直接支持过程抽象、数据抽象、封装、继承、都直接支持过程抽象、数据抽象、封装、继承、以及对象与属性、类与成员关系。以及对象与属性、类与成员关系。w它们不明确地支持整体与部分关系,但可以方便它们不明确地支持整体与部分关系,但可以方便地表示组装对象。地表示组装对象。现在学习的是第55页,共74页8.信息系统建模信息系统建模现在学习的是第56页,共74页8.1 为什么要建模为什么要建模w今天的计算机软件系统今天的计算机软件系统n是产品,而非是产品,而非“计算机程序计算机程序”。n软件系统作为产品的特
47、征软件系统作为产品的特征w开发者和使用者是脱离的。开发者和使用者是脱离的。w软件产品为用户提供功能软件产品为用户提供功能w软件产品具有质量的概念软件产品具有质量的概念w软件产品,应具备完备的用户手册技术文档软件产品,应具备完备的用户手册技术文档n软件产品的生产过程具有工业化生产的特点软件产品的生产过程具有工业化生产的特点开发团队协同工作开发团队协同工作软件产品需要使用工具软件产品需要使用工具技术是可复用技术是可复用质量必须稳定的质量必须稳定的不应在不同版本的软件之间产生质量不稳定的现象不应在不同版本的软件之间产生质量不稳定的现象现在学习的是第57页,共74页w但是但是,和其它传统的、成熟的工业
48、生产行业相比,和其它传统的、成熟的工业生产行业相比,软件生产软件生产实际上仍处于幼稚阶段实际上仍处于幼稚阶段w举一个成熟的工业化生产的例子:电子产品制造举一个成熟的工业化生产的例子:电子产品制造n首先首先,确定产品性能指标确定产品性能指标如:收音机如:收音机波段波段扬声器扬声器频率范围频率范围等等等等现在学习的是第58页,共74页w然后然后n设计电原理图设计电原理图n构成:构成:w集成电路符号集成电路符号w晶体管符号晶体管符号w电阻电容符号电阻电容符号w标注符号标注符号n描述描述电气连接关系电气连接关系可以了解到各关键信号的电气指标可以了解到各关键信号的电气指标:信号的频率信号的频率,电平电流
49、电平电流,等等。等等。现在学习的是第59页,共74页w电原理图是电子产品生产制造的基础。电原理图是电子产品生产制造的基础。w电子产品定型并投入生产后电子产品定型并投入生产后n设计资料被作为技术资料存档设计资料被作为技术资料存档产品需要更新换代产品需要更新换代技术复用技术复用w软件生产行业,情形有所不同软件生产行业,情形有所不同n首先,写系统分析报告首先,写系统分析报告w由文字和示意性的框图构成由文字和示意性的框图构成n然后,提出设计报告然后,提出设计报告简单的简单的文本和非标准图形组成文本和非标准图形组成现在学习的是第60页,共74页w报告评审通过后报告评审通过后n编码、调试、测试、发行编码、
50、调试、测试、发行n在大多数情况下,这时的工作已经和报告的内容脱钩在大多数情况下,这时的工作已经和报告的内容脱钩w这是由于开发和项目计划方面的压力这是由于开发和项目计划方面的压力n软件产品发行,软件产品发行,开发项目结束后,这些报告已不具备参考价值开发项目结束后,这些报告已不具备参考价值w因为此时软件设计报告已经和软件的实际实现脱节,无法反因为此时软件设计报告已经和软件的实际实现脱节,无法反映软件产品的实际原理和结构。映软件产品的实际原理和结构。n软件产品需要更新换代时软件产品需要更新换代时软件新版本的开发队伍所面对的只是老版本的软件产品本身软件新版本的开发队伍所面对的只是老版本的软件产品本身加