对面向对象编程(OOP)的理解
程序员文章站
2022-07-03 15:00:38
...
前言
每只程序猿都听说过面向对象这个概念,但一部分”幼年猿”可能不是很清楚这个概念的定义以及特点,也不知道在具体的编程中怎么运用和加以区分。这篇博客是我对面向对象编程的一点理解,希望对有需要的猿们有一点帮助。
定义
面向对象的设计是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法把系统构造成“现实世界”的对象。 —— 百度百科
理解
简而言之, 我理解的面向对象就是把具体的问题分割成一个一个的对象实体,各个对象实体分开构建,彼此互不影响(最理想的情况),只需要实现各自的功能并对外界提供接口。
举个栗子,比如司机开车这个场景:
传统的思考方式(面向过程)会以每个动作为粒度,并且一般限定动作的先后顺序,例如: 司机先上车,然后关门,点火,挂挡,踩油门,放离合,最后开走汽车;
而使用面向对象的方法来考虑司机开车,我们会先考虑在这个场景中有哪几个对象实体,然后考虑每个实体需要实现什么功能,例如: 在司机开车场景中,有 汽车、司机 两个对象,汽车对象需要由车门,车轮,发动机,变速箱等构成,并且向外界提供驾驶它的接口(Race方法);司机 也需要有一些必须的特征,比如有驾照、身体健康之类的。然后司机对象调用汽车对象的Race方法来驾驶汽车,在这里,司机和汽车之间是依赖的关系(松耦合),这通常是通过参数传递来实现。
接下来,我用一段简单java代码来进一步说明:
Car对象:
public class Car(){
public Car(int ms){
this.max_speed=ms;
}
//车门
private Door[] door;
//发动机
private Engine engine;
//变速箱
private Gearbox gearbox;
//最高速度
private int max_speed;
//getter和setter方法省略
/**
* 提供驱动汽车接口,当需要驾驶汽车时,调用该方法
*/
public void race(){
System.out.println("Engine started, the car is ready!");
System.out.println("The car is racing in it's max speed:"+max_speed);
}
}
Driver对象:
public class Driver{
private boolean hasLicense;
private boolean isHealthy;
//getter和setter省略,我在这里想说明条件判定的用法
/**
* drive方法通过调用car的接口来实现开车的功能
* @param car Car类的一个实例
*/
public void drive(Car car){
if(hasLicense&&isHealthy){
car.race();
}
}
}
测试:
public class Test{
public static void main(String[] args){
Driver alonso=new Driver();
alonso.setHasLicense(true);
alonso.setIsHealthy(true);
Car mcLaren_F1=new Car(391);
alonso.drive(mcLaren_F1);
}
}
上一篇: ThreadLocal记录日志
下一篇: (一)计算机体系结构