C过程性编程和C++面向对象编程415674170
要想从面向结构的思想转化为面向对象的思想,首先要精准的理解何为面向结构和面向对象的编程。
结构化编程(structured programming)将分支(决定接下来应执行哪个指令)限制为一小组行为良好的结构。C语言的词汇表中就包含了这些结构(for循环、do-while循环和if else语句)。C语言使用自顶向下(top-down)的设计。理念是将大型程序分解。分解成小型、便于管理的任务。其中的任务又可以再分解,直到易于编写的模块。C语言鼓励程序员开发程序单元(称为函数)来表示各个任务模块。结构化编程反映了过程性编程的思想,根据执行的操作来构思一个程序。
结构化编程提高了程序的清晰度、可靠性,并使之便于维护,但在编写大型程序时,仍然面临挑战。面向对象编程(OOP)提供了一种新方法。与强调算法的过程性编程不同的是,OOP强调的是数据。OOP不像过程性语言那样,试图使问题满足语言的过程性方法,而是试图让语言来满足问题的要求。其理念使设计与问题的本质特性相对应的数据格式。
C++中,类是一种规范,它描述了这种新型数据结构,对象是根据这种规范构造的特定数据结构。OOP程序设计首先设计类,它们准确的表达了程序要处理的东西。这就是OOP最重要的优势之一。它抓住了问题的本质——对象。这也更好的符合了我们的客观世界。我们知道整个自然界都是由各种各样不同的事物组成的,事物之间存在着复杂的千丝万缕的关系,而正是靠着事物之间的联系、交互作用,我们的世界才是有生命力的才是活动的。我们可以认为在自然界中事物做为一个概念,它是稳定的不变的,而事物之间的联系是多变的、运动的。事物应该是这个世界的本质所在。面向对象的着眼点就是事物,就是这种稳定的概念。每个事物都有其固有的属性,都有其固有的行为,这些都是事物本身所固有的东西,而面向对象的方法就是描述出这种稳定的东西。而面向功能的模块化方法它的着眼点是事物之间的联系,它眼中看不到事物的概念它只注重功能,我们平常在划分模块的时侯有没有想过这个函数与哪些对象有关呢?很少有人这么想,一个函数它实现一种功能,这个功能必定与某些事物想联系,我们没有去掌握事物本身而只考虑事物之间是怎么相互作用而完成一个功能的。说白了,这叫本末倒置,也叫急功近利,因为不是我们智慧不够,只是因为我们没有多想一步。面向功能的结构化方法因为它注意的只是事物之间的联系,而联系是多变的,事物本身可能不会发生大的变化,而联系则是很有可能发生改变的,联系一变,那就是另一个世界了,那就是另一种功能了。如果我们用面向对象的方法,我们就可以以不变应万变,只要事先把事物用类描述好,我们要改变的只是把这些类联系起来的方法,只是重新使用我们的类库,而面向过程的方法因为它构造的是一个不稳定的世界,所以一点小小的变化也可能导致整个系统都要改变。也就是说,以C语言为代表的面向结构化的编程关键是在于函数的编程,函数实现的功能,功能和数据是分离的,因此如果更改一种数据的类型,整个程序都可能需要改变。而OOP关键是在对象,首先着眼的是将要处理的本质——对象,然后将其抽象,形成类,用类定义或者说封装对象的数据表示和操作,然后将对象定义为类的实体,是根据类封装的那些数据格式规范创建的。
举个例子来说。如果说类就好比所有著名的演员,而对象就好比某个著名的演员。如赵本山。表示演员的类中包括该类可执行的操作的定义。如念某一角色的台词,表达悲伤,威胁恫吓,接受奖励等。而对象赵本山就可以执行这些具体的操作。
到这里你或许已经差不多明白了SP和OOP的区别和本质了。
对于C++来说,一直以来被认为是C的超集,而C++的发展和一些方面也确实符合这个说法,但是对于C++的争论却一直没有停止。本人是看好C++的发展前景的,在更好的发挥自身优势的同时,又不断的用各种方法如添加新属性去克服本身存在的缺陷,C++必将引来辉煌的一天。发展才是硬道理嘛。
C++在C语言的基础上新增的特性,主要包括:
1.类和对象
2. 继承
3.多态、虚函数和RTTI(运行阶段类型识别)
4.函数重载
5.引用变量
6.通用(或独立于类型的)编程——由模板和标准模板库提供
7.处理错误条件的异常机制
8.管理函数、类和变量名的名称空间
OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。而这也正是OOP的最大优势所在。
静待C++的辉煌!
—————————————WeBoy————————————
声明:文中许多内容引自《C++ Primer Plus》以及网络。仅供参考。
数据正在载入中..
