这一章节我们来简单的聊聊对象抽象的过程。
1.所有语言都提供抽象机制。
例如:a=1(下面都是举例子,里面所提及的内容有可能是错误的,因为笔者没学过机器码和汇编)
在机器码当中:1000100111011000
在汇编当中:mov a,1
在C语言当中:a=1
在java当中:
class Test(){ a=1; }
从上面的不同的表示里面可以发现,语言都是在不断的抽象,从最开始的0和1,一直到java的创建一个对象然后在对象里面赋值,就是一个不断抽像的过程。
同时,也是编程语言努力把问题空间(实际业务)与解空间(计算机)联系起来的表现。
解释:
1.在机器码时代,实际业务跟计算机直接的连接是非常困难的,大家可以看到a=1这么简单的操作,就是一大段0和1,谁记得住,当然,记得住的都是强人。
2.在汇编时代,编程语言进步了,做出了第一次的抽象,把0和1抽象成某些句子,可以利用简单的句子来描述a=1,但是由于抽象程度有限,因此,编程的复杂程度还是比较高
3.到了c语言时代,可以说抽象进行了一次飞跃,C语言基本能够处理日常问题,而且性能非常卓越
4.到了java时代,提出了oop,使得实际业务的描述跟计算机的解决方案的描述已经比较吻合
总结:
4个时代的变迁,性能越来越低,但是可读性越来越高,时至今日,除非是高并发互联网企业,一般来说性能不是最大问题,瓶颈出现在人上面,因此,现在可读性反而显得更加重要。
2.java的基本特性
1)万物皆对象。
对象是一个奇特的变量,它既可以存储数据,也可以执行操作,我们可以抽象问题的构件来组成程序。
例如:名字是“jack”的狗会叫的。
class Dog(){ private String name; private String id; public void bark(){ } }
我们建立狗的对象,然后这个狗有一个属性“名字”,而且它会叫,因此有一个方法“bark”
在对象狗里面,既可以存储狗的名字,也可以执行狗叫的方法。
2)程序是对象的集合,它们通过发送信息来告诉彼此需要做什么(说白了,就是调用对象的方法)。
package com.ray.ch01; public class Test { public static void main(String[] args) { Dog dog = new Dog(); dog.setName("jack"); dog.bark(); } } class Dog { private String name; public void bark() { System.out.println(name + " is barking"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
在上面的程序中dog.bark()就是调用了Dog对象的bark方法。
3)每个对象都有由其他对象组成的存储。
package com.ray.ch01; import java.util.ArrayList; public class GroupOfDogs { private ArrayList<Cat> catList; private void initCatList() { for (int i = 0; i < 5; i++) { Cat cat = new Cat(); cat.setName("rose" + i); catList.add(cat); } } public static void main(String[] args) { new GroupOfDogs().initCatList(); } } class Cat { private String name; public void bark() { System.out.println(name + " is barking"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
从上面的代码可以看出,特别是private ArrayList<Cat> catList,这一个存储就是通过其他对象来完成的。
4)每个对象都有类型
package com.ray.ch01; public class Bird { public static void main(String[] args) { Bird bird = new Bird(); } }
上面的代码,bird是一个对象,它的类型是Bird,同时bird这个对象,也是Bird这个类型所具象出来的一个实例。
5)某一特定类型的对象,都可以接收同样的消息。
package com.ray.ch01; public class Bird { private void say() { } public static void main(String[] args) { Bird bird1 = new Bird(); bird1.say(); Bird bird2 = new Bird(); bird2.say(); } }
上面的代码建立两个不同的对象bird1和bird2,他们是同一个类型Bird,因此,它们可以接收同样的信息,也就是我需要调用Bird这个类型里面的say方法时,bird1和bird2都可以调用。
最后,对象是具有独立的存储、方法、标识,在jvm里面,每一个对象都是独立的,具有唯一id。
这一章节简单介绍了编程语言抽象过程,以及介绍了java的五个基础特性。
这一章节就到这里。谢谢。
版权声明:本文为博主原创文章,未经博主允许不得转载。