一、面向过程:“从上往下”的面向过程的程序设计
用面向过程的方式解决问题的思路:提出问题,分析问题的处理流程,将大问题分解成小问题,如果小问题比较复杂,那么就继续的分解为更小的问题,然后解决这些一个一个的小问题来解决大问题(调用函数),最后解决所有的问题。这个从问题出发,从上往下的解决过程,一步一步的解决问题,这种开发思路我们称之为面向过程的设计思想,因为他主要是解决问题中的一个个的过程,而且它也比较符合哦我们解决问题的方法(做好这一步,做下一步,直到做完所有)。
优点:
1、程序结构简单,仅由三种基本结构组成,即顺序,选择,循环这个三种基本结构,我们就可以解决任何问题,所以对于面向过程要专注于逻辑的时间,不需要学习、记忆更多的语法,结构。
2、把大问题分成小问题,然后逐个解决小问题,这样大问题就解决了。面向过程的思路就是把项目分成很多个小项目,完成这些小项目之后,按照业务流程把他们组合起来,这样就整个问题解决,这个符号人们一般解决问题的思路,这里也容易掌握,通过分解问题,降低了问题的难度,是程序变得简单和维护,另外那些个单独的小项目(函数)可以重复的使用,可以避免重复写代码。
3、自上往下,一步一步的完善,也就是先从整体的角度看代问题,然后列出解决问题需要做那些步骤,然后逐步的去完善,这样会让我们全面的考虑问题,是逻辑关系清楚明了。考虑问题我们是先“这个问题要怎么解决”,这里就变成了“先做什么,然后再做什么”,这样我们的过程就更清楚了
缺点:
在面向过程的时候,数据和操作往往是分离的,这样如果是数据的结构有改变,那么操作数据的函数就不得不重新写,这个代价就比较大,并且数据一般都是不觉有封装性的,很多变量都会暴露出来,这里又可能会被篡改。
二、面向对象:万物皆对象
面向对象的程序设计是面向过程的继承和发展,程序对现实世界的抽象和描述,现实中的基本单元的物体,程序中的基本的单元就是对象,
面向对象可以理解为:现实世界是由对象组成的,无论大小。
对象由两个部分组成:
1、描述对象的状态或者属性的数据(变量)
2、描述对象的行为或者功能的方法(函数)
面向对象是将数据和操作数据的函数结合在一起,共同的来描述现实世界,这个就是面向对象和过程本质上的区别。
之前提到面型过程的缺点,即面向过程中数据和操作是分离的,当问题规模比较小时,需求变化不大的时候,面向过程工作都做的很好。
但是,当问题的规模越来越大、越来越复杂时,面向过程就显得力不从心了,即修改了某个结构体,就不得不修改与之相关的所有过程函数,而一个过程函数的修改,往往又会设计到其他数据结构,在规模比较小的时候容易解决,但是当程序规模越来越大时,特别是涉及到了多人协作开发,这就麻烦
正是如此,面向对象的程序设计应运而生,它的主要特点是封装、继承和多态。封装即将数据和操作封装在一起,并避免了局部变量的暴露,而只提供接口;继承可以在原来的基础上很快的产生新的对象;多态是同一个方法调用,针对不同的对象有不同的反应,这方便了程序的设计。
容易设计和实现
面向对象思想所应用的封装、继承、多态都是符合日常的思维习惯的,所以使用面向对象思想设计的程序结构清晰、更容易设计和实现。
面向对象思想的继承和多态,强调了程序设计和代码的重用,这在设计新程序的时候,可以最大限度地重用已有的设计和代码,使得程序能够满足新的业务需求并具有较高的质量。
容易扩展
利用面向对象思想的封装、继承和多态,可以设计出“高内聚、低耦合”的程序结构,可以让程序更加灵活、更容易扩展,从而轻松应对软件的扩展需求,降低维护成本。
高内聚,低耦合。
这是软件工程中的一个概念,通常用来判断一个软件设计的好坏。所谓的高内聚是指一个软件模块是由相关性很强的代码组成,只负责某单一任务,也就是常说的“单一责任原则”。而低耦合指的是在一个完整的程序中,模块与程序之间,尽可能保持相互独立,即每个模块尽可能独立完成特定的子功能,模块与模块之间的接口,尽可能的少而简单。
类:数据(变量)和行为(函数)的封装