发布网友 发布时间:2022-03-30 05:08
共4个回答
热心网友 时间:2022-03-30 06:37
前言:面向对象程序设计(Object-Oriented Programming,以下简称OOP)是一种起源于六十年代的Simula语言,发展已经将近三十年的程序设计思想。其自身理论已经十分完善,并被多种面向对象程序设计语言(Object-Oriented Programming Language,以下简称OOPL)实现。如果把Unix系统看成是国外在系统软件方面的文化根基,那么Smalltalk语言无疑在OOPL领域和Unix持有相同地位。由于很多原因,国内大部分程序设计人员并没有很深的OOP以及OOPL理论,很多人从一开始学习到工作很多年都只是接触到c/c++,java,vb,delphi等静态类型语言,而对纯粹的OOP思想以及作为OOPL根基的Smalltalk以及动态类型语言知之甚少,不知道其实世界上还有一些可以针对变量不绑定类型的编程语言。而这些对比却是深刻理解OO理论的重要部分,而国内这方面的资料也为数不多。故把自己的一些OO学习心得写下来做为一个系列文章(一共三篇,第一篇描叙OOP的一些基本但容易被误解的理论,第二篇主要说明各种OOPL演化和发展以及对于OOP理论的支持,第三篇主要是说模式和组件在OOP中的地位以及展望OOP的未来),由于文章描叙的只是自己对于OOP/OOPL的理解,错误以及浅薄之处在所难免,只是希望对大家能起到抛砖引玉的作用。
参考资料:http://ke.baidu.com/view/10110.htm?fr=ala0_1
热心网友 时间:2022-03-30 07:55
C + +
概念:创建软件重用代码的面向对象编程(面向对象编程,简称OOP),并有能力以更好地模拟现实世界的环境,这使得它承认,因为自顶向下的编程获得者。它通过添加扩展程序语句,“包”到“对象”的编程功能。面向对象的编程语言,使复杂的工作是有组织性,容易写。说它是一场*,而不是对象本身,而是他们处理工作的能力。与传统的程序设计和编程方法,只是其中的一部分,面向对象的,对象是不兼容的,反而会使情况变得更糟。除非整个开发环境是面向对象或对象的利益,没有带来的麻烦。有人可能会说PHP不是一个真正的面向对象的编程语言,PHP是一种混合语言,你可以使用面向对象的编程,也可以使用传统的过程化编程。然而,对于大型项目的发展,你可能想在PHP中使用纯面向对象的编程,声明类,而且在你的项目只用对象和类的发展。随着项目的不断增长,使用面向对象的编程可能是有帮助的,面向对象的编程代码,易于维护,易于理解和重用是软件工程的基础。应用这些概念在一个基于Web的项目选址在未来取得成功的关键。
对象(Object)的问题域或域名的事情,在一些抽象的,而且它反映的事情,需要被保存在系统的信息和作用,它是一组属性和有权对这些属性的封装主体的操作的一组服务。要了解两种方法的对象:一方面,是指在系统中处理现实世界中的对象;另一方面,计算机不直接处理的对象,但处理的计算机,这计算机也被称为对象。简单来说,一个人是一个对象,统治者也可以说是一个对象。这些对象时,可以说,我们的数据直接称他为一个属性,标尺的度量单位是厘米,米或英尺的计量单位是统治者的属性。
热心网友 时间:2022-03-30 09:30
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
我的第一次关于程序的本质的思考其实发生在不久
前。那是我在OICQ 上与Soul 的一次谈话。
Soul(王昊) 是DelphiBBS 现任的总版主,是我很敬重的
一位程序员。那时我们正在做DelphiBBS 的一个“B 计划
II ”,也就是出第二本书。他当时在写一篇有关“面向对
象(OOP) ”的文章。而我正在写《Delphi 源代码分析》,在
初期的版本里,有“面向对象”这一部分的内容。我们的
对话摘要如下①:
Soul:我在写书讨论“面向对象的局限性”
我 :En.这个倒与我的意见一致。哈哈哈。
我 :“绝对可以用面向过程的方法来实现任意复杂的系统。要知道,航
天飞机也是在面向过程的时代上的天。但是,为了使一切变得不是
那么复杂,还是出现了‘面向对象程序设计’的方法。”
我 :——哈,我那本书里,在“面向对象”一部分前的引文中。就是这
样写的。
Soul:现在的程序是按照冯。诺伊曼的第一种方案做的,本来就是顺序的,
而不是同步的。CPU怎么说都是一条指令一条指令执行的。
我 :面向过程是对“流程”、“结构”和“编程方法”的高度概括。而
面向对象本身只解决了“结构”和“编程方法”的问题,而并没有
对“流程”加以改造。
Soul:确实如此。确实如此。
我 :对流程进一步概括的,是“事件驱动”程序模型。而这个模型不是
OO提出的,而是Windows的消息系统内置的。所以,现在很多人迷
惑于“对象”和“事件”,试图通过OO来解决一切的想法原本就是
很可笑的。
Soul:我先停下来,和你讨论这个问题,顺便补充到书里去。
我 :如果要了解事件驱动的本质,就应该追溯到Windows内核。这样就
涉及到线程、进程和窗体消息系统这些与OO无关的内容。所以,整
个RAD的编程模型是OO与OS一起构建的。现在很多的开发人员只知
其OO的外表,而看不到OS的内核,所以也就总是难以提高。
Soul:OO里面我觉得事件的概念是很牵强的,因为真正的对象之间是相互
作用,就好像作用力和反作用力,不会有个“顺序”的延时。
我 :应该留意到,整个的“事件”模型都是以“记录”和“消息”的方
式来传递的。也就是说,事件模型停留在“面向过程”编程时代使
用的“数据结构”的层面上。因此,也就不难明白,使用/不使用
OO都能写Windows程序。
我 :因为流程还是在“面向过程”时代。
Soul:所以所谓的面向对象的事件还是“顺序”的。所以我们经常要考虑
一个事件发生后对其他过程的影响,所以面向对象现在而言是牵强
的。
我 :如果你深入OS来看SEH,来看Messages,就知道这些东西原本就不
是为了“面向对象”而准备的。面向对象封装了这些,却无法改造
它们的流程和内核。因为OO的抽象层面并不是这个。
我 :事件的连续性并不是某种编程方法或者程序逻辑结构所决定的。正
如你前面所说的,那是CPU决定的事。
Soul:比如条件选择,其实也可以用一种对象来实现,而事实没有。这个
是因为cpu的特性和面向对象太麻烦。
我 :可能,将CPU做成面向对象的可能还是比较难于想象和理解。所以
MS才启动.NET Framework。我不认为.NET在面向对象方法上有什么
超越,也不认为它的FCL库会有什么奇特的地方。——除了它们足
够庞大。但是我认为,如果有一天OS也是用.NET Framework来编写
的,OS一级的消息系统、异常机制、线程机制等等都是.NET的,都
是面向对象的。那么,在这个基础上,将“事件驱动”并入OO层面
的模型,才有可能。
Soul:所以我发觉面向对象的思维第一不可能彻底,第二只能用在总体分
析层上。在很多时候,实质上我们只是把一个顺序的流程折叠成对
象。
我 :倒也不是不可能彻底。有绝对OO的模型,这样的模型我见过。哈
哈~~但说实在的,我觉得小应用用“绝对OO”的方式来编写,有
失“应用”的本意。我们做东西只是要“用”,而不是研究它用的
是什么模型。所以,“Hello World”也用OO方式实现,原本就只
是出现在教科书中的Sample罢了。哈哈。
Soul:还有不可能用彻底的面向对象方法来表达世界。 因为这个世界不
是面向对象的。 是关系网络图,面向对象只是树,只能片面的表
达世界。所以很多时候面向对象去解决问题会非常痛苦。所以编程
退到数据结构更合理,哈哈。
我 :如果内存是“层状存取”的,那么我们的“数据结构”就可以基于
多层来形成“多层数据结构”体系。如果内存是“树状存取”的,
那么我们当然可以用“树”的方式来存取。——可惜我们只有顺序
存取的内存。
我 :程序=数据+算法
——这个是面向过程时代的事。
程序=数据+算法+方法
——在OO时代,我们看到了事件驱动和模型驱动,所以出现了“方
法”问题。
Soul:我的经验是:总体结构->面向对象,关系->数据结构,实现->算法
Soul:看来我们对面向对象的认识还是比较一致的。
以上对话摘至《大道至简》 软件工程老程序员实践者的思想,周爱民(Aimingoo) 著
热心网友 时间:2022-03-30 11:21
就是指,面向子程序,子程序是他人设计好的程序打个包,放到那等你调用,一个完整的程序是由许多子程序组成的