老物件吧 什么是面向物件?
什么是面向物件?
什么是面向物件?
面向物件其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是物件。物件之间通过讯息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何物件都是某一类事物的例项。如果说传统的面向程序式程式设计语言是以过程为中心以演算法为驱动的话,面向物件的程式语言则是以物件为中心以讯息为驱动。用公式表示,程序式程式设计语言为:程式=演算法+资料;面向物件程式语言为:程式=物件+讯息。 所有面向物件程式语言都支援三个概念:封装、多型性和继承,Java也不例外。现实世界中的物件均有属性和行为,对映到计算机程式上,属性则表示物件的资料,行为表示物件的方法(其作用是处理资料或同外界互动)。所谓封装,就是用一个自主式框架把物件的资料和方法联在一起形成一个整体。可以说,物件是支援封装的手段,是封装的基本单位。Java语言的封装性较强,因为Java无全域性变数,无主函式,在Java中绝大部分成员是物件,只有简单的数字型别、字元型别和布林型别除外。而对于这些型别,Java也提供了相应的物件型别以便与其他物件互动操作。 多型性就是多种表现形式,具体来说,可以用"一个对外介面,多个内在实现方法"表示。举一个例子,计算机中的堆叠可以储存各种格式的资料,包括整型,浮点或字元。不管储存的是何种资料,堆叠的演算法实现是一样的。针对不同的资料型别,程式设计人员不必手工选择,只需使用统一介面名,系统可自动选择。运算子过载(operator overload)一直被认为是一种优秀的多型机制体现,但由于考虑到它会使程式变得难以理解,所以Java最后还是把它取消了。 继承是指一个物件直接使用另一物件的属性和方法。事实上,我们遇到的很多实体都有继承的含义。例如,若把汽车看成一个实体,它可以分成多个子实体,如:卡车、公共汽车等。这些子实体都具有汽车的特性,因此,汽车是它们的"父亲",而这些子实体则是汽车的"孩子"。Java提供给使用者一系列类(class),Java的类有层次结构,子类可以继承父类的属性和方法。与另外一些面向物件程式语言不同,Java只支援单一继承。
面向物件方法是一种运用物件、类、继承、封装、聚合、讯息传送、多型性等概念来构造系统的软体开发方法。
面向物件是一种程式设计方法,它以物件作为基本的单元来构建系统,它利用物件将系统的复杂性隐藏在物件里(也就是常说的封装),从而构建大型的工业级系统和大型系统(注意是工业及系统和大型软体系统而不是播放器等小型的系统)。面向物件包括三个过程:面向物件分析(OOA)、面向物件设计(OOD)、面向物件程式设计(OOP)。
1。什么是面向物件的分析?
面向物件的分析指的是分析要开发的系统的各个方面,从而找出类和物件(不是你想有什么物件就有什么物件的)。
2.什么是面向物件的设计?
是指我们设计出一些特殊的类(如:抽象类,目的:来表达系统中不同物件的共性)和机制(让系统的物件互相协作,提供系统的功能);
3.什么是面向物件的程式设计?
是指我们用特定的面向物件程式语言来实现我们的设计,实现我们发现的物件和类。
使用面向物件的困难在于找出系统的物件和类很困难,这常常需要经验、洞察力、严密的逻辑思维能力和创造力(这是最重要的),以及设计特殊的类和机制很困难。但是一旦做好了分析和设计,一切都变得极其简单。所以大多数人都会选择使用面向过程而不是用面向物件。
不要以为面向物件就是你的教材里讲的那些东西,面向物件还有许许多多的概念,而这些概念常常被忽略、吴用。
用面向物件设计你还要用学一样东西:UML(统一建模语言),这个语言在国人教材中没提到到(实际上没提到的东西多了)。
建议:去书店认认真真地找一本书国外的关于面向物件的书籍,这样你才能学到面向物件的精髓。
物件是资料和操作这些资料的相关指令的一个封装体。跟结构体类似,但物件允许其中包含各种相关的函式。面向物件的意思,就是需要你更多的去考虑怎样建立一个物件来完成这个程式,而不是去考虑怎样去计算。
面向物件的方法可以把以前冗长的程式码缩减许多,原因就在于它的物件里面已经包含了需要执行的操作,主函式就很变得很简洁。
这类似于通常说的“抽象”,看到一个物体,你知道它的形状,颜色,材质,你还可以知道它用来干什么。“知道用它来干什么”就是面向物件所不同的地方。
面向物件就是针对一个功能,而进行模组的划分。。。而面向过程,则是根据事情发展的步骤,按进行的过程划分
我简单的介绍,你就会发现其实和你说的一模一样:
过程
举例子:
假设我今天要去学校,那么我怎么去呢?
先出家门-做车-走一段路-到学校
这每一步你都得走。
(比较官方的来说:分析出解决问题所需要的步骤,然后用函式把这些步骤一步一步实现,使用的时候一个一个依次呼叫就可以了。)
这就是过程。
物件
简单的就是一个人也是一个物件。
物件有属性和方法。
属性:比如说这个人是男的,这就是属性
方法:我现在对这个人说,你明天1点到我家来。他照做了,我这指令就是方法
区别的话:
还是以上学为例子
如果是物件,就有对应的方法,里面就有上学方法,你只要告诉那个人上学的方法。你不用管过程,你只要知道最后他到学校就行了
如果是过程,你得把每一步写的清清楚楚,最后还告诉他,必须到学校要告诉我一声(返回结果),才行。
楼下的例子真幽默,不过不合理。
面向物件(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软体开发方法的主流。面向物件的概念和应用已超越了程式设计和软体开发,扩充套件到很宽的范围。如资料库系统、互动式介面、应用结构、应用平台、分散式系统、网路管理结构、CAD技术、人工智慧等领域。
关于这玩意而其实需要多做题目才能慢慢的理解通透,我说下我对于面向物件的理解吧,我的理解是不管是什么飞机。大炮。坦克 。还是 楼房 。电视机。电冰箱……等等任何东西,都可以把它们看做一个个的类,比如要写个 电视机类,电视机类里面就有一些个属性 和方法,比如 属性有 电流,电压,方法(函式)有开启电视机的方法和关闭电视机的方法,不知道你注意到没,开启电视机和关闭电视机是一种行为,所以你要将其定位一个方法,总不可能将开启电视机和关闭电视机定义为属性吧,至于你以后如何区分 方法 与 属性 还需多做题目
什么是面向物件啊?
先举个例子:
比如 我们把“汽车”看做一个研究“物件”;
对于汽车我们有 “启动” “刹车” “开启指示灯” 等“方法” 每种方法达到一种效果,“启动”时, 汽车就往前跑了 “刹车”时汽车就停了 这就相当于程式设计中的函式的“方法”
对于汽车还有一些 “资料” 比如汽车的“载人数” “速度” “重量”
这些相当与函式中的“资料”
“汽车”和“函式”类似吧 既然汽车可以看做一个物件,那么函式也可看做一个物件啊 它有它的“方法”(包括C++内建的方法和你自己定义的方法)
和“资料”
将函式看做物件是因为要和我们的思维一致,我们研究一个东西时都是把它看做一个研究物件的,这种程式设计思想更符合我们的一般思维。
现在你该大致明白了吧。
什么是面向物件 什么是面向过程
面向过程相当于一步步的解决问题,面向物件相当于解决问题的方式。。举个例子就像是盖大楼,面向物件就相当于这个楼怎么盖,柱子放哪儿,楼梯建在哪儿。。而面向过程就像是盖楼的具体过程。盖几层,楼房是圆的还是方的。。等等、、
什么是面向过程,什么是面向物件
什么是面向物件程式设计?
译者序
不要将本文简单地视为是对C++特征的一个介绍。它的意义在于,一方面介绍了程式设计风格的演变,以及这种演变背后的动机
。另一个方面,它特别澄清了基于物件的(OB)和面向物件(OO)的异同,这是具有很大意义的。我们可以看到,
不管是OB还是OO,都不过是一种程式的组织形式。 这在很大程式上指出了OO着眼于解决什么样的问题
(程式如何组织才能有弹性,容易重用和理解),而不解决什么问题(资料结构的设计,演算法的设计)等等。
摘要
“面向物件程式设计”和“资料抽象”已经成为常用的程式设计术语,然而,很少有人能够就它们的含义取得一致的认识;本文以Ada,C++,Module 2,Simula和Smalltalk等语言为背景对此给出一个非正式的定义。基本的想法是将“支援资料抽象”等同于定义和使用新资料型别的能力,而将“支援面向物件程式设计”等同于对类层次的表达能力。同时,还讨论了通用程式语言为支援此种程式设计风格而必须提供的机制。文中虽然采用C++来表述问题,但其讨论的范围并不仅限于这个语言。
1 介绍
并不是所有的语言都是面向物件的。一般认为,APL,Ada,Clu,C++,LOOPS和Smalltalk是面向物件的,我也曾经听说过关于使用C, Pascal,Module-2,和CHILL进行面向物件设计的讨论。那么是否可以尝试使用Fortran和Cobol来进行面向物件设计呢?我认为那也一定是可行的。在很多圈子里,“面向物件”已经成为“优秀”的高科技代名词,在商业出版领域可以看到有以下的三段论:
Ada是优秀的
面向物件是优秀的
所以Ada是面向物件的
本文从通用程式语言的角度出发陈述了“面向物件”技术的概貌:
第2节比较了资料抽象和面向物件之间的异同,也将它们和其他的程式设计风格做了区分;同时,指出了为了支援不同的程式设计风格所需的重要机制。
第3节陈述了为高效地支援资料抽象所需的语言机制。
第4节讨论了支援面向物件所需的设施。
第5节陈述了传统硬体体系结构和作业系统对于资料抽象和面向物件程式设计施加的限制。
文中例子程式使用C++来书写,这部分是出于介绍C++的目的,部分是因为C++是少数几个同时支援资料抽象,面向物件程式设计和传统程式设计风格的语言。本文不讨论为支援特定高层语言特性而涉及的并发性和特殊硬体支援。
2.程式设计风格(Programming Paradigms)
面向物件程式设计是一种用来针对一类问题编写优质程式码的程式设计技术。一个语言称为是“面向物件”的如果它支援(Support)面向物件风格的程式设计。
在这里存在一个重要的区别。?
