面向对象的理解问答
1.面向对象(OOP)语言的特征是什么?
- 万物皆对象
- 程序是对象的集合,通过发送消息告诉彼此所需要做的
- 每个对象都拥有其类型
- 某一特定类型的所有对象都可以接收同样的消息
2.面向对象的出发点?
历史上最初是为了构建仿真程序。然而面向对象不仅局限于构建仿真程序,而是可以将任何问题降解为简单的解决方案,因为任何系统都是对你所涉及的系统的仿真。
3.如何理解和开发对象?
我们可以把对象想象成“服务提供者”。
这样思考,将程序分解成了需要哪些服务提供者的问题,编程者可以不断询问自己需要哪些服务提供者,当所有服务提供者都被构思出来时,就可以进行对象的开发了。
这样思考的另一个额外的好处是,提供了对象的内聚性。而高内聚正式软件设计的基本质量要求。
4.为何要隐藏具体实现?
名词解释 隐藏具体实现,即权限控制。Java中通过三个关键字进行权限控制 public private protected 为何要权限控制(隐藏具体实现)
首先要了解程序开发人员的角色分类:
- 类创建者
- 客户端程序员(使用别人写的类来快速开发应用)
隐藏具体实现的目的:
- 可以减少客户端程序员的程序bug。客户端程序员调用类创建者创建的类时,可能由于不知情,粗心,随意修改实现,从而产生了bug。
- 可以让客户端程序员轻松的的获知接口。看出什么对他们重要,什么可以忽视。
- 让类创建者改变类的内部工作方式时,而不用担心影响到客户端程序员。接口和实现分离而得以保护。
5.如何复用具体实现?
- 最简单的办法:直接使用类的一个对象。
- 组合。最常用,最灵活。创建成员对象,一般适用于对象和成员对象是拥有关系(has-a)时。
- 继承。是面向对象最重要的复用方式。然而不灵活。
- 代理。Java不直接支持。是组合和继承的结合。即对一个类使用成员对象进行组合的同时,让原有类同时具有成员对象所属类的所有方法,并调用程序员对象的对应方法作为实现。
6.如何使用继承?
- 理想的继承方式:导出类和基类是“是一个”(is-a)的关系。即,继承应该只覆盖基类的方法而不新增方法。这种继承称之为“纯粹替代”
- “像是一个”(like-a)的关系。对导出类增加方法。
7.继承是如何做到了多态?
名词解释: 前期绑定:编译器在编译时就知道了方法体的绝对地址。 后期绑定(动态绑定):OOP提供的概念。编译器直到运行时才决定了方法体的代码位置。
继承,通过对泛化类型进行方法调用,免去了对具体方法体的调,而程序则总是会给予泛化对象的实际类型产生正确的行为。Java通过使用一小段特殊代码来替代绝对地址的调用,该特殊代码使用了对象中存储的信息来计算方法体的地址,从而实现了动态绑定。
8.多态的好处?
多态是将“改变的事务和未改变的事物”分类开来的重要技术。例如对于一个画图程序的draw方法。
[java]void draw(Shape shape);[/java]
如果要画多个不同的形状的对象,本来需要多个重载方法。
[java]
void draw(Circle circle);
void draw(Line line);
[/java]
这看似可行,然而如果将来要增加很多不同的形状时则需要添加不同的方法,如果没有添加还不会得到编译器的检查。多态则把绘画程序方法的不变之处抽象出来,让程序运行时决定调用具体的方法。
共有 0 条评论