前言
POP是一种以过程为中心的编程思想。就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。“面向过程”也可称之为“面向记录”编程思想,他们不支持丰富的“面向对象”特性(比如继承、多态),并且它们不允许混合持久化状态和域逻辑。
结构化程式设计(英语:Structured programming),是一种编程典范。也是一种解决问题的思想和方法。它采用子程序、程式码区块(英语:block structures)、for循环以及while循环等结构,来取代传统的 goto。希望借此来改善计算机程序的明晰性、品质以及开发时间,并且避免写出面条式代码。
1 php2
3 classutils4
5 {6
7 public static function formatAddress(sformatType, Saddressl,Saddress2, City,Sstate)8 {9
10 return some address string";11 }12
13 public static function formatpersonName (sformatType, SgivenName,SamilyName){14 return some person name;}15 public static function parseAddress(SformatType, Sval){16 return new Address 0;}17 public static function parseTelephoneNumber(sformatType, Sval){18 return new TelephoneNumber 0;}19
20 }
面条式代码
在多函数程序中,许多重要的数据被声明为全局变量,这样它们才可以被所有的函数访问。每个函数又可以具有它自己的局部变量。全局变量很容易被某个函数不经意之间改变。而在一个大程序中,很难分辨每个函数都使用了哪些变量。如果我们需要修改某个外部数据的结构,我们就要修改所有访问这个数据的函数。这很容易导致bug的产生。这个可由面向对象的多态属性解决。
在结构化程序设计中,另一个严重的缺陷是不能很好的模拟真实世界的问题。这是因为函数都是面向过程的,而不是真正的对应于问题中的各个元素。
OOP,面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
除了“面向过程”和“面向对象”之外,还有“泛型编程”和“并发编程”等。
本文主要使用“面向过程”和“面向对象”的编程思想实现数据结构的程序设计。
这里有必要简单地复习一下“面向过程程序设计思想”和“面向对象程序设计思想”。
C语言是典型的面向过程编程思想的语言(PHP,到PHP4以后就支持面向对象了)。Java(C#)是典型的面向对象编程思想的语言。在应用中,C++语言常常同时使用这两种思想。
面向过程优点:性能较高;缺点:在维护、复用、扩展的体验上较差。
面向对象的特点几乎与面向过程相反,例如:在使用类调用时需要实例化、开销大、耗资源,因此性能较差;但正是因为使用了类,相较而言易维护、易复用、易扩展。
这里主要回顾一下面向对象的编程思想。面向对象的4大特点:抽象、封装、继承和多态。
抽象指仅表现核心的特性而不描述背景细节的行为。类使用了抽象的概念,并且被定义为一系列抽象的属性如尺寸、重量和价格,以及操作这些属性的函数。类封装了将要被创建的对象的所有核心属性。因为类使用了数据抽象的概念,所以它们被称为抽象数据类型(ADT)。
封装是把数据和函数包装在一个单独的单元(称为类)的行为。数据封装是类的最典型特点。数据不能被外界访问,只能被封装在同一个类中的函数访问。这些函数提供了对象数据和程序之间的接口。避免数据被程序直接访问的概念被称为"数据隐藏"。封装机制将数据和代码捆绑到一起,避免了外界的干扰和不确定性。它同样允许创建对象。简单的说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体。在一个对象内部,某些代码和(或)某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
继承是可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。例如,生物学上的界门纲目科属种,见图。这种分类的原则是,每一个子类都具有父类的公共特性。
在 OOP中,继承的概念很好的支持了代码的重用性(reusability),也就是说,我们可以向一个已经存在的类中添加新的特性,而不必改变这个类。这可以通过从这个已存在的类派生一个新类来实现。这个新的类将具有原来那个类的特性,以及新的特性。而继承机制的魅力和强大就在于它允许程序员利用已经存在的类(接近需要,而不是完全符合需要类)并且可以以某种方式修改这个类,而不会影响其它的东西。
注意,每个子类只定义那些这个类所特有的特性。而如果没有按级分类,每类都必须显式的定义它所有的特性。
多态是OOP的另一个重要概念。多态的意思是事物具有不同形式的能力。举个例子,对于不同的实例,某个操作可能会有不同的行为。这个行为依赖于所要操作数据的类型。比如说加法操作,如果操作的数据是数,它对两个数求和。如果操作的数据是字符串,则它将连接两个字符串。
多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。多态在实现继承的过程中被广泛应用。
面向对象程序设计语言支持多态,术语称之为"one interface multiple method(一个接口,多个实现)"。简单来说,多态机制允许通过相同的接口引发一组相关但不相同的动作,通过这种方式,可以减少代码的复杂度。在某个特定的情况下应该作出怎样的动作,这由编译器决定,而不需要程序员手工干预。
C语言与C++语言的一些区别和共性,C与C++的兼容性等等有关二者之间的一些知识。这里笔者建议大家可以阅读一下C++之父Bjarne Stroustrup的《C++程序设计语言》。