面向对象程序设计 、
第二章 面向对象的分析与设计
学习目标 1 确定系统中的对象 2 确定对象的属性及操作 3 测试对象的有效性 4 区分对象和类 5 了解面向对象的编程和过程化编程之间的区别 6 了解封装的主要好处 7 了解软件开发的主要步骤
对象 我们可以把生活所在的真实世界(Real World)当作是由许多大小不同的对象所组成的。对象可以是有生命的个体,比如一个人或一只鸟。
对象 对象也可以是无生命的个体,比如一辆汽车或一台计算机。 对象也可以是一个抽象的概念,如天气的变化或鼠标所产生的事件。
对象的基本概念 客观世界的组成: 对象; 对象之间的相互关系; 对象:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。 一个对象由一组属性和操作组成。 动态观点:对象的操作就是对象的行为
对象的特征 对象有两个特征:属性和行为 如: 一个人有他的身高或体重作属性,有他的行为——如唱歌、打球、骑摩托车、开汽车。 一条狗有它的颜色作属性,有它的行为,如摇尾巴或跳跃。 一台电视机有它的外形、尺寸和颜色,有它的行为,如开、关,接收信号,转换频道,调节音量。
汽车对象 以汽车为例,我们可定义其属性与方法如: 换档 开大灯 煞车 开冷气 颜色 排档数 排气量 轮胎型号
案例研究 课程中通过下面的案例来学习面向对象的分析与设计原理。 公司名称:DirectClothing公司 业务包括: 1、按月生成产品目录 2、客户通过电话、网络和传真订购 3、随时检查订购项的库存情况 4、公司接受支票和信用卡付款
面向对象概述 定义系统的: 对象 1、对象属性——对象的特征 2、对象操作——所能执行的任务
第一步:确定对象 找出问题描述领域中的主要名词 对象可能是: 对象有: 简单的或复杂的(衬衣,银行) 真实的或概念的(银行出纳员,帐户) 属性(颜色,尺寸 ) 操作(下订单,取消订单)
对象找到了!
第二步:确定对象属性和操作 属性:是对象的状态特征 操作:是对象执行的动作 可以是数据或其它对象 对Order对象来说,可能包括orderID和items 操作:是对象执行的动作 可以是对象做出的或施加给对象的动作 对Order对象来说,可能是place和cancel
第三步:对象建模
属性类型
第四步:测试对象 与问题域的相关性 独立存在性 属性和操作 对象是否在问题陈述的界限之内? 系统是否必须有此对象才能完成任务? 在用户与系统的交互中是否必须有此对象? 独立存在性 属性和操作
面向对象分析小结 找出问题域中的对象,及其属性和操作 步骤:1、列出有关的对象(名词) 2、列出这些对象的属性和操作 3、为对象设置合理的属性和操作 4、应用第四步的3条评判规则检验对象的有效性
练习 An object-oriented design for a Java application that tracks soccer scores.The program should track: The number of goals each player scores in each game What teams the players play for and what season the games were play in
类(class) 什么是类? 是同种对象的集合与抽象 动物类 汽车类
类与对象关系 面向对象程序设计的重点是类的设计,而不是对象的设计。
类与对象的关系 类 对象 抽象定义 实例 电视机 一台长虹电视机 学生 软件学院05级学生小强
实例对象 (instance) 汽车类有些共同的属性(汽缸排气量,排档数,颜色,轮胎数……)和行为(换档,开灯,开冷气……),但每一台汽车个别的状态及方法可不同于且独立于其他汽车 。 你的汽车只是这世界中许多汽车中的一个。我们就称你的汽车是汽车类中的一个实例对象(instance)。 汽车类 (class) 实例 (instance) NEW 你的车
面向对象与面向过程 过程化程序设计 OOP程序设计 属性 操作 函数 消息 公共数据 算法+数据结构 对象+消息
比较 结构化程序设计 面向对象程序设计 对应的典型的计算机语言, 例如: C 面向操作的 函数(方法)是程序的基本单位 对应的典型的计算机语言, 例如: Java 面向对象(object)的 类(class)是程序的基本单位 方法(函数)被封装在类中 数据也常常被封装在类中
示例: 过程化和面向对象两种方法的比较 几个编程小组在设计一个进销存系统 其中,一个小组编写处理货物和库存的程序,一个小组编写处理订单的程序
面向过程
面向对象
OO的真正意义 OO的真正意义是使得软件开发接近人类的正常思维,将许多原来由人完成的工作交给机器去完成: -机器语言 汇编语言 高级语言 -机器语言 汇编语言 高级语言 -面向过程 面向模块 面向对象 OO包括一套比较完整的方法,程序设计只是其中一个环节。 -面向对象的分析 -面向对象的设计 -面向对象的程序设计 -代码重用
小 结 Java程序是由一个个类定义组成的 编写java程序的过程是从现实世界中抽象出java可实现的类,并用合适的语句定义它的过程 这个定义过程包括: 1、对类中各种属性和方法的定义 2、创建类的对象 3、类间的各种关系和接口的定义
什么是面向对象? 面向对象是一种程序设计规范,其基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。
封装(encapsulation ) OOP三大特性:封装、继承与多态 封装是一种信息隐藏技术。 是指将数据和基于数据的操作封装在一起,数据被保护在内部,系统的其他部分只有通过在数据外面的被授权的操作才能够进行交互,目的在于将类使用者class user和类设计者class creator分开。 在面向对象的编程中,用类来封装相关的数据和 方法,保证了数据的安全和系统的严密性。
考虑一个仓库,外部只能通过管理员获取物品。 价格表,物品, 账单,电话, 等等 仓库 属性 抽象 提供物品,账单等等 操作
封装的优点 隐藏类的实现细节,实现了信息的隐藏及安全性; 提高了程序的模块化,且易于维护; 具体实现是编写该类的人控制的,让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作
封装的汽车: 实现细节隐藏在车盖 下;驾驶员不必知道汽车是怎样工作的 汽车的部分零件改变或更换,驾驶员不必改变对汽车的驾驶
继承 现以下图来说明: class ThisClass extends SuperClass{ … } 汽车 车 Java仅支持单继承 火车 交通工具 船 飞机 父类/超类 (SuperClass) 子类 优点: 使程序结构清晰,减少了编码和维护的工作量,子类可以使用父类所提供的方法,实现了代码的复用。
继承 汽车类 轿车 公交车 的士
多态 用同一个名字调用实现不同操作的方法 方式1:父类和子类之间的同名方法 方式2:同一类中参数不同的同名方法 (覆盖:子类方法的名称和参数与父类方法的名称和参数相同,在执行过程中,子类的方法将覆盖父类的方法) 方式2:同一类中参数不同的同名方法 (重载:不是子类对父类同名方法的重新定义,而是类对自身已有的同名方法的重新定义。重载方法的参数必须不同,或者是参数个数不同,或者是参数类型不同) 使用方便,且降低了维护和编程量
覆盖 class A { public int x,y; A(int a , int b) x=a; y=b; } public void display() int z; z=x+y; System.out.println(“add=”+z); class B extends A B(int a , int b) super(a,b); z=x*y; System.out.println(“product=”+z);
class AB extends B { AB(int x , int y) super(x,y); } public static void main(String[] args) A num1=new A(4,10); B num2=new B(4,10); AB num3=new AB(4,10); num1.display(); num2.display(); num3.display();
重载 class MethodOverloading { void receive (int i) System.out.println(“一个整数”); System.out.println(“i=”+i); } void receive (int x,int y) System.out.println(“两个整数”); System.out.println(“x=”+x+”y=”+y); void receive (double d) System.out.println(“一个浮点数”); System.out.println(“d=”+d); void receive (String s) System.out.println(“一个字符串”); System.out.println(“s=”+s);
public class MethodOverloadingTest { public static void main(String[] args) MethodOverloading MO=new MethodOverloading(); mo.receive(1); mo.receive(2,3); mo.receive(12.56); mo.receive(“Hello”); }
面向对象的三大特征 1.封装:将数据成员(Data Member)和属于此数据的操作方法(Operating Method),放在同一个实体中。 2.继承:父类定义一些通用的属性与行为,其子类可以使用。 3.多态:在同一个类中可有许多同名的方法,但其参数个数与参数类型不同,而且操作过程与返回值也可能会不同。 (1)模块化 (2)信息隐藏 (1)实现代码复用 (2)简化设计过程 解决其他语言中不能重名的问题
复用 以前编写的操作可以在其他工程中再次使用,可提高开发效率,缩短开发周期
面向对象软件开发过程(软件生命周期) 1、搜集和分析要求 2、设计系统 3、为系统编写代码 4、测试系统的所有方面 5、让客户和用户测试系统 6、维护系统