logo

Java の抽象化

Java の抽象化 これは、重要な詳細/機能のみをユーザーに示すプロセスです。重要でない実装の詳細はユーザーには表示されません。

この記事では、抽象化と抽象の意味について学びます。



抽象化を理解するための簡単な例:

テレビのリモコン 素晴らしいです 抽象化の例 。シンプルなボタンや記号の背後にある複雑さを隠すことで TV との対話を簡素化し、TV の機能の技術的な詳細を理解する必要なく簡単に操作できるようにします。

Javaの抽象化とは何ですか?

Java では、抽象化は次のようにして実現されます。 インターフェース そして 抽象クラス 。インターフェースを使用すると 100% の抽象化を達成できます。

データ抽象化は、無関係な詳細を無視して、オブジェクトの必要な特性のみを識別するプロセスとしても定義できます。オブジェクトのプロパティと動作は、そのオブジェクトを同様のタイプの他のオブジェクトと区別し、オブジェクトの分類/グループ化にも役立ちます。



抽象化の実例:

車を運転する男性の実例を考えてみましょう。この男は、アクセルを踏めば車の速度が上がる、ブレーキを踏めば車が止まるということだけは知っているが、実際にアクセルを踏むとどのように速度が上がるのかは分からず、車の内部の仕組みも知らない。または車のアクセル、ブレーキなどの実装。これが抽象化というものです。

Java 抽象クラスと Java 抽象メソッド

  1. 抽象クラスは、抽象キーワードを使用して宣言されたクラスです。
  2. 抽象メソッドは、実装せずに宣言されたメソッドです。
  3. 抽象クラスには、すべての抽象メソッドが含まれる場合と含まれない場合があります。そのうちのいくつかは具体的な方法になる可能性があります
  4. メソッド定義の抽象は常にサブクラスで再定義する必要があるため、 オーバーライド 必須にするか、サブクラス自体を抽象化します。
  5. 1 つ以上の抽象メソッドを含むクラスも、abstract キーワードを使用して宣言する必要があります。
  6. 抽象クラスのオブジェクトは存在できません。つまり、抽象クラスは、 新しいオペレーター
  7. 抽象クラスにはパラメーター化されたコンストラクターを含めることができ、デフォルトのコンストラクターは常に抽象クラスに存在します。

Javaで抽象化を実装するアルゴリズム

  1. 抽象化の一部となるクラスまたはインターフェイスを決定します。
  2. これらのクラスの共通の動作とプロパティを定義する抽象クラスまたはインターフェイスを作成します。
  3. 実装の詳細を持たない抽象クラスまたはインターフェイス内で抽象メソッドを定義します。
  4. 抽象クラスを拡張するかインターフェイスを実装する具象クラスを実装します。
  5. 具象クラスの抽象メソッドをオーバーライドして、その固有の実装を提供します。
  6. 具象クラスを使用してプログラム ロジックを実装します。

抽象クラスと抽象メソッドをいつ使用するか?

すべてのメソッドの完全な実装を提供せずに、特定の抽象化の構造を宣言するスーパークラスを定義したい場合があります。場合によっては、すべてのサブクラスで共有される一般化形式のみを定義するスーパークラスを作成し、詳細の入力は各サブクラスに任せたい場合があります。

おそらくコンピュータ支援設計システムやゲーム シミュレーションで使用される、古典的な形状の例を考えてみましょう。基本タイプはシェイプであり、各シェイプには色、サイズなどが含まれます。これから、特定のタイプの形状 (円、四角、三角形など) が派生 (継承) され、それぞれに追加の特性や動作がある場合があります。たとえば、特定の形状を反転できます。図形の面積を計算する場合など、一部の動作が異なる場合があります。型階層は、形状間の類似点と相違点の両方を具体化します。



Javaの抽象クラス

Java 抽象化の例

例 1:

ジャワ


100万桁



// Java program to illustrate the> // concept of Abstraction> abstract> class> Shape {> >String color;> > >// these are abstract methods> >abstract> double> area();> >public> abstract> String toString();> > >// abstract class can have the constructor> >public> Shape(String color)> >{> >System.out.println(>'Shape constructor called'>);> >this>.color = color;> >}> > >// this is a concrete method> >public> String getColor() {>return> color; }> }> class> Circle>extends> Shape {> >double> radius;> > >public> Circle(String color,>double> radius)> >{> > >// calling Shape constructor> >super>(color);> >System.out.println(>'Circle constructor called'>);> >this>.radius = radius;> >}> > >@Override> double> area()> >{> >return> Math.PI * Math.pow(radius,>2>);> >}> > >@Override> public> String toString()> >{> >return> 'Circle color is '> +>super>.getColor()> >+>'and area is : '> + area();> >}> }> class> Rectangle>extends> Shape {> > >double> length;> >double> width;> > >public> Rectangle(String color,>double> length,> >double> width)> >{> >// calling Shape constructor> >super>(color);> >System.out.println(>'Rectangle constructor called'>);> >this>.length = length;> >this>.width = width;> >}> > >@Override> double> area() {>return> length * width; }> > >@Override> public> String toString()> >{> >return> 'Rectangle color is '> +>super>.getColor()> >+>'and area is : '> + area();> >}> }> public> class> Test {> >public> static> void> main(String[] args)> >{> >Shape s1 =>new> Circle(>'Red'>,>2.2>);> >Shape s2 =>new> Rectangle(>'Yellow'>,>2>,>4>);> > >System.out.println(s1.toString());> >System.out.println(s2.toString());> >}> }>

>

ひどいとは何ですか
>

出力

Shape constructor called Circle constructor called Shape constructor called Rectangle constructor called Circle color is Redand area is : 15.205308443374602 Rectangle color is Yellowand area is : 8.0>

例 2:

ジャワ




// Java Program to implement> // Java Abstraction> > // Abstract Class declared> abstract> class> Animal {> >private> String name;> > >public> Animal(String name) {>this>.name = name; }> > >public> abstract> void> makeSound();> > >public> String getName() {>return> name; }> }> > // Abstracted class> class> Dog>extends> Animal {> >public> Dog(String name) {>super>(name); }> > >public> void> makeSound()> >{> >System.out.println(getName() +>' barks'>);> >}> }> > // Abstracted class> class> Cat>extends> Animal {> >public> Cat(String name) {>super>(name); }> > >public> void> makeSound()> >{> >System.out.println(getName() +>' meows'>);> >}> }> > // Driver Class> public> class> AbstractionExample {> >// Main Function> >public> static> void> main(String[] args)> >{> >Animal myDog =>new> Dog(>'Buddy'>);> >Animal myCat =>new> Cat(>'Fluffy'>);> > >myDog.makeSound();> >myCat.makeSound();> >}> }>

>

>

出力

Buddy barks Fluffy meows>

上記の Java プログラムの説明:

このコードは、抽象メソッド makeSound() を使用して Animal 抽象クラスを定義します。 Dog クラスと Cat クラスは Animal を拡張し、makeSound() メソッドを実装します。 main() メソッドは Dog と Cat のインスタンスを作成し、それらに対して makeSound() メソッドを呼び出します。

これは Java の抽象化の概念を示しています。クラス (この場合は Animal) のテンプレートを定義しますが、特定のメソッドの実装はサブクラス (この場合は makeSound()) によって定義されます。

インターフェース

インターフェイスは、Java で抽象化を実装するもう 1 つの方法です。主な違いは、インターフェイスを使用することにより、Java クラスで 100% の抽象化を達成できることです。 Java またはその他の言語では、インターフェイスにはメソッドと変数の両方が含まれますが、メソッド本体がありません。抽象化とは別に、インターフェイスを使用して Java でインターフェイスを実装することもできます。

実装: 実装するには インターフェース 私たちはキーワードを使います クラスで実装します。

ジャワ


arpコマンド



// Define an interface named Shape> interface> Shape {> >double> calculateArea();>// Abstract method for> >// calculating the area> }> > // Implement the interface in a class named Circle> class> Circle>implements> Shape {> >private> double> radius;> > >// Constructor for Circle> >public> Circle(>double> radius) {>this>.radius = radius; }> > >// Implementing the abstract method from the Shape> >// interface> >public> double> calculateArea()> >{> >return> Math.PI * radius * radius;> >}> }> > // Implement the interface in a class named Rectangle> class> Rectangle>implements> Shape {> >private> double> length;> >private> double> width;> > >// Constructor for Rectangle> >public> Rectangle(>double> length,>double> width)> >{> >this>.length = length;> >this>.width = width;> >}> > >// Implementing the abstract method from the Shape> >// interface> >public> double> calculateArea() {>return> length * width; }> }> > // Main class to test the program> public> class> Main {> >public> static> void> main(String[] args)> >{> >// Creating instances of Circle and Rectangle> >Circle myCircle =>new> Circle(>5.0>);> >Rectangle myRectangle =>new> Rectangle(>4.0>,>6.0>);> > >// Calculating and printing the areas> >System.out.println(>'Area of Circle: '> >+ myCircle.calculateArea());> >System.out.println(>'Area of Rectangle: '> >+ myRectangle.calculateArea());> >}> }>

ウェブブラウザの設定
>

>

出力

Area of Circle: 78.53981633974483 Area of Rectangle: 24.0>

抽象化の利点

抽象化には次のような利点があります。

  1. これにより、表示の複雑さが軽減されます。
  2. コードの重複を回避し、再利用性を高めます。
  3. 重要な詳細のみがユーザーに提供されるため、アプリケーションまたはプログラムのセキュリティを強化するのに役立ちます。
  4. アプリケーションの保守性が向上します。
  5. これにより、アプリケーションのモジュール性が向上します。
  6. エンドユーザーに影響を与えることなく、社内システムであらゆる種類の変更を実行できるため、拡張は非常に簡単になります。
  7. コードの再利用性と保守性が向上します。
  8. 実装の詳細を非表示にし、関連する情報のみを公開します。
  9. 明確でシンプルなインターフェイスをユーザーに提供します。
  10. 内部クラスの詳細へのアクセスを防止することで、セキュリティを強化します。
  11. 複雑なシステムをより小さく管理しやすい部分に分割できるため、モジュール性をサポートします。
  12. 抽象化により、実装の詳細の複雑さをユーザーから隠す方法が提供され、理解しやすくなり、使いやすくなります。
  13. 抽象化により、ユーザー向けインターフェイスに影響を与えることなく、基礎となる実装の詳細を変更できるため、プログラムの実装に柔軟性が得られます。
  14. 抽象化によりモジュール化と懸念の分離が可能になり、コードがより保守しやすくなり、デバッグが容易になります。

Java における抽象化の欠点

Java における抽象化の主な欠点は次のとおりです。

  1. 抽象化すると、システムがどのように動作するかを理解することがさらに難しくなる可能性があります。
  2. 特に適切に使用しない場合、複雑さが増す可能性があります。
  3. これにより、実装の柔軟性が制限される可能性があります。
  4. 抽象化は、適切に使用しないとコードに不必要な複雑さを追加し、開発時間と労力の増加につながる可能性があります。
  5. 抽象化により、特に抽象化レイヤーや実装の詳細に慣れていない人にとって、コードのデバッグや理解が困難になる可能性があります。
  6. 抽象化を過度に使用すると、追加のコード層と間接化によりパフォーマンスが低下する可能性があります。

こちらもお読みください:

Java の抽象化 – FAQ

Q1.なぜ抽象を使用するのでしょうか?

私たちが抽象的な概念を使用する主な理由の 1 つは、複雑さを単純化するためです。宇宙全体を原子や星ひとつひとつで説明しようとしているところを想像してみてください。要約を使用すると、ズームアウトして重力やエネルギーなどの主要なアイデアを把握し、細部に迷うことなくすべてを理解できます。

Java で抽象を使用するその他の理由は次のとおりです。

1. 抽象化 : 抽象クラスは、他のクラスが従う汎用テンプレートを定義するために使用されます。これらは、サブクラスが従わなければならない一連のルールとガイドラインを定義します。抽象クラスを提供することで、それを拡張するクラスの構造と動作が一貫していることを保証できます。これにより、コードがより整理され、保守が容易になります。

2. ポリモーフィズム : 抽象クラスとメソッドにより、Java でポリモーフィズムが可能になります。ポリモーフィズムとは、オブジェクトがさまざまな形をとる能力です。これは、抽象型の変数がその抽象クラスの具体的なサブクラスのオブジェクトを保持できることを意味します。これにより、コードがより柔軟になり、さまざまな状況に適応できるようになります。

3. フレームワークと API: Java には、抽象クラスを使用するフレームワークと API が多数あります。抽象クラスを使用することで、開発者は既存のコードを構築し、アプリケーション固有の側面に集中することで時間と労力を節約できます。

Q2.違いは何ですか カプセル化とデータ抽象化?

カプセル化とアブストレーションの主な違いをいくつか示します。

カプセル化

抽象化

カプセル化とはデータ隠蔽(情報隠蔽)のこと 抽象化とは詳細な隠蔽(実装隠蔽)のことです。
カプセル化は、データとデータに作用するメソッドをグループ化します。 データ抽象化は、インターフェイスをユーザーに公開し、実装の詳細を非表示にします。
カプセル化されたクラスは、データの隠蔽と抽象化に従う Java クラスです。 抽象化の実装は、抽象クラスとインターフェイスを使用して行われます。
カプセル化は実装レベルで行われる手順です 抽象化は設計レベルのプロセスです

Q3.データ抽象化の実例は何ですか?

テレビのリモコン これは抽象化の優れた実際の例です。シンプルなボタンや記号の背後にある複雑さを隠すことで TV との対話を簡素化し、TV の機能の技術的な詳細を理解する必要なく簡単に操作できるようにします。

Q4. Java の抽象クラスとインターフェイスの違いは何ですか?

Java の抽象クラスと抽象インターフェイスの主な違いをいくつか示します。

抽象クラス

ループタイプのJava

インターフェース

抽象クラスは抽象メソッドと非抽象メソッドをサポートします インターフェイス サポートには抽象メソッドのみが含まれます。
多重継承をサポートしていません 多重継承をサポート
抽象クラスは Java クラスと複数のインターフェイスによって拡張可能 インターフェースは Java インターフェースのみで拡張できます。
Java の抽象クラスのメンバーは、プライベート、保護などにすることができます。 インターフェイスはデフォルトでパブリックです。

例:

パブリック抽象クラス Vechicle{
パブリック抽象 void drive()
}

例:

パブリック インターフェイス 動物{
void speech();
}