面向对象程序设计第1讲java.ppt
2022/10/291面向对象程序设计面向对象程序设计张璞张璞重庆邮电大学计算机学院重庆邮电大学计算机学院2022/10/292课程概述课程概述面向对象方法的主要思想、基本概念面向对象方法的主要思想、基本概念用用Java这门面向对象程序设计语言来这门面向对象程序设计语言来实现用面向对象分析与设计方法建立实现用面向对象分析与设计方法建立的系统模型的系统模型面向对象设计(面向对象设计(OOD)的基本原则及)的基本原则及设计模式设计模式UML/OOA/OOD 的简介的简介2022/10/293课程概述课程概述2022/10/294教材教材Java面向对面向对象程序设计象程序设计(第(第2版),版),耿祥义、张耿祥义、张跃平遍著,跃平遍著,清华大学出清华大学出版社版社2022/10/295OOP参考文献参考文献2022/10/296参考文献参考文献面向对象的面向对象的系统分析系统分析(第(第2版),版),邵维忠,杨邵维忠,杨芙清著,清芙清著,清华大学出版华大学出版社社2022/10/297参考文献参考文献面向对象的面向对象的系统设计,系统设计,邵维忠等著,邵维忠等著,清华大学出清华大学出版社版社2022/10/298参考文献参考文献UML用户指南用户指南 作者作者 Booch等等 译者译者:邵维忠邵维忠 等等2022/10/299参考文献参考文献原书名:原书名:The Essence of Object-Oriented Programming with Java and UML 原出版社:原出版社:Addison Wesley 作者:作者:Bruce E.Wampler 译者:译者:王海鹏王海鹏 丛书名:丛书名:软件工程系列教材软件工程系列教材 出版社:人民邮电出版社出版社:人民邮电出版社2022/10/2910参考文献参考文献设计模式:可复用设计模式:可复用面向对象软件的基面向对象软件的基础础(美)(美)Erich Gamma 等等 译者:译者:李英军李英军 等等译译2022/10/2911本讲总体纲要本讲总体纲要Java简介简介开发环境的建立开发环境的建立第一个第一个 Java程序程序面向对象技术基本概念面向对象技术基本概念面向对象方法的发展史及现面向对象方法的发展史及现状简介状简介2022/10/2912Java语言语言?Java语言是一种可以编写跨平台应用语言是一种可以编写跨平台应用软件的软件的面向对象面向对象的程序设计语言的程序设计语言目前已经在各个领域得到广泛应用。目前已经在各个领域得到广泛应用。2022/10/2913 Java的地位的地位 语言地位:一门很好的面向对象语言,主流编程语言网络地位:Java的平台无关性让Java成为编写网络应用程序的佼佼者,而且Java也提供了许多以网络应用为核心的技术,使得Java特别适合于网络应用软件的设计与开发需求地位:良好的就业前景 2022/10/29142022/10/29152022/10/2916 Java语言语言 特点特点1.简单性:简单性:Java的语法比的语法比 C/C+简单简单2.网络特性网络特性3.面向对象面向对象4.平台无关性:平台无关性:在操作系统之上再提供一个Java运行时环境(由Java虚拟机、类库以及一些核心文件组成)只要平台提供了Java运行环境,Java编写的软件就能在其上运行5.安全性安全性6.多线程性多线程性2022/10/2917Java历史简介历史简介1)由由Sun公司的詹姆斯公司的詹姆斯高斯林高斯林(James Gosling)等人于)等人于1990年代初年代初开发。它最初被命名为开发。它最初被命名为Oak,是用于,是用于家用电器等小型系统的编程语言,家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯烤面包机等家用电器的控制和通讯问题。问题。James Gosling,“绿色项目绿色项目”2022/10/2918Java历史简介历史简介2)由于这些智能化家电的市场需求没有预由于这些智能化家电的市场需求没有预期的高,期的高,Sun放弃了该项计划。就在放弃了该项计划。就在Oak几几近失败之时,随着互联网的发展,近失败之时,随着互联网的发展,Sun看到看到了了Oak在计算机网络上的广阔应用前景,于在计算机网络上的广阔应用前景,于是改造了是改造了Oak,在,在1995年年5月以月以“Java”的的名称正式发布了。名称正式发布了。Java伴随着互联网的迅伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程猛发展而发展,逐渐成为重要的网络编程语言。语言。2022/10/29192022/10/2920Java已发展成为计算平台已发展成为计算平台2022/10/29212022/10/2922三种平台简介三种平台简介 目前Java平台主要分为下列3个版本:(1)Java SE(曾称为J2SE)称为Java标准版或Java 标准平台。(2)Java EE(曾称为J2EE)称为Java企业版或Java企业平台。(3)Java ME(曾称为J2ME)称为Java微型版或Java小型平台。2022/10/29232022/10/2924下载与安装指南下载与安装指南例如例如,安装安装:Java SDK,Standard Edition版本版本操作系统操作系统2022/10/2925本讲总体纲要本讲总体纲要Java简介简介开发环境的建立开发环境的建立第一个第一个 Java程序程序面向对象技术基本概念面向对象技术基本概念面向对象方法的发展史及现面向对象方法的发展史及现状简介状简介2022/10/2926建立建立Java开发环境开发环境1)下载下载J2SE安装程序安装程序2)运行运行J2SE安装程序,安装安装程序,安装J2SE3)设置环境变量:设置环境变量:运行路径运行路径(path)类路径类路径(classpath,初学时不必设置,初学时不必设置)4)下载下载J2SE的在线帮助文档的在线帮助文档2022/10/2927本讲总体纲要本讲总体纲要Java简介简介开发环境的建立开发环境的建立第一个第一个 Java程序程序面向对象技术基本概念面向对象技术基本概念面向对象方法的发展史及现面向对象方法的发展史及现状简介状简介2022/10/2928例例 1:HelloWorld2022/10/2929Java程序的工作原理程序的工作原理2022/10/2930本讲总体纲要本讲总体纲要Java简介简介开发环境的建立开发环境的建立第一个第一个 Java程序程序面向对象技术基本概念面向对象技术基本概念面向对象方法的发展史及现面向对象方法的发展史及现状简介状简介2022/10/2931对象的基本概念对象的基本概念对象(对象(Object)是系统中描述客观事物)是系统中描述客观事物的一个实体,它是构成系统的一个基本单的一个实体,它是构成系统的一个基本单位,由一组属性和对这组属性进行操作的位,由一组属性和对这组属性进行操作的一组服务组成。一组服务组成。2022/10/2932属性:用来描述对象静态特征的属性:用来描述对象静态特征的一个数据项。一个数据项。操作操作:用来描述对象行为的一个用来描述对象行为的一个动作序列。动作序列。对象的要素对象的要素2022/10/2933建立一个复数对象模型建立一个复数对象模型对象的理解对象的理解对象名称复数c1(3+i5)属性实部a=3虚部b=5行为c1+c2c1-c22022/10/2934对象是现实世界中某个实际存对象是现实世界中某个实际存在的事物,它可以是有形的在的事物,它可以是有形的(比如一辆汽车),也可以是(比如一辆汽车),也可以是无形的(比如一项计划)。无形的(比如一项计划)。对象是构成世界的一个独立单对象是构成世界的一个独立单位。它具有自己的静态特征和位。它具有自己的静态特征和动态特征。动态特征。对象的理解对象的理解2022/10/2935类的基本概念类的基本概念类是具有相同属性和操作的一类是具有相同属性和操作的一组对象的集合,它为属于该类组对象的集合,它为属于该类的全部对象提供了统一的抽象的全部对象提供了统一的抽象描述。描述。2022/10/2936类的理解类的理解2022/10/2937类的理解类的理解类对象名称复数复数c1(3+i5)属性具有实部和虚部实部a=3虚部b=5行为能进行复数允许的运算c1+c2c1-c22022/10/2938类的理解类的理解2022/10/2939类与对象的比较类与对象的比较“同类对象具有相同的属性和服务同类对象具有相同的属性和服务”是指它们是指它们的定义形式相同,而不是说每个对象的属性值都相的定义形式相同,而不是说每个对象的属性值都相同。同。类是静态的,类的存在、语义和关系在程序类是静态的,类的存在、语义和关系在程序执行前就已经定义好了。执行前就已经定义好了。对象是动态的,对象在程序执行时可以被创对象是动态的,对象在程序执行时可以被创建和删除。建和删除。在面向对象的系统分析和设计中,并不需要逐个对在面向对象的系统分析和设计中,并不需要逐个对对象进行说明,而是着重描述代表一批对象共性的对象进行说明,而是着重描述代表一批对象共性的类。类。2022/10/2940封装的概念封装的概念封装封装 把对象的属性和服务结合成把对象的属性和服务结合成一个独立的系统单位。并尽一个独立的系统单位。并尽可能隐蔽对象的内部细节。可能隐蔽对象的内部细节。2022/10/2941封装性封装性2022/10/2942封装的重要意义:封装的重要意义:使对象能够集中而完整地描述使对象能够集中而完整地描述并对应一个具体事物。并对应一个具体事物。体现了事物的相对独立性,使体现了事物的相对独立性,使对象外部不能随意存取对象的对象外部不能随意存取对象的内部数据,避免了外部错误对内部数据,避免了外部错误对它的它的“交叉感染交叉感染”。2022/10/2943封装的重要意义:封装的重要意义:对象的内部的修改对外部的影对象的内部的修改对外部的影响很小,减少了修改引起的响很小,减少了修改引起的“波动效应波动效应”。公开静态的、不变的操作,而公开静态的、不变的操作,而把动态的、易变的操作隐藏起把动态的、易变的操作隐藏起来。来。2022/10/2944编程的麻烦执行效率的损失解决办法:不强调严格封装,实行可见性控制。(混合型OOPL)例如:C+封装带来的问题:封装带来的问题:2022/10/2945消息消息2022/10/2946消息消息对象通过它对外提供的操作在系统中发挥作用。在OO方法中,把向对象发出的服务请求称为消息。当系统中的其他对象或其他系统成分(在不要求完全对象化的语言中,允许有不属于任何对象的成分,例如C+程序中的main函数)请求这个对象,执行某个服务时,该对象就响应这个请求,完成该服务。2022/10/2947聚合聚合一个(较复杂的)对象由其他若干(较简单的)对象作为其构成部分,称较复杂的对象为聚集,称较简单的对象为成分,称这种关系为聚合。这种关系的语义是“has a”或“is a part of”2022/10/2948继承的概念继承的概念继承(Inheritance)是指子类可以自动拥有父类的全部属性和服务。2022/10/2949继承继承2022/10/2950继承意味着自动地拥有,或隐含地复制子类从父类中继承属性和操作,根据需要添加自己的属性和方法。继承简化了人们对事物的认识和描述,非常有益于软件复用,是OO技术提高软件开发效率的重要原因之一。继承继承2022/10/2951多态性是指同一个命名在不同的语境下具有不同的语义。OO技术中,常指在父类中定义的属性或服务被子类继承后,可以具有不同的数据类型或表现出不同的行为。多态性多态性2022/10/2952多态性多态性2022/10/2953不同人对play()请求的响应多态性机制为软件的结构设计提供了灵活性,减少了信息冗余,明显提高了软件的可复用性和可扩充性。2022/10/2954关联关联两个或多个类之间的关系称作关联。2022/10/29552022/10/2956本讲总体纲要本讲总体纲要Java简介简介开发环境的建立开发环境的建立第一个第一个 Java程序程序面向对象技术基本概念面向对象技术基本概念面向对象方法的发展史及现面向对象方法的发展史及现状简介状简介2022/10/2957面向对象方法的发展史及现状简介面向对象方法的发展史及现状简介2022/10/2958面向对象方法的发展史及现状简介面向对象方法的发展史及现状简介2022/10/2959面向对象方法的发展史及现状简介面向对象方法的发展史及现状简介2022/10/2960面向对象方法的发展史及现状简介面向对象方法的发展史及现状简介2022/10/2961面向对象方法的发展史及现状简介面向对象方法的发展史及现状简介2022/10/2962面向对象的软件工程面向对象的软件工程面向对象分析(面向对象分析(Object Oriented Analysis,OOA)分析和理解问题域,找出描述问题域和系统责任分析和理解问题域,找出描述问题域和系统责任所需的类及对象,分析它们的内部构成和外部关系,所需的类及对象,分析它们的内部构成和外部关系,建立建立OOA 模型。模型。面向对象设计(面向对象设计(Object Oriented Design,OOD)将将OOA 模型直接变成模型直接变成OOD 模型,并且补充与一模型,并且补充与一些实现有关的部分,如人机界面、数据存储、任务些实现有关的部分,如人机界面、数据存储、任务管理等。管理等。面向对象编程(面向对象编程(Object Oriented Programming,OOP)用一种面向对象的编程语言将用一种面向对象的编程语言将OOD 模型中的各个模型中的各个成分编写成程序,由于从成分编写成程序,由于从OOAOODOOP实现实现了无缝连接和平滑过渡,因此提高了开发工作的效了无缝连接和平滑过渡,因此提高了开发工作的效率和质量。率和质量。2022/10/2963面向对象的软件工程面向对象的软件工程面向对象测试(面向对象测试(Object Oriented Testing,OOT)面向对象测试是指对于运用面向对象测试是指对于运用OO 技术开发的软件,技术开发的软件,在测试过程中继续运用在测试过程中继续运用OO 技术进行以对象概念为技术进行以对象概念为中心的软件测试。中心的软件测试。以类作为基本测试单位,集中检查在类定义之内以类作为基本测试单位,集中检查在类定义之内的属性、服务和有限的对外接口,大大减少了错误的属性、服务和有限的对外接口,大大减少了错误的影响范围。的影响范围。面向对象软件维护(面向对象软件维护(Object Oriented Software Maintenance)在面向对象方法中,各阶段采用的表示是一致的,在面向对象方法中,各阶段采用的表示是一致的,从而大大降低了理解的难度,无论是从程序中的错从而大大降低了理解的难度,无论是从程序中的错误追溯到问题域,还是需求的变化都要从问题域追误追溯到问题域,还是需求的变化都要从问题域追溯到程序,整个过程都是平坦的。另外,对象的封溯到程序,整个过程都是平坦的。另外,对象的封装性使得一个对象的修改对其他对象的影响很小,装性使得一个对象的修改对其他对象的影响很小,不至于牵一发而动全身。不至于牵一发而动全身。2022/10/2964