OOPS中的抽象是什么?

时间:2020-02-23 14:41:58  来源:igfitidea点击:

抽象是面向对象编程的核心概念之一。
抽象定义用于创建应用程序组件的模型。
抽象的实现取决于特定于语言的功能和过程。

1.什么是抽象?

抽象是从外部世界隐藏应用程序内部细节的过程。
抽象用于用简单的术语描述事物。
它用于在应用程序和客户端程序之间建立边界。

2.现实生活中的抽象

几乎所有现实生活中的机器中都存在抽象。

  • 您的汽车是抽象的一个很好的例子。
    您可以通过转动钥匙或者按启动按钮来启动汽车。
    您无需知道发动机的启动方式,汽车的所有部件。
    汽车的内部实现和复杂的逻辑对用户完全隐藏了。

  • 我们可以用微波炉加热食物。
    我们按一些按钮来设置计时器和食物类型。
    最后,我们得到一顿美味的热饭。
    微波内部的细节对我们来说是隐藏的。
    我们已经以非常简单的方式获得了对功能的访问。

3. OOPS中的抽象

对象是面向对象编程的构建块。
一个对象包含一些属性和方法。
我们可以通过访问修饰符将它们隐藏在外部世界中。
我们只能提供对其他程序的必需功能和属性的访问。
这是在OOPS中实现抽象的一般过程。

4.抽象有哪些不同类型?

有两种抽象类型。

  • 数据抽象
  • 流程抽象

4.1)数据抽象

当对象数据对外部世界不可见时,它将创建数据抽象。
如果需要,可以通过某些方法访问对象的数据。

数据抽象

4.2)流程抽象

我们不需要提供有关对象所有功能的详细信息。
当我们隐藏用户操作中涉及的不同功能的内部实现时,它将创建流程抽象。

流程抽象

5. Java中的抽象

Java中的抽象是通过接口和抽象类实现的。
它们用于为实际的实现类创建基本实现或者合同。

Car.java:基本接口或者抽象类

package com.theitroad.oops.abstraction;

public interface Car {

	void turnOnCar();

	void turnOffCar();

	String getCarType();
}

ManualCar.java,AutomaticCar.java:Car的实现类。

package com.theitroad.oops.abstraction;

public class ManualCar implements Car {

	private String carType = "Manual";
	
	@Override
	public void turnOnCar() {
		System.out.println("turn on the manual car");
	}

	@Override
	public void turnOffCar() {
		System.out.println("turn off the manual car");
	}

	@Override
	public String getCarType() {
		return this.carType;
	}
}
package com.theitroad.oops.abstraction;

public class AutomaticCar implements Car {

	private String carType = "Automatic";

	@Override
	public void turnOnCar() {
		System.out.println("turn on the automatic car");
	}

	@Override
	public void turnOffCar() {
		System.out.println("turn off the automatic car");
	}

	@Override
	public String getCarType() {
		return this.carType;
	}
}

用户程序:让我们看一下将要使用Car功能的测试程序。

package com.theitroad.oops.abstraction;

public class CarTest {

	public static void main(String[] args) {
		Car car1 = new ManualCar();
		Car car2 = new AutomaticCar();

		car1.turnOnCar();
		car1.turnOffCar();
		System.out.println(car1.getCarType());

		car2.turnOnCar();
		car2.turnOffCar();
		System.out.println(car2.getCarType());

	}

}

客户端程序仅了解Car以及Car提供的功能。
内部实现细节从客户端程序中隐藏。