面向对象的理解问答

1.面向对象(OOP)语言的特征是什么?
  1. 万物皆对象
  2. 程序是对象的集合,通过发送消息告诉彼此所需要做的
  3. 每个对象都拥有其类型
  4. 某一特定类型的所有对象都可以接收同样的消息
2.面向对象的出发点?

历史上最初是为了构建仿真程序。然而面向对象不仅局限于构建仿真程序,而是可以将任何问题降解为简单的解决方案,因为任何系统都是对你所涉及的系统的仿真。

3.如何理解和开发对象?

我们可以把对象想象成“服务提供者”。

这样思考,将程序分解成了需要哪些服务提供者的问题,编程者可以不断询问自己需要哪些服务提供者,当所有服务提供者都被构思出来时,就可以进行对象的开发了。

这样思考的另一个额外的好处是,提供了对象的内聚性。而高内聚正式软件设计的基本质量要求。

4.为何要隐藏具体实现?
名词解释
隐藏具体实现,即权限控制。Java中通过三个关键字进行权限控制 public private protected
为何要权限控制(隐藏具体实现)

首先要了解程序开发人员的角色分类:

  • 类创建者
  • 客户端程序员(使用别人写的类来快速开发应用)

隐藏具体实现的目的:

  1. 可以减少客户端程序员的程序bug。客户端程序员调用类创建者创建的类时,可能由于不知情,粗心,随意修改实现,从而产生了bug。
  2. 可以让客户端程序员轻松的的获知接口。看出什么对他们重要,什么可以忽视。
  3. 让类创建者改变类的内部工作方式时,而不用担心影响到客户端程序员。接口和实现分离而得以保护。
5.如何复用具体实现?
  1. 最简单的办法:直接使用类的一个对象。
  2. 组合。最常用,最灵活。创建成员对象,一般适用于对象和成员对象是拥有关系(has-a)时。
  3. 继承。是面向对象最重要的复用方式。然而不灵活。
  4. 代理。Java不直接支持。是组合和继承的结合。即对一个类使用成员对象进行组合的同时,让原有类同时具有成员对象所属类的所有方法,并调用程序员对象的对应方法作为实现。

 

6.如何使用继承?
  1. 理想的继承方式:导出类和基类是“是一个”(is-a)的关系。即,继承应该只覆盖基类的方法而不新增方法。这种继承称之为“纯粹替代”
  2. “像是一个”(like-a)的关系。对导出类增加方法。
7.继承是如何做到了多态?
名词解释:

前期绑定:编译器在编译时就知道了方法体的绝对地址。

后期绑定(动态绑定):OOP提供的概念。编译器直到运行时才决定了方法体的代码位置。

继承,通过对泛化类型进行方法调用,免去了对具体方法体的调,而程序则总是会给予泛化对象的实际类型产生正确的行为。Java通过使用一小段特殊代码来替代绝对地址的调用,该特殊代码使用了对象中存储的信息来计算方法体的地址,从而实现了动态绑定。

8.多态的好处?

多态是将“改变的事务和未改变的事物”分类开来的重要技术。例如对于一个画图程序的draw方法。

[java]void draw(Shape shape);[/java]

如果要画多个不同的形状的对象,本来需要多个重载方法。

[java]
void draw(Circle circle);
void draw(Line line);
[/java]

这看似可行,然而如果将来要增加很多不同的形状时则需要添加不同的方法,如果没有添加还不会得到编译器的检查。多态则把绘画程序方法的不变之处抽象出来,让程序运行时决定调用具体的方法。

共有 0 条评论

发表评论

电子邮件地址不会被公开。