OOP和OPP
OPP(面向过程)
优点:调用的时候不需要实例化,不消耗资源,性能比面向对象高
缺点:没有面向对象易维护、易复用、易扩展 .
OOP(面向对象)
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
OOP面向对象程序设计的一些显著的特性包括:
程序设计的重点在于数据而不是过程;
程序被划分为所谓的对象;
数据结构为表现对象的特性而设计;
函数作为对某个对象数据的操作,与数据结构紧密的结合在一起;
数据被隐藏起来,不能为外部函数访问;
对象之间可以通过函数沟通;
新的数据和函数可以在需要的时候轻而易举的添加进来;
在程序设计过程中遵循由下至上(bottom-up)的设计方法。
OOP面向对象程序设计
对象
对象是运行期的基本实体,当一个程序运行时,对象之间通过互发消息来相互作用。对象之间可以相互作用,所要了解的只是对象能够接受的消息的类型,以及对象返回的响应的类型。
类
一个对象所包含的所有数据和代码可以通过类来构成一个用户定义的数据类型。一旦定义了一个类,我们就可以创建这个类的多个对象,每个对象与一组数据相关,而这组数据的类型在类中定义。一个类就是具有相同类型的对象的抽象。
数据抽象和封装
把数据和函数包装在一个单独的单元(称为类)的行为称为封装。数据封装是类的最典型特点。数据不能被外界访问,只能被封装在同一个类中的函数访问。这些函数提供了对象数据和程序之间的接口。避免数据被程序直接访问的概念被称为"数据隐藏"。
封装机制将数据和代码捆绑到一起,避免了外界的干扰和不确定性。它同样允许创建对象。简单的说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体。在一个对象内部,某些代码和(或)某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
继承
继承是可以让某个类型的对象获得另一个类型的对象的属性的方法。
在 OOP中,继承的概念很好的支持了代码的重用性(reusability),也就是说,我们可以向一个已经存在的类中添加新的特性,而不必改变这个类。这可以通过从这个已存在的类派生一个新类来实现。这个新的类将具有原来那个类的特性,以及新的特性。而继承机制的魅力和强大就在于它允许程序员利用已经存在的类(接近需要,而不是完全符合需要的类),并且可以以某种方式修改这个类,而不会影响其它的东西。
多态
多态是OOP的另一个重要概念。多态的意思是事物具有不同形式的能力。(设计模式 -- 策略模式)
多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。多态在实现继承的过程中被广泛应用。
OOP的优点
1、通过继承,我们可以大幅减少多余的代码,并扩展现有代码的用途;
2、我们可以在标准的模块上(这里所谓的"标准"指程序员之间彼此达成的协议)构建我们的程序,而不必一切从头开始。这可以减少软件开发时间并提高生产效率;
3、数据隐藏的概念帮助程序员们保护程序免受外部代码的侵袭;
4、允许一个对象的多个实例同时存在,而且彼此之间不会相互干扰;
5、允许将问题空间中的对象直接映射到程序中;
6、基于对象的工程可以很容易的分割为独立的部分;
7、以数据为中心的设计方法允许我们抓住可实现模型的更多细节;
8、面向对象的系统很容易从小到大逐步升级;
9、对象间通讯所使用的消息传递技术与外部系统接口部分的描述更简单;
10、更便于控制软件复杂度。
比喻:OOP盖浇饭,OPP蛋炒饭