博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从C到JAVA,从面向过程到面向对象
阅读量:5118 次
发布时间:2019-06-13

本文共 1558 字,大约阅读时间需要 5 分钟。

概述

C语言是很多大学生接触到的第一门编程语言,也可以说是一个岔路口——学了C语言,可以去搞硬件,也可以去搞软件(当然两者都需要继续学习,不是说C语言是万能的)。

如果选择了向软件方向发展,那么学一门面向对象的编程语言就是很有必要的了。又如果选择了高雅美丽大方得体帅气可爱健康的JAVA,如何从C过渡到JAVA,从面向过程过渡到面向对象呢?(老师,我扣题了!(°∀°)ノ)

在我看来,学好C,再学其它高级语言就可以少走很多弯路了,因为编程语言在某种程度上都是相通的。所以在这里我只说一些我觉得JAVA和C不同的地方:

什么是面向过程

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了(百度百科)。

C语言是典型的面向过程的编程语言。在C语言中,你就是上帝(主函数就是上帝意志的体现......),你把想做的事“封装”成一个一个函数模块,然后在主函数中通过调用不同的函数完成不同的功能,最后达到你想到的效果(得到你想要的输出)。

如:定义一个 Student 结构体,然后定义一个study函数。在主函数中调用study函数,打印“XXX is studying ! ”语句。

1271330-20190310135630523-1585251763.png

1271330-20190310135635618-11243081.png

这会给人一种感觉(至少是给我):study这个行为是上帝(主函数)发出的,而student是这个行为的原材料(Σ(゚д゚;))。在C语言中把可复用的代码块写成一个个函数,这就有点封装的味道了(事实上就是?)。有人说,面向对象就是结构体里面包含了函数,好像对也好像不对:面向对象编程确实把数据(属性)和函数(方法)放到了一块,但是它还有许许多多面向过程编程没有的特性。

什么是面向对象

面向对象就是是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为(百度百科)。

JAVA是典型的面向对象编程语言之一。在JAVA(或者说面向对象编程语言)中,你还是上帝,但是你是一个“简政放权”了的上帝。你创建了一个个对象,然后这些对象干这干那的。

如:创建一个Student对象,然后这个Student对象在主函数中调用自己study函数,打印“XXX is studying ! ”语句。

1271330-20190310135652235-735633298.png

1271330-20190310135657519-2039908973.png

1271330-20190310135705728-402430805.png

这会给人另外一种感觉(至少是给我):主函数还是上帝,但是study行为不是上帝发出的了,Student也不用被当做原材料了,study这个行为是Student主动发出的。或者有人说,胡说!明明是你(上帝)叫学生去学习的,不然他早就去play了!

......确实,在这里看起来好像是上帝指使学生去学习一样,还是给人一种面向过程的感觉。但是这只是一种展示而已,比如说在GUI编程,在WEB编程中等,用户的行为都是不可预测的(打个比方,你在看视频时,如果想调大音量和快进,那么你是先快进再调大音量或者说先调大音量再快进,程序是无法保证的。它是不可能给你一套说明书:要快进必须先调小音量或者先调小音量再快进)。所以像面向过程那样按部就班来设计你的代码,不是很符合实际。

面向对象的特性

封装

对象把自己的数据(属性)隐藏起来,外部无论是访问还是赋值,都必须按照类自己定义规范来。

如,你可以在setter中,规范age的范围:

1271330-20190310145604984-1068090685.png

继承

当一个class(类),和一个已经定义好的class有“is-a”关系(如猫 Cat 是动物 Animal,Cat is Animal),那么 Cat 就可以继承 Animal。Animal 中的属性,Cat就可以使用了(达到了代码复用的效果)。

多态

多态是同一个行为具有多个不同表现形式或形态的能力。

转载于:https://www.cnblogs.com/Libinkai/p/10505133.html

你可能感兴趣的文章
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
遍历Map对象
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
Python入门-函数
查看>>