
面向对象,简单一句话就是:我们每天起床张开眼看到的世界上每一个事物,这些事物与你的关系就是你面向的对象。所以面向对象,是很自然的,我们出生以来就一直在学习的过程。因此屏幕前的你本来就是潜在的面向对象编程高手,我说真的。可是在成为高手之前还缺少两样素质:编程语言的掌握和抽象性思维。
What da...?!『抽象性思维??』 嗯,我说真的,谁想出来这么坑人的玩意,编程不就几个指令完事吗?还要什么XXX思维?确实在编程语言发展的初期,编程就是指令集的有机组合。早期从低级的汇编语言到高级的C语言,都是指令集的结合,称其为结构化编程。当然后来出现了面向组件的语言如Visual Basic,Pascal等等。可是开发人员慢慢发现软件复杂程度越来越大,代码越来越长,错综复杂的调用关系,完全暴露的子函数,使得软件代码的维护和扩展变得累赘变得像mission impossible。因此面向对象慢慢被带到编程语言的世界来。
与一切新事物一样,人们一开始并没有将面向对象的编程语言体系称之为面向对象编程。而是从解决问题方面出发,提出解决大型或者超大型软件系统开发的问题。就是前面说的代码的维护和扩展累赘的问题。
聪明的人解决问题总是从身边开始寻找答案。人们发现我们每天面对的这个世界就是一个极其复杂的系统,通过归纳总结:以下几个概念被提炼出来:类(class)和实体(instance), 封装(package)、继承(inheritance)和多态(polymorphism)、重载(Overloading)、覆盖(Overriding)。
好现在来解释下这几个概念。类和实体,类在面向对象编程里面就是具体的代码,是用来定义实体的行为和属性的,他是一个静态的概念。而实体相对就是一个动态的概念,他是运行时具体的一个类的实现。在Java里面用new 关键词生成。这个定义对象和生产对象的开发过程,我们就称之为面向对象编程。
如果能够理解这一点的话,其实就面向对象编程就理解了一半了,叫的就是对具体的语言进行熟悉。
下面我给一个例子,说明类与对象的关系
我们用一个典型的把大象放到冰箱的例子来说明:
首先,我们创建一个冰箱的类,冰箱这个类的方法有:1.打开冰箱门,2.关闭冰箱门,3.放东西进冰箱,3.拿东西出冰箱。当然,还有两个属性,保存物品的空间和门的状态。
接着,我们来创建大象的类,大象的属性包括名字,也可以加上其他属性,比如说脚长等,然后是获取这些属性的方法。下面是具体的代码:
冰箱类:(Refrigerator.java)
import java.util.ArrayList;
import java.util.List;
public class Refrigerator {
private List<Object> box = new ArrayList();
private boolean doorStatus = false;
public void openDoor() {
doorStatus = true;
System.out.println("door opened");
}
public void closeDoor() {
doorStatus = false;
System.out.println("door closed");
}
public void addThing(Object obj) {
if (doorStatus) {
box.add(obj);
System.out.println("Thing added.");
} else {
System.out.println("door is close, please open it first!");
}
}
public Object getThing(int index) {
if (doorStatus) {
System.out.println("Thing take out.");
return box.get(index);
} else {
System.out.println("door is close, please open it first!");
return null;
}
}
}
大象类:(Elephant.java)
class Elephant {
private String name = "";
public Elephant(String name){
this.name = name;
}
public String getName(){
return name;
}
}
好,上面这两个类都是前期工作,下面才是我们真正要实现的:把大象放到进冰箱里。
执行类:(MainApplication.java)
class MainApplication{
// 创建一个冰箱的实例
Refrigerator refrigerator = new Refrigerator();
//创建一个大象的实例(名字)
Elephant elephantOlivia = new Elephant("Olivia");
//命运三部曲
//1.打开冰箱门
refrigerator.openDoor();
//2.把名字叫Olivia的大象放进去
refrigerator.addThing(elephantOlivia);
//3.把冰箱门关上
refrigerator.closeDoor();
//第四部
//4.把冰箱东西拿出来
refrigerator.getThing(0);
}
}
运行结果:
door opened.
Thing added.
door closed.
door is close, please open it first!
大家看到了,把大象放到进冰箱里的代码就简单的5行,是不是很简单。
当然,我们也可以实现把两只大象或者大象和长颈鹿也放到冰箱里代码,大家动手改改看吧。这种把一个对象抽象出来,成为一个类的方式就称作封装。这种封装的能力,是面向对象编程的重要能力,没有之一,就是懂得如何把现实的问题抽象成为一个类。
今天就到这里,下一篇我们来继续这个例子说说面向对象的几个关键概念,继承(inheritance)和多态(polymorphism)、重载(Overloading)、覆盖(Overriding)。
谢谢大家,有问题可以给我留言,记得点赞关注和分享哦。