オブジェクト指向プログラミングにおける抽象化とは何ですか?
抽象化はオブジェクト指向プログラミングの核となる概念の一つです。抽象化は、アプリケーションコンポーネントを作成するためのモデルを定義します。抽象化の具現化は、言語固有の機能とプロセスに依存します。
抽象とは何ですか? (Chūshō to wa nan desu ka?)
抽象化は、アプリケーションの内部の詳細を外部の世界から隠すプロセスです。抽象化は、物事を単純な言葉で説明するために使用されます。アプリケーションとクライアントプログラムの間に境界を作るために使用されます。
2. 現実生活における抽象化
抽象化はほとんどの現実世界の機械に存在しています。
- Your car is a great example of abstraction. You can start a car by turning the key or pressing the start button. You don’t need to know how the engine is getting started, what all components your car has. The car internal implementation and complex logic is completely hidden from the user.
- We can heat our food in Microwave. We press some buttons to set the timer and type of food. Finally, we get a hot and delicious meal. The microwave internal details are hidden from us. We have been given access to the functionality in a very simple manner.
3. オブジェクト指向プログラミングにおける抽象化
オブジェクトはオブジェクト指向プログラミングの基本要素です。オブジェクトにはいくつかのプロパティとメソッドが含まれています。アクセス修飾子を通じて、これらを外部の世界から隠すことができます。他のプログラムには必要な機能とプロパティへのアクセスのみを提供することができます。これが、OOPSにおける抽象化を実装する一般的な手順です。
4. 抽象化にはどのような種類がありますか? (Chūshōka ni wa dono yōna shurui ga arimasu ka?)
抽象化には2つのタイプがあります。
-
- データの抽象化
- プロセスの抽象化
4.1) データの抽象化
オブジェクトのデータが外部世界から見えない場合、データの抽象化が作成されます。必要ならば、オブジェクトのデータへのアクセスはいくつかのメソッドによって提供されます。
4.2) プロセスの抽象化
物の全ての機能について詳細を提供する必要はありません。ユーザー操作に関与するさまざまな機能の内部実装を隠すことで、プロセス抽象化が生まれます。
5. Javaにおける抽象化
Javaでの抽象化は、インターフェースと抽象クラスを通じて実装されます。これらは、実際の実装クラスのための基本的な実装または契約を作成するために使用されます。Car.java:基本的なインターフェースまたは抽象クラス
package com.scdev.oops.abstraction;
public interface Car {
void turnOnCar();
void turnOffCar();
String getCarType();
}
ManualCar.javaとAutomaticCar.javaは、Carの実装クラスです。
package com.scdev.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.scdev.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.scdev.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とその提供する機能についてのみ知っています。内部実装の詳細は、クライアントプログラムから隠されています。参考文献:ウィキペディア、Oracleドキュメント