大家都在谈的“面向对象”
面向对象(
Object Oriented,OO
)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象时一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。 ——摘自《百度百科》
在说面向对象之前我们先来说说面向过程。早期开发最流行的开发模式的面向过程,“过程”即一步一步来实现我们的目标。例如:做饭这个常见的动作,我们首先要知道自己吃什么?红烧肉?土豆丝?醋溜白菜?当我们选择吃什么后,需要准备菜品,调料等一系列食材。然后我们洗菜、切菜、炒菜,最后我们才是吃饭。
面向过程即我们不能遗漏任何一个环节的操作,其只针对问题本身,并不对齐进行模块化设计,这便为后期的维护和变更带来了很大的麻烦。
面向对象 其说白了就是找别人(对象)来为我们做事。我们可以通过分析问题,将其分解为多个模块来一一实现,然后进行组合。我们依旧来说说吃饭问题,我们在家不想做饭时,打开手机,使用订餐软件点自己喜欢的食物下单后等待送货上门即可。这中间就减少了买菜、洗菜、炒菜等环节,并不是减少了这个步骤,而是将步骤模块化,各司其职。对于我们而言,将买菜、洗菜、炒菜这个环节交给餐厅,他们负责出热乎的饭菜。而负责配送的外卖小哥其实就是将饭菜端到桌子上的我们。无论是餐厅还是外卖小哥,其可以单独存在,也可以被重复利用。
面向对象主要特性
1. 封装性
封装是指隐藏对象的属性和实现细节,仅对外提供公共的访问方法。
比如:人这个群体中,身份证号码是一一对应的,因此对于一个人来说,其身份证号码是不可变的,但其他人想要知道他的身份证号码,我们为了防止其他人对该身份证号码进行修改,因此我们只需要给其他人提供一个获取的方法即可。
public class Person {
private String personCode;//身份证号码
//其他人可以调用该方法查看人员身份证号码
public String getPersonCode() {
return this.personCode;
}
}
2. 继承性
继承 即具有相同特性,却又有独特个性的对象。
比如动物这个群体,我们可以定义一个动物对象,它们都具有吃这个属性,但它们有具有不同的能力,狗可以看门,猫可以卖萌等。但我们不可能为每个动物去创建一个对象,这样整个程序会显得很臃肿。我们定义一个父级的对象,它具有所有动物都拥有的属性,同时我们定义个体(猫)独有的对象,并继承于父级对象。父级对象所拥有的属性,子对象也拥有,但子对象拥有的父级对象不一定会拥有。
public class Animal {
private String name;//动物名称
//动物都具备吃的能力
public void eat() {
System.out.println("正在吃...");
}
}
//但不同的动物喜好不同的食物
public class Dog extends Animal{
public void eat() {
System.out.println("狗喜欢啃骨头...");
}
}
3.多态性
多态 我们可以理解为同一种行为的不同展示方式。
比如:交通工具,它们的运行方式不同(飞机天上飞,轮船海里游,汽车地上跑等),但它们具有同一行为(运输)。
public class Transport {
public void transportation(Plane plane) {
System.out.println(plane.getName() + "飞机在天上飞!");
}
public void transportation(Ship ship) {
System.out.println(ship.getName() + "轮船在水里游!");
}
public void transportation(Car car) {
System.out.println(car.getName() + "汽车在地上跑!");
}
}