何为面向对象编程 (上篇)

視其所以,觀其所由,察其所安。

面向对象,简单一句话就是:我们每天起床张开眼看到的世界上每一个事物,这些事物与你的关系就是你面向的对象。所以面向对象,是很自然的,我们出生以来就一直在学习的过程。因此屏幕前的你本来就是潜在的面向对象编程高手,我说真的。可是在成为高手之前还缺少两样素质:编程语言的掌握和抽象性思维。

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)。

谢谢大家,有问题可以给我留言,记得点赞关注和分享哦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容