目录
POP
POP(Procedure Oriented Programming,面向过程编程)就是分析出解决问题所需要的步骤,然后用函数将这些步骤一个个实现,使用的时候一个个调用相应的函数达到目的。
把大段代码拆成一个个、一层层函数,可以把复杂任务分解为一个个简单的任务,这种分解可以称之为面向过程编程。函数是面向过程编程的基本单元。
函数式编程可以归类为面向过程编程,是一种抽象程度高的编程范式。纯粹的函数式编程里的函数是没有变量的,其中的任意一个函数只要输入确定,那么输出也是确定的,这种纯函数可以称之为没有副作用。而允许使用变量的函数式编程,因为函数内部的变量状态不确定,同样的输入可能得到不同的输出,因此这样的函数可以称之为是有副作用的。
函数式编程的一个特点就是允许将函数本身作为参数传入给另一个函数,还允许返回一个函数。
面向过程编程性能一般比面向对象编程高,像单片机、嵌入式开发、Unix/Linux一般采用面向过程编程开发,因为很重视性能。
采用面向过程编程的编程语言典型代表就是C语言。PHP语言可以同时应用面向过程方式和面向对象方式来编程。
相比较面向对象编程,面向过程编程更重视算法,更轻视数据。面向过程编程一般没有面向对象编程易维护、易复用、易拓展。
OOP
OOP(Object Oriented Programming,面向对象编程)是把解决问题的流程化步骤以对一个个对象进行独立操作的形式展现出来。
面向对象编程易维护、易复用、易拓展。由于面向对象有封装、继承、多态这些特性,可以设计出低耦合的系统,使系统更加灵活,更容易维护。
面向对象编程有两个特点,一是数据隐藏,二是代码重用。
面向对象编程里的数据隐藏称为数据封装。面向对象编程将数据绑定到类上及类的对象上,可以将类中的数据程序声明为私有(Private)或者公有(Public),这样可以避免核心数据暴露在外。类与C语言里的结构体很相似,但是结构体不允许一起打包数据及相关的处理函数,而类允许。另外,C语言里的结构体里并不支持数据隐藏,结构体里的数据成员可以任意访问。
面向对象编程的继承特性使代码可以重用,通过继承,可以让一个类获取另一个类的特性。面向对象编程还提供了多态、动态绑定特性,这些都能提高代码的重用性。
多态的特点:
(1).要有继承。
(2).要有重写。
(3).父类引用指向子类对象。
在面向对象编程里,可以理解为 类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象。
抽象类的特点:
- .抽象类不能实例化。
- .抽象方法是必须被子类重写的方法。
- .如果一个类中包含抽象方法,那么这个类就必须被定义为抽象类,不论这个类中是否还有别的一般方法。
接口的特点:
- .接口不能实例化。
- .接口不能有构造方法和字段。
- .不能有修饰符,如public、private等。而且方法里没有方法体。
- .不能声明为虚拟的或静态。
- .实现接口必须实现接口里的所有方法和属性。
接口和抽象类的区别:
- .抽象类能给出一些成员的实现,而接口不包含成员的实现。
- .抽象类的抽象成员可以被子类部分的实现,而接口的成员则需要被实现类全部实现。
- .一个类只能继承一个抽象类,但可以实现多个接口。
- .接口是对类的部分行为的抽象,而抽象类是对类整体(字段、属性、方法)的抽象。
相比较面向过程编程,面向对象编程更重视数据,更轻视算法。面向对象编程一般没有面向过程编程的性能高,因为类调用时需要实例化,而实例化开销比较大,比较消耗资源。
OOP相关概念(OO、OOA、OOD)
OO(Object Oriented,面向对象)可以理解为是将对问题的理解分解转化为对各个对象的理解。
OOA(Object Oriented Analysis,面向对象分析)可以理解为对需求中描述的问题,进行模块化的处理,描述问题的本质,区分出每个问题的不同点和相同点,整理出一个个对象。在用OOA分析一个事务时,一般有以下五个步骤:
- .确定对象和类。
- .确定结构(Structure)。
- .确定主题(Subject)。
- .确定属性(Attribute)。
- .确定方法(Method)。
OOD(Object Oriented Design,面向对象设计)可以理解为是对程序内部各个部分之间的依赖关系进行设计。
七种常用的OOD原则:
1.单一职责。一个类只负责一个功能领域里的相应职责。
2.开闭原则。软件实体应该对扩展开放,对修改关闭。
3.里氏代换原则。所有引入基类对象的地方能够透明地使用其子类的对象。
4.依赖倒转原则。抽象不应该依赖细节,而细节应该依赖抽象。
5.接口隔离原则。使用多个专门的接口,而不使用单一的总接口。
6.合成复用原则。多使用对象组合,少使用继承来达到代码复用的目的。
7.迪米特法则。一个软件实体应该尽量少地与其它实体发生相互作用。