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

简介:

面向对象编程(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函数)。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
C语言
C语言中的条件运算符和条件表达式详解
C语言中的条件运算符和条件表达式详解
1209 0
|
前端开发 UED 开发者
有趣的CSS - 文字加载动画效果
这个文本加载动画简单而有趣,可以在网站标题、广告标语或者关键信息的展示上吸引用户的注意力。开发者可以根据需要调整动画的持续时间、步骤数,或者光标颜色等,来适应特定的设计需求。使用这种动态元素,增强网站的互动性和用户体验,同时也为网站增添了一抹活泼的风格。
343 5
|
存储 缓存 负载均衡
高并发系统架构的设计挑战与应对策略
【8月更文挑战第18天】高并发系统架构设计是一项复杂而重要的任务。面对性能瓶颈、稳定性与可靠性、并发控制和可扩展性等挑战,开发人员需要采取一系列有效的策略和技术手段来应对。通过负载均衡、缓存技术、数据库优化、异步处理、并发控制、弹性设计及监控与调优等手段,可以设计出高性能、高可用和高可扩展性的高并发系统架构,为用户提供优质的服务体验。
|
机器学习/深度学习 数据采集 存储
使用Python实现深度学习模型:智能医疗影像分析
使用Python实现深度学习模型:智能医疗影像分析
343 0
|
存储 算法 Java
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法。
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法。
|
存储 机器学习/深度学习 编解码
数字图像处理(二) 数字图像处理基础(下)
数字图像处理(二) 数字图像处理基础(下)
397 0
|
Oracle 关系型数据库 MySQL
|
搜索推荐 安全 Java
Python中使用requests库进行会话管理与Cookie处理
【4月更文挑战第12天】在Web开发中,会话管理和Cookie处理是处理用户状态和个性化体验的关键部分。在Python中,`requests`库为我们提供了强大的会话管理功能,通过`Session`对象,我们可以轻松地进行跨请求的状态保持,包括自动处理Cookie。本文将详细介绍如何在Python中使用`requests`库进行会话管理和Cookie处理。
|
算法 Java
游戏匹配系统的奥秘,Java代码揭秘
游戏匹配系统的奥秘,Java代码揭秘
373 1
|
运维 安全 程序员
如何使用远程控制软件并将用途最大化?4款国内外优质应用测评解析
如何使用远程控制软件并将用途最大化?4款国内外优质应用测评解析
306 0
如何使用远程控制软件并将用途最大化?4款国内外优质应用测评解析