在互联网时代的今天,人工智能和大数据云计算的到来,我们可以看到,计算机的世界越来越趋近人类世界。

从编程语言上说,也是同样越来越趋近人类语言,从开始的机器语言,到后来的汇编语言,到高级语言与低级语言分界的C语言,直到现在的面向对象语言。

    机器语言,从名称上就可以看出,机器语言是计算机能够直接识别的,我们都知道计算机是二进制的,只能识别01。那么问题就来了,用机器语言编写程序,那基本不是学计算机的,而是电子的,因此,机器语言真是专业中的专业,也许只能那些技术大咖能畅游在机器世界,对于我们这种普通人,只可远观而已。

由此,汇编语言的产生,用标签代表命令,将极大简化学习难度,这个时候应该就是我们计算机专业人士的的春天开始到来。

    而c语言的产生,已经基本贴近人类语言了,当然,是欧美国家的语言,与看这篇博文的你,基本没啥关系,因为看这篇博文的基本都是中国人。但是无论中国美国,至少c语言在理解上,都简单了太多。但是,这个时候由于硬件发展并不迅速,因此,基本只是写一些小程序或者写一些算法,比如算法,这个明显与逻辑能力更贴近,因此,c语言也更注重逻辑的表达,也就是我们平时做事,第一步做什么,下一步做什么。。。。这种顺序逻辑,非常符合人类做事,但是我们也可以看到,这个基本是一件事一件事的来描述这个世界,因此,c语言也叫结构化过程化的语言,强调算法或者说软件的运行过程。

    随着硬件的发展,大型程序的到来,现在的程序不能只用程序来表达,而系统这个词可能更贴近。这个时候,面向对象的思想就出来了。所谓的对象我们可以理解为我们所看到所有的一切,人,猫,狗,桌子,电脑,手机等等所有的一切。都是对象,以前是过程流,比如数学考试的时候,做题,c语言就会第一步,第二步的描述做题的步骤,但是面向对象是消息流+对象。给一道题,人做题,做完把答案给你。

java和UML-2-面向对象_人工智能

    而在这其中,人具体怎么做,并不强调,这样从上图可以看到题目,人,答案,这些名词。每个名词都是对象,“把题目给人”,“人做完给出答案”这就是消息流,也就是输入与输出。

 

    当然,面向对象并不是说没有过程化的东西,比如上图,把题目给了人之后,人怎么实现,还是需要程序员按照过程化的实现,但是在整体结构上,我们并不去强调过程,而是强调对象之间的配合,由部分组成整体,实现系统。

 

    面向对象中“类”这个字,在我们生活中常见,比如人类,分类等等。而面向对象中,类与对象的区别,有时候让人一头雾水。下面我将介绍,类与对象的区别:

 

    类与对象的区别很简单:类是抽象的描述,对象是实际存在的。比如,人类,就是很抽象,只能形容人类有什么共同点,比如,姓名,性别,年龄,住址,但是并不具体,但是具体到某一个人,比如张三,男,23岁,广州等,前面对人类共同的描述就是类,张三就是这个类的一个实例,也就是对象了。下面我将举例说明:类要记住一个词叫:“分类”  如下:

 

手机分为智能手机和非智能手机,智能手机有三星,苹果,华为。非智能手机有oppo,nokia

由此,可以看出它们的关系为:

java和UML-2-面向对象_计算机_02

代码示例:
/**
 *@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();
	}
}

通过以上代码可以很好的将上副图描述出来。

    从上面应该可以理解类与对象了。那么问题来了,我们平时是怎么描述一个物体的呢?

通常从两个方面,一个是它的属性,另一个就是它的功能。

    例如,接着上例,手机属性:品牌,尺寸,手机功能:打电话,发短信

    java和UML-2-面向对象_人工智能_03

由此,我们就可以扩展代码如下:

    

/**
*@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();
	}
}

     运行结果:

        java和UML-2-面向对象_计算机_04