《松本行弘的程序世界》– 面向对象

编程语言不是从安全的角度考虑减少程序员犯错误,而是在程序员自己负责的前提下为他提供最大限度发挥能力的灵活性。

一、结构化编程

结构化编程的基本思想是有序地控制流程,即把程序的执行顺序限制为顺序、分支和循环这 3 种,把共通的处理称为例程。

把基本上相同的处理抽象成例程,其中不同的部分由外部传递进来的参数来对应。

面向对象编程是结构化编程的延伸。

二、面向对象编程

多态性(也称动态绑定)、数据抽象(也称信息隐藏或封装)和继承被称为面向对象编程的三原则。

多态

多态的基本内容:根据对象的不同类型而进行适当处理;自动选择最合适的方法,而程序内部则不发生冲突。

各种数据可以统一处理。多态性让程序员只关注要处理什么(What),而不是怎么去处理(How)。

数据抽象

数据抽象是数据和处理方法的结合。对数据内容的处理和操作,必须通过事先定义好的方法来进行。数据和处理方法结合起来成为了黑盒子。

利用现有的类派生新类的方法称为“差分编程法”(difference programming)。

类以数据为核心,把与之相关的处理也都集中到一起。

黑盒化是模块化的基本原则,面向对象编程语言将每一类数据都当作黑盒处理。

继承

继承的原本目的实际上是逐步细化。继承只不过是抽象的功能利用方法,不要把对继承的理解束缚在“继承是对现实事务的分类的反映”。

Java 的继承分为实现继承(用 extends 实现)和规格继承(用 implements 实现);类是用来指定对象实现,而接口只是指定对象的外观。

Java 解决共享实现问题的方案是:在单一继承的前提下,使用组合模式(Composite)来调用别的类实现的共通功能。

组合是把对多个对象合成一个对象来处理,委托是把对一个对象的方法调用委派给别的对象。

单一继承的类之间的关系是很单纯的树结构;对多重继承而言,类之间的关系却是很复杂的网状结构。

Mix-in

Mix-in 是实现多重继承的一个技巧。

Mix-in 技术按照以下规则来限制多重继承:

  • 通常的继承用单一继承;
  • 第二个以及两个以上的父类必须是 Mix-in 的抽象类。

Mix-in 类具有以下特征:

  • 不能单独生成实例;
  • 不能继承普通类。

按照这个原则,类的层次具有和单一继承一样的树结构,同时又可以实现功能共享。实现功能共享的方法是把共享的功能放在 Mix-in 类里面,然后把 Mix-in 类插入到(类型)树结构里面。

Duck Typing

不考虑一个对象属于什么类,只关心它有什么样的行为(有哪些方法),就是 Duck Typing。

静态语言的优点:不通过执行就可以发现类型不匹配的错误。

动态类型的缺点主要有三个:在执行时才能发现错误,读程序时可用到的线索少,以及运行速度慢。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.