1. 如何实现面向对象编程
以打印机Print对象为例,系统中只存在一台打印机,此时按以下方法提供接口,
首先,给出printer.h,里面写明对外的接口,
2. 什么是面向对象编程
前言:面向对象程序设计(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的理解,错误以及浅薄之处在所难免,只是希望对大家能起到抛砖引玉的作用。
3. 什么叫做面向对象的编程
具个例子吧.......
用户登陆
面向过程的写法是
if (名字和密码正确) {}
else if (密码错误) {}
....
面向对象的写法是
try {}
catch (密码错误Exception) {}
再简单的说
面向对象就是别人给你一个东西 比如String 你处理他就是了 你不要去想他给你的String的具体数值是什么 你是的想法是站在"处理方"的
而面向过程就是要考虑这个东西里面的数值 再根据具体的数值来决定走向 你的想法是站在"被处理方"的
至于什么以上说的什么封装 继承 什么的 那都是为了完成这个而必须要用到的功能 不是说有这功能就是面向对象 我也可以用JAVA写面向过程 一样用封装 用继承
OO是一种思路 是一种模式 多从这方面想就会慢慢明白了
4. 什么叫面向对象编程
面向对象编程通俗概括如下
面向对象(Object Oriented,OO)是软件开发方法。
面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
要素有以下四点
抽象
封装性
共享性
强调对象结构而不是程序结构
面向对象程序设计
面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。
已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。 此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。反对者在某些领域对此予以否认。
当我们提到面向对象的时候,它不仅指一种程序设计方法。它更多意义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Oriented Design,简称OOD)方面的知识。
5. 面向对象编程是什么意思
面向对象编程又称OOP,是一种计算机编程架构。本质是以建立模型体现出来的抽象思维过程和面向对象的方法。
OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。
面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程,也即使得描述问题的问题空间与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。
(5)向对象编程扩展阅读
面向对象程序设计以对象为核心,该方法认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。在面向对象的程序设计中,对象是组成程序的基本模块。
模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
6. 什么是面向对象的编程语言啊
面向对象语言(Object-Oriented Language)是一类以对象作为基本程序结构单位的程序设计语言。指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。
其特点如下:
(1)任何事物都是对象。
(2)运行期的基本实体,也是一个包括数据和操作这些数据的代码的逻辑实体。
(3)每个对象可以有自己的内存空间包含其他对象。
(4)类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。
(5)程序由一系列的对象组合,它们通过发送消息告诉彼此做什么。
(6)封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。
(7)一个特定类型的所有对象都可以接受同样的消息。
(8)继承是让某个类型的对象获得另一个类型的对象的特征。
(9)每一个对象都有类型。
(10)多态是指不同事物具有不同表现形式的能力。
注意事项:
Java是一门面向对象编程语言,具有功能强大和简单易用两个特征。
C语言是面向过程的程序设计语言,与C++,Java等面向对象的编程语言有所不同。
VB是一种面向对象的可视化程序设计语言,采取了事件驱动的编程机制。
(6)向对象编程扩展阅读:
面向对象编程的优点:
易维护 :可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块。
易扩展 :通过继承,我们可以大幅减少多余的代码,并扩展现有代码的用途;
模块化 :封装可以定义对象的属性和方法的访问级别,通过不同的访问修饰符对外暴露安全的接口,防止内部数据在不安全的情况下被修改。
方便建模:很多时候可以使用现实生活中对象的概念抽象后稍作修改来进行建模,极大方便了建模的过程。
7. 什么是面向对象编程
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
对于面向对象的理解。面向对象编程就是把自然界中的事物抽象成一个类,这个类可能会有一些属性。比如说把“人”抽象成一个类,那么人有身高、体重、三围等等属性。同时这个类可能会有一些方法,比如“人”可以吃喝(对自己的影响是增加体力)、可以走路和跑跳(~使自己产生位移)。
用伪代码定义一下人这个类
人
{
//属性有
姓名,
身高,
体重,
……
//方法有
吃(东西), //参数可以是不同的东西,获得的能量也不同。
走(方向),
……
}
类的实例叫做对象,在程序中可以通过实例化这个类来描述一个人的属性,比如这个人叫张三,身高180cm,80kg,三围是xx、xx、xx等等。
比如我们做了一个游戏,那么在新玩家创建角色的时候,就可以让玩家选择他角色的名字、外形等等参数,然后,用“人”这个类,实例化一个对象,然后在游戏中可以通过键盘或者鼠标触发走的动作。
8. 什么是面向对象的编程方法
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
9. 什么是面向对象编程
面相对象不是某一种语言的特性,而是一种编程思想。 C也是可以编写出很好的OO代码的,Gtk+就是典型的例子。
我们很多初学者往往一提到面相对象就一头雾水,我觉得很大程度上都是因为我们学习的第一们语言是C,而struct总是在后面才讲到,用C实现继承技术需要一定技巧,一般的教材上都不讲,加之我们刚开始遇到的学习程序有很小,很容易一个简单的流程就处理完了这所有因素结合在一起,就导致我们用程序解决问题的思维有了 一个定式: 任务是什么流程? 把流程切割成哪几块? 每块定义成什么函数?
等到我们所面临的业务比较复杂了,原本线状的流程图也就变成一个可怕的网状流程,我们根本找不到哪里是开始,哪里是结束,自然就无从下手
个人觉得,面向过程(或面向函数)的思维方式,其实就是程序员要把整个业务画到一个流程图中,因果关系,逻辑关系要搞得很清楚。你们回忆一下,你们在学习 C语言时,是不是很乐意在纸上或者脑子里画这种流程图来帮你们利清楚思路? 这种思维的最大问题在于,当这张流程图变成一张流程网的时候,人的脑容量是不可能对之进行管理的,而且,维护程序的时候也必须同样面对这张网,这对于维护代码的同事而言,简直就是一场灾难。
最初,我们只想得到一根线来帮助我们贯穿始终,但后来这条线越来越长,又多了许多分支,于是变成了一张网;最终,网越来越密,等到我们无法继续时,我们才发现,我们一直都在作茧自缚:)
下面,我举个例子来说明面向过程和面向对象的一点区别。
假设在一段游戏的代码中,有这样一个场景:有1000吨的货物,要从西安运到北京。
而面向对象(OO)的思维则会这样思考:-
定义类(封装性):
恩,这么复杂的送货任务,总要有个人来做吧:) OK,是得搞个押运员去弄。 于是,要定义一个类:Escort。 稍后给它定义好新的方法:)-继承:
这个押运员得是个人吧,应该有人的一切属性(如眼耳鼻舌,受想行识),好吧,我不用重新实现这些,游戏中一般都有People的角色,从那里继承就好了, 于是,Escort 就成了People的子类,他可以享用People的一切属性和方法这就是继承。你不必为了Escort再重写那么多代码,因为已经有写好可用的了。 要知道,People中很多方法在Escort中都是用得到的。-定义方法:
好了,现在再分析一下Escort可能遇到的问题,以及他面对 问题所应具有的解决问题的能力就是他具有的方法。 山洪?地震?泥石流? 这些都是自然灾害,没办法避免,OK,那就绕道而行吧! 得,第一个方法有了: Escort::choseWay()。 那么,他怎么知道哪里有自然灾害导致道路不通呢? 废话!听广播,看电视撒! 哦,很好,我们的Escort是从People中继承下来的,而这些方法我们都在People中实现了,这里已经没有多少事情做了。-
现在我们假设有这样一种情况:所有的人(People)都可能半路遇到凶残的土匪,如果是你,你会怎么做? 我想一般人都会跟我一样:把钱给人家保命。 所以,People中处理土匪的方法会这么定义:{弃财保命}。 但是,作为一个Escort,你要是把货物都丢了,这个Escort就失败了,你们看看《闯关东》上的垛爷怎么做的:爷们儿,碰了,这几个钱个林子后面 的弟兄们买酒喝。所以,我们的Escort要重新实现处理土匪的方法,就是 { 按照道儿上的规矩,打手势,弃小财而保全货物 }。
现在,我们知道,所有的people都具有处理土匪的能力,但是不同的people对土匪的处理行为可能会不同。 再设想一下,某个山寨区域的代码是由另外一个同事,甚至另外一个团队编写的,他们只知道他们的土匪面对的对象类型都是People,他们不知道 People还有没有子类,还有多少子类等等。 幸运的是,OO的多态可以让这些设计山寨区域的团队不必考虑这些问题,他们只需要调用People的处理土匪方法,在运行时刻,
程序会自动根据实际传入的对象来判断最终要真正执行的方法。这种
调用同一基类接口,在运行时根据对象来执行相应对象类型中所定义的方法的行为就是多态
。 注: 这个定义是我自己给出的,如果您发现有不正确,请指出来,也方便我即使改正。 在很多C++教程中,多态的定义多为:多态是指父类指针调用子类方法。 我觉得这种说法欠妥,多态是很多OO语言的共性,比如python中没有指针,但照样有多态的功能。不过python是直接根据对象类型识别的,所以这个 概念在python的教材中淡出了。-
面向对象的扩展性:
相对于面向过程(函数)的编程思想,面向对象思想更易于编写易扩展空间。比如上面的送货的例子,这个游戏可能只是一个战争类游戏。后来,老板为了刺激 消费,要把它像《虚拟人生》那样的方向改进。具体一点,老板希望游戏中可以有一些性方面的设计这个虽然不健康,但是在市场上却往往很管用。这个时候, 你不必在每个人,每个分支上都添加关于性方面的代码,你只需要给People类添加一个People::makeLove(People who)方法(参数的配偶对象)就OK了。至于which people, with who, where, when这些问题,留给那些处理具体场景的人去做就好了。-
面向对象与面向过程的联系:
面向对象和面向过程不是水火不容的,对象中是有过程的。在编程工作中,你永远无法避免对流程的处理,面向对象的思想只是给你提供了一种更合理的方式来你规 划程序中的流程,如果你是一个team leader,或者总体设计师,这将更有利于你把任务分配给你的队员。尝试这用OO思维去认识身边的事物,去规划自己的程序,很快你就会转入OOP的模 式,你会发现这种思路的确可以减轻大脑负荷。
10. 如何学习面向对象编程
尽管我们都是从OOP发展而来,事实上,真正的面向对象来自于OOD。没有OOD的过程,就无法真正的面向对象。
书上那些小例子只不过是在展示“如何OOP”的手段,也就是在告诉大家“面向对象的语言有哪些特点”,而并没有回答“什么是面向对象”以及“为什么要面向对象”。
事实上,这种小程序永远也不能体现出“为什么要面向对象”。面向对象与传统的面向功能与面向数据的开发相比,最大的优势在于业务逻辑的可重用性。传统的开发最容易重用的是数据结构和底层代码,而上面的调用代码则很难重用,而面向对象则专注于如何另维护了业务逻辑的调用代码更容易地被其它项目或是后继项目使用。
同时,面向对象的开发也有利于提高可移植性。我前面说过,传统的开发成果越是底层的代码可重用性就越高,但如果牵涉到大量OS相关的内容时——比如GUI,则越是底层的调用就越难以移植,这就形成了一个矛盾。而面向对象的方法解决了调用代码的可重用性,也就顺带提高了代码的可移植性。