什麼是 OOPS 中的抽象?

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

1. 什么是抽象?

抽象是将应用程序的内部细节隐藏起来,不让外部世界知道的过程。抽象用简单的术语来描述事物。它用于在应用程序和客户端程序之间创建边界。

2. 现实生活中的抽象

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

  • 你的汽车就是一个很好的抽象示例。你可以通过转动钥匙或按下启动按钮来启动汽车。你不需要知道引擎是如何启动的,你的汽车有哪些组件。汽车的内部实现和复杂逻辑对用户完全隐藏。
  • 我们可以用微波炉加热食物。我们按下一些按钮来设置定时器和食物类型。最后,我们得到了一顿热腾腾、美味可口的饭菜。微波炉的内部细节对我们来说是隐藏的。我们只被赋予了以非常简单的方式使用功能的权限。

3. 物件導向程式設計中的抽象

物件是物件導向程式設計的基本單位。一個物件包含一些屬性和方法。我們可以透過訪問修飾符來隱藏它們,只為其他程式提供所需的功能和屬性的訪問權限。這是實現物件導向程式設計中的抽象的一般過程。

4. 不同類型的抽象有哪些?

有兩種類型的抽象。

  1. 資料抽象
  2. 程序抽象

4.1) 資料抽象

當物件數據對外部世界不可見時,它創建了資料抽象。如有需要,透過一些方法提供對物件數據的訪問權限。

Data Abstraction

4.2) 程序抽象

我們不需要提供關於物件所有功能的細節。當我們隱藏使用者操作中涉及的不同功能的內部實現時,它創建了流程抽象。

Process Abstraction

5. Java中的抽象

Java中的抽象是通過介面抽象類來實現的。它們用於為實際實現類創建基礎實現或合同。Car.java: 基礎介面或抽象類

package com.journaldev.oops.abstraction;

public interface Car {

	void turnOnCar();

	void turnOffCar();

	String getCarType();
}

ManualCar.java, AutomaticCar.java: Car的實現類。

package com.journaldev.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.journaldev.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.journaldev.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提供的功能。內部實現細節對客戶端程式是隱藏的。參考資料:維基百科Oracle 文檔

Source:
https://www.digitalocean.com/community/tutorials/what-is-abstraction-in-oops