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