设计模式无招胜有招之设计技术-面向对象设计语言支持

来源:互联网 发布:iphone运行windows 编辑:程序博客网 时间:2024/06/18 17:40

  面向对象的设计语言提供了很多和对象相关的技术。

  面向对象的基本特征,封装继承和多态;JAVA里面提供了反射;函数重载;C++里面的模板;多重继承;接口继承;抽象类等等。

  这些技术在面向对象设计的时候能够在可扩展性上提供最基础的支持。


1 封装

在面向对象的程序设计出现之前,流行的是面向过程的程序设计。所谓的面向过程是指把要解决的问题分为几个步骤,每个步骤按照顺序执行。其中,每个步骤还可以划分为更小的步骤。每个步骤可以用一个函数来实现。用现在的话讲,就是面向函数编程。在这种编程中,函数是编程的中心。当拿到需求后,把需求分解为按照顺序执行的函数。可以看到设计的中心在函数,而数据只是辅助。且数据和函数是分离的。任何一个函数可以调用任何一个变量数据。

这种设计方式不适合越来越复杂的大型应用和需求。随着经验的增加,人们发现,数据和函数之间的逻辑联系比函数之间强。于是把数据和函数放在一个逻辑块中的愿望越来越强烈。面向对象的设计就慢慢诞生了。

封装是面向对象的第一个特征。封装就是把有逻辑联系的数据和函数组织在一块。

封装带来的 好处:

1)  组织性:类把数据和函数组织在了一起,这样使得代码更清晰,更有逻辑和组织。

2)  逻辑性:从类的内部看,封装就是增加了逻辑性

3)  隐藏性:从类的外部看,即类的使用者的角度看,类把它的内部和外部隔离开来。类可以使得类外部的变化不影响类的内部,也可以使得类内部有限暴露给外部的使用者。

在后面看到,设计模式中最重要的重构手段就是“封装变化”。这个后面再讲。

2 继承

面向过程的编程还有一个问题是代码的可重用性。

继承使得子类可以重用、修改和增加父类的功能(函数)。

但是随着人们实践经验的增加,人们逐渐发现继承被滥用了。继承是一种强依赖,子类对父类的强依赖。父类的变化会导致子类的急剧的变化。因此后面又一个新的重构的原则就是“优先使用组合而不是继承”。

继承被限制在接口继承上,而不是实现继承。


3 多态

多态是最后被加到C++中的一个特性。当多态出现的时候,引起了很大 争论。人们认为多态是没有必要的一个特性。当然今天,人们普遍认为多态是面向对象设计的核心。

多态是指拥有相同接口的对象在运行时候,可以相互替换。定义了一组有相同接口的父类和子类。在语法层面,父类可以指向子类。于是在静态编译期间,你看到执行了一个函数。但是你并不知道是执行的那个函数。直到运行时刻,这个父类指向的是哪个子类才能确定下来。且这个指向的子类是可以随时替换的。

也就是说当你写好了“执行父类指针调用函数后”,在不改变这段代码的前提下,只要你能够使得指针指向不同的子类,那么就会有不同的执行结果。当需求发生改变的时候,你不必要改代码,只要增加一个实现需求的子类,就可以完成需求的变更。

这个就是后面所有的面向对象设计的基本原理。


0 0
原创粉丝点击