精华内容
下载资源
问答
  • 面向对象是将相同的特征的东西抽象出作为有个对象,这样做是为了使用者更好的跟方便的使用,便于使用者理解维护,面向对象是一种指导思想。之所以称为高级语言,就是对使用者友好。 java是面向对象设计的,写出来...

    面向对象是将相同的特征的东西抽象出作为有个对象,这样做是为了使用者更好的跟方便的使用,便于使用者理解维护,面向对象是一种指导思想。之所以称为高级语言,就是对使用者友好。

    java是面向对象设计的,你写出来的代码一定面向对象了吗?

    js不是面向对象设计的,你写出的代码一定不是面向对象的吗?

    不是,语言只是工具,只要你熟悉了js语法,使用面向对象思想,你可写出很漂亮的代码

    总结:学习一门语言,更需要学习在这个语言上的指导思想

    展开全文
  • 本文实例讲述了JS面向对象编程对象构造函数。分享给大家供大家参考,具体如下: 面向对象编程(Object Oriented Programming,缩写为 OOP)是目前主流的编程范式。它将真实世界各种复杂的关系,抽象为一个个对象,...
  • 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计...

    转自http://blog.163.com/wenxianliang08@126/blog/static/83583263201131611916893/

    面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 
    面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

    1.什么是面向对象技术?

    面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。它具有抽象性、封装性、继承性及多态性。

    2.面向对象与面向过程程序设计有什么不同?

    面向对象与面向过程程序设计有如下不同:

    (1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理。 函数与数据是否分离

    (2)面向过程程序设计方法以功能为中心来设计功能模块,难于维护;而面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。

    (3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要。 预定顺序;由运行时各种事件的实际发生来触发

    (4)面向对象程序设计方法可以利用框架产品(如MFC,Microsoft Foundation Classes)进行编程。 面向对象可利用框架 面向对象和面向过程的根本差别,在于封装之后,面向对象提供了面向过程不具备的各种特性,最主要的,就是继承和多态。

     3.面向对象技术有哪些优点?

    面向对象技术具有程序结构清晰,自动生成程序框架,实现简单,可有效地减少程序的维护工作量,代码重用率高,软件开发效率高等优点。 4.面向对象技术中的封装性有何优缺点?如何克服这些缺点?

    封装将对象有关的数据和行为封装成整体来处理,使得对象以外的部分不能随意存取对象的内部属性,从而有效地避免了外部错误对它的影响,大大减小了查错和排错的难度。另一方面,当进行修改对象内部时,由于只有少量的外部接口对外提供服务,因此同样减小了内部的修改对外部的影响。 如果一味地强调封装,对象的任何属性都不允许外部直接存取,则要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。为了避免这一点,在程序的具体实现过程中应使对象有不同程度的可见性,进而与客观世界的具体情况相符合。

    面向对象的特点是:封装,多态,继承。其中多态有分为重载和重写。面向对象的编程思想更加接近现实的事物。 有这样几点好处:

     1、是编程更加容易。因为面向对象更接近于现实,所以你可以从现实的东西出发,进行适当的抽象。

     2、在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚。

    3、在设计模式上(似乎只有面向对象才设计到设计模式),面向对象可以更好的实现开-闭原则。也使代码更易阅读。 相对而言,面向过程的程序设计是面向对象程序设计的基础。面向对象的程序里面一定会有面向过程的程序片断的

     5.为什么要应用继承机制? 客观事物既有共性,也有特性。如果只考虑事物的共性,而不考虑事物的特性,就不能反映出客观世界中事物之间的层次关系。抽象机制是考虑事物的共性,继承机制是考虑事物的特性,这样才能完整地描述客观世界的层次关系。继承能使软件模块具有可重用性、独立性,缩短软件开发周期,提高软件开发效率,同时使软件易于维护。

    6.C++对多态性的支持体现在哪些方面?

    C++的多态性分为编译时多态和运行时多态。编译时多态是指在程序的编译阶段由编译系统根据参数确定与哪个同名的函数相联系;运行时多态是指在程序的运行阶段才根据产生的信息确定需要调用哪个同名的函数。C++通过函数重载和运算符重载实现编译时多态,通过继承和虚函数来实现运行时多态。

    7.目前常用的面向对象程序设计语言有何异同? 目前常用的面向对象程序设计语言有C++、Java、Visual Basic等。C++是混合型面向对象程序设计语言,继承并改进了C语言,是一种既支持面向对象又支持面向过程的程序设计方法。Java是纯面向对象程序设计语言,从C++发展而来。C++和Java均支持面向对象技术的基本概念和基本特征,如封装、类、构造函数、析构函数、继承、多态等。 C++与Java语法描述有相同之处,也有不同之处。如基本结构语句的语法大致相同,而类定义的语法等方面则不相同。

    此外还有以下不同:

    (1)C++有运算符重载机制,而Java没有此特性;

    (2)C++支持多重继承,而Java只支持单重继承;

    (3)C++通过构造函数创建对象,可以直接使用指针来操作对象的成员,而Java通过new运算符创建对象,通过new运算符返回的对象引用来使用对象,而不是直接操作指针;

    (4)C++程序要显式地释放所分配的内存,而Java具有内存垃圾收集机制,自动管理内存,不需要显式释放所分配的内存。 Visual Basic继承了BASIC语言所具有的语法简单、容易学习、容易使用、数据处理能力强的特点,又引入了面向对象、事件驱动的编程机制和可视化程序设计方法,大大降低了开发Windows应用程序的难度,有效地提高了应用程序开发的效率。但是,Visual Basic存在语法不严格、开发出的系统稳定性较低的缺点。相对C++来说,Visual Basic面向系统底层的编程能力有限

    展开全文
  • 实际上,当我评估一个面向对象系统的质量时,所使用的方法之一就是要判断系统的设计者是否强调了对象之间的公共协同关系。在系统开发阶段强调这种机制的优势在于,它能使所生成的系统体系结构更加精巧、简洁易于...
  • 面向对象

    前言

    一提到面向对象,那可是令我等小白闻之色变。不过,面向对象确实是现今我们程序员必须要了解并且能够熟练运用的思想,从C++语言开始,以及后面出现的C#、Java等主流编程语言都包含了面向对象这个重要的特性,现如今出现的新兴语言要是没有面向对象这个特性都不好意思说自己是语言了。
    在这里插入图片描述
    所以无论有多怕也要有直面深渊的勇气,奥里给!!!
    废话不多说,让我们一起走进动物世界,哦不对,走进面向对象(~ ̄▽ ̄)~

    计算机语言

    无论学习什么,我们总要了解一下它的由来,它的发展历程。正如柏拉图提出的这个千古哲学命题“我是谁?我从哪里来?我要到哪里去?”。
    在这里插入图片描述

    了解面向对象之前总要先对计算机语言的发展有个大致的了解。计算机语言(Computer Language)指用于人与计算机之间通讯的语言,是人与计算机之间传递信息的媒介。其种类非常的多,总的来说目前可以分成机器语言,汇编语言,高级语言三大类。
    第一代语言:机器语言,机器语言就是 0/1二进制 代码。因为计算机只能识别 0 和 1,所以无论是音乐还是文字都是以数字的形式存在于计算机中的。

    第二代语言:汇编语言,天天面对0,1这样的数字进行编程对人来说是非常痛苦的,计算机的发展总是要越来越容易被人使用的,因此诞生了汇编语言。简单来说汇编语言就是将一串很枯燥无味的机器语言转化成一个英文单词,这方便了我们对程序的编写。

    第三代语言:高级语言,高级语言的发展分为两个阶段,以 1980 年为分界线,前一阶段属于结构化语言或者称为面向过程的语言,后一阶段属于面向对象的语言。(关于面向对象语言发展史,这篇文章讲的比较详细,感兴趣的同学可以阅读——面向对象发展史
    计算机语言发展关系如下图:
    在这里插入图片描述
    了解了计算机语言的发展,我们再来揭开面向对象的真面纱
    在这里插入图片描述

    面向对象是神马?

    要想了解这个问题我们要先了解面向过程(Procedure Oriented),毕竟没有对比没有伤害(╯▔皿▔)╯。

    面向过程

    上世纪70年代的编程大都是是面向过程的,大名鼎鼎的C语言和Fortran语言就是面向过程的编程语言。
    面向过程POP(Procedure Oriented Programming)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。 ——百度百科

    面向过程按我的理解来说就好比你想拥有一辆五菱神车去秋名山,可又没钱,所以只能自己造。你需要先了解发动机是怎么工作的,方向盘是如何操控汽车转动的,然后自己来制造发动机、轮胎,等并给车喷漆、打光。
    它是具体化的,流程化的,解决一个问题,你需要运用线性思维要一步一步的分析,一步一步的实现。解决简单的问题没有问题,若所思考的事需要很多人协作一起完成的话,用面向过程的思维思考很难完成。

    正是因为面向过程线性思维的解决方法,它并不易于维护、复用、扩展 。所以
    面向过程的思想随着程序规模的不断扩大,在60年代末期就已经出现了软件危机,在当时的程序设计模型中都无法克服错误随着代码的扩大而级数般的扩大,以至到了无法控制的地步,这个时候就出现了一种新的思考程序设计方式和程序设计模型-----面向对象程序设计

    面向对象

    先区分一下这几个首字母的意思,
    OOA:Object Oriented Analyzing 面向对象分析
    OOD:Object Oriented Design 面向对象设计
    OOP:Object Oriented Programming 面向对象编程(或者有的就叫面向对象程序设计,也可以理解为编码实现)

    面向对象OOP(Object Oriented Programming,面向对象编程)是一种对现实世界理解和抽象的方法,面向对象也可以简称为OO。最初面向对象是软件开发方法,现今其概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

    最早的一门OOP语言是Ole-Johan Dahland和Kristen Nygaard发明的Simula(首先引入了类的概念和继承机制),没听过吧?我也没听过,但这并不妨碍它的后辈C++、Java等语言来折磨我们/(ㄒoㄒ)/~~。

    面向对象编程能够提升程序的开发效率

    在使用面向对象编程语言开发时,并不是所有的类都必须由程序员亲自编写。大部分的类都已经内置于面向对象编程语言中了,这些类可以为来自各个领域的程序员所用。通常将像这样的一组类(一组组件)称作“类库”。通过利用类库可以提升编程的效率。

    我们接着用飙车的例子来比喻(可不能怨人爱飙车,毕竟那里老司机比较多( *︾▽︾)~~):如果此时我又想拥有一辆五菱神车去秋名山,由于认识了富婆,我除了自己造以外有了另一种选择,那就是直接去车店去买一辆,可以粗略地把它比作面向对象。
    在这里插入图片描述
    它是模型化的,你只需抽象出一个类,好比将现实的事物抽象出来,注意抽象这个词是重点,把现实生活的事物以及关系,抽象成类,通过继承,实现,组合的方式把万事万物都给容纳了。实现了对现实世界的抽象和数学建模。这是一次飞跃性的进步。

    看到这你发现面向对象的优势了么?
    一、你不需要在花精力再去了解如何制造车了,实现了高内聚低耦合
    二、如果有一天车技高到可以不用方向盘了,想换车了,你只需要再去车店换辆拖拉机就行了,不需要自己再重新来造车了,提高了可维护性

    可能这么说面向对象的可维护性和高内聚低耦合有点不好接受,再来举个例子加深理解。

    高内聚低耦合

    高内聚低耦合是我们每一个编程人员在编写程序时都一直追求的,其是软件工程中的概念,用来判断软件设计好坏的标准,主要用于程序的面向对象的设计,看类的内聚性是否高,耦合度是否低。目的是使程序模块的可重用性、移植性大大增强。
    通俗来讲,将相关度比较高的部分尽可能的集中,不要分散就是高内聚,将两个相关的模块尽可以能把依赖的部分降低到最小,不要让两个系统产生强依赖就是低耦合。

    高内聚
    我们就以吃来举例,毕竟民以食为天哈。按我的理解高内聚就好比咱们吃货所热爱的麻辣烫、大杂烩。相比醋溜白菜、油麦菜那些一个个细分出来的名菜,大杂烩、麻辣烫就实现了高内聚,将大多数的蔬菜都集中在了一起,让想吃菜的朋友一次将各种蔬菜吃个够。
    深夜放个毒,学习不易,偶尔放纵一下走样的身材也是可以的。
    在这里插入图片描述
    低耦合
    耦合性(Coupling)也叫耦合度,是对模块间关联程度的度量,指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。
    好比你经常吃的扬州蛋炒饭,它就耦合度很高,由于将”蛋”“饭”炒在一起,所以假如你又想吃茄子拌饭了,那将蛋炒饭中的鸡蛋换成茄子很困难,所以只能另炒一盘,想吃鸡蛋面也是同样的道理,所以扬州蛋炒饭是“高耦合的”,以至于”可维护性”比较差。

    可维护性

    众所周知,面向对象编程中,使用了一种称为“类”的要素,通过把若干个类组装到一起构建成一个完整的程序。从这一点来看,可以说类就是程序的组件(Component),面向对象编程的关键在于能否灵活地运用类。
    这一个个类就好比一个个储物柜,当我们要存放或拿东西时,一般都是对其中的几个柜子进行更改,很少有对所有柜子的东西都进行操作的时候,所以不会影响其他的柜子。
    在这里插入图片描述
    而面向过程就好比把所有东西都放在一个大储物柜中,那么要拿东西时,我们就不得不将其中某一部分东西的摆放顺序打乱,这就有可能会引起柜子的其他东西不稳定,从而引发“BUG”。
    所以从开发项目的角度来说,随着需求的不断变化,项目也是需要增加或删减功能的,而面向对象就能大大提高该项目的可维护性,不会因为一个“东西的拿放”,而引发无数的BUG。

    对面向对象有了全面的了解后,你可能会发现有那么一丝丝熟悉感
    在这里插入图片描述
    没错,在我们的直觉中,大件物品都是由组件组装起来的。因此可以说面向对象编程方法把同样的直觉带给了计算机,创造了一种顺应人类思维习惯的开发方法。这也证实了计算机的发展趋势就是不断地拉近计算机和人的距离,使计算机成为更容易使用的机器。
    在这里插入图片描述

    面向对象与面向过程的区别

    尽管已经对面向对象和面向过程有了大致的了解,我们还是要系统谈谈面向对象与面向过程的区别,从而加深自己的感悟。
    依我的理解面向对象类似于高层组织的管理角色,面向过程则相当于专精于一个方面的工人。它们没有孰优孰劣之分,只是擅长的方向不一样。

    一、解决问题方法不同
    1、面向过程:一种以过程为中心的编程思想。是以什么正在发生为主要目标,一步步进行编程解决问题。
    2、面向对象:是对现实世界理解和抽象的方法,以功能来划分问题,变为一个个类,而不是步骤。

    二、中心不同
    面向过程:程序设计方法以功能为中心来设计功能模块,难于维护;
    面向对象:程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。

    三、优势不同
    1、面向过程:不支持丰富的“面向对象”特性(比如继承、多态),并且不允许混合持久化状态和域逻辑。
    2、面向对象语言:在内部被表示为一个指向一组属性的指针。任何对这个对象的操作都会经过这个指针操作对象的属性和方法。

    曾看过知乎一位大佬写的面向对象与面向过程区别的一篇文章,讲得可比咱这和尚念经生动形象多了——如何通俗易懂地举例说明「面向对象」和「面向过程」有什么区别?
    在这里插入图片描述

    面向对象的三大特性

    想要理解面向对象的三个特性,那我们先要明确一下类和对象的关系,
    对象:Object,含有“物体”的概念,一切皆物体(对象)。对象由静态的属性和动态的行为组成。是一个真实世界中的实体,对象与实体是一一对应关系的,意思就是现实世界的每一个实体都是一个对象,所以对象是一个具体的概念。

    类:类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,一组具有相同属性和行为的对象的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。

    类是对象的一个集合,对象是类的实例。
    把类可以比作书本,那么对象就是《计算机编程的艺术》
    (放图镇楼<( ̄︶ ̄)↗[GO!])。
    在这里插入图片描述

    1、封装
    就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。一个类其实就是一个封装了数据以及操作这些数据的代码的逻辑实体。

    2、继承
    类是对对象的抽象,从OOD(面向对象设计)的角度考虑,继承是对某一批类的抽象.它可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。提高代码复用性;继承是多态的前提。

    3、多态
    一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口,提高了程序的拓展性。

    面向对象的五个基本原则

    在程序设计领域, SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。SOLID所包含的原则是通过引发编程者进行软件源代码的代码重构进行软件的代码异味清扫,从而使得软件清晰可读以及可扩展时可以应用的指南。SOLID被典型的应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发的基本原则的重要组成部分。——维基百科

    首字母指代概念
    S单一功能原则SRP(Single Responsibility Principle)认为对象应该仅具有一种单一功能的概念
    O开闭原则OCP(Open-Close Principle)认为软件体应该是对于扩展开放的,但是对于修改封闭的概念
    L里氏替换原则LSP(the Liskov Substitution Principle LSP)认为“程序中的对象应该是可以在不改变程序正确性的前提下被它的子类所替换的”概念
    I依赖倒置原则DIP(the Dependency Inversion Principle DIP)认为“多个特定客户端接口要好于一个宽泛用途的接口”
    D接口分离原则ISP(the Interface Segregation Principle ISP)认为一个方法应该遵从“依赖于抽象而不是一个实例”的概念依赖注入所以该原则的一种实现方式

    面向对象的弊端

    了解了面向对象的易维护、易复用、易扩展,是不是瞬间觉得面向对象才是真正的武林高手应该掌握的秘籍?那种万物皆对象、一切皆对象的思想令人想起来有点像古龙先生的“天下武功无坚不摧,唯快不破”,可谓最高境界。
    在这里插入图片描述
    诚然,面向对象程序设计是软件开发中一个非常有用的特性,但其本身并没有什么好坏之分(所谓缺点也只不过是它相对于其它事物不擅长的一面),只有用的好坏之分。《计算机是怎样跑起来的》中有句话就说的很好——“有一点希望诸位注意,那就是请不要把面向对象当成是一门学问。程序员是工程师,工程是一种亲身参与的活动而不是一门学问。请诸位把面向对象编程作为一种能提升编程效率、写出易于维护的代码的编程方法,在适当的场合实践面向对象编程,而不要被它各种各样的概念以及所谓的编程技巧所束缚。

    巨大的类关系设计开销

    我们看待一个事物应该用辩证的眼光去了解它(不是带哲学家,手动狗头),现在由于面向对象编程的理念越来越被人所接受,许多书籍都大肆宣扬它的好处,致使我等小白们过于疯狂,认为只要用了面向对象编程,就能得到非常容易维护、高内聚低耦合的代码。

    其实不然,我们知道面向对象编程中,通过把若干个类组装到一起构建成一个完整的程序,因此也有人说这是“面向组件编程”。正是因为一个程序是由许多的类组成,在软件开发或者大型软件项目中,由于功能众多,所以类也特别多,若缺乏整体系统设计划分,易造成系统结构不合理、各部分关系失调等问题,这也就带来了巨大的类关系设计开销。
    原谅是个小白,这个弊端我目前只大致了解,没有什么对它独特的见解,推荐一篇大佬的文章——关于巨大的类关系设计开销中具体有何弊端

    性能比面向过程低

    “程序的性能首先由编程语言的执行方式有关,其次才是设计范式”
    因为面向对象是通过类对对象的抽象实现的,而类在调用时需要实例化,开销比较大,比较消耗资源。所以当性能是最大考量的时候,通常选用面向过程语言,比如单片机,嵌入式开发、Linux/Unix等一般采用面向过程开发。

    数据结构耦合性极强

    在面向对象重要的特性继承中,一旦父类中增加或删除某个字段,可能要影响到所有子类,影响到所有子类相关的逻辑。这显得非常不灵活,在一套复杂的继承体系中(像意大利面条那种),往父类中改变字段会变得越来越麻烦。
    比方说BCD是A的子类,某天发现需要增加一个BC都有的数据,但是D没有,那么这个数据肯定不适合放到父类中,只能将BC抽象出来一个父类E,E继承于A,BC共有的字段加到E中。
    一旦继承结构发生了变化,可能接口也要改变,比方说之前有个接口传入参数类型是E,当BC不再需要共用的那个字段,那么需要调整继承关系,让BC重新继承A,那么这个接口的传入参数类型需要改成A,其中的逻辑代码很可能也要发生调整。
    所以面向对象在面对复杂的游戏逻辑变化时很无力,这也是为什么在大多数人在开发游戏时使用面向过程进行开发,游戏逻辑变化非常复杂和频繁,可能今天加了个字段,明天又删掉了,假如每次都要去调整继承结构,这简直就是噩梦,继承结构在面对频繁的数据结构调整时确实很无力。

    初学者不容易接受!!!

    在这里插入图片描述

    区分“面向对象”和“基于对象”

    经常有小白被这两个概念所困扰,其实区分起来很简单,面向对象的三大特点(封装,继承,多态)缺一不可。而“基于对象”是使用对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特点。而“多态”表示为父类类型的子类对象实例,没有了继承的概念也就无从谈论“多态”。

    很多流行技术都是基于对象的,它们使用一些封装好的对象,调用对象的方法,设置对象的属性。但是它们无法让程序员派生新对象类型。他们只能使用现有对象的方法和属性。所以当你判断一个新的技术是否是面向对象的时候,通常可以使用后两个特性来加以判断。“面向对象”和“基于对象”都实现了“封装”的概念,但是面向对象实现了“继承和多态”,而“基于对象”没有实现这些,的确很饶口。

    最后再附上知乎一篇大神之作(小白慎入),怎么从本质上理解面向对象的编程思想?比起我这科普短文,这位大神写的可谓是刨根问底,令人茅塞顿开。文章内容牵强的地方欢迎指正。

    展开全文
  • 面向过程(Procedure Oriented)和面向对象(Object Oriented,OO)都是对软件分析、设计开发的一种思想,它指导着人们以不同的方式去分析、设计开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的...

      面向过程(Procedure Oriented)和面向对象(Object Oriented,OO)都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来越明显的显示出来,出现了面向对象思想并成为目前主流的方式。两者都贯穿于软件分析、设计和开发各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。

      面向过程思想思考问题时,我们首先思考“怎么按步骤实现?”并将步骤对应成方法,一步一步,最终完成。 这个适合简单任务,不需要过多协作的情况下。比如,如何开车?我们很容易就列出实现步骤:

      1. 发动车 2. 挂挡 3.踩油门 4. 走你

      面向过程适合简单、不需要协作的事务。 但是当我们思考比较复杂的问题,比如“如何造车?”,就会发现列出1234这样的步骤,是不可能的。那是因为,造车太复杂,需要很多协作才能完成。此时面向对象思想就应运而生了。

      面向对象(Object)思想更契合人的思维模式。我们首先思考的是“怎么设计这个事物?” 比如思考造车,我们就会先思考“车怎么设计?”,而不是“怎么按步骤造车的问题”。这就是思维方式的转变。

      一、面向对象思想思考造车,发现车由如下对象组成:

      1. 轮胎

      2. 发动机

      3. 车壳

      4. 座椅

      5. 挡风玻璃

      为了便于协作,我们找轮胎厂完成制造轮胎的步骤,发动机厂完成制造发动机的步骤;这样,发现大家可以同时进行车的制造,最终进行组装,大大提高了效率。但是,具体到轮胎厂的一个流水线操作,仍然是有步骤的,还是离不开面向过程思想!

      因此,面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。 但是,具体到实现部分的微观操作(就是一个个方法),仍然需要面向过程的思路去处理。

      我们千万不要把面向过程和面向对象对立起来。他们是相辅相成的。面向对象离不开面向过程!

      ·面向对象和面向过程的总结

      1、都是解决问题的思维方式,都是代码组织的方式。

      2、解决简单问题可以使用面向过程

      3、解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。

      · 面向对象思考方式

      遇到复杂问题,先从问题中找名词,然后确立这些名词哪些可以作为类,再根据问题需求确定的类的属性和方法,确定类之间的关系。

    建议

      1.面向对象具有三大特征:封装性、继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能。所以面向对象优势更明显。

      2.一个经典的比喻:面向对象是盖浇饭、面向过程是蛋炒饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。

    展开全文
  • 程序中的对象分为5类类与封装类的概念封装的概念封装的具体定义继承的概念多态概念消息通信面向对象软件开发方法面向对象软件开发方法的特征Rumbaugh方法CoadYourdon方法Booch方法Jacobson方法UML面向对象的建模...
  • 关系数据库系统与面向对象数据库系统各自的优缺点 关系数据库系统的优点 a.灵活性建库的简单性:目前在多数RDDMS产品中使用标准查询语言SQL,允许用户几乎毫无差别地从一个产品到另一个产品存取信息。 b....
  • 面向对象方法学与结构化方法学的异同 面向对象方法与结构化方法都是软件开发过程中的方法。在传统的软件开发过程中多采用结构化技术完成软件开发的一系列工作,但这种方法并不适应发型软件产品的开发,而随着硬件...
  • 面向对象的分析设计 软件工程(第三版,钱乐秋等著)7-8章有所省略版 面向对象的基本概念 用下列等式认识面向对象方法: 面向对象 =类(class)+ 对象(object) 继承(inheritance) 多态(Polymorphism) 通过...
  • 因为想在笔记中夹杂这篇文章中部分内容,所以进行了还是比较多的引用,核心的地方还是自己写的 可以一直接调转到深入理解Java的OOP ...名称:Object-Oriented Analysis:面向对象分析方法 OOA是指...
  • 面向对象的分析与设计

    千次阅读 2018-12-26 21:11:04
    面向对象的分析设计——最需要的定义 开发过程与开发方法论的区别 面向对象分析 面向对象的设计 应该开始的最重要的原则是什么? 面向对象分析与设计的优势 简单的例子 用户故事 面向对象分析的步骤 ...
  • 面向对象分析与设计概述

    千次阅读 2015-06-05 13:37:01
    面向对象分析与设计概述一、概述面向对象分析与设计(Object Orient Analysis & Design,简称OOAD)是现代软件企业广泛采用的一项...所以面向对象技术的优点即为能够构建与现实世界相对应的问题模型,并保持他们的结构
  • 数据模型是指数据库的组织形式,它决定了数据库中数据之间联系的表达方式,即把在计算机中表示...1、传统数据模型(层次模型、网状模型、关系模型) 2、面向对象模型 3、时态GIS模型 4、三维数据模型 二、传统数据模...
  • 1.面向对象分析设计模型 面向对象设计的基本任务,把面向对象分析模型转换为面向对象设计模型面向对象的分析模型主要由顶层架构图、用例用例图、领域概念模型构成。设计模型则包含以包图表示的软件体系结构图...
  • 面向对象思想

    千次阅读 2020-03-07 22:52:35
    1. 面向过程和面向对象区别   面向过程和面向对象都是对软件分析、设计开发的一种思想,它指导着人们以不同的 方式去分析、设计开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性 的提高,...
  • 1.引言  经过几十年的发展,今天的GIS系统已经具备了较强的数据存贮、管理输入输出功能,但目前大多数的...为此,作者为现有GIS软件总结了两种典型的数据模型[1]:拓扑关系数据模型和面向实体的数据模型,并分析了
  • JDBC 所使用的关系模型不是为保存对象而设计的,因此迫使开发者选择在处理持久数据时放弃面向对象编程,或者自己去开发将面向对象特性(比如:类之间的继承)关系型数据库进行映射的专有解决方案。  关系对象...
  • 1 面向对象设计模式与原则—学习李建忠《设计模式》系列视频(C#)1.1 设计模式简介人是一个经验性的动物。 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。 ——Christopher ...
  • 这次由于要写面向对象的论文作业,看了 Head First 设计模式这本书,一下就被吸引了。 一切东西,原来全是人类智慧的结晶啊。在复杂的问题面前,可以用巧妙的,简单的方法把它给解决了。我想这样才是人类不同于其他...
  • 面向对象和面向过程的区别

    千次阅读 2018-04-28 09:09:26
    转自... 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。1.什么...
  • 对象是面向对象编程技术中的最基本的概念。类对象的关系类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的...
  • 业务模型;UML类图
  • 面向对象复习总结

    千次阅读 2016-12-07 21:11:27
    90年代末,被称为四人帮的GoF发表了在面向对象编程中使用模式化方法研究的开创性著作-《设计模式-可复用面向对象软件的基础》(《Design Patterns-Elements of Reusable Object-Oriented Software》)。 其中提出了...
  • 面向对象的概念应用已超越了程序设计软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。 谈到面向对象,这方面的文章非常...
  • 对比面向对象和面向服务

    千次阅读 2016-03-16 10:18:03
    Metaphor: bridge to the unknown. – Object thinking 就像Object thinking那本书中所说的那样,“比喻: 通向未知的桥梁”,同样,我们在学习新技术...通过比喻对比,在新事物与旧事物之间建立快速联系,就能
  • 10 面向对象技术

    2019-10-23 14:34:35
    10 面向对象技术 面向对象(Object-...面向对象方法一客观世界中的对象为中心,其分析设计思想符合人们的思维方式,分析设计的结果与客观世界的实际比较接近,容易本人们所接受。 在面向对象方法中,...
  • 在讲面向对象编程时先讲一下什么是顺序编程,什么是过程式编程,什么是面向对象编程: 顺序编程: 就是只用一个单线程去执行一段代码,执行过程根据代码依次从上到下按顺序执行各种指令操作 过程式编程:过程式的...
  • 面向对象编程思想

    万次阅读 2014-06-24 21:18:46
    面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计。 它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,741
精华内容 40,296
关键字:

面向对象和你目前看到关系模型之间的区别