《面向对象技术概论.ppt》由会员分享,可在线阅读,更多相关《面向对象技术概论.ppt(62页珍藏版)》请在三一办公上搜索。
1、面向对象技术第一章 面向对象技术概论,课程目标,对面向对象思想和理论有初步的理解掌握面向对象编程的基本概念掌握面向对象分析与设计的基本概念能够阅读和理解UML常用图形符号,Applying UML and Patterns-An Introduction to Object-Oriented Analysis and DesignTHE BEST Object Orientated Analysis and Design tutorial book(A)在 OOA/D、迭代式开发和 UML 方面是全球最畅销的书籍之一,已被翻译成多种语言并在业界和院校中被广泛使用,课程参考书目(1),Craig
2、 Larman,“People often ask me which is the best book to introduce them to the world of OO design.Ever since I came across it,Applying UML and Patterns has been my unreserved choice.”-Martin Flower,author,UML Distilled and Refactoring,参考书目(2),推荐参考资源,书籍1、The Unified Software Development Process(统一软件开发过
3、程)Jacobson等著,周伯生等译)机械工业出版社2、The Unified Modeling Language User Guide(UML用户指南)Jacobson等著,周伯生等译)机械工业出版社3、The Unified Modeling Language Reference Manual(UML参考手册)同上4、用J2EE和UML开发Java企业级应用程序 Khawar等著,康博译)清华大学出版社网站1、http:/2、http:/3、http:/4、http:/,面向对象方法基础,面向对象方法的含义 在软件开发中,采用与人的思维过程相一致的,直接面向客观事物,面向所要解决的需求问题
4、,并用一套对象、类、继承、消息等机制开发软件的系统性方法。,是一种看待计算机软件系统的观点是一种系统分析和设计的思想是一种编程方法是一组设计模式是一种编程语言设计思路是实践者的日常工作是媒体和市场人员口中的“万灵丹”,面向对象方法的特点(1)直接面向客观事物与人类思维方法一致,客观对象,面向对象方法的特点(2)采用一致连贯的软件模型,面向对象方法的特点(3)提高软件可重用性和效率,老软件:,新软件:,框架 方案 程序 类 文档,继 承,对象的概念,对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。对象既可以描述客观存在的事物,也可以表示由人主观构造的抽象观念。,对象在三个世界
5、中的含义,软件中对象由一组属性和操作组成。,软件中的对象及性质(1),例如:,软件中的对象及性质(2),Public class Employee private String name;private EmployeeDate birthDate;private EmployeeDate hireDate;public Employee(Sting name,int bYYYY,int bMM,int bDD,int hYYYY,int hMM,int hDD)this.name=name;birthDate=new EmployeeDate(bYYYY,bMM,bDD);hireDate=
6、new EmployeeDate(hYYYY,hMM,hDD);public String toString()return name+”birthday:”+birthDate.toString()+“hired:”+hireDate.toString();,雇员对象,Java编写的“雇员对象”程序,类用来描述具有相同性质的一组对象。,类的概念,识别类,类是一组对象,这些对象具有共同的属性和共同的行为类是创建对象的模板,类可捕获对象的本质对象是类的实例化,简化表示:规范表示:缩略表示:,类名,类的表示,关联的概念:本指事物之间存在的固有的牵连关系,在面向对象方法中,是对具有共同结构特征、关系
7、和语义的链接描述。关联的表示:,类关系-关联(1),关联的要素 关联名 角色 多重性 关联的导航,*,类关系-关联(2),关联类,关联类,类关系-关联(3),关联的种类 一元关联 二元关联 多元关联,类关系-关联(4),聚合关系 聚合表示有多个部分聚集成为整体,表示部分构成整体的一种松散的关系。组合关系 组合表示部分与整体存在密切组成关系。,类关系-聚合与组合,泛化的含义 与继承的含义相同,表示一般和特殊实体之间的关系。泛化的表示,类关系-泛化,依赖的含义 表示两个模型元素之间的语义联系,指一个模型模型元素发生变化,必然影响到另外一个模型元素。依赖的表示,依赖,类关系-依赖,面向对象技术研究内
8、容,面向对象的编程(OOP:Object-Oriented Programming)当今最流行的编程语言:Java、C#面向对象的分析与设计(OOAD:Object-Oriented Analysis and Design)当今最流行的建模语言:UML(Unified Modeling Language),L.M.Northrop:尽管面向对象语言正取得令人振奋的发展,但编程并不是软件开发问题的主要根源。需求分析与设计问题更为普遍并且更值得解决。因此面向对象开发技术的焦点不应该只对准编程阶段,而应更全面地对准软件工程的其他阶段。面向对象方法真正意义深远的目标是它适合于解决分析与设计期间的复杂性
9、并实现分析与设计的复用。面向对象的开发不仅仅是编程,必须在整个软件生命周期采用一种全新的方法,这一观点已被人们所接受。软件工程百科全书纽约,1994,面向对象的含义(1),面向对象中有几个非常重要的概念:封装(encapsulation)信息/实现的隐藏(information/implementation hiding)状态保持(state retention)对象标识(object identity)消息(message)类(class)继承(inheritance)多态性(polymorphism)一般性(generality),面向对象的含义(2),封装,将属性和操作包装成一个单元,使
10、得对状态的访问和修改只能通过封装提供的接口进行。信息/实现的隐藏,将某些属性或方法限制在封装内部使用,限制外部的可见性。状态保持,对象能够保持状态,可以用于后续的处理。对象标识,每个对象可以作为软件实体被标识和处理,每个对象都有一个对象标识符(object identifier OID)。消息,对象间发送请求的载体。,面向对象的含义(3),类,类是对象的类型(模版),对象是类的实例。继承,子类隐式使用超类(或父类)的属性和操作。多态性,子类覆盖(overriding)父类的方法,它和重载(overloading)的区别在于重载是在同一个类中定义,利用参数的不同来进行动态绑定(dynamic b
11、inding)。一般性,类的定义是参数化的或模版化的,提高了定义的通用性。,面向对象技术发展(1),里程碑1:Simula 67(1962-1967,挪威)Ole-Johan Dahl和Kristen Nygaard 在挪威奥斯陆国家计算中心(NCC)设计实现.公认的世界上第一种面向对象语言基本思想,面向对象技术发展(2),里程碑2:Smalltalk(1970,施乐保罗阿托)Alan Kay设计实现第一个成熟的面向对象语言,为开发GUI而设计实用化,预言历史的最佳方式是创造历史-Alan Kay,Smalltalk范例,“无消息模式方法,宜写算法”|s c f k|“定义了四个临时变量”fA
12、rray new:26.“f是Array实例长度26”sPrompter prompt:enter line default:“s是Prompter的实例,装输入字串”1 to:26 do:i|f at:i put:0.1 to:size do:i|c(s at:i)asLowerCase.C isLetter ifTrue:kc asciiValue-a asciiValue+1.F at:k put:(f at:k)+1.f,面向对象技术发展(3),里程碑3:ADT,Ada 83,基于对象(1977-1983)编程理论界在结构化运动中提出ADT思想,以N.Wirth和Liskov为代表美国
13、防部军用开发语言评选,Ada被指定为强制性军用编程语言,实际上已经进入“基于对象”阶段,Ada Lovelace是英国著名诗人拜伦的女儿,世界上第一个程序员。Ada语言以她的名字命名,面向对象技术发展(4),里程碑4:C+(1982,贝尔实验室)第一个被工业界广泛接受的支持面向对象能力的语言,创造者Bjarne Stroustrup动机是给C添加一些Simula特性,以完成当时刚刚出现的大规模复杂任务商业化,Bjarne Stroustrup,面向对象技术发展(5),里程碑5:MS-Windows(1985,微软)第一个被广泛使用的GUI系统软件,它使面向对象技术的使用不可阻遏,1985年出品
14、的Windows 1.0产品,1987年出品的Windows 2.0界面,面向对象技术发展(6),里程碑6:Booch Method(1991,G.Booch)第一个被广泛接受使用的面向对象建模方法,Booch代表作的第三版,面向对象技术发展(7),里程碑7:设计模式出版(1995,GoF)掀起模式运动长盛不衰的经典23种设计模式不会用设计模式的程序员是低层次的软件人才,他们只会写code罢了,面向对象技术发展(8),里程碑8:Java语言推出(1995,Sun)第一个被广泛使用的面向对象语言,J2EE是目前最成功的面向对象框架。,面向对象技术发展(9),里程碑9:UML被OMG接纳为标准(1
15、997)面向对象方法学之战结束,面向对象技术发展(10),里程碑10:微软.NET计划(2000)图形界面集成开发工具快速开发开发中小型系统的首选,面向对象技术发展历史总结,60年代后期:Simul67,基本思想70年代后期:Smalltalk80,实用化80年代:理论基础,C+等,商业化90年代:面向对象与设计方法学B.H.Sellers等提出喷泉模型G.Booch提出面向对象开发方法等P.Coad和E.Yourdon提出OOA和OODJacobson提出OOSE1997年:UML,面向对象程序设计语言,“方法大战”,面向对象技术发展(现状),现状OO成为最重要的软件开发方法OO在GUI、模
16、拟系统、游戏开发、应用框架、软件构件化领域大显身手Java、UML 与 RUP构件技术(CORBA、COM、EJB、.Net)类库与设计模式,面向对象技术发展(未来),未来OO的形式化与自动化OO构件、设计模式的丰富将进一步提高软件开发的效率和质量软件开发人员必须从 Think Procedurely转变为 Think Object-Orientedly,为什么对面向对象方法感兴趣?(1),面向对象方法的主要优点:自然性 追求软件系统对现实系统的直接模拟,尽量实现将现实世界中的事物直接映射到软件系统的解空间中。软件复用 可复用性(可重用性)reusebility可扩展性可管理性,可复用性(可重
17、用性)面向对象技术允许复用的不仅仅是代码,通过面向对象技术,我们可以复用需求、分析、设计、测试计划、用户界面以及体系结构等等,事实上,软件工程生存期中的每个部分都可以复用。,为什么对面向对象方法感兴趣?(2),传统系统分析:面向功能,把系统看成 一组功能OOA:把问题当作一组相互作用 的实体,并确定实体间关系,为什么对面向对象方法感兴趣?(3),面向对象技术是一个有全新概念的开发模式,其特点是:(1)方法是对软件开发过程所有阶段进 行综合考虑而得到的;(2)从生存期的一个阶段到下一个阶段 所使用的方法与技术具有高度的连 续性;(3)将OOA(分析)、OOD(设计)、OOP(实现)集成到生存期的
18、相应阶段.,为什么对面向对象方法感兴趣?(4),开发方法的组合,OO方法的开发过程,OO方法改进了在生存期各个阶段间的界面,因为生存期各个阶段开发出来的“部件”都是类,在面向对象生存期的各个阶段对各个类的信息进行细化,类成为分析、设计和实现的基本单元。,对象模型 对象模型表示静态的、结构的系统数据的性质。对模拟客观世界实体的对象以及对象彼此之间的关系的映射,描述了系统的静态结构。OO方法强调围绕对象而不是功能来构造系统。,对象(object),现实世界中某个具体的物理实体或概念在计算机逻辑中的映射和体现。对象具有的含义:在现实世界中:是客观世界中的一个实体 在面向对象程序中:表达成计算机可理解
19、、可操纵、具有一定属性和行为的对象 在计算机世界中:是一个可标识的存储区域,面向对象方法是一种运用对象、类、继承、封装、聚合、消息传递、多态性等概念来构造系统的软件开发方法。,面向对象=对象+类+继承+消息通信,面向对象的主要特征:封装性(Encapsulation)继承性(Inheritance)多态性(Polymorphism),类(class),具有共同属性和行为的对象的抽象类与对象的关系类是对象的抽象对象是类的实例,类,对象,对象、实体与类,对象,实体,类,抽象数据类,计算机世界,现实世界,计算机逻辑的实现,影射,抽象,实例化,抽象,概念世界,封装,封装是软件开发方法的重要原则,有两个
20、涵义:把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(对象)。尽可能隐蔽对象的内部细节(信息隐蔽),传统方法数据与过程是分离的,过程1,输入,输出,过程2,过程3,数据实体,属于该对象的数据,对象,处理数据的方法,消息,消息,对象把数据和处理数据的方法封状成一个单元,传统方法和面向对象方法的比较,传统方法系统是过程的集合过程与数据实体交互过程接受输入并产生输出,面向对象方法系统是交互对象的集合对象与人或其它对象交互对象发送与响应消息,继承(继承性inheritance),继承性是父类和子类之间共享数据和方法的机制继承性具有传递性继承性包括单继承和多重继承,子类,继承部分,增加
21、部分,父类,共性部分,继承性作用,使软件系统具有开放性 更好地进行抽象与分类 增强代码的重用率,多态(多态性),不同的对象收到同一消息可产生完全 不同的结果,这一现象叫做多态多态的效果 用户发送一个通用的消息,而实现的细节则由接收对象自行决定实现机制:重载(override),多态性的作用,增强了操作的透明性,可理解性和可扩展性 增强了软件的灵活性和重用性,消息(message),消息 对象之间相互请求或相互协作的途径,是要求某个对象执行某个功能操作的规格说明消息内容 通常包含接收方及请求接收方完成的功能信息发送方 发出消息,请求接收方响应接收方 收到消息后,经过解释,激活方法,予以响应,面向对象技术(总结),客观事物(问题域),计算机,自然语言,机器语言,高级语言,语言鸿沟,需求分析,总体设计,详细设计,测试,编程,分析与设计的鸿沟,传统的软件开发方法,面向对象的软件开发方法,OO语言,作业,1.什么是对象?什么是类?2.什么是面向对象?什么是面向对象方法?3.面向对象的3个主要特征是什么?分别说明其含义。4.类之间的关系有哪4种?分别说明其含义,举例说明。,