【新手篇一】面向对象与面向过程的优势劣势!求解
本帖最后由 zhaidun 于 2020-3-21 18:57 编辑项目名称面向对象程序设计面向过程程序设计(也叫结构化编程)
定义是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了
特点封装、继承、多态算法+数据结构
优势适用于大型复杂系统,方便复用适用于简单系统,容易理解
劣势比较抽象难以应对复杂系统,难以复用
设计语言Java、Smalltalk、EIFFEL、C++、Objective-、C#、Python等C、Fortran
【面向对象】(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。它的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象,这方面的文章非常多。但是,明确地给出对象的定义或说明对象的定义的非常少,至少现在还没有发现。起初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计。https://gss0.baidu.com/9vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/8326*Fc1e178a82c809cec0fb03738da977e89d.jpg
https://gss0.baidu.com/9vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/8326*Fc1e178a82c809cec0fb03738da977e89d.jpg
https://gss0.baidu.com/9vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/8326*Fc1e178a82c809cec0fb03738da977e89d.jpg
https://gss0.baidu.com/9vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/8326*Fc1e178a82c809cec0fb03738da977e89d.jpg
https://gss0.baidu.com/9vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/8326*Fc1e178a82c809cec0fb03738da977e89d.jpg
【面向过程】
(Procedure Oriented)是一种以过程为中心的编程思想。它也可称之为“面向记录”编程思想,他们不支持丰富的“面向对象”特性(比如继承、多态),并且它们不允许混合持久化状态和域逻辑。
上书转载自换联网!求个小白能清晰明白的结果!
例如(五子棋)
用面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。
而面向对象的设计则是从另外的思路来解决问题。整个可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
可以看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。
面向过程程序设计和面向对象程序设计的区别
面向过程程序网友分析,他考虑问题的方式是面向流程的,一个程序的设计思路就是解决一个问题的流程。就好比游戏先登入界面,再输入密码,然后选择角色,在然后进入游戏玩耍,结束... .... 这把这些步样就是面向过程。面向过程就是分析出解决问题所需要的步骤,然后用函数骤一步调用就可以了一步实现,使用的时候一个一个依次。可以看出面向过程化程序设计是先确定算法,再确定数据结构。而面向对象程序设计是面向问题中的各种独立个体的,程序的析设分计过程就是将程序分解成不同对象(不同概念体)之间的交互的过程。这就好比在针对某个工程或游戏设计程序时先不考虑,游戏是怎么玩的,工作是怎么做的,而先会去找,游戏或工程中有哪些人或事物参与(一般选择:用户,玩家,角色等等),然后再看他们都有什么用,都干了些什么,针对这个区设计方法。最后在通过这些千丝万缕的联系把他们分门别类的,组装在一起。可以看出面向过程化程序设计是先确定数据结构再确定算法。 从上面很容易看出,面向过程的程序上一步和下一步环环相扣,他只考虑实现客户的需求不考虑以后扩展,如果以后客户的需求有变化 那代码量要改变非常大 耗费的时间也相当多。从本质上说,面向过程基本上是一种状态机,不利于修改,当新状态出现的时候,甚至可能需要重设每一个状态解决实现。所以说面向过程是一种直接的编程方法,它是按照编程语言的思路考虑问题。尤其是想C语言这种过程式语言,它就是通过顺序执行一组语句来实现一个功能,这些语句的执行过程就是整个程序。不同的语言解决同一个问题的过程是不一样的。
而面向对象的程序设计很多东西都是独立的,每个对象都可以重复使用。而面向对象程序设计强调“封装”,“继承“和“多态”。数据和与数据相关的操作被包装成对象(严格的说是“类”),每一种对象是相对完整和独立的。对象可以有派生的类型,派生的类型可以覆盖(或重载)原本已有的操作。所有的这些,是为了达成更好的内聚性,即一种对象做好一件(或者一类相关的)事情,对象内部的细节外面世界不关心也看不到;以及降低耦合性,即不同种类的对象之间相互的依赖尽可能降低。而所有的这些,都有助于达成一个崇高的目标,就是可复用性。
下面举个例子来说明面向过程的程序和面向对象的程序设计的区别:
用面向过程的思想去考虑它应该是这样的:如何启动汽车、如何起步、加速、刹车、熄火等一个个操作。面向过程是把所有的功能全部在一个大的类里定义出来,当系统庞大时,功能多了,各种操作之间的调用关系也很复杂,当需要修改一个功能时就可能引发一连串的改动,使修改和维护成本增加,而不利于修改。
而面向对象则以汽车为对象,一切由汽车开始,以上的可用操多态/抽象 等去设计程序 代码量比面向过程化程序设计是多出了很多 但以后的扩展性和维护性是相当的高效。
下面我们来着重的来讨论面向对象的程序设计中的几个重要概念和编程思想:
抽象性——程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。
类——具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象 封装——也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。 (4)多态性(多形性)
多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
多态性允许每个对象以适合自身的方式去响应共同的消息。 多态性增强了软件的灵活性和重用性。 (3)继承性。继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。
在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。
在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。
在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。
采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。把相关对象的共同部分(属性和动作)进行抽象,形成一个类。也就是说,不同对象通过继承(extends)可以共享这部分内容。通过不断归纳共同部分,就可形成不同层次的类(父类、子类)。这就形成了JAVA的编程思想。
面向过程编程的程序员,习惯于建立数据结构存放数据并定义方法(函数)来操作数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。
下面以求长方形的周长和面积为例分析:
■ 面向过程的程序设计方式思考:
1、确定长方形的周长和面积的算法;
2、编写两个方法(函数)分别计算长方形的周长和面积;
3、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽。 ■ 面向对象的程序设计方式思考:
1、一个长方形可以看成一个长方形对象;
2、一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积);
3、将所有长方形的共性抽取出来,设计一个长方形的类;
4、通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。
比较面向对象程序设计和面向过程程序设计,还可以得到面向对象程序设计的优点:
1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;
2)通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度; 3)结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;
4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软
C,C++,Java这些都是语言,他们之间并没有是不是面向对象的区别。用C同样可以写面向对象的程序,看看Linux的内核代码就知道了。C++,Java一样可以写面向过程的程序,他们之所以叫面向对象的编程语言是因为他们提供的语言特性更易于实现面向对象的编程方法,并不是说他们只能做面向对象编程。
还有就是并不是说面向对象一定优于面向过程。在很多领域是无法实施面向对象的方法,如硬件编程和嵌入式编程这种实时性和效率要求高的领域就无法用到面向对象。面向对象的主要领域还是用在大型,复杂型的软件系统中。
以上是一些关于面向对象与面向过程的解释!
新手需要不用编程实例来说明的方式,直观的用生活方式简约正确的解读一下(火山的面向对象)!
希望大神 留言,写下自己的心得!新手万分感谢:)
问题:
1.我们的火山,面向对象的同时是否支持面向过程(说的是否像JAVA那样同时支持面向对象与过程)?
2.我们的火山,优势与劣势真分析?
3.我们的火山,与易语言一家公司,您觉得2020后哪个是其公司的真重点?
4.写简单的软件,是否需要用到复杂的多态性面向对象的开发平模式?
5.我们火山,是否确定不久将来一定会有支持IOS平台的开发走向,会是何时?
新手兄弟您是否有这个问题,给个评论呗!
-
说的很好,很赞 本帖最后由 创世魂 于 2020-3-22 15:17 编辑
1.我们的火山,面向对象的同时是否支持面向过程(说的是否像JAVA那样同时支持面向对象与过程)?
答:面向过程当然支持了,看怎么封装而已。
例如:无名模块里面大部分方法直接调用方法名字就可以使用,无需输入类名。
例如:文本_取中间文本 ()网页_取源码(),直接通过名字访问的这种模式就是面向过程的思维模式。
2.我们的火山,优势与劣势真分析?
答:
优势:
1、中文,快速入门(根据个人理解情况入门时间肯定有差异),
2、功能会越来越强大,类库会不间断持续更新下去,
3、类库有bug也会积极修复。
4、平台化中文编程,基本实现一套语法打天下的目标,以后会出更多的火山平台。
劣势:
1、还是一个很现实的问题,无法找工作,因为火山还是个娃娃,没有太多公司重视和看好。
2、相对易语言来讲比较难入门。
3、类库虽然很多,但是依然缺很多很多的类库,需要很多类库封装人才来给火山做贡献,类库封装人员少,更新周期长。
3.我们的火山,与易语言一家公司,您觉得2020后哪个是其公司的真重点?
答:
易语言:属于大连大有吴涛软件开发有限公司,是大有房地产投资的公司,吴总只是具有一点股权,根据天眼查信息,吴总占股百分之30.
火山:属于武汉递归软件开发有限公司,吴总百分百的控股,火山的所有版权都是归吴总所有。
未来猜测:火山肯定是占主导地位,易语言不会放弃依然会间歇性更新,更新时间自然就随缘了。
4.写简单的软件,是否需要用到复杂的多态性面向对象的开发平模式?
答:随意,习惯哪个用哪个。但是可以告诉你的是,用火山就离不开类,离不开类自然也就无法离开面向对象。
5.我们火山,是否确定不久将来一定会有支持IOS平台的开发走向,会是何时?
答:计划明年开展火山h5,可能会支持小程序,ios,安卓,跨平台编程。
创世魂 发表于 2020-3-22 15:15
1.我们的火山,面向对象的同时是否支持面向过程(说的是否像JAVA那样同时支持面向对象与过程)?
答:面向 ...
谢谢您:victory::handshake很完美的回复 ????,我想问下今年的计划是什么? 1503123 发表于 2020-3-24 10:21
????,我想问下今年的计划是什么?
你得问管理组 我也是用户
页:
[1]