⾯向对象与⾯向过程的优缺点
⾯向过程
优点:性能⽐⾯向对象⾼,因为类调⽤时需要实例化,开销⽐较⼤,⽐较消耗资源;⽐如单⽚机、嵌⼊式开发、Linux/Unix等⼀般采⽤⾯向过程开发,性能是最重要的因素。
缺点:没有⾯向对象易维护、易复⽤、易扩展
⾯向对象
优点:易维护、易复⽤、易扩展,由于⾯向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能⽐⾯向过程低
⾯向对象程序设计的⼀些显著的特性包括:
.程序设计的重点在于数据⽽不是过程;
.程序被划分为所谓的对象;
.数据结构为表现对象的特性⽽设计;
.函数作为对某个对象数据的操作,与数据结构紧密的结合在⼀起;
.数据被隐藏起来,不能为外部函数访问;
.对象之间可以通过函数沟通;
.新的数据和函数可以在需要的时候轻⽽易举的添加进来;
.在程序设计过程中遵循由下⾄上(bottom-up)的设计⽅法。pascal语言面向对象吗
⾯向对象程序设计在程序设计模式中是⼀个新的概念,对于不同的⼈可能意味着不同的内容。我们对⾯向对象程序设计的定义是"⾯向对象程序设计是⼀种⽅法,这种⽅法为数据和函数提供共同的独⽴内存空间,这些数据和函数可以作为模板以便在需要时创建类似模块的拷贝。这样的程序设计⽅法称为⾯向对象程序设计。"
从以上定义可以看到,⼀个对象被认为是计算机内存中的⼀个独⽴区间,在这个区间中保存着数据和能够访问数据的⼀组操作。因为内存区间是相互独⽴的,所以对象可以不经修改就应⽤于多个不同的程序中。
什么是⾯向对象程序设计?
⾯向对象程序设计(OOP)技术汲取了结构化程序设计中好的思想,并将这些思想与⼀些新的、强⼤的理念相结合,从⽽给你的程序设计⼯作提供了⼀种全新的⽅法。通常,在⾯向对象的程序设计风格中,你会将⼀个问题分解为⼀些相互关联的⼦集,每个⼦集内部都包含了相关的数据和函数。同时,你会以某种⽅式将这些⼦集分为不同等级,⽽⼀个对象就是已定义的某个类型的变量。当你定义了⼀个对象,你就隐含的创建了⼀个新的数据类型。
对象
在⼀个⾯向对象的系统中,对象是运⾏期的基本实体。它可以⽤来表⽰⼀个⼈或者说⼀个银⾏帐户,⼀张数据表格,或者其它什么需要被程序处理的东西。它也可以⽤来表⽰⽤户定义的数据,例如⼀个向量,时间或者列表。在⾯向对象程序设计中,问题的分析⼀般以对象及对象间的⾃然联系为依据。如前所述,对象在内存中占有⼀定空间,并且具有⼀个与之关联的地址,就像Pascal中的record和 C中的结构⼀样。
当⼀个程序运⾏时,对象之间通过互发消息来相互作⽤。例如,程序中包含⼀个"customer"对象和⼀个 "account"对象,⽽customer对象可能会向account对象发送⼀个消息,查询其银⾏帐⽬。每个对象都包含数据以及操作这些数据的代码。即使不了解彼此的数据和代码的细节,对象之间依然可以相互
作⽤,所要了解的只是对象能够接受的消息的类型,以及对象返回的响应的类型,虽然不同的⼈会以不同的⽅法实现它们。
类
我们刚才提到,对象包含数据以及操作这些数据的代码。⼀个对象所包含的所有数据和代码可以通过类来构成⼀个⽤户定义的数据类型。事实上,对象就是类类型(class type)的变量。⼀旦定义了⼀个类,我们就可以创建这个类的多个对象,每个对象与⼀组数据相关,⽽这组数据的类型在类中定义。因此,⼀个类就是具有相同类型的对象的抽象。例如,芒果、苹果和桔⼦都是fruit类的对象。类是⽤户定义的数据类型,但在⼀个程序设计语⾔中,它和内建的数据类型⾏为相同。⽐如创建⼀个类对象的语法和创建⼀个整数对象的语法⼀模⼀样。
数据抽象和封装
把数据和函数包装在⼀个单独的单元(称为类)的⾏为称为封装。数据封装是类的最典型特点。数据不能被外界访问,只能被封装在同⼀个类中的函数访问。这些函数提供了对象数据和程序之间的接⼝。避免数据被程序直接访问的概念被称为"数据隐藏"。
抽象指仅表现核⼼的特性⽽不描述背景细节的⾏为。类使⽤了抽象的概念,并且被定义为⼀系列抽象
的属性如尺⼨、重量和价格,以及操作这些属性的函数。类封装了将要被创建的对象的所有核⼼属性。因为类使⽤了数据抽象的概念,所以它们被称为抽象数据类型(ADT)。
封装
封装机制将数据和代码捆绑到⼀起,避免了外界的⼲扰和不确定性。它同样允许创建对象。简单的说,⼀个对象就是⼀个封装了数据和操作这些数据的代码的逻辑实体。
在⼀个对象内部,某些代码和(或)某些数据可以是私有的,不能被外界访问。通过这种⽅式,对象对内部数据提供了不同级别的保护,以防⽌程序中⽆关的部分意外的改变或错误的使⽤了对象的私有部分。
继承
继承是可以让某个类型的对象获得另⼀个类型的对象的属性的⽅法。它⽀持按级分类的概念。例如,知更鸟属于飞鸟类,也属于鸟类。这种分类的原则是,每⼀个⼦类都具有⽗类的公共特性。
在 OOP中,继承的概念很好的⽀持了代码的重⽤性(reusability),也就是说,我们可以向⼀个已经存在的类中添加新的特性,⽽不必改变这个类。这可以通过从这个已存在的类派⽣⼀个新类来实现。这个新的类将具有原来那个类的特性,以及新的特性。⽽继承机制的魅⼒和强⼤就在于它允许程序员
利⽤已经存在的类(接近需要,⽽不是完全符合需要的类),并且可以以某种⽅式修改这个类,⽽不会影响其它的东西。
注意,每个⼦类只定义那些这个类所特有的特性。⽽如果没有按级分类,每类都必须显式的定义它所有的特性。
多态
多态是OOP的另⼀个重要概念。多态的意思是事物具有不同形式的能⼒。举个例⼦,对于不同的实例,某个操作可能会有不同的⾏为。这个⾏为依赖于所要操作数据的类型。⽐如说加法操作,如果操作的数据是数,它对两个数求和。如果操作的数据是字符串,则它将连接两个字符串。
多态机制使具有不同内部结构的对象可以共享相同的外部接⼝。这意味着,虽然针对不同对象的具体操作不同,但通过⼀个公共的类,它们(那些操作)可以通过相同的⽅式予以调⽤。多态在实现继承的过程中被⼴泛应⽤。
⾯向对象程序设计语⾔⽀持多态,术语称之为"one interface multiple method(⼀个接⼝,多个实现)"。简单来说,多态机制允许通过相同的接⼝引发⼀组相关但不相同的动作,通过这种⽅式,可以减少代码的复杂度。在某个特定的情况下应该作出怎样的动作,这由编译器决定,⽽不需要程序员⼿⼯⼲预。
在多函数程序中,许多重要的数据被声明为全局变量,这样它们才可以被所有的函数访问。每个函数⼜可以具有它⾃⼰的局部变量。全局变量很容易被某个函数不经意之间改变。⽽在⼀个⼤程序中,很难分辨每个函数都使⽤了哪些变量。如果我们需要修改某个外部数据的结构,我们就要修改所有访问这个数据的函数。这很容易导致bug的产⽣。
在结构化程序设计中,另⼀个严重的缺陷是不能很好的模拟真实世界的问题。这是因为函数都是⾯向过程的,⽽不是真正的对应于问题中的各个元素。
⾯向过程的程序设计的⼀些特点如下:
.强调做(算法);
.⼤程序被分隔为许多⼩程序,这些⼩程序称为函数;
.⼤多数函数共享全局数据;
.数据开放的由⼀个函数流向另⼀个函数。函数把数据从⼀种形式转换为另⼀种形式。
采⽤由上⾄下的程序设计⽅法。
动态绑定
绑定指的是将⼀个过程调⽤与相应代码链接起来的⾏为。动态绑定的意思是,与给定的过程调⽤相关联的代码只有在运⾏期才可知。它与多态和继承的联系极为紧密。⼀个多态引⽤的函数调⽤决定于这个引⽤的动态类型。
消息传递
⼀个⾯向对象的程序由许多对象组成,这些对象之间需要相互沟通。因此,在⾯向对象程序设计语⾔中,程序设计的主要步骤如下:
1、创建类,这些类定义了对象及其⾏为;
2、由类定义创建对象;
3、建⽴对象之间的通讯。
对象之间通过收发信息相互沟通,这⼀点类似于⼈与⼈之间的信息传递。信息传递的概念使得真实世界的直接模拟更易于和建⽴系统交流。
对于某个特定对象来说,消息就是请求执⾏某个过程,因此,消息的接收对象会调⽤⼀个函数(过程),以产⽣预期的结果。传递的消息的内容包括接收消息的对象的名字,需要调⽤的函数的名字,以及必要的信息。
对象就有⼀个⽣命周期。它们可以被创建和销毁。只要对象正处于其⽣存期,就可以与其进⾏通讯。
OOP的优点
OOP具有许多优点,⽆论是对于程序设计者或者⽤户来说都是如此。⾯向对象为软件产品扩展和质量保证中的许多问题提供了解决办法。这项技术能够⼤⼤提⾼程序员的⽣产⼒,并可提⾼软件的质量以及降低其维护费⽤。其主要的优点陈列于下:
1、通过继承,我们可以⼤幅减少多余的代码,并扩展现有代码的⽤途;
2、我们可以在标准的模块上(这⾥所谓的"标准"指程序员之间彼此达成的协议)构建我们的程序,⽽不必⼀切从头开始。这可以减少软件开发时间并提⾼⽣产效率;
3、数据隐藏的概念帮助程序员们保护程序免受外部代码的侵袭;
4、允许⼀个对象的多个实例同时存在,⽽且彼此之间不会相互⼲扰;
5、允许将问题空间中的对象直接映射到程序中;
6、基于对象的⼯程可以很容易的分割为独⽴的部分;
7、以数据为中⼼的设计⽅法允许我们抓住可实现模型的更多细节;
8、⾯向对象的系统很容易从⼩到⼤逐步升级;
9、对象间通讯所使⽤的消息传递技术与外部系统接⼝部分的描述更简单;
10、更便于控制软件复杂度。
当需要将以上所说的所有特性有机的结合于⼀个⾯向对象系统中,它们之间的相对重要性就取决于⼯程的类型和程序员的喜好。为了获得上述的某些优势,必须考虑很多事情。例如,对象库必须可以被重⽤。技术还在不停的发展,现有的产品也会很快的更新换代。如果重⽤没有能够实现,那么就需要进⾏严格的控制和管理。
易于使⽤的开发软件往往难以编写。⾯向对象程序设计⼯具有望解决这个问题。
⾯向对象程序设计语⾔
⾯向对象技术并不是某个特定语⾔的特权。如同结构化程序设计⼀样,OOP概念可以在很多语⾔⽐如C和Pascal中实现。但是,当程序越来越⼤时,程序设计⼯作会变得拙劣⽽混乱。⽽⼀个⽀持OOP概念的程序设计语⾔则可以让⼀切变得简单。
⼀个语⾔必须⽀持⼏个主要的OOP概念才能称其是⾯向对象的。根据所⽀持的OOP特性,语⾔可以分为以下两类:
1、基于对象的程序设计语⾔;
2、⾯向对象的程序设计语⾔。
基于对象的程序设计语⾔仅⽀持封装和对象辨识。
⼀个⾯向对象的程序设计语⾔所要⽀持的重要特性如下:
.数据封装
.数据隐藏和访问机制
.对象的⾃动初始化和清除
.操作符重载
⽀持对象风格程序设计的语⾔称为基于对象的程序设计语⾔。它们不⽀持继承和动态绑定。
Ada就是⼀个典型的基于对象的程序设计语⾔。
⾯向对象的程序设计不仅仅包含基于对象程序设计的特性,还⽀持继承和动态绑定。
OOP的应⽤
OOP最有前途的应⽤领域如下:
1、实时系统;
2、仿真和建模;
3、⾯相对象数据库;
4、超⽂本、超媒体和扩展⽂本;
5、AI和专家系统;
6、神经⽹络和并⾏程序设计;
7、决策⽀持和⾃动化系统;
8、CIM/CAM/CAD系统。
Via
业务逻辑⽐较简单的适合⽤⾯向过程,例如统计当前在线⽤户数,⼀条SQL语句就可以搞定的没有多⼤必要⽤⾯向对象,也没有必要⽤什么设计模式,那样就是简单问题复杂化了。
业务逻辑⽐较复杂的适合⽤⾯向对象,这样当需求有变化时,维护起来会⽐较⽅便。
⾯向对象的局部是⾯向过程的,⽐如某个类⾥⾯某个⽅法⾥⾯实际就是⾯向过程的,⽽⾯向过程会借⽤⾯向对象的⼀些优点来进⾏优化。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论