这一章节我们来简单的聊聊对象抽象的过程。
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的五个基础特性。
这一章节就到这里,谢谢。
-----------------------------------
版权声明:本文为博主原创文章,未经博主允许不得转载。