在互联网时代的今天,人工智能和大数据云计算的到来,我们可以看到,计算机的世界越来越趋近人类世界。
从编程语言上说,也是同样越来越趋近人类语言,从开始的机器语言,到后来的汇编语言,到高级语言与低级语言分界的C语言,直到现在的面向对象语言。
机器语言,从名称上就可以看出,机器语言是计算机能够直接识别的,我们都知道计算机是二进制的,只能识别0,1。那么问题就来了,用机器语言编写程序,那基本不是学计算机的,而是电子的,因此,机器语言真是专业中的专业,也许只能那些技术大咖能畅游在机器世界,对于我们这种普通人,只可远观而已。
由此,汇编语言的产生,用标签代表命令,将极大简化学习难度,这个时候应该就是我们计算机专业人士的的春天开始到来。
而c语言的产生,已经基本贴近人类语言了,当然,是欧美国家的语言,与看这篇博文的你,基本没啥关系,因为看这篇博文的基本都是中国人。但是无论中国美国,至少c语言在理解上,都简单了太多。但是,这个时候由于硬件发展并不迅速,因此,基本只是写一些小程序或者写一些算法,比如算法,这个明显与逻辑能力更贴近,因此,c语言也更注重逻辑的表达,也就是我们平时做事,第一步做什么,下一步做什么。。。。这种顺序逻辑,非常符合人类做事,但是我们也可以看到,这个基本是一件事一件事的来描述这个世界,因此,c语言也叫结构化过程化的语言,强调算法或者说软件的运行过程。
随着硬件的发展,大型程序的到来,现在的程序不能只用程序来表达,而系统这个词可能更贴近。这个时候,面向对象的思想就出来了。所谓的对象我们可以理解为我们所看到所有的一切,人,猫,狗,桌子,电脑,手机等等所有的一切。都是对象,以前是过程流,比如数学考试的时候,做题,c语言就会第一步,第二步的描述做题的步骤,但是面向对象是消息流+对象。给一道题,人做题,做完把答案给你。
而在这其中,人具体怎么做,并不强调,这样从上图可以看到题目,人,答案,这些名词。每个名词都是对象,“把题目给人”,“人做完给出答案”这就是消息流,也就是输入与输出。
当然,面向对象并不是说没有过程化的东西,比如上图,把题目给了人之后,人怎么实现,还是需要程序员按照过程化的实现,但是在整体结构上,我们并不去强调过程,而是强调对象之间的配合,由部分组成整体,实现系统。
面向对象中“类”这个字,在我们生活中常见,比如人类,分类等等。而面向对象中,类与对象的区别,有时候让人一头雾水。下面我将介绍,类与对象的区别:
类与对象的区别很简单:类是抽象的描述,对象是实际存在的。比如,人类,就是很抽象,只能形容人类有什么共同点,比如,姓名,性别,年龄,住址,但是并不具体,但是具体到某一个人,比如张三,男,23岁,广州等,前面对人类共同的描述就是类,张三就是这个类的一个实例,也就是对象了。下面我将举例说明:类要记住一个词叫:“分类” 如下:
手机分为智能手机和非智能手机,智能手机有三星,苹果,华为。非智能手机有oppo,nokia
由此,可以看出它们的关系为:
代码示例:/** *@author LeiGao24 *@data 2016.11.15 * 手机--phone * 智能手机---zhiNeng * 非智能手机 -- feiZhiNeng */class phone{ }class zhiNeng extends phone{ }class feiZhiNeng extends phone{ }//指定程序运行的入口Main函数,也就是从哪里开始执行程序//由于java是全部面向对象的,也就是说java所有的语句都必须在类中。//因此要声明一个类,然后将Main函数放到类中。class Main{ public static void Main(String[] args){ //生成对象 zhiNeng sanxing=new zhiNeng(); zhiNeng apple=new zhiNeng(); zhiNeng huawei=new zhiNeng(); feiZhiNeng oppo = new feiZhiNeng(); feiZhiNeng nokia = new feiZhiNeng(); }}
通过以上代码可以很好的将上副图描述出来。
从上面应该可以理解类与对象了。那么问题来了,我们平时是怎么描述一个物体的呢?
通常从两个方面,一个是它的属性,另一个就是它的功能。
例如,接着上例,手机属性:品牌,尺寸,手机功能:打电话,发短信
由此,我们就可以扩展代码如下:
/***@author LeiGao24*@data 2016.11.15* 手机--phone* 智能手机---zhiNeng* 非智能手机 -- feiZhiNeng*/class phone{ String brand; String size; public void call(){ System.out.println("phone call ..."); } public void mesaage(){ System.out.println("phone message"); }}class zhiNeng extends phone{ //由于智能手机是手机的一个子类,也就是孩子, //所以,智能手机也包含品牌,尺寸,打电话,发短信 //但是,打电话和发短信每个手机实现的方式是不同的, //因此,要把打电话和发短信两个方法重新写一下 public void call(){ System.out.println("智能打电话....此手机品牌是"+ this.brand+",此手机的大小:"+this.size); } public void mesaage(){ System.out.println("智能发短信....此手机品牌是"+ this.brand+",此手机的大小:"+this.size); }}class feiZhiNeng extends phone{ public void call(){ System.out.println("非智能打电话....此手机品牌是"+ this.brand+",此手机的大小:"+this.size); } public void mesaage(){ System.out.println("非智能发短信....此手机品牌是"+ this.brand+",此手机的大小:"+this.size); }}//指定程序运行的入口Main函数,也就是从哪里开始执行程序//由于java是全部面向对象的,也就是说java所有的语句都必须在类中。//因此要声明一个类,然后将Main函数放到类中。class Main{ public static void main(String[] args){ //生成对象 zhiNeng sanxing=new zhiNeng(); sanxing.brand="三星"; sanxing.size="5寸"; sanxing.call(); sanxing.mesaage(); zhiNeng apple=new zhiNeng(); apple.brand="苹果"; apple.size="4寸"; apple.call(); apple.mesaage(); zhiNeng huawei=new zhiNeng(); huawei.brand="华为"; huawei.size="4寸"; huawei.call(); huawei.mesaage(); feiZhiNeng oppo = new feiZhiNeng(); oppo.brand="oppo"; oppo.size="2寸"; oppo.call(); oppo.mesaage(); feiZhiNeng nokia = new feiZhiNeng(); nokia.brand="诺基亚"; nokia.size="3寸"; nokia.call(); nokia.mesaage(); }}
运行结果: