oop java introduction object oriented programming java
このビデオチュートリアルでは、オブジェクト、クラス、継承、ポリモーフィズム、抽象化、カプセル化など、JavaのOOP(オブジェクト指向プログラミング)の概念を紹介します。
ソフトウェアプログラミングには、さまざまな種類のプログラミング言語があります。その中の主要な言語は、本質的に手続き型またはオブジェクト指向のいずれかです。
手続き型プログラミング言語では、大きな問題は小さな解決可能な問題に分解されます。これらの小さな問題は、プロシージャまたは関数に変換されます。このように、手続き型プログラミング言語はデータよりも関数を強調します。したがって、手続き型言語はデータを完全に無視し、データのセキュリティをまったく保証しません。
この問題は、オブジェクト指向プログラミング言語によって処理されました。オブジェクト指向プログラミングは、オブジェクトを操作することによってソフトウェアを設計およびプログラミングする方法であり、オブジェクトはプログラミングの主要部分です。
初心者向けのJavaチュートリアルのシリーズ全体をご覧ください ここに 。
学習内容:
オブジェクト指向の概念に関するビデオチュートリアル
Javaでのオブジェクト指向の概念–パート1:
Javaでのオブジェクト指向の概念の詳細–パート2:
オブジェクト指向プログラミング言語は、関数よりもデータに重点を置いています。オブジェクト指向プログラミング(OOP)は、オブジェクト、つまりリアルタイムエンティティを中心に展開します。
このオブジェクトは、データとこのデータを操作するメソッドを1つのユニットにまとめたものです。このように、オブジェクト内にメソッドを持つことにより、データは外界から保護されます。 OOPでは、オブジェクトはメッセージを介して相互に通信します。
すべてのOOP言語は、次の機能をサポートしています。
- クラス
- カプセル化
- 抽象化
- 継承
- ポリモーフィズム
これらのすべての機能により、データが保護されると同時に、堅牢なアプリケーションを作成することもできます。 Smalltalk、C ++、Javaなどは、オブジェクト指向プログラミング言語の一部です。
このチュートリアルでは、Java言語に関するOOPの基本について説明します。
Javaでのオブジェクト指向プログラミング(OOP)
Javaは、現在最も求められているプログラミングスキルです。 Javaでは、すべてがオブジェクトに基づいています。 Javaには、Javaの全機能の派生元であるObjectというルートクラスがあります。したがって、このチュートリアルでは、Javaに関するOOPの主な機能について説明します。
推奨読書=> OOPインタビューの質問と回答
ここでは、Javaが次のOOP機能をどのようにサポートするかについて説明します。
- オブジェクトとクラス
- クラス
- 継承
- ポリモーフィズム
- 抽象化
- カプセル化
これらのJavaOOPの概念のそれぞれについて詳しく説明しましょう。
オブジェクトとクラス
クラスは、設計プロトタイプまたは青写真として定義できます。オブジェクトはこれらの青写真から作成されます。これは基本的に、この共通タイプのこれらのプロパティを操作するプロパティとメソッドで構成される共通タイプを定義します。次に、オブジェクトと呼ばれるこのクラスのインスタンスを定義します。
次の図に示すように、クラスには多くのコンポーネントがあります。
オブジェクトは実際のエンティティを表します。 Javaでは、オブジェクトはクラスのインスタンスです。したがって、青写真であるクラスを使用して、多くのオブジェクトを作成できます。これらのオブジェクトは、多くの場合、メソッドを介して相互にメッセージを渡すことによって相互に通信します。
ビデオチュートリアル:クラスとオブジェクト
通常、オブジェクトには次のものがあります。
- 状態: 特定の時点でのオブジェクトのプロパティまたは属性。
- 動作: メソッドは、オブジェクトの動作を表します。メソッドは、オブジェクトの通信方法も定義します。
- 身元: 一意の名前を付けてオブジェクトを識別します。
例えば、 PetAnimalsクラスがある場合。
次に、このクラスのオブジェクトを次のように定義できます。
PetAnimals pig =新しいPetAnimals。
ここでは、オブジェクトのIDは豚です。
以下に示すのは、クラスとオブジェクトを示すプログラムです。
//student class class Student{ int roll_No; String student_name; } class Main{ public static void main(String args()){ //Create objects of class Student Student student1=new Student(); Student student2=new Student(); //Initialize Student class objects student1.roll_No=101; student1.student_name='Lisa'; student2.roll_No=102; student2.student_name='Dan'; //Print object data System.out.println('Student 1 Details: ' + student1.roll_No+' '+student1.student_name); System.out.println('Student 2 Details: ' + student2.roll_No+' '+student2.student_name); } }
出力
上記のクラスでは、2つのプロパティroll_Noとstudent_nameを持つクラスStudentを定義しました。次に、mainメソッドで、2つのクラスオブジェクト(student1とstudent2)を宣言します。これらのオブジェクトは、new演算子を使用して作成されることに注意してください。オブジェクトが作成されたら、両方のオブジェクトプロパティにデータを割り当てます。
最後に、「。」(ドット)演算子を使用してオブジェクトの内容を出力します。
クラスとオブジェクトの詳細については、特定のOOPチュートリアルのトピックで学習します。
継承
継承は、OOPの最も重要な特性の1つです。継承を通じて、Javaはコードの再利用性を促進します。
では、Javaの継承とは何ですか?
継承は、あるクラスが別のクラスのプロパティを継承できるJavaのメカニズムです。継承できるプロパティには、クラスのデータメンバーとメソッドが含まれます。
別のクラスのプロパティを継承するクラスは、サブクラスと呼ばれます。継承されたクラスは、Javaでは「スーパー」クラスと呼ばれます。
クラスを継承することにより、サブクラスはプロパティを継承するだけでなく、継承を使用して直接継承できる場合にプログラマーがコードを再度記述する必要がないため、コードを再利用します。
Javaでは、継承は「extends」キーワードを使用して実現されます。このextendsキーワードは、クラスの定義で使用され、その後に継承されるクラス名が続きます。
例えば、AとBの2つのクラスがあり、AがBによって継承される場合、この継承はJavaで次のように記述されます。
class B extends A { …… }
すでに述べたように、ここでAはスーパークラスまたは基本クラスまたは親クラスです。 Bは、サブクラス、派生クラス、または子クラスです。
継承はさらに次のタイプに分けられます。
Javaは、単一、マルチレベル、および階層の継承をサポートします。
Javaは多重継承をサポートしていないことに注意してください。 Javaは、複数の階層継承の組み合わせであるハイブリッド継承もサポートしていません。
以下に示すのは、Javaでの単一継承のプログラム例です。
//base class class Employee{ float salary=50000; } //derived class class Developer extends Employee{ int bonus=20000; } class Main{ public static void main(String args()){ //declare Developer class object and access properties of base and derived class Developer p=new Developer(); System.out.println('Inheritance in Java'); System.out.println('Developer salary: '+p.salary); System.out.println('Bonus declared for Developer: '+p.bonus); System.out.println('Developer Total Earnings: ' + (p.salary + p.bonus)); } }
出力
上記のプログラムには、基本クラスのEmployeeがあります。 Employeeクラスから継承する別のクラスDeveloperがあります。 mainメソッドでは、Developerクラスのオブジェクトを宣言することで、Developerクラスのプロパティだけでなく、Developerクラスに継承されているEmployeeクラスのプロパティにもアクセスできることがわかります。
ポリモーフィズム
ポリモーフィズムは、OOPのもう1つの重要な機能です。ポリモーフィズムは、オブジェクトまたはエンティティが複数の形式をとることを可能にする言語の機能です。 例えば、 さまざまな実装を持つメソッドは、Javaでは多形です。
Javaでは、ポリモーフィズムには2つのタイプがあります。
- オーバーロードまたはコンパイル時のポリモーフィズム: コンパイル時のポリモーフィズムでは、ポリモーフィックメソッドまたはオーバーロードされたメソッドの呼び出しはコンパイル時に解決されます。
- オーバーライドまたはランタイムポリモーフィズム: 実行時ポリモーフィズムでは、Javaプログラムのオーバーライドされたメソッドの呼び出しは実行時に解決されます。
ポリモーフィズムについては、以降のチュートリアルで詳しく説明します。
以下に示すのは、Javaでのコンパイル時のポリモーフィズムの例です。ここでは、さまざまなオペランドタイプで加算を実行するためにオーバーロードされるメソッドaddがあります。。
class Numbers_Sum { //add method : takes two int parameters public int add(int val1, int val2) { return (val1 + val2); } // overloaded add : takes three int parameters public int add(int val1, int val2, int val3) { return (val1 + val2 + val3); } //overloaded add: takes two double parameters public double add(double val1, double val2) { return (val1 + val2); } } class Main{ public static void main(String args()) { //create an object of Numbers_Sum class and call overloaded functions Numbers_Sum numsum = new Numbers_Sum(); System.out.println('Polymorphism in Java'); System.out.println('add(int, int): ' + numsum.add(15, 18)); System.out.println('add(int, int, int): ' + numsum.add(5, 10, 20)); System.out.println('add(double,double): ' + numsum.add(5.5, 15.5)); } }
出力
このプログラムには、addという名前の3つのオーバーロードされたメソッドがあります。最初のメソッドは2つのintパラメーターを取り、次のメソッドは3つのintパラメーターを取り、3番目のメソッドは2つのdoubleパラメーターを取ります。パラメータの数に応じて、メソッド呼び出しはコンパイル時に解決され、適切な呼び出しが行われます。
抽象化
データ抽象化を使用して、ユーザーがアクセスできるようになっているアプリケーションの重要な部分のみを公開します。 例えば、 私たちが車を持っている場合、私たちは車の内部コンポーネントについては気にせず、むしろ車全体だけを考慮します。
データ抽象化メカニズムを使用して、必要な詳細のみを識別し、無関係な詳細は無視します。 Javaは、抽象クラスとインターフェースを使用して抽象化を実現します。インターフェイスにはメソッドのプロトタイプのみがあり、定義がないため、100%抽象的です。
以下の例は、抽象クラスとその使用法を示しています。
// Abstract class declaration abstract class PetAnimal { // Abstract method: should be defined in derived class public abstract void animalSound(); // non-abstract method public void print() { System.out.println('This method is example of abstraction'); } } // Derived class class Dog extends PetAnimal { //abstract method defined here public void animalSound() { System.out.println('The doggy barks'); } } class Main { public static void main(String() args) { Dog doggy = new Dog(); // Instantiate derived class and call methods doggy.animalSound(); doggy.print(); } }
出力
上記のプログラムには、抽象クラスPetAnimalsがあります。これには、抽象メソッド「animalSound」があります。次に、Dogクラスを作成し、PetAnimalsクラスを継承します。 Dogクラスでは、animalSoundメソッドをオーバーライドします。
最高のコンピュータクリーナーは何ですか
カプセル化
カプセル化とは、データを非表示にしたり、データを保護したりすることです。プログラミングでは、データとそのデータを操作するメソッドを1つのユニットにラップすることでカプセル化を実現します。
ビデオチュートリアル:Javaでのカプセル化とポリモーフィズム
クラスはカプセル化ユニットと見なすことができます。つまり、データメンバーと、これらのデータメンバーを操作するメソッドが1つのユニットにバンドルされています。
適切なカプセル化は、データメンバーをプライベートにし、これらのデータをパブリックとして操作するメソッドを使用して、データが外部エンティティから完全に保護されるようにすることで実現できます。
以下のJavaプログラムは、カプセル化の概念を示しています。
class Customer_Account { //private data of class private long customer_accountNo; private String customer_name,customer_email; private float customer_salary; //public getter/setter methods to access private data public long getAcc_no() { return customer_accountNo; } public void setAcc_no(long acc_no) { this.customer_accountNo = acc_no; } public String getName() { return customer_name; } public void setName(String name) { this.customer_name = name; } public String getEmail() { return customer_email; } public void setEmail(String email) { this.customer_email = email; } public float getSalary() { return customer_salary; } public void setSalary(float salary) { this.customer_salary = salary; } } public class Main { public static void main(String() args) { //create an object of customer_Account class Customer_Account acc=new Customer_Account(); //use setter methods to set values acc.setAcc_no(123458765432L); acc.setName('SoftwareTestingHelp'); acc.setEmail('sth@sth.com'); acc.setSalary(65000f); //use getter methods to read values System.out.println('Customer Account Number: ' + acc.getAcc_no()); System.out.println('Customer Account Details:'); System.out.println(' Customer Name: '+acc.getName()+'
'+ ' Customer Email: ' + acc.getEmail()+'
' + ' Customer Salary: ' +acc.getSalary()); } }
出力
上記のプログラムには、Customer_Accountクラスがあります。
このクラスには、すべてプライベートなデータメンバーがあります。次に、プライベートフィールドごとに、値をそれぞれ読み取り、設定するためのgetterメソッドとsetterメソッドを提供します。これらのゲッターとセッターは公開されています。このように、クラスの外部からの直接アクセスを許可しないことにより、データフィールドを保護します。
それらは、ゲッターとセッターを介してのみアクセスできます。これは、上記で説明したカプセル化を示しています。
よくある質問
Q#1)オブジェクト指向プログラミングとはどういう意味ですか?
回答: オブジェクト指向プログラミング(OOP)は、データを中心に展開するソフトウェアパラダイムです。 OOPでは、データに重点が置かれているため、問題は、データまたはフィールドで構成されるエンティティであるオブジェクトと、これらのデータフィールドを操作するメソッドの観点から表現されます。
そうすることで、継承、ポリモーフィズム、抽象化、カプセル化などのOOPのいくつかの特徴的な機能が適用され、データの安全性、再利用性などが保証されます。
Q#2)OOPの4つの基本原則は何ですか?
回答:オブジェクト指向プログラミング(OOP)には、次の4つの基本原則があります。
- 継承
- ポリモーフィズム
- 抽象化
- カプセル化
それらはOOPの4つの柱とも呼ばれます。
Q#3)Javaがオブジェクト指向と呼ばれるのはなぜですか?
回答: Javaには、Javaの他のすべての機能を派生させるルートクラスオブジェクトがあります。したがって、クラスとオブジェクトがなければ、Javaプログラムを持つことはできません。したがって、JavaはOOP言語と呼ばれます。
Q#4)Javaは純粋にオブジェクト指向ですか?
回答: いいえ、Javaは純粋なオブジェクト指向言語ではありません。 Javaは、int、char、float、double、longなどのプリミティブデータ型も提供するため、純粋なOOP言語として分類されません。
Q#5)C ++とJavaの違いは何ですか?
回答: C ++とJavaはどちらもオブジェクト指向言語であり、OOP機能をサポートしています。しかし、C ++はコンパイルされた言語です。一方、Javaは、インタープリター型言語と同様にコンパイルされます。
Javaインタープリターは、実行時にバイトコードを実行し、プラットフォームに依存しない出力を生成します。ただし、C ++はプラットフォームに依存します。
OOPSコンセプトの詳細
クラス
このクラスは、実世界のオブジェクトの青写真/プロトタイプであり、その実世界のオブジェクトの状態と動作をモデル化します。
クラス宣言
class MyClass { // field, constructor, and // method declarations }
Class room(){ //room should have dimension. Dimension is attribute. //in the room, we are going keep things. Keeping is the function we are going to do. Keepthings (); this is a method in java. }
オブジェクト
ソフトウェアオブジェクトは、状態と動作を備えた実際のオブジェクトのようなものです。状態はフィールドとして保存され、その動作をメソッドとして公開します。
ここの部屋は一般的なデザインのようです。この部屋の中で、あなたは居間、調理室、寝室を設計するべきです。
Class CookingRoom(){ Dimension is attribute. //here we should have method to keep cooking things. Keepthings(){ This method is same like room class keep things method. but it should have some more features to hold cooking items. } cooking(); }
Class LivingRoom(){ Dimension is attribute. //here we should have method to keep Living Room things. Keepthings(){ This method is same like room class keep things method. but it should have some more features to hold living room items(like tv etc). } watching tv(); }
ここで、「Keepthings()」メソッドは、部屋に必要な基本機能を実行する必要があり、「リビングルーム」クラスと「クッキングルーム」クラスの要件に応じて追加の仕様が必要です。したがって、2つのクラスは「room」クラスのメソッドを継承する必要があります。
継承
一方のクラスがもう一方のクラスに継承される動作(メソッド)と状態は、継承と呼ばれます。メソッドと状態は、親クラスから子クラスに継承されます。
そう、
Class CookingRoom extends Room{ }
Class LivingRoom extends Room{ }
ポリモーフィズム
生物学では、多型とは、さまざまな形をとることができるスパイスを指します。
オブジェクト指向プログラミングの同じ概念で、子クラスはその親クラスのメソッドを継承でき、その動作に独自の機能を追加することもできます。ポリモーフィズムは、メソッドのオーバーロードまたはオーバーライドによって実現できます。
オーバーロード
public class OverloadDemo { public int add( int a,int b) { int rs=a+b; return rs; } public int add( int a,int b,int c) { int rs=a+b+c; return rs; } public static void main(String() args) { OverloadDemo ov=new OverloadDemo(); System.out.println(ov.add(23,56,45)); System.out.println(ov.add(23,56)); } }
オーバーライド
public class Bicycle { int wheels=2; String seat; public void riding() { System.out.println('bicycle is used for riding'); } }
public class RoadBicycle extends Bicycle{ public void riding() { System.out.println('RoadBicycle is used for road riding'); } }
public class TestBicycle { public static void main(String() args) { Bicycle b=new RoadBicycle(); b.riding(); } }
出力: ここで、子クラスのメソッドは親クラスのメソッドをオーバーライドします。
スーパーキーワード
スーパーキーワードは、直接の親クラスオブジェクトを参照するために使用される参照変数です。 superキーワードを使用すると、親クラスのメソッドまたは変数またはコンストラクターを参照できます。
このキーワード
このキーワードは、現在のクラスオブジェクトを参照するために使用されます。このキーワードを使用すると、現在のクラスインスタンス変数または現在のクラスメソッドにアクセスできます。これは、メソッド呼び出しで引数として渡すことができます。
public class DemoThisKeyword { private int accno; private int balance; public void setvalues(int accno,int balance) { this.accno=accno; this.balance=balance; } public int showdata() { System.out.println(accno); System.out.println(balance); return balance; } public static void main(String() args) { // TODO Auto-generated method stub DemoThisKeyword obj =new DemoThisKeyword(); obj.setvalues(11, 100); obj.showdata(); System.out.println(obj.showdata()); } }
ビルダー
Javaコンストラクターは、クラスのオブジェクトが作成されるときに呼び出されるメソッドのようなものです。コンストラクターは、クラスと同じ名前にする必要があります。
Class Myclass{ Myclass(); Method1() { } }
クラスのオブジェクトを作成している間、Myclass myobj = new Myclass();
コンストラクターメソッドが呼び出されます。コンストラクターは、デフォルトですべてのクラスに対してJavaコンパイラーによって自動的に作成されます。
public class ConstructorExampleProgram { int employee_age; String employee_name; int employee_salary; //Default constructor ConstructorExampleProgram(){ this.employee_name=Bob'; this.employee_age=30; this.employee_salary=7000; } //Parameterized constructor ConstructorExampleProgram(String n,int a,int b){ this.employee_name=n; this.employee_age=a; this.employee_salary=b; } public static void main(String args()){ ConstructorExampleProgram obj1 = new ConstructorExampleProgram(); ConstructorExampleProgram obj2 = new ConstructorExampleProgram('clare', 56,7500); System.out.println(obj1.employee_name+' '+obj1.employee_age+' '+obj1.employee_salary); System.out.println(obj2.employee_name+' '+obj2.employee_age+' '+obj2.employee_salary); } }
コンストラクターが従うべきルール:
- コンストラクターは、クラス名と同じ名前にする必要があります。
- コンストラクターにはreturnステートメントを含めないでください。
注意点:
- オブジェクト指向プログラミングでは、オブジェクトがプログラミングの主要部分です。
- OOPの概念は、オブジェクト、クラス、継承、ポリモーフィズム、コンストラクターです。
- 素晴らしい 親クラスのメンバーを参照するために使用されるキーワード、および この キーワードは、現在のクラスオブジェクトを参照するために使用されます。
- コンストラクターは、クラスのオブジェクトが作成されるときに呼び出されるメソッドのようなものです。
結論
このチュートリアルでは、Javaでサポートされている重要なオブジェクト指向機能の基本について説明しました。これは、JavaのOOPSに関する入門チュートリアルにすぎません。以降のチュートリアルでは、すべてのトピックについて詳しく説明します。 Javaは、OOPの4つの柱、つまり、ポリモーフィズム、継承、抽象化、およびカプセル化をサポートします。
これらの機能とは別に、Javaは、包含、集約、メッセージパッシングなどの他の機能とOOP構造もサポートします。これらについては、今後のチュートリアルで説明します。