"面向对象"究竟是个什么概念,谁用最简单最好理解的语言或实例说明一下

问题描述

刚开始接触编程,这个概念是在太难理解,书上写的看不懂谁能用最好理解,最简单的说法解释一下啊~最好有个例子,分别用面向对象的方法和不面向对象的方法做出来,说明"面向对象"的编程和普通的编程区别何在

解决方案

解决方案二:

这个网上很多呢,
解决方案三:

这个网上很多呢,
解决方案四:

这个问题深了
解决方案五:

呵呵,csdn这样的帖子太多了.
解决方案六:

男人、女人你可以从“人”这个对象继承得到“女人”这个对象然后从“女人”这个对象继承得到“老婆”和“情人”这两个对象或者你也可以直接生成“老婆”和“情人”这两个没什么关系的对象,你只要知道都是为你服务“老婆”的对象可以拿来做家务“情人”的对象就拿来makelove这个解释OK不?
解决方案七:

楼主,这个问题实在不好回答你想想很多人看了几本书,至少学了半年(很多人要1年)才明白的东西恐怕几句话很难说清
解决方案八:

非面向对象就要求你对爱要专一,不能乱搞哈哈~~~~
解决方案九:

面向对象设计(Object-OrientedDesign,OOD)方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。面向对象设计(OOD)是一种软件设计方法,是一种工程化规范。这是毫无疑问的。按照BjarneStroustrup的说法,面向对象的编程范式(paradigm)是[Stroustrup,97]:l决定你要的类;l给每个类提供完整的一组操作;l明确地使用继承来表现共同点。由这个定义,我们可以看出:OOD就是“根据需求决定所需的类、类的操作以及类之间关联的过程”。OOD的目标是管理程序内部各部分的相互依赖。为了达到这个目标,OOD要求将程序分成块,每个块的规模应该小到可以管理的程度,然后分别将各个块隐藏在接口(interface)的后面,让它们只通过接口相互交流。比如说,如果用OOD的方法来设计一个服务器-客户端(client-server)应用,那么服务器和客户端之间不应该有直接的依赖,而是应该让服务器的接口和客户端的接口相互依赖。这种依赖关系的转换使得系统的各部分具有了可复用性。还是拿上面那个例子来说,客户端就不必依赖于特定的服务器,所以就可以复用到其他的环境下。如果要复用某一个程序块,只要实现必须的接口就行了。OOD是一种解决软件问题的设计范式(paradigm),一种抽象的范式。使用OOD这种设计范式,我们可以用对象(object)来表现问题领域(problemdomain)的实体,每个对象都有相应的状态和行为。我们刚才说到:OOD是一种抽象的范式。抽象可以分成很多层次,从非常概括的到非常特殊的都有,而对象可能处于任何一个抽象层次上。另外,彼此不同但又互有关联的对象可以共同构成抽象:只要这些对象之间有相似性,就可以把它们当成同一类的对象来处理。一、OOD背景知识计算机硬件技术却在飞速发展。从几十年前神秘的庞然大物,到现在随身携带的移动芯片;从每秒数千次运算到每秒上百亿次运算。当软件开发者们还在寻找能让软件开发生产力提高一个数量级的“银弹”[Brooks,95]时,硬件开发的生产力早已提升了百倍千倍。硬件工程师们能够如此高效,是因为他们都很懒惰。他们永远恪守“不要去重新发明轮子”的古训。GradyBooch把这些黑箱称为类属(classcategory),现在我们则通常把它们称为“组件(component)”。类属是由被称为类(class)的实体组成的,类与类之间通过关联(relationship)结合在一起。一个类可以把大量的细节隐藏起来,只露出一个简单的接口,这正好符合人们喜欢抽象的心理。所以,这是一个非常伟大的概念,因为它给我们提供了封装和复用的基础,让我们可以从问题的角度来看问题,而不是从机器的角度来看问题。软件的复用最初是从函数库和类库开始的,这两种复用形式实际上都是白箱复用。到90年代,开始有人开发并出售真正的黑箱软件模块:框架(framework)和控件(control)。框架和控件往往还受平台和语言的限制,现在软件技术的新潮流是用SOAP作为传输介质的WebService,它可以使软件模块脱离平台和语言的束缚,实现更高程度的复用。但是想一想,其实WebService也是面向对象,只不过是把类与类之间的关联用XML来描述而已[Li,02]。在过去的十多年里,面向对象技术对软件行业起到了极大的推动作用。在可以预测的将来,它仍将是软件设计的主要技术——至少我看不到有什么技术可以取代它的。二、OOD到底从哪儿来?有很多人都认为:OOD是对结构化设计(StructuredDesign,SD)的扩展,其实这是不对的。OOD的软件设计观念和SD完全不同。SD注重的是数据结构和处理数据结构的过程。而在OOD中,过程和数据结构都被对象隐藏起来,两者几乎是互不相关的。不过,追根溯源,OOD和SD有着非常深的渊源。1967年前后,OOD和SD的概念几乎同时诞生,它们分别以不同的方式来表现数据结构和算法。当时,围绕着这两个概念,很多科学家写了大量的论文。其中,由Dijkstra和Hoare两人所写的一些论文讲到了“恰当的程序控制结构”这个话题,声称goto语句是有害的,应该用顺序、循环、分支这三种控制结构来构成整个程序流程。这些概念发展构成了结构化程序设计方法;而由Ole-JohanDahl所写的另一些论文则主要讨论编程语言中的单位划分,其中的一种程序单位就是类,它已经拥有了面向对象程序设计的主要特征。这两种概念立刻就分道扬镳了。在结构化这边的历史大家都很熟悉:NATO会议采纳了Dijkstra的思想,整个软件产业都同意goto语句的确是有害的,结构化方法、瀑布模型从70年代开始大行其道。同时,无数的科学家和软件工程师也帮助结构化方法不断发展完善,其中有很多今天足以使我们振聋发聩的名字,例如Constantine、Yourdon、DeMarco和Dijkstra。有很长一段时间,整个世界都相信:结构化方法就是拯救软件工业的“银弹”。当然,时间最后证明了一切。而此时,面向对象则在研究和教育领域缓慢发展。结构化程序设计几乎可以应用于任何编程语言之上,而面向对象程序设计则需要语言的支持[1],这也妨碍了面向对象技术的发展。实际上,在60年代后期,支持面向对象特性的语言只有Simula-67这一种。到70年代,施乐帕洛阿尔托研究中心(PARC)的AlanKey等人又发明了另一种基于面向对象方法的语言,那就是大名鼎鼎的Smalltalk。但是,直到80年代中期,Smalltalk和另外几种面向对象语言仍然只停留在实验室里。到90年代,OOD突然就风靡了整个软件行业,这绝对是软件开发史上的一次革命。不过,登高才能望远,新事物总是站在旧事物的基础之上的。70年代和80年代的设计方法揭示出许多有价值的概念,谁都不能也不敢忽视它们,OOD也一样。三、OOD和传统方法有什么区别?还记得结构化设计方法吗?程序被划分成许多个模块,这些模块被组织成一个树型结构。这棵树的根就是主模块,叶子就是工具模块和最低级的功能模块。同时,这棵树也表示调用结构:每个模块都调用自己的直接下级模块,并被自己的直接上级模块调用。那么,哪个模块负责收集应用程序最重要的那些策略?当然是最顶端的那些。在底下的那些模块只管实现最小的细节,最顶端的模块关心规模最大的问题。所以,在这个体系结构中越靠上,概念的抽象层次就越高,也越接近问题领域;体系结构中位置越低,概念就越接近细节,与问题领域的关系就越少,而与解决方案领域的关系就越多。但是,由于上方的模块需要调用下方的模块,所以这些上方的模块就依赖于下方的细节。换句话说,与问题领域相关的抽象要依赖于与问题领域无关的细节!这也就是说,当实现细节发生变化时,抽象也会受到影响。而且,如果我们想复用某一个抽象的话,就必须把它依赖的细节都一起拖过去。而在OOD中,我们希望倒转这种依赖关系:我们创建的抽象不依赖于任何细节,而细节则高度依赖于上面的抽象。这种依赖关系的倒转正是OOD和传统技术之间根本的差异,也正是OOD思想的精华所在。四、OOD步骤细化重组类细化和实现类间关系,明确其可见性增加属性,指定属性的类型与可见性分配职责,定义执行每个职责的方法对消息驱动的系统,明确消息传递方式利用设计模式进行局部设计画出详细的类图与时序图五、OOD设计过程中要展开的主要几项工作(一)对象定义规格的求精过程对于OOA所抽象出来的对象-&-类以及汇集的分析文档,OOD需要有一个根据设计要求整理和求精的过程,使之更能符合OOP的需要。这个整理和求精过程主要有两个方面:一是要根据面向对象的概念模型整理分析所确定的对象结构、属性、方法等内容,改正错误的内容,删去不必要和重复的内容等。二是进行分类整理,以便于下一步数据库设计和程序处理模块设计的需要。整理的方法主要是进行归类,对类一&一对象、属性、方法和结构、主题进行归类。(二)数据模型和数据库设计数据模型的设计需要确定类-&-对象属性的内容、消息连接的方式、系统访问、数据模型的方法等。最后每个对象实例的数据都必须落实到面向对象的库结构模型中。(三)优化OOD的优化设计过程是从另一个角度对分析结果和处理业务过程的整理归纳,优化包括对象和结构的优化、抽象、集成。对象和结构的模块化表示OOD提供了一种范式,这种范式支持对类和结构的模块化。这种模块符合一般模块化所要求的所有特点,如信息隐蔽性好,内部聚合度强和模块之间耦合度弱等。集成化使得单个构件有机地结合在一起,相互支持。六、OO方法的特点和面临的问题OO方法以对象为基础,利用特定的软件工具直接完成从对象客体的描述到软件结构之间的转换。这是OO方法最主要的特点和成就。OO方法的应用解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题,缩短了开发周期,解决了从分析和设计到软件模块结构之间多次转换映射的繁杂过程,是一种很有发展前途的系统开发方法。但是同原型方法一样,OO方法需要一定的软件基础支持才可以应用,另外在大型的MIS开发中如果不经自顶向下的整体划分,而是一开始就自底向上的采用OO方法开发系统,同样也会造成系统结构不合理、各部分关系失调等问题。所以OO方法和结构化方法目前仍是两种在系统开发领域相互依存的、不可替代的方法。七、OOD能给我带来什么?问这个问题的人,脑子里通常是在想“OOD能解决所有的设计问题吗?”没有银弹。OOD也不是解决一切设计问题、避免软件危机、捍卫世界和平……的银弹。OOD只是一种技术。但是,它是一种优秀的技术,它可以很好地解决目前的大多数软件设计问题——当然,这要求设计者有足够的能力。OOD可能会让你头疼,因为要学会它、掌握它是很困难的;OOD甚至会让你失望,因为它也并不成熟、并不完美。OOD也会给你带来欣喜,它让你可以专注于设计,而不必操心那些细枝末节;OOD也会使你成为一个更好的设计师,它能提供给你很好的工具,让你能开发出更坚固、更可维护、更可复用的软件。
解决方案十:

就用开发环境中的组件来说目的:点击按钮,弹出对话框.面向对象:开发环境中有提供可视化组件,比如button,Edit,OpenDialog等组件实现1:直接用鼠标拖曳Button,OpenDialog组件,这里得到了实例化的对象,很快...<后面略>不面向对象:开发环境中没有提供可视化组件实现2:先编写Form类,button类等,再程序中实例化的Form对象,button对象等...<后面略>
解决方案十一:

以对象作为参数来传递!
解决方案十二:

一辆车载着5个人从A地开到B地再开到C地然后吃饭...差不多就是面向过程.研究一辆车4个轮子颜色是红的这些是他的属性开动了多少多少公里可以理解为事件这个就是面向对象吧.具体也说8清楚多接触点自己慢慢体会吧每个人理解不尽相同的!~
解决方案十三:

该回复于2008-06-10 12:05:31被版主删除
解决方案十四:

所有的东西都是对象,有属性,以及方法,方法基本都是对属性的一些操作,返回的也都是对象使用某个对象的方法时,第一件事就是要实例化这个对象,通过对象之间的相互作用来完成整个软件系统的功能
解决方案十五:

引用5楼nemopang的回复:

人:男人、女人你可以从“人”这个对象继承得到“女人”这个对象然后从“女人”这个对象继承得到“老婆”和“情人”这两个对象或者你也可以直接生成“老婆”和“情人”这两个没什么关系的对象,你只要知道都是为你服务“老婆”的对象可以拿来做家务“情人”的对象就拿来makelove这个解释OK不?

男人.身高=180;男人.体重=65;男人<--对象,身高/体重<--属性……
解决方案:从现实存在的具体或抽象的对象考虑它整体的行为、能力、内容以及内部和外部的各种联系的描述方式,就叫做面向对象的思考方式。用这种思考方式建立的编程方法就是OOP编程,能够轻易实现OOP方法的语言叫做面向对象的语言。
解决方案:该回复于2008-06-10 14:41:09被版主删除
解决方案:学习了!!
解决方案:最初的程序只有,变量和方法后来发现,变量的管理实在很麻烦于是出现了struct(例如:把一个人的全部属性age,sex,name.....综合在一个struct里管理)后来发现,管理有关这个struct的函数很麻烦于是把对struct的操作,使用一个函数指针,放入struct里(例如,save,update,loadbyname.....)这种做法在C++面世之后,就成了OOD的基本(把数据和方法放在一块儿,构成了编码和逻辑上的清晰)
解决方案:LZ太懒,上面的解释太多,不好混分了。面向对象主要针对于面向过程而提出的。早期的高级编程语言都是面向过程的,例如C和Pascal他们关注的主要是让机器完成一个工作的流程,有点代数式解析的意思(分解括号和不同条件)其工作过程比较简单明了,但是不利于描述较复杂的情况,特别是扩展性较差(一份代码只能在一个地方使用——甚至只有一个人会用)以VB和Java为代表的几种高级语言,开创了面向对象时代。通过对现实世界中的实物抽象化,得到了一个新的事物“对象”。对象这一个新概念有几个准则:封装,继承,多态。。。1.封装:使得一个对象可以对应一个现实事物。2.继承:让不同的对象之间可以有纵向的关联,很多对象有了类型特征。3.多态:描述了对象在不同环境条件时所出现的不同变化。这样,一个具体的具有类型特征在不同情况会产生不同变化的可以完全代替现实事物的程序概念就是对象。面向对象则是,利用“对象”这种描述贴切,利于扩展归类的程序概念,来进行的编程设计的软件开发技术。(以上为个人观点,如有不正,还望指正。3X)——chaos_blue
解决方案:早就讨论过了,看看这个http://topic.csdn.net/u/20080414/18/0c10bb92-f200-4cc9-8ffa-a26bdec574b5.htmlhttp://www.cnblogs.com/guaiguai/archive/2007/09/17/894819.html
其他方案:

1姓名、年龄、爱好、等等2有什么丰功伟绩?详细过程介绍?3总结性发言。面向对象的编程:1实例化一个自己的对象(封装了姓名、年龄、爱好、等等)2通过对象调用介绍自己丰功伟绩的方法(具体过程已经在方法内写好了)3通过对象调用一些通用的总结性发言(可能是别人写的,也可能是自己写的)我是初学者。我的理解就是这样的。望指教。
解决方案:你,程序员,是一个皇帝,你的程序的对象就是你统治着的万民每一个程序集就是一个部门,刑部、吏部、户部。。。而接口是朝廷里的大臣。。。
解决方案:所有的东西都是对象,有属性、方法等,有的时候要进行实例
解决方案:引用5楼nemopang的回复:

人:男人、女人你可以从“人”这个对象继承得到“女人”这个对象然后从“女人”这个对象继承得到“老婆”和“情人”这两个对象或者你也可以直接生成“老婆”和“情人”这两个没什么关系的对象,你只要知道都是为你服务“老婆”的对象可以拿来做家务“情人”的对象就拿来makelove这个解释OK不?

其他方案:

财务出纳——数据访问层公司的财务方面负责人,资金(数据库)就是由他来调度,控制和支配的,不过首先要获取老板的授权。部门经理——业务逻辑层负责制订部门发展目标、计划,并积极组织实施,沟通公司内部各项信息,上传下达。普通员工——表示层代表公司形象跟客户洽谈,演示,签单,执行,交付。面向过程:没有具体分工的小公司,老板随便指派任何人做事,事情没做好时相互推托责任,内部管理混乱,无法保障。
解决方案:上面用的是三层来举例,不是严格意义上的面向对象。

时间: 2024-09-20 00:51:04

&amp;quot;面向对象&amp;quot;究竟是个什么概念,谁用最简单最好理解的语言或实例说明一下的相关文章

jsp truts-&amp;amp;lt;div class=&amp;amp;quot;error_mes&amp;amp;quot;&amp;amp;gt;${message}&amp;amp;lt;/div&amp;amp;gt;

问题描述 <div class="error_mes">${message}</div> ${message}什么意思?${message}通常在哪实现? 解决方案 ${message}是java中el表达式 可以获取域中的值 四大作用域 application request session pageContext 建议百度看下el表达式就ok了 解决方案二: jsp中的EL表达式,具体看下这里面.http://blog.csdn.net/chinacshar

ajax-兄弟伙我的OnSuccess=&amp;amp;quot;afterLogin&amp;amp;quot;咋调用不起

问题描述 兄弟伙我的OnSuccess="afterLogin"咋调用不起 兄弟伙我的OnSuccess="afterLogin"咋调用不起,直接返回return Content类容到页面 @{ Layout = null; } <!DOCTYPE html> 网上超市管理系统 </p> <pre><code> //就是执行controller方法以后执行的方法 function afterLogin(data) {

safari-MacBook的Safari下type=&amp;amp;quot;submit&amp;amp;quot;点击后显示不出div

问题描述 MacBook的Safari下type="submit"点击后显示不出div 如题,按钮点击的时候在window浏览器这个红色背景的div会一闪而过,但是在macbook的Safari中什么效果都没有,return false的时候div可以显示出来,但表单还怎么提交啊,return true时页面中div已经加载变成block了,感觉是还没来得及被浏览器渲染页面就刷新了一下,有没有什么办法可以让它有一闪而过的效果? html: <div id="divTes

jquery mobile中使用data-role=&amp;amp;quot;dialog&amp;amp;quot;弹出对话框的问题

问题描述 jquery mobile中使用data-role="dialog"弹出对话框的问题 如图,当页面除了一个"page"和"dialog"还有其它的 容器时,对话框后的背景就会显示没有样式的这个容器内容, 这是为什么呢,怎样才能让背景中不显示任何东西 解决方案 试试把背景内容放到另一个page中 你说的data-role =dialog 我没注意到 这个属性... 另外 可以看看 . data-role=popup http://www.

java web-&amp;amp;lt;c:forEach items=&amp;amp;quot;${salesProducts }&amp;amp;quot; var=&amp;amp;quot;pro&amp;amp;quot;&amp;amp;gt;

问题描述 <c:forEach items="${salesProducts }" var="pro"> ${pro.goodsName}特价:¥${pro}/c:forEach pro的bean类属性都设了getter和setter方法,但是${pro.goodsName}没值,${pro}却有值 解决方案 检查一下goodsName属性名称有没写错. 解决方案二: private String goodsName;public String getG

深入理解GO语言的面向对象_Golang

前言 有过C++语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装.继承和多态.封装,就是指运行的数据和函数绑定在一起,C++中主要是通过this指针来完成的:继承,就是指class之间可以相互继承属性和函数:多态,主要就是用统一的接口来处理通用的逻辑,每个class只需要按照接口实现自己的回调函数就可以了. 作为集大成者的Go语言,自然不会在面向对象上面无所作为.相比较C++.Java.C#等面向对象语言而言,它的面向对象更简单,也更容易理解. go语言中并没有像C++,Java语

android-在toast上显示 &amp;amp;quot;message&amp;amp;quot; 和 &amp;amp;quot;contact&amp;amp;quot;

问题描述 在toast上显示 "message" 和 "contact" 我想在程序中设置一个toast,它可以显示:Your message ""message"" is sent to ""contact"" .我用的以下的代码: if (phoneNo.length()>0 && message.length()>0) Toast.makeText(ge

关于&amp;amp;quot;&amp;amp;lt;&amp;amp;quot;和&amp;amp;quot;&amp;amp;gt;&amp;amp;quot;等符号的显示问题

问题描述 大家都知道<=<>=>'="等等...如果我的数据库某记录是<fontsize="5">内容</font>浏览器上显示也一样,没有对<font>进行解析,查看源代码发现<都变成了<,但我想浏览器能解析<font>,如何做?我用的是struts2+mysql其实我想开发类似FCKEditer的文本编辑器组件,对能对部分文本进行改变大小操作并保存到数据库,显示的时候按所保存的样式进行显示

从&amp;quot;10.1&amp;quot;站点的变化总结医疗网站优化的心得

由于中秋十一放假,笔者回家一趟,手上的一个新站也就暂时放下了,4天之后,笔者上班到公司打开电脑,发现自己负责的站点收录.快照和外链全部掉下来,心里顿时凉了半截,心里想,真是一天不管都不行,这网站掉的这么厉害.但是当者查询网站的关键词排名.权重和最近访客时,却惊喜的发现全部呈现上升趋势.   这是网站关键词排名情况   这是网站今天查询的基本情况 中秋回家前,这个网站还是没有权重,关键词排名也只限于医院名字这样没有竞争的词,然而,几天不管,这个网站竟然神奇的有了这么多变动,而且是良性的变动,笔者觉