面向对象出现原因以及意义

出现原因:

面向对象是在结构化设计方法出现很多问题的情况下应运而生的。结构化设计方法求解问题的基本策略是从功能的角度审视问题域。它将应用程序看成实现某些特定任务的功能模块,其中子过程是实现某项具体操作的底层功能模块。在每个功能模块中,用数据结构描述待处理数据的组织形式,用算法描述具体的操作过程。面对日趋复杂的应用系统,这种开发思路在下面几个方面逐渐暴露了一些弱点。主要重用性以及后期的维护扩展方面显得相当无力。

意义:面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。

“面向过程”和“面向对象”的区别

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

可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。

如果是面向对象的设计思想来解决问题。面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

时间: 2024-12-21 00:00:45

面向对象出现原因以及意义的相关文章

TsinghuaX: 00740043X C++语言程序设计基础 第四章提纲

第4章(一) 本章导学 程序中的对象是现实中对象的模拟,具有属性和功能/行为: 抽象出同一类对象的共同属性和行为,形成类,对象是类的实例: 类将数据和处理数据的函数封装在一起,隐藏内部细节,提供对外访问接口: 定义对象时,可以通过构造函数进行初始化: 删除对象时,可以通过析构函数释放资源 一个类的对象可以由其他类的对象组合而成,即类的成员可以是其他类的对象: 在这一章,我们还将学习结构体.联合体和枚举类 面向对象程序设计的基本特点 抽象 对同一类对象的共同属性和行为进行概括,形成类. 先注意问题

《松本行弘的程序世界》读书笔记

1. 前言 半个月之前买了这本书,还是经园子里的一位网友推荐的.到现在看了一半多,基础的都看完了,剩下的几章可做高级部分来看.这本书看到现在,可以说感触很深,必须做一次读书笔记! 关于这本书,不了解的可以去网上查查.作者是Ruby语言的创始人,可谓是程序世界中的高手,开卷有益,不管你是哪个层次的编程人员,相信都能或多或少的汲取到你想要的营养. 下面将总结一下看完本书我记录下的一些知识点.有的是书中的原话,有的是我个人的理解,供参考. 2. 面向对象 2.1 多态性 面向对象三大原则:继承.封装和

Python学习_10__python2到python3

同样作为动态语言,python的面相对像和ruby有很多类似的地方,这里还是推荐<Ruby元编程>一书来参考学习python的面向对象.然而python并不是纯面向对象设计,所以很多ruby种灵活的技巧在python中可能并不适用,但是这并不影响该书对python面向对象学习的借鉴意义. 从类和实例开始,谈python2到python3 类和实例是面向对象的基础,类是一个对象的定义,比如人类定义了人应该有的基本属性和方法,而实例则是真正的实物,实例中存放了对象的具体信息,如小明是人类的一个实例

从Java转PHP的编程感受

学Java出身的,学得也很平常,没什么亮点.从一开始的servlet 到 struts2 到springMvc 从jdbc 到ibatis mybatis.基本上增删改查跑一边吧. 如今参加工作了,写了6个月的PHP.今天突然之间有点感悟,记录一下. 因为公司的原因,项目总是再换,总是没做完,我总是坐着很多相同的事情.所以有时候,我觉得很累.项目经理会说,你有了前面的基础应该就很快了吧.(他是非专业的).让我更加累.一是进度赶,然后是身心俱疲,人的重复不像for循环.我们很快就厌烦了.而for它

Java图形用户界面布局控制Layout练习

尝试搭建登录对话框,包含两个文字标签(用户名.服务器IP),两个文本输入条(用户名.服务器IP),一个按钮(登录),按照自己认为合适的方式布局.  我把GridLayout(网格布局).BorderLayout(边界布局).FlowLayout(流式布局)三种布局进行了比较并且做了尝试.  终于到了使用Java得到图形反馈的结果,心里还有些小激动呢.虽然只是完成了界面的展示,没有功能的实现,但是成就感还是蛮大的,而且查询JDK文档真的非常有收获. package gui; import java

数据分析的5层解读,报表仍是有效的落地实践!

文 | 船长 浙江天正电气股份有限公司(下文简称浙江天正),是中国工业电器行业规模最大的企业之一,是中国低压电器行业的领军企业.旗下有四处电气工业园:温州.嘉兴.上海.南京,低压电器行业业务以配电与工业控制为主. 2017年4月份,在温州,企业信息化交流会上,浙江天正电气控股的李书育谈起天正电气曾经面临的数据分析的挑战,分享了一年来的实践经验. 项目背景 浙江天正1999年成立,信息化也经历了近18年.浙江天正先后建设了大大小小十几套信息化系统(信息化应用简图如下),其中核心系统有四个:ERP(

C#中的Sealed和J#中的Final比较(转载)

Sealed与Final修饰符其实并不是一个语言平台的产物,他们有着各自所属的语言环境,但这两个关键字都是.Net平台中不可或缺的,那么二者用法几何,随本文一探究竟. 一.Sealed sealed 修饰符可以应用于类.实例方法和属性.用于类时,该类被称为密封类,密封类不能被继承:用于方法时,该方法被称为密封方法,密封方法会重写基类中的方法:sealed修饰符应用于方法或属性时,必须始终与override一起使用:结构是隐式密封的,因此它们不能被继承. ● 描述方法: //Error: cann

Android学习路线权威指南

前言 看到一篇文章中提到"最近几年国内的初级Android程序员已经很多了,但是中高级的Android技术人才仍然稀缺",这的确不假,从我在百度所进行的一些面试来看,找一个适合的高级Android工程师的确不容易,一般需要进行大量的面试才能挑选出一个比较满意的.为什么中高级Android程序员不多呢?这是一个问题,我不好回答,但是我想写一篇文章来描述下Android的学习路线,期望可以帮助更多的Android程序员提升自己.由于我也是从一个菜鸟过来的,所以我会结合我的个人经历以及我对A

怎么让 FFmpeg 运行命令呢?很

上一篇文章实现了 FFmpeg 编译及 Android 端的简单调用,成功获取了 FFmpeg 支持的编解码信息,而在实际使用时,需要调用 FFmpeg 内部函数,或通过命令行方式调用,但后者简单很多. 怎么让 FFmpeg 运行命令呢?很简单,调用 FFmpeg 中执行命令的函数即可,这个函数位于源码的 ffmpeg.c 文件中: int main(int argc, char **argv)11我们的目的很简单:将 FFmpeg 命令传递给 main 函数并执行.而这个传递过程需要编写底层代