encapsulation java
Javaでのカプセル化について、例、必要な理由、関連するgetterメソッドとsetterメソッドを使用して学習します。
このチュートリアルでは、別のOOPの概念である「カプセル化」について説明します。 OOPには、抽象化、カプセル化、ポリモーフィズム、継承という4つの柱があります。
抽象化は関連する詳細のみをエンドユーザーに公開するために使用されますが、カプセル化は主にデータセキュリティを扱います。データのセキュリティを確保するために、カプセル化はアクセス修飾子を指定することでデータメンバーを不要なアクセスから保護し、データを1つのユニットにバンドルします。
=> ここで完璧なJavaトレーニングガイドをチェックしてください。
では、Javaでカプセル化をどのように定義できますか?
カプセル化の定義
「Javaでのカプセル化は、データとそのデータを処理するメソッドをラップして単一のユニットを形成するメカニズムとして定義できます。」
学習内容:
Javaでのカプセル化とは
カプセル化を使用して、クラスデータメンバー(変数)を他のクラスから非表示にすることもできます。これらのデータメンバー変数は、宣言されているクラスのメソッドを使用して間接的にアクセスできます。次に、そのクラスのオブジェクトを使用してメソッドにアクセスします。
したがって、上記の定義から結論付けるのは、クラス内のデータメンバー変数を非表示にし、他のクラスからアクセスできないようにアクセス修飾子も指定したということです。
したがって、カプセル化も一種の「データ隠蔽」ですが、チュートリアルの後半で、カプセル化はデータ隠蔽と同じではないことがわかります。
上の図は、データとこのデータを操作するメソッドを1つのユニットにバンドルするカプセル化ユニットであるクラスを表しています。
カプセル化は主にデータを扱うため、「データカプセル化」とも呼ばれます。
カプセル化は医療用カプセルとして視覚化できます。ご存知のように、薬は医療用カプセルに封入されています。同様に、データとメソッドはカプセル化された単一のユニットに囲まれています。
したがって、カプセル化はデータの周囲の保護シールドとして機能し、データが外部から不正にアクセスされるのを防ぎます。つまり、アプリケーションの機密データを保護します。
Javaでは、カプセル化を実装するための2つのステップがあります。手順は次のとおりです。
- アクセス修飾子「private」を使用して、クラスメンバー変数を宣言します。
- これらのプライベートメンバー変数にアクセスしてそれらの値を変更するには、パブリックゲッターメソッドとセッターメソッドをそれぞれ提供する必要があります。
次に、Javaでのカプセル化の例を実装しましょう。
Javaカプセル化の例
//Student_Id and name bundled in a unit 'Student' => encapsulation class Student { private int Student_Id; private String name; //getters, setters for Student_Id and name fields. public int getId() { return Student_Id; } public void setId(int s_id) { this.Student_Id = s_id; } public String getname() { return name; } public void setname(String s_name) { this.name = s_name; } } class Main{ public static void main(String() args) { //create an object of Student class Student s=new Student(); //set fields values using setter methods s.setId (27); s.setname('Tom Lee'); //print values using getter methods System.out.println('Student Data:' + '
Student ID:' + s.getId() + ' Student Name:' + s.getname()); } }
出力:
上記のプログラムでは、カプセル化ユニットであるクラスを宣言します。このクラスStudentは、データ(Student_Idと名前)と、これらのメンバーの値を読み取って設定するためのメソッドを1つのユニットにバンドルしました。
メンバーフィールドに関連付けられているアクセス修飾子に注意してください。両方のメンバーフィールドはプライベートであるため、Studentクラスの外部からはアクセスできません。
これらのフィールドの値を読み取るためのgetter(getIdおよびgetname)と、これらのメソッドの値を設定するためのsetterメソッド(setIdおよびsetname)を提供します。これは彼らが持っている唯一のアクセスであり、Studentクラスオブジェクトを使用して行う必要があります。
ゲッターとセッターのメソッド
Javaでカプセル化を実装するために、クラスのデータメンバー変数をプライベートとして作成します。現在、これらのプライベート変数は、クラスオブジェクトを含むクラス外のユーザーからはアクセスできません。
これは、次のようにクラスABCがある場合を意味します。
クラスABC {
プライベート整数年齢;
}
次のようにクラスABCのオブジェクトを作成しましょう。
ABC abc =新しいABC();
abc.age = 21; //コンパイラエラー
したがって、上記のコードでは、クラスオブジェクトを使用してプライベート変数にアクセスすると、コンパイラエラーが発生します。
プライベート変数にアクセスしてそれらの値を読み取り、それらにいくつかの新しい値を設定するには、これを行うための何らかの方法が必要です。したがって、Javaは、getterメソッドとsetterメソッドを使用してプライベート変数にアクセスする方法を提供します。
GetterとSetterは、プライベート変数の値を作成、変更、削除、または単に表示するために使用できるパブリックメソッドです。
以下のプログラムは、GetterメソッドとSetterメソッドの例です。
//Account class - private data members bundled with getters and setters class Account { //private data members private long acc_no; private String name,email; private float amount; //public getter and setter methods for each data member public long getAcc_no() { return acc_no; } public void setAcc_no(long acc_no) { this.acc_no = acc_no; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public float getAmount() { return amount; } public void setAmount(float amount) { this.amount = amount; } } public class Main { public static void main(String() args) { //create instance of Account class Account myAcc=new Account(); //set values for data members through setter methods myAcc.setAcc_no(775492842L); myAcc.setName('SoftwareTestingHelp.com'); myAcc.setEmail('sth_account@sth.com'); myAcc.setAmount(25000f); //read data member values through getter methods System.out.println('Account No:' + myAcc.getAcc_no()+' '+'Account Name:' + myAcc.getName()+'
'+'Account holder email:' + myAcc.getEmail()+'
' + 'Amount in Account:' + myAcc.getAmount()); } }
出力:
上記のプログラムにはクラスAccountがあり、アカウントに関連する4つのプライベート変数があります。すべてのデータメンバーはプライベートであるため、これらの変数ごとにgetterメソッドとsetterメソッドを提供しています。
mainメソッドでは、クラスAccountのオブジェクトを介してアクセスされるpublic getterメソッドとsetterメソッドを使用して、これらのプライベート変数の値を読み取り、設定します。
Javaでのデータ隠蔽
多くの場合、カプセル化とデータ隠蔽を同じ意味で使用します。しかし、両方は同じではありません。 Javaカプセル化は、関連データを1つのユニットにグループ化して、データの管理とセキュリティを向上させます。
一方、データの非表示は、実装の詳細を非表示にすることにより、データメンバーのアクセスを制限します。カプセル化は正確にデータを隠すことではありませんが、データを隠す方法を提供します。データの非表示は、アクセス修飾子を使用して実現されます。
Javaは4つのアクセス修飾子を提供します。
- 公衆: 誰でもアクセスできます。
- 民間: クラス内でのみアクセスできます。
- 保護: 含まれているパッケージとサブクラスにアクセスできます。
- デフォルト: パッケージ内でアクセス可能。
カプセル化はデータを単一のユニットにバンドルするため、ある意味でデータを非表示にします。また、データがプライベートになるため、外部からアクセスできなくなります。データをプライベートにするために、データ隠蔽の概念であるアクセス修飾子プライベートを使用します。
同時に、抽象化の定義である実装の詳細を公開せずに、関連する詳細のみがエンドユーザーに提供されます。したがって、カプセル化は、抽象化とデータ隠蔽の組み合わせと見なすことができます。
カプセル化が必要な理由
Javaでカプセル化が不可欠である理由にはさまざまな理由があります。
- カプセル化により、他の関数やコードを変更することなく、コードまたはコードの一部を変更できます。
- カプセル化は、データへのアクセス方法を制御します。
- カプセル化を使用して、要件に基づいてコードを変更できます。
- カプセル化により、アプリケーションが簡単になります。
よくある質問
Q#1)Javaでカプセル化が使用されるのはなぜですか?
回答: Javaでのカプセル化は、データを非表示にするのに最も役立ちます。言い換えれば、誰がデータにアクセスできるか、誰がアクセスできないかについて、データに与えられるアクセスについて決定することです。
Q#2)OOPでのカプセル化とは何ですか?
回答: カプセル化は、オブジェクト指向プログラミング言語の重要な柱の1つであり、データとそのデータを操作するメソッドを1つのユニットにバンドルすることを扱います。 例えば、 Javaのクラスはカプセル化された構造です。カプセル化は、データへのアクセスの提供に関する決定も扱います。
Q#3)Javaでのカプセル化の利点は何ですか?
回答: Javaでのカプセル化の主な利点は、データの隠蔽です。カプセル化を使用すると、プログラマーがデータへのアクセスとそのデータを操作するメソッドを決定できるようになります。 例えば、 クラス外のユーザーが特定のデータにアクセスできないようにする場合は、そのデータを非公開にします。
Q#4)カプセル化プロセスとは何ですか?
回答: カプセル化とは、ある形式またはプロトコルから(ネットワーク用語で)データを取得し、それを別の形式またはプロトコルに変換または再フォーマットして、アプリケーションまたはネットワーク全体でデータにアクセスできるようにすると同時に、データを保護するプロセスです。
Webサイトでddos攻撃を行う方法
Q#5)データカプセル化の最後のステップは何ですか?
回答: カプセル化の最後のステップは、ユーザー情報を同等のデータに変更することです。次に、このデータはセグメントに変更され、さらにデータパケットに変換されます。データパケットは、ソフトウェア環境との間で転送できる論理フレームに配置されます
結論
これで、Javaでのカプセル化に関するチュートリアルは終了です。カプセル化は、メンバー変数とこれらのデータメンバーを操作するメソッドを1つのユニットにまとめる手法です。 Javaのクラスは、データとメソッドを1つのユニットにラップするため、カプセル化の典型的な例です。
Javaは、すべてのデータメンバーをプライベートにし、パブリック変数の値を読み取ってこれらの変数に新しい値を設定できるように、パブリックなgetterメソッドとsetterメソッドを提供することでカプセル化の実装を実現します。
=> 独占的なJavaトレーニングチュートリアルシリーズについては、こちらをご覧ください。