面向对象
上午题 7
接口里的方法不实现,需要在实现类来加以实现;而具体的实现类其中的方法必须实现
面向对象&面向过程
- 面向过程:“我该怎么做?”一步步去实现这个功能
- 面向对象:“我该让谁去做?”去调用对象的操作来实现这个功能
面向对象=对象+分类+继承+通过消息的通信
类
一个类所包含的方法和数据描述一组对象的共同行为(方法、函数)和属性(状态)
类是在对象之上的抽象;对象是类的具体化,是类的实例;类也存在子类和父类
类分三种:
- 实体类:现实世界中真实的实体
- 接口类(边界类):为用户提供一种与系统合作交互的方式
- 控制类:用来控制活动流,充当协调者
对象
对象=对象名+属性(状态、成员变量)+方法(操作、行为、函数、成员函数)
消息
消息是对象发出的服务请求,一般包含提供服务的对象标识、服务标识、输入信息和应答信息等
方法重载
可建立多个名字相同的方法(函数),满足下列条件即可
-
方法名相同,参数个数不同
- 方法名相同,参数类型不同
2. 方法名相同,参数类型顺序不同
- 方法名相同,参数类型不同
封装
一个对象把属性和行为封装为一个整体
目的使对象的使用者和生产者分离
Public class Person{
//private(权限修饰符)属性只能在当前类的方法里进行访问
private String name;
private int age;
//set方法,就近原则————设置值
public void setName(String name){
//可加 条件
this.name=name;
// 当前.属性=形参
}
//get方法————获取值
public String getName(){ // Name是什么属性,便public什么属性
return name;
}
//方法
public void eat(){
System.out.print(name+"在吃饭中")
}
}
继承extends
继承是父类(超类)和子类之间共享数据和方法的机制,有“单重继承”和“多重继承”
一个子类可以继承它的父类中非私有化的属性和方法,子类中还可以定义自己的属性和方法,也可重写父类中的方法
多态
不同的对象收到同一消息可以产生完全不同的结果,而实现的细节则由接受对象自行决定——>即 同一消息就可以调用不同的方法(客户类无需知道所调用方法的特定子类的实现)
实例化:父类名 对象名=new 子类名
编译看左 运行看右
多态的形式:
- 通用的
- 参数多态:最纯的多态,应用比较广泛的多态
- 包含多态:子类型化
- 特定的
- *过载多态:同一个名字在不同的上下文中所代表的含义不同
- 强制多态
绑定
绑定是一个把 过程调用 和 响应调用 所需要执行的代码 加以结合的过程,一个给定的过程调用和代码的结合 直到调用发生时才进行
- 编译时:静态绑定
- 运行时:动态绑定(根据接受对象的具体情况将请求的操作与实现的方法进行连接,支持多态)
设计原则
- 单一责任原则:就一个类而言,应该仅有一个引起它变化的原因
- 开放-封闭原则:对扩展开放,对修改关闭
- 里氏替换原则:基类(父类)出现的地方,子类一定出现
- 依赖倒置原则:依赖于抽象,而不依赖于细节(实现)/ 高层模块不应该依赖于低层模块
- 接口分离原则:依赖于抽象,不要依赖于具体
- 共同重用原则:重(重新)用了包中的一个类,那么就要重用包中的所有类
- 共同封闭原则:一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响
面向对象分析(OOA)
目的是为了获得对应用 问题的理解,理解的目的是确定系统的功能、性能要求
包含5个活动:
- 认定对象 / 确定问题域
在 定义域(定义问题域) 中,首先将自然存在的**“名词”**作为一个对象,这通常是研究问题、定义域实体的良好开始。实质性对象应包含客户服务、清算等
-
组织对象
-
描述对象间的相互作用 / 对象间的相互作用
-
确定对象的操作 / 基于对象的操作
-
定义对象的内部信息
面向对象设计(OOD)
OOD基于面向对象分析(OOA)的结果之上,将OOA所创建的分析模型转化为设计模型(定义系统构造蓝图)
理解解决方案&实现系统的细节
OOD的活动:三识别两定义(复用OOA模型的基础上,包含与OOA对应如下5个活动)
- 识别类及对象
- 定义属性
- 定义服务(操作)
- 识别关系
- 识别包
面向对象程序设计
选用一种面向对象程序设计语言,采用 对象、类及其相关概念所进行的程序设计
面向对象测试
与其他方法开发的系统测试没有什么不同
面向对象软件的测试分为4个层次:
- 算法层
- 类层
- 模块层
- 系统层
分析——>设计——>程序设计——>测试