解读面向对象的程序设计(二)

开发 开发工具
本文是本系列的第二篇,主要介绍的是OOP技术的历史,以及优点和缺点,希望对你有帮助,一起来看。

面向对象编程(ObjectOrientedProgramming,OOP,面向对象程序设计)是一种计算机编程架构。接上一篇

OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。

一、OOP技术的历史

面向对象技术最初是从面向对象的程序设计开始的,它的出现以60年代simula语言为标志。80年代中后期,面向对象程序设计逐渐成熟,被计算机界理解和接受,人们又开始进一步考虑面向对象的开发问题。这就是九十年代以MicrosoftVisual系列OOP软件的流行的背景。

传统的结构化分析与设计开发方法是一个线性过程,因此,传统的结构化分析与设计方法要求现实系统的业务管理规范,处理数据齐全,用户能全面完整地其业务需求。

传统的软件结构和设计方法难以适应软件生产自动化的要求,因为它以过程为中心进行功能组合,软件的扩充和复用能力很差。

对象是对现实世界实体的模拟,因面能更容易地理解需求,即使用户和分析者之间具有不同的教育背景和工作特点,也可很好地沟通。

区别面向对象的开发和传统过程的开发的要素有:对象识别和抽象、封装、多态性和继承。

对象(Object)是一个现实实体的抽象,由现实实体的过程或信息牲来定义。一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,这个程序产生该对象的动作或对它接受到的外界信号的反应。这些对象操作有时称为方法。对象是个动态的概念,其中的属性反映了对象当前的状态。

类(Class)用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

由上分析不难看出,尽管OOP技术更看中用户的对象模型,但其目的都是以编程为目的的,而不是以用户的信息为中心的,总想把用户的信息纳入到某个用户不感兴趣的“程序对象”中。

二、OOP的优缺点

OOP的优点

使人们的编程与实际的世界更加接近,所有的对象被赋予属性和方法,结果编程就更加富有人性化。

OOP的缺点

就C++而言,由于面向更高的逻辑抽象层,使得C++在实现的时候,不得不做出性能上面的牺牲,有时候甚至是致命的(所有对象的属性都经过内置多重指针的间接引用是其性能损失的主要原因之一;不过,笔者的局限性在于未使用过VC++外的面向对象语言,所以不是十分肯定,哈哈,有人笑出来了…)。

在计算机速度飞速发展的今天,你可能会说,一丁点的性能牺牲没什么大不了。是的,从面向对象的角度,使的编程的结构更加清晰完整,数据更加独立和易于管理,性能的牺牲可以带来这么多的好处,没有理由不做稳赚的生意吧?

不过,在某些对速度要求极高特殊场合,例如你做的是电信的交换系统,每秒钟有超过百万的人同时进行电话交换,如果,每一个数据交换过程都是一个对象,那么总的性能损失将是天文数字!!

或者这个例子不够贴身,再举个例子吧。假如你受聘于一个游戏设计公司,老板希望做出来的游戏可以更多的兼顾到更多的电脑使用者,游戏每秒钟的运行的帧可以更多,子弹和爆炸物可以更多、更华丽。那么,你会发现使用C++会使你的程序变得笨拙,无法满足你的需求,除非你非得要你的游戏运行于奔腾四的机器上(如果不是,而你又坚持用C++的对象编程,那么请减少主角的枪的威力吧)。

如果你是冥顽不宁的人,你说不相信OOP会有性能上的损失,那么,我记得曾看到在CSDN上关于VB和VC执行效率的讨论的文章,讲述的就是使用了MFC以后,执行效率甚至低于VB开发出来的东西。请各位验证一下:如果使用的是纯粹的C语言语法的话,那么一定会比在VB编出来的东西要快很多(GetTickCount函数可以查阅MSDN,如果想更加精确一些,可以使用QueryPerformanceCounter函数)。

进一步阅读:解读面向对象的程序设计(三)

【编辑推荐】

  1. 用Objective-C进行面向对象的编程
  2. 详细介绍Scala面向对象编程
  3. JavaScript面向对象编程深入分析
  4. 软件设计师:关于面向对象的一些思考
责任编辑:于铁 来源: 互联网
相关推荐

2011-07-05 16:05:43

面向对象编程

2011-07-05 15:22:04

程序设计

2022-06-07 14:13:58

Simula编程语言GNU cim

2012-03-14 10:48:05

C#

2009-10-21 17:36:36

VB基础教程

2011-07-10 15:36:54

C++

2013-12-16 16:58:47

OpenMP并行

2013-04-17 10:46:54

面向对象

2010-12-24 10:23:50

程序员

2011-04-11 10:44:53

对象编程C++

2012-06-07 10:11:01

面向对象设计原则Java

2011-08-25 14:43:55

LUA对象序列化

2013-12-12 16:30:20

Lua脚本语言

2012-12-25 10:51:39

IBMdW

2011-05-25 10:59:26

Javascript继承

2011-05-13 10:51:25

javascript

2012-05-31 10:24:59

架构

2015-03-16 11:14:26

Java程序员面向对象程序员

2012-03-13 09:24:30

Java

2010-08-24 16:00:43

C语言
点赞
收藏

51CTO技术栈公众号