Javaでのオブジェクト指向プログラミング

こんにちは、皆さん!今日は、Javaでのオブジェクト指向プログラミングについて説明します。

この記事は、オブジェクト指向プログラミングの基本原則とその概念を完全に理解するのに役立ちます。

これらの概念を理解すると、Javaでオブジェクト指向プログラミングの原則を使用して基本的な問題解決アプリケーションを開発する自信と能力が得られるはずです。

オブジェクト指向プログラミングとは何ですか?

オブジェクト指向プログラミング(OOP)は、 「オブジェクトの概念に基づく基本的なプログラミングパラダイムです。これらのオブジェクトには、フィールド(属性またはプロパティと呼ばれることが多い)の形式のデータと、プロシージャ(メソッドと呼ばれることが多い)の形式のコードを含めることができます。

オブジェクト指向アプローチのコアコンセプトは、複雑な問題をより小さなオブジェクトに分割することです。

Javaとは何ですか?

Javaは、Windows、Mac、Linuxなどのさまざまなオペレーティングシステムで動作する、汎用のクラスベースのオブジェクト指向プログラミング言語です。

Javaを使用して以下を開発できます。

  • デスクトップアプリケーション
  • Webアプリケーション
  • モバイルアプリケーション(特にAndroidアプリ)
  • Webサーバーとアプリケーションサーバー
  • ビッグデータ処理
  • 組み込みシステム

そして、はるかに。

Javaでは、すべてのアプリケーションはクラス名で始まり、このクラスはファイル名と一致する必要があります。ファイルを保存するときは、クラス名を使用して保存し、ファイル名の末尾に .java 」を追加してください。

HellofreeCodeCampcommunity 」というメッセージを出力するJavaプログラムを書いてみましょう。私の名前は... です。

まず、Main.javaという最初のJavaファイルを作成します。これは、任意のテキストエディタで実行できます。ファイルを作成して保存した後、以下のコード行を使用して、期待される出力を取得します。

public class Main 
{
  public static void main(String[] args) 
  {
    System.out.println("Hello freeCodeCamp community. My name is Patrick Cyubahiro.");
  }
}

現時点で上記のコードを理解していなくても心配しないでください。以下のコードの各行について、段階的に説明します。

今のところ、Javaで実行されるコードのすべての行がクラスに含まれている必要があることに注意することから始めてください。

Javaでは大文字と小文字が区別されることにも注意してください。これは、Javaが大文字と小文字を区別する機能を備えていることを意味します。たとえば、変数 myClass と変数 myclass はまったく異なるものです。

さて、そのコードが何をしているのか見てみましょう:

main()  まず、メソッドを見てみましょうpublic static void main(String[] args)

このメソッドはすべてのJavaプログラムで必須であり、Javaプログラムのエントリポイントであるため、最も重要なメソッドです。

その構文は常にpublic static void main(String[] args)です。変更できるのは、文字列配列引数の名前だけです。たとえば、に変更できargsますmyStringArgs

Javaのクラスとは何ですか?

クラスは、オブジェクトのコレクションとして定義されます。クラスは、個々のオブジェクトを作成するための青写真と考えることもできます。

クラスを作成するには、キーワードを使用し  classます。

Javaのクラスの構文:

class ClassName {
  // fields
  // methods
}

上記の構文では、フィールド(変数とも呼ばれます)とメソッドがあり、それぞれオブジェクトの状態と動作を表します。

Javaでは、フィールドを使用してデータを格納し、メソッドを使用して操作を実行することに注意してください。

例を見てみましょう:

変数 y 」を使用して「 Main という名前のクラスを作成します。変数 y は値2を格納します。

public class Main { 

int y = 2; 

}

クラスは常に大文字の最初の文字で始まる必要があり、Javaファイルはクラス名と一致する必要があることに注意してください。

Javaのオブジェクトとは何ですか?

オブジェクトは、明確に識別できる実世界のエンティティです。オブジェクトには状態と動作があります。つまり、特定のタイプのデータを有用にするためのメソッドとプロパティで構成されています。

オブジェクトは次のもので構成されます。

  • 一意のID:状態が別のオブジェクトの状態と同一であっても、各オブジェクトには一意のIDがあります。
  • 状態/プロパティ/属性:状態は、オブジェクトがどのように見えるか、またはオブジェクトがどのようなプロパティを持っているかを示します。
  • ビヘイビア:ビヘイビアは、オブジェクトが何をするかを教えてくれます。

Javaでのオブジェクトの状態と動作の例:

オブジェクトが持つことができる状態と動作の実際の例をいくつか見てみましょう。

例1:

  • オブジェクト:車。
  • 状態:色、ブランド、重量、モデル。
  • 行動:ブレーキをかけ、加速し、方向転換し、ギアを変更します。

例2:

  • オブジェクト:家。
  • 状態:住所、色、場所。
  • 行動:ドアを開ける、ドアを閉める、ブラインドを開ける。

Javaでのオブジェクトの構文:

public class Number {

int y = 10;

public static void main(String[] args) {

Number myObj = new Number();

System.out.println(myObj.y);

}

}

Java仮想マシン(JVM)とは何ですか?

Java仮想マシン(JVM)は、コンピューターがJavaプログラムを実行できるようにする仮想マシンです。

JVMには、次の2つの主要な機能があります。

  • Javaプログラムを任意のデバイスまたはオペレーティングシステムで実行できるようにするため(これは「1回書き込み、どこでも実行」の原則とも呼ばれます)。
  • そして、プログラムメモリを管理および最適化するため。

Javaでのアクセス修飾子のしくみ

Javaでは、アクセス修飾子は、クラス、メソッド、およびその他のメンバーのアクセシビリティを設定するキーワードです。

これらのキーワードは、クラス内のフィールドまたはメソッドを、別のクラスまたはサブクラス内の別のメソッドで使用または呼び出すことができるかどうかを決定します。

アクセス修飾子を使用して、アクセスを制限することもできます。

Javaには、次の4種類のアクセス修飾子があります。

  • デフォルト
  • 公衆
  • プライベート
  • 保護されています

ここで、それぞれについて詳しく見ていきましょう。

デフォルトのアクセス修飾子

デフォルトのアクセス修飾子は、package-privateとも呼ばれます。 これを使用して、同じパッケージ内のすべてのメンバーを表示しますが、それらには同じパッケージ内でのみアクセスできます。

クラス、メソッド、またはデータメンバーに対してアクセス修飾子が指定または宣言されていない場合、デフォルトのアクセス修飾子が自動的に使用されることに注意してください。

デフォルトのアクセス修飾子を使用する方法の例を次に示します。

class SampleClass 
{
    void output() 
       { 
           System.out.println("Hello World! This is an Introduction to OOP - 			Beginner's guide."); 
       } 
} 
class Main
{ 
    public static void main(String args[]) 
       {   
          SampleClass obj = new SampleClass(); 
          obj.output();  
       } 
}

次に、このコードが何をしているのか見てみましょう。

void output():アクセス修飾子がない場合、プログラムは自動的にデフォルトの修飾子を使用します。

SampleClass obj = new SampleClass();:このコード行により、プログラムはデフォルトのアクセス修飾子を使用してクラスにアクセスできます。

obj.output();:このコード行により、プログラムはデフォルトのアクセス修飾子を使用してクラスメソッドにアクセスできます。

出力は次のとおりHello World! This is an Introduction to OOP - Beginner's guide.です。

パブリックアクセス修飾子

パブリックアクセス修飾子を使用すると、クラス、メソッド、またはデータフィールドにJavaプログラムの任意のクラスまたはパッケージからアクセスできます。パブリックアクセス修飾子は、パッケージ内およびパッケージ外からアクセスできます。

一般に、パブリックアクセス修飾子はエンティティをまったく制限しません。

パブリックアクセス修飾子の使用方法の例を次に示します。

// Car.java file
// public class
public class Car {
    // public variable
    public int tireCount;

    // public method
    public void display() {
        System.out.println("I am a Car.");
        System.out.println("I have " + tireCount + " tires.");
    }
}

// Main.java
public class Main {
    public static void main( String[] args ) {
        // accessing the public class
        Car car = new Car();

        // accessing the public variable
        car.tireCount = 4;
        // accessing the public method
        car.display();
    }
}

出力:

I am a Car.

I have 4 tires.

次に、そのコードで何が起こっているかを見てみましょう。

上記の例では、

  • パブリッククラスCarには、メインクラスからアクセスします。
  • パブリック変数tireCountは、Mainクラスからアクセスされます。
  • パブリックメソッドdisplay()は、Mainクラスからアクセスされます。

プライベートアクセス修飾子

プライベートアクセス修飾子は、アクセシビリティレベルが最も低いアクセス修飾子です。これは、privateとして宣言されたメソッドとフィールドがクラスの外部からアクセスできないことを意味します。これらは、これらのプライベートエンティティをメンバーとして持つクラス内でのみアクセスできます。

また、クラスのサブクラスにもプライベートエンティティが表示されないことに注意してください。

クラスの外部でprivateと宣言された変数とメソッドにアクセスしようとするとどうなるかの例を次に示します。

class SampleClass 
{
    
    private String activity;
}

public class Main 
{

    public static void main(String[] main)
    {

        SampleClass task = new SampleClass();

        task.activity = "We are learning the core concepts of OOP.";
    }
}

さて、ここで何が起こっているのですか?

  1. private String activity:プライベートアクセス修飾子は、変数「アクティビティ」をプライベートにします。
  2. SampleClass task = new SampleClass();:SampleClassのオブジェクトを作成しました。
  3. task.activity = "We are learning the core concepts of OOP.";:このコード行では、別のクラスからプライベート変数とフィールドにアクセスしようとしています(プライベートアクセス修飾子のためにアクセスできません)。

上記のプログラムを実行すると、次のエラーが発生します。

Main.java:49: error: activity has private access in SampleClass
        task.activity = "We are learning the core concepts of OOP.";
            ^
1 error

これは、別のクラスからプライベート変数とフィールドにアクセスしようとしているためです。

したがって、これらのプライベート変数にアクセスする最良の方法は、getterメソッドとsetterメソッドを使用することです。

ゲッターとセッターは、特にクラスを作成するときにデータを保護するために使用されます。インスタンス変数ごとにgetterメソッドを作成すると、setterメソッドがその値を設定している間、メソッドはその値を返します。

gettersメソッドとsettersメソッドを使用してプライベート変数にアクセスする方法を見てみましょう。

class SampleClass 
{

    private String task;

    // This is the getter method.
    public String getTask() 
    {
    
        return this.task;
    }
    
    // This is the setter method.
    public void setTask(String task) 
    {
    
        this.task= task;
    }
}

public class Main 
{

    public static void main(String[] main)
    {
    
        SampleClass task = new SampleClass();

        // We want to access the private variable using the getter and 				   setter.
        
        task.setTask("We are learning the core concepts of OOP.");
        
        System.out.println(task.getTask());
    }
}

上記のプログラムを実行すると、次のようになります。

We are learning the core concepts of OOP.

上記の例で名前が付けられたプライベート変数があるため、外部クラスから変数にアクセスするためにtaskメソッドを使用しgetTask()ました。setTask()これらのメソッドは、Javaではgetterおよびsetterと呼ばれます。

セッターメソッド(setTask())を使用して変数に値を割り当て、ゲッターメソッド(getTask())を使用して変数にアクセスしました。

キーワードの詳細については、thisこちらの記事をご覧ください

保護されたアクセス修飾子

メソッドとデータメンバーが宣言さprotectedれると、同じパッケージ内およびサブクラスからそれらにアクセスできます。

protectedアクセス修飾子は、デフォルトのアクセス修飾子となんらかの形で似ているとも言え  ます。サブクラスでの可視性という1つの例外があるだけです。

クラスは保護されていると宣言できないことに注意してください。このアクセス修飾子は通常、親子関係で使用されます。

保護されたアクセス修飾子を使用する方法を見てみましょう。

// Multiplication.java

package learners;

public class Multiplication 
{

   protected int multiplyTwoNumbers(int a, int b)
   {
       
	return a*b;
	
   }
   
}

// Test.java

package javalearners;

import learners.*;

class Test extends Multiplication
{
    
   public static void main(String args[])
   {
       
	Test obj = new Test();
	
	System.out.println(obj.multiplyTwoNumbers(2, 4));
	
   }
   
} //output: 8

このコードは何をしているのですか?

この例で  Testは、別のパッケージに存在するクラスは  multiplyTwoNumbers()、保護されていると宣言されているメソッドを呼び出すことができます。

このメソッドは、TestクラスがクラスAdditionを拡張し、修飾子がサブクラス(任意のパッケージ)のメンバーprotectedへのアクセスを許可するため、これを行うことができます。protected

Javaのコンストラクターとは何ですか?

Javaのコンストラクターは、新しく作成されたオブジェクトを初期化するために使用するメソッドです。

Javaでのコンストラクターの構文:

public class Main { 

int a;  

public Main() { 

a = 3 * 3; 

} 

public static void main(String[] args) { 

Main myObj = new Main();

System.out.println(myObj.a); 

} 

} 

では、このコードで何が起こっているのでしょうか?

  1. Mainクラスを作成することから始めました。
  2. その後、変数であるクラス属性を作成しましたa
  3. 3番目に、Mainクラスのクラスコンストラクターを作成しました。
  4. その後、a宣言した変数の初期値を設定しました。変数aの値は9になります。プログラムは3x3を取ります。これは9に相当します。変数には、任意の値を自由に割り当てることができますa。(プログラミングでは、記号「*」は乗算を意味します)。

すべてのJavaプログラムは、main()メソッドで実行を開始します。したがって、を使用しましたpublic static void main(String[] args)。これは、プログラムが実行を開始するポイントです。つまり、このmain()メソッドはすべてのJavaプログラムのエントリポイントです。

main()次に、メソッド内のすべてのキーワードが何をするかを説明します。

パブリックキーワード。

publicキーワードはアクセス修飾子です。その役割は、メソッドにアクセスできる場所と、メソッドにアクセスできるユーザーを指定することです。したがって、main()メソッドを公開すると、グローバルに利用できるようになります。つまり、プログラムのすべての部分にアクセスできるようになります。

staticキーワード。

メソッドがstaticキーワードで宣言されている場合、それは静的メソッドと呼ばれます。したがって、Javamain()メソッドは常に静的であるため、コンパイラは、クラスのオブジェクトの作成なしまたは作成前にJavaメソッドを呼び出すことができます。

main()メソッドが非静的であることが許可されている場合、Java仮想マシンはmain()メソッドの呼び出し中にそのクラスをインスタンス化する必要があります。

main()staticキーワードは、Java仮想マシンによってメソッドを呼び出すためだけに宣言されたオブジェクトによって使用されたはずの不要なメモリの浪費を節約するためにも重要です。

Voidキーワード。

voidキーワードは、メソッドが何も返さないことを指定するために使用されるキーワードです。メソッドが何も返すことが期待されていない場合は常に、main()その戻り型は無効です。つまり、これは、main()メソッドが終了するとすぐに、Javaプログラムも終了することを意味します。

主要。

Mainは、Javaのmainメソッドの名前です。これは、Java仮想マシンがJavaプログラムの開始点として探す識別子です。

。_String[] args

これは、Javaコマンドライン引数を格納する文字列の配列です。

次のステップは、クラスMainのオブジェクトを作成することです。クラスコンストラクターを呼び出す関数呼び出しを作成しました。

最後のステップは、の値a9を出力することです。

Javaでのメソッドのしくみ

メソッドは、特定のタスクを実行するコードのブロックです。Javaではメソッドという用語を使用しますが、C ++などの他のプログラミング言語では、同じメソッドが一般に関数として知られています。

Javaには、次の2種類のメソッドがあります。

  • ユーザー定義メソッド:これらは、要件に基づいて作成できるメソッドです。
  • 標準ライブラリメソッド:これらは、使用可能なJavaの組み込みメソッドです。

Javaでメソッドを使用する方法の例を示します。

Javaメソッドの例1:

class Main {

  // create a method
  public int divideNumbers(int x, int y) {
    int division = x / y;
    // return value
    return division;
  }

  public static void main(String[] args) {
    
    int firstNumber = 4;
    int secondNumber = 2;

    // create an object of Main
    Main obj = new Main();
    // calling method
    int result = obj.divideNumbers(firstNumber, secondNumber);
    System.out.println("Dividing " + firstNumber + " by " + secondNumber + " is: " + result);
  }
}

出力:

Dividing 4 by 2 is: 2

上記の例では、という名前のメソッドを作成しましたdivideNumbers()。このメソッドは2つのパラメーターxとyを取り、2つの引数firstNumberとを渡してメソッドを呼び出しましたsecondNumber

Javaの基本をいくつか理解したところで、オブジェクト指向プログラミングの原則をもう少し詳しく見ていきましょう。

オブジェクト指向プログラミングの主要な原則。

オブジェクト指向プログラミングパラダイムには、4つの主要な原則があります。これらの原則は、オブジェクト指向プログラミングの柱としても知られています。

オブジェクト指向プログラミングの4つの主要な原則は次のとおりです。

  1. カプセル化(情報隠蔽についても簡単に触れます)
  2. 継承
  3. 抽象化
  4. ポリモーフィズム

Javaでのカプセル化と情報隠蔽

カプセル化とは、データを1つのユニットにまとめることです。簡単に言えば、これは多かれ少なかれ、このシールドの外側のコードがデータにアクセスするのを防ぐ保護シールドのようなものです。

カプセル化の簡単な例はランドセルです。ランドセルは、本、ペン、鉛筆、定規など、すべてのアイテムを1か所に安全に保管できます。

プログラミングにおける情報隠蔽またはデータ隠蔽とは、プログラム全体の不注意による変更からデータまたは情報を保護することです。これは強力なオブジェクト指向プログラミング機能であり、カプセル化と密接に関連しています。

カプセル化の背後にある考え方は、「機密」データをユーザーから確実に隠すことです。これを実現するには、次のことを行う必要があります。

  1. クラス変数/属性をとして宣言しますprivate
  2. 変数の値にアクセスして更新するためのパブリックメソッドgetとメソッドを提供します。setprivate

覚えているように、private変数は同じクラス内でのみアクセスでき、外部クラスはそれらにアクセスできません。getただし、パブリックメソッドとメソッドを提供すればアクセスできますset

getおよびsetメソッドがどのように機能するかを示す追加の例を示します。

public class Student {
  private String name; // private = restricted access

  // Getter
  public String getName() {
    return name;
  }

  // Setter
  public void setName(String newName) {
    this.name = newName;
  }
}

Javaでの継承

継承により、クラスは他のクラスの属性とメソッドを継承できます。これは、親クラスが属性と動作を子クラスに拡張することを意味します。継承は再利用性をサポートします。

継承という用語を説明する簡単な例は、人間は(一般に)話す、呼吸する、食べる、飲むなどの能力など、クラス「人間」から特定のプロパティを継承することです。

「継承の概念」は次の2つのカテゴリに分類されます。

  • サブクラス(子)-別のクラスから継承するクラス。
  • スーパークラス(親)-継承元のクラス。

クラスから継承するには、extendsキーワードを使用します。

以下の例では、JerryTheMouseクラスからメソッドとフィールドを継承してクラスを作成していますAnimal

JerryTheMouseはサブクラスでAnimalあり、はスーパークラスです。

class Animal {

  // field and method of the parent class
  String name;
  public void eat() {
    System.out.println("I can eat");
  }
}

// inherit from Animal
class JerryTheMouse extends Animal {

  // new method in subclass
  public void display() {
    System.out.println("My name is " + name);
  }
}

class Main {
  public static void main(String[] args) {

    // create an object of the subclass
    JerryTheMouse labrador = new JerryTheMouse();

    // access field of superclass
    mouse.name = "Jerry, the mouse";
    mouse.display();

    // call method of superclass
    // using object of subclass
    mouse.eat();

  }
}

出力:

My name is Jerry

I can eat

Javaでの抽象化

抽象化は、オブジェクト指向プログラミングの概念であり、重要な属性のみを表示し、コード内の不要な情報を非表示にすることができます。抽象化の主な目的は、ユーザーから不要な詳細を隠すことです。

抽象化を説明する簡単な例は、電子メールを送信するときに関係するプロセスについて考えることです。電子メールを送信すると、送信直後に何が起こるか、サーバーが使用するプロトコルなどの複雑な詳細が隠されます。

電子メールを送信するときは、受信者の電子メールアドレス、電子メールの件名を入力し、内容を入力して、[送信]をクリックするだけです。

抽象クラスまたはインターフェースを使用して、ものを抽象化できます。

キーワードはabstract非アクセス修飾子であり、クラスとメソッドに使用されます。

  • 抽象クラス:オブジェクトの作成に使用できない制限付きクラスです。アクセスするには、別のクラスから継承する必要があります。
  • 抽象メソッド:本体を持たないメソッドは、抽象メソッドと呼ばれます。同じabstractキーワードを使用して抽象メソッドを作成します。

抽象メソッドの本体は、サブクラス(から継承)によって提供されます。

例:

// Abstract class
abstract class Animal {
  // Abstract method (does not have a body)
  public abstract void animalSound();
  // Regular method
  public void sleep() {
    System.out.println("Zzzz");
  }
}

// Subclass (inherit from Animal)
class Cow extends Animal {
  public void animalSound() {
    // The body of animalSound() is provided here
    System.out.println("The cow says: Moo");
  }
}

class Main {
  public static void main(String[] args) {
    Cow myCow = new Cow(); // Create a Cow object
    myCow.animalSound();
    myCow.sleep();
  }
}

Javaのポリモーフィズム

ポリモーフィズムとは、オブジェクトがさまざまな形をとる能力を指します。ポリモーフィズムは通常、継承によって相互に関連する多くのクラスがある場合に発生します。

ポリモーフィズムは、人が同時に異なる特性を持つことができる方法に似ています。

たとえば、男性は、父親、祖父、夫、従業員など、すべて同時になることができます。したがって、同じ人がさまざまな状況でさまざまな特性や行動を持っています。

例:

オブジェクトCowとCatを作成しanimalSound()、それぞれでメソッドを呼び出します。

class Animal {
  public void animalSound() {
    System.out.println("An animal can make a sound.");
  }
}

class Cow extends Animal {
  public void animalSound() {
    System.out.println("A cow says: Moooo");
  }
}

class Cat extends Animal {
  public void animalSound() {
    System.out.println("A cat says: Meeooww");
  }
}

class Main {
  public static void main(String[] args) {
    Animal myAnimal = new Animal();
    Animal myCow = new Cow();
    Animal myCat = new Cat();
        
    myAnimal.animalSound();
    myCow.animalSound();
    myCat.animalSound();
  }
}

継承とポリモーフィズムは、コードの再利用に非常に役立ちます。新しいクラスを作成するときに、既存のクラスの属性とメソッドを再利用できます。

Javaのインターフェース

Aninterfaceは抽象的なメソッドのコレクションです。言い換えると、anは、関連するメソッドを空の本体でグループ化するために使用されるinterface完全に「抽象クラス」です。

インターフェイスは、クラスが実行できることを指定しますが、クラスが実行できる方法は指定しません。

例:

// create an interface
interface Language {
  void getName(String name);
}

// class implements interface
class ProgrammingLanguage implements Language {

  // implementation of abstract method
  public void getName(String name) {
    System.out.println("One of my favorite programming languages is: " + name);
  }
}

class Main {
  public static void main(String[] args) {
    ProgrammingLanguage language = new ProgrammingLanguage();
    language.getName("Java");
  }
}

出力:

One of my favorite programming languages is: Java

結論

この記事では、オブジェクト指向プログラミングの主な概念のいくつかを見てきました。これらの概念を上手に使い、優れたコードを書きたい場合は、これらの概念をよく理解することが不可欠です。

この記事がお役に立てば幸いです。

私の名前はPatrickCyubahiroです。ソフトウェアとウェブの開発者、UI / UXデザイナー、テクニカルライター、コミュニティビルダーです。

Twitterで私と連絡してください:@ Pat_Cyubahiro、または次のアドレスに書いてください:ampatrickcyubahiro [at] gmail.com

読んでくれてありがとう! 

ソース:https ://www.freecodecamp.org/news/object-Oriented-programming-concepts-java/

#java #oop 

What is GEEK

Buddha Community

Javaでのオブジェクト指向プログラミング

Javaでのオブジェクト指向プログラミング

こんにちは、皆さん!今日は、Javaでのオブジェクト指向プログラミングについて説明します。

この記事は、オブジェクト指向プログラミングの基本原則とその概念を完全に理解するのに役立ちます。

これらの概念を理解すると、Javaでオブジェクト指向プログラミングの原則を使用して基本的な問題解決アプリケーションを開発する自信と能力が得られるはずです。

オブジェクト指向プログラミングとは何ですか?

オブジェクト指向プログラミング(OOP)は、 「オブジェクトの概念に基づく基本的なプログラミングパラダイムです。これらのオブジェクトには、フィールド(属性またはプロパティと呼ばれることが多い)の形式のデータと、プロシージャ(メソッドと呼ばれることが多い)の形式のコードを含めることができます。

オブジェクト指向アプローチのコアコンセプトは、複雑な問題をより小さなオブジェクトに分割することです。

Javaとは何ですか?

Javaは、Windows、Mac、Linuxなどのさまざまなオペレーティングシステムで動作する、汎用のクラスベースのオブジェクト指向プログラミング言語です。

Javaを使用して以下を開発できます。

  • デスクトップアプリケーション
  • Webアプリケーション
  • モバイルアプリケーション(特にAndroidアプリ)
  • Webサーバーとアプリケーションサーバー
  • ビッグデータ処理
  • 組み込みシステム

そして、はるかに。

Javaでは、すべてのアプリケーションはクラス名で始まり、このクラスはファイル名と一致する必要があります。ファイルを保存するときは、クラス名を使用して保存し、ファイル名の末尾に .java 」を追加してください。

HellofreeCodeCampcommunity 」というメッセージを出力するJavaプログラムを書いてみましょう。私の名前は... です。

まず、Main.javaという最初のJavaファイルを作成します。これは、任意のテキストエディタで実行できます。ファイルを作成して保存した後、以下のコード行を使用して、期待される出力を取得します。

public class Main 
{
  public static void main(String[] args) 
  {
    System.out.println("Hello freeCodeCamp community. My name is Patrick Cyubahiro.");
  }
}

現時点で上記のコードを理解していなくても心配しないでください。以下のコードの各行について、段階的に説明します。

今のところ、Javaで実行されるコードのすべての行がクラスに含まれている必要があることに注意することから始めてください。

Javaでは大文字と小文字が区別されることにも注意してください。これは、Javaが大文字と小文字を区別する機能を備えていることを意味します。たとえば、変数 myClass と変数 myclass はまったく異なるものです。

さて、そのコードが何をしているのか見てみましょう:

main()  まず、メソッドを見てみましょうpublic static void main(String[] args)

このメソッドはすべてのJavaプログラムで必須であり、Javaプログラムのエントリポイントであるため、最も重要なメソッドです。

その構文は常にpublic static void main(String[] args)です。変更できるのは、文字列配列引数の名前だけです。たとえば、に変更できargsますmyStringArgs

Javaのクラスとは何ですか?

クラスは、オブジェクトのコレクションとして定義されます。クラスは、個々のオブジェクトを作成するための青写真と考えることもできます。

クラスを作成するには、キーワードを使用し  classます。

Javaのクラスの構文:

class ClassName {
  // fields
  // methods
}

上記の構文では、フィールド(変数とも呼ばれます)とメソッドがあり、それぞれオブジェクトの状態と動作を表します。

Javaでは、フィールドを使用してデータを格納し、メソッドを使用して操作を実行することに注意してください。

例を見てみましょう:

変数 y 」を使用して「 Main という名前のクラスを作成します。変数 y は値2を格納します。

public class Main { 

int y = 2; 

}

クラスは常に大文字の最初の文字で始まる必要があり、Javaファイルはクラス名と一致する必要があることに注意してください。

Javaのオブジェクトとは何ですか?

オブジェクトは、明確に識別できる実世界のエンティティです。オブジェクトには状態と動作があります。つまり、特定のタイプのデータを有用にするためのメソッドとプロパティで構成されています。

オブジェクトは次のもので構成されます。

  • 一意のID:状態が別のオブジェクトの状態と同一であっても、各オブジェクトには一意のIDがあります。
  • 状態/プロパティ/属性:状態は、オブジェクトがどのように見えるか、またはオブジェクトがどのようなプロパティを持っているかを示します。
  • ビヘイビア:ビヘイビアは、オブジェクトが何をするかを教えてくれます。

Javaでのオブジェクトの状態と動作の例:

オブジェクトが持つことができる状態と動作の実際の例をいくつか見てみましょう。

例1:

  • オブジェクト:車。
  • 状態:色、ブランド、重量、モデル。
  • 行動:ブレーキをかけ、加速し、方向転換し、ギアを変更します。

例2:

  • オブジェクト:家。
  • 状態:住所、色、場所。
  • 行動:ドアを開ける、ドアを閉める、ブラインドを開ける。

Javaでのオブジェクトの構文:

public class Number {

int y = 10;

public static void main(String[] args) {

Number myObj = new Number();

System.out.println(myObj.y);

}

}

Java仮想マシン(JVM)とは何ですか?

Java仮想マシン(JVM)は、コンピューターがJavaプログラムを実行できるようにする仮想マシンです。

JVMには、次の2つの主要な機能があります。

  • Javaプログラムを任意のデバイスまたはオペレーティングシステムで実行できるようにするため(これは「1回書き込み、どこでも実行」の原則とも呼ばれます)。
  • そして、プログラムメモリを管理および最適化するため。

Javaでのアクセス修飾子のしくみ

Javaでは、アクセス修飾子は、クラス、メソッド、およびその他のメンバーのアクセシビリティを設定するキーワードです。

これらのキーワードは、クラス内のフィールドまたはメソッドを、別のクラスまたはサブクラス内の別のメソッドで使用または呼び出すことができるかどうかを決定します。

アクセス修飾子を使用して、アクセスを制限することもできます。

Javaには、次の4種類のアクセス修飾子があります。

  • デフォルト
  • 公衆
  • プライベート
  • 保護されています

ここで、それぞれについて詳しく見ていきましょう。

デフォルトのアクセス修飾子

デフォルトのアクセス修飾子は、package-privateとも呼ばれます。 これを使用して、同じパッケージ内のすべてのメンバーを表示しますが、それらには同じパッケージ内でのみアクセスできます。

クラス、メソッド、またはデータメンバーに対してアクセス修飾子が指定または宣言されていない場合、デフォルトのアクセス修飾子が自動的に使用されることに注意してください。

デフォルトのアクセス修飾子を使用する方法の例を次に示します。

class SampleClass 
{
    void output() 
       { 
           System.out.println("Hello World! This is an Introduction to OOP - 			Beginner's guide."); 
       } 
} 
class Main
{ 
    public static void main(String args[]) 
       {   
          SampleClass obj = new SampleClass(); 
          obj.output();  
       } 
}

次に、このコードが何をしているのか見てみましょう。

void output():アクセス修飾子がない場合、プログラムは自動的にデフォルトの修飾子を使用します。

SampleClass obj = new SampleClass();:このコード行により、プログラムはデフォルトのアクセス修飾子を使用してクラスにアクセスできます。

obj.output();:このコード行により、プログラムはデフォルトのアクセス修飾子を使用してクラスメソッドにアクセスできます。

出力は次のとおりHello World! This is an Introduction to OOP - Beginner's guide.です。

パブリックアクセス修飾子

パブリックアクセス修飾子を使用すると、クラス、メソッド、またはデータフィールドにJavaプログラムの任意のクラスまたはパッケージからアクセスできます。パブリックアクセス修飾子は、パッケージ内およびパッケージ外からアクセスできます。

一般に、パブリックアクセス修飾子はエンティティをまったく制限しません。

パブリックアクセス修飾子の使用方法の例を次に示します。

// Car.java file
// public class
public class Car {
    // public variable
    public int tireCount;

    // public method
    public void display() {
        System.out.println("I am a Car.");
        System.out.println("I have " + tireCount + " tires.");
    }
}

// Main.java
public class Main {
    public static void main( String[] args ) {
        // accessing the public class
        Car car = new Car();

        // accessing the public variable
        car.tireCount = 4;
        // accessing the public method
        car.display();
    }
}

出力:

I am a Car.

I have 4 tires.

次に、そのコードで何が起こっているかを見てみましょう。

上記の例では、

  • パブリッククラスCarには、メインクラスからアクセスします。
  • パブリック変数tireCountは、Mainクラスからアクセスされます。
  • パブリックメソッドdisplay()は、Mainクラスからアクセスされます。

プライベートアクセス修飾子

プライベートアクセス修飾子は、アクセシビリティレベルが最も低いアクセス修飾子です。これは、privateとして宣言されたメソッドとフィールドがクラスの外部からアクセスできないことを意味します。これらは、これらのプライベートエンティティをメンバーとして持つクラス内でのみアクセスできます。

また、クラスのサブクラスにもプライベートエンティティが表示されないことに注意してください。

クラスの外部でprivateと宣言された変数とメソッドにアクセスしようとするとどうなるかの例を次に示します。

class SampleClass 
{
    
    private String activity;
}

public class Main 
{

    public static void main(String[] main)
    {

        SampleClass task = new SampleClass();

        task.activity = "We are learning the core concepts of OOP.";
    }
}

さて、ここで何が起こっているのですか?

  1. private String activity:プライベートアクセス修飾子は、変数「アクティビティ」をプライベートにします。
  2. SampleClass task = new SampleClass();:SampleClassのオブジェクトを作成しました。
  3. task.activity = "We are learning the core concepts of OOP.";:このコード行では、別のクラスからプライベート変数とフィールドにアクセスしようとしています(プライベートアクセス修飾子のためにアクセスできません)。

上記のプログラムを実行すると、次のエラーが発生します。

Main.java:49: error: activity has private access in SampleClass
        task.activity = "We are learning the core concepts of OOP.";
            ^
1 error

これは、別のクラスからプライベート変数とフィールドにアクセスしようとしているためです。

したがって、これらのプライベート変数にアクセスする最良の方法は、getterメソッドとsetterメソッドを使用することです。

ゲッターとセッターは、特にクラスを作成するときにデータを保護するために使用されます。インスタンス変数ごとにgetterメソッドを作成すると、setterメソッドがその値を設定している間、メソッドはその値を返します。

gettersメソッドとsettersメソッドを使用してプライベート変数にアクセスする方法を見てみましょう。

class SampleClass 
{

    private String task;

    // This is the getter method.
    public String getTask() 
    {
    
        return this.task;
    }
    
    // This is the setter method.
    public void setTask(String task) 
    {
    
        this.task= task;
    }
}

public class Main 
{

    public static void main(String[] main)
    {
    
        SampleClass task = new SampleClass();

        // We want to access the private variable using the getter and 				   setter.
        
        task.setTask("We are learning the core concepts of OOP.");
        
        System.out.println(task.getTask());
    }
}

上記のプログラムを実行すると、次のようになります。

We are learning the core concepts of OOP.

上記の例で名前が付けられたプライベート変数があるため、外部クラスから変数にアクセスするためにtaskメソッドを使用しgetTask()ました。setTask()これらのメソッドは、Javaではgetterおよびsetterと呼ばれます。

セッターメソッド(setTask())を使用して変数に値を割り当て、ゲッターメソッド(getTask())を使用して変数にアクセスしました。

キーワードの詳細については、thisこちらの記事をご覧ください

保護されたアクセス修飾子

メソッドとデータメンバーが宣言さprotectedれると、同じパッケージ内およびサブクラスからそれらにアクセスできます。

protectedアクセス修飾子は、デフォルトのアクセス修飾子となんらかの形で似ているとも言え  ます。サブクラスでの可視性という1つの例外があるだけです。

クラスは保護されていると宣言できないことに注意してください。このアクセス修飾子は通常、親子関係で使用されます。

保護されたアクセス修飾子を使用する方法を見てみましょう。

// Multiplication.java

package learners;

public class Multiplication 
{

   protected int multiplyTwoNumbers(int a, int b)
   {
       
	return a*b;
	
   }
   
}

// Test.java

package javalearners;

import learners.*;

class Test extends Multiplication
{
    
   public static void main(String args[])
   {
       
	Test obj = new Test();
	
	System.out.println(obj.multiplyTwoNumbers(2, 4));
	
   }
   
} //output: 8

このコードは何をしているのですか?

この例で  Testは、別のパッケージに存在するクラスは  multiplyTwoNumbers()、保護されていると宣言されているメソッドを呼び出すことができます。

このメソッドは、TestクラスがクラスAdditionを拡張し、修飾子がサブクラス(任意のパッケージ)のメンバーprotectedへのアクセスを許可するため、これを行うことができます。protected

Javaのコンストラクターとは何ですか?

Javaのコンストラクターは、新しく作成されたオブジェクトを初期化するために使用するメソッドです。

Javaでのコンストラクターの構文:

public class Main { 

int a;  

public Main() { 

a = 3 * 3; 

} 

public static void main(String[] args) { 

Main myObj = new Main();

System.out.println(myObj.a); 

} 

} 

では、このコードで何が起こっているのでしょうか?

  1. Mainクラスを作成することから始めました。
  2. その後、変数であるクラス属性を作成しましたa
  3. 3番目に、Mainクラスのクラスコンストラクターを作成しました。
  4. その後、a宣言した変数の初期値を設定しました。変数aの値は9になります。プログラムは3x3を取ります。これは9に相当します。変数には、任意の値を自由に割り当てることができますa。(プログラミングでは、記号「*」は乗算を意味します)。

すべてのJavaプログラムは、main()メソッドで実行を開始します。したがって、を使用しましたpublic static void main(String[] args)。これは、プログラムが実行を開始するポイントです。つまり、このmain()メソッドはすべてのJavaプログラムのエントリポイントです。

main()次に、メソッド内のすべてのキーワードが何をするかを説明します。

パブリックキーワード。

publicキーワードはアクセス修飾子です。その役割は、メソッドにアクセスできる場所と、メソッドにアクセスできるユーザーを指定することです。したがって、main()メソッドを公開すると、グローバルに利用できるようになります。つまり、プログラムのすべての部分にアクセスできるようになります。

staticキーワード。

メソッドがstaticキーワードで宣言されている場合、それは静的メソッドと呼ばれます。したがって、Javamain()メソッドは常に静的であるため、コンパイラは、クラスのオブジェクトの作成なしまたは作成前にJavaメソッドを呼び出すことができます。

main()メソッドが非静的であることが許可されている場合、Java仮想マシンはmain()メソッドの呼び出し中にそのクラスをインスタンス化する必要があります。

main()staticキーワードは、Java仮想マシンによってメソッドを呼び出すためだけに宣言されたオブジェクトによって使用されたはずの不要なメモリの浪費を節約するためにも重要です。

Voidキーワード。

voidキーワードは、メソッドが何も返さないことを指定するために使用されるキーワードです。メソッドが何も返すことが期待されていない場合は常に、main()その戻り型は無効です。つまり、これは、main()メソッドが終了するとすぐに、Javaプログラムも終了することを意味します。

主要。

Mainは、Javaのmainメソッドの名前です。これは、Java仮想マシンがJavaプログラムの開始点として探す識別子です。

。_String[] args

これは、Javaコマンドライン引数を格納する文字列の配列です。

次のステップは、クラスMainのオブジェクトを作成することです。クラスコンストラクターを呼び出す関数呼び出しを作成しました。

最後のステップは、の値a9を出力することです。

Javaでのメソッドのしくみ

メソッドは、特定のタスクを実行するコードのブロックです。Javaではメソッドという用語を使用しますが、C ++などの他のプログラミング言語では、同じメソッドが一般に関数として知られています。

Javaには、次の2種類のメソッドがあります。

  • ユーザー定義メソッド:これらは、要件に基づいて作成できるメソッドです。
  • 標準ライブラリメソッド:これらは、使用可能なJavaの組み込みメソッドです。

Javaでメソッドを使用する方法の例を示します。

Javaメソッドの例1:

class Main {

  // create a method
  public int divideNumbers(int x, int y) {
    int division = x / y;
    // return value
    return division;
  }

  public static void main(String[] args) {
    
    int firstNumber = 4;
    int secondNumber = 2;

    // create an object of Main
    Main obj = new Main();
    // calling method
    int result = obj.divideNumbers(firstNumber, secondNumber);
    System.out.println("Dividing " + firstNumber + " by " + secondNumber + " is: " + result);
  }
}

出力:

Dividing 4 by 2 is: 2

上記の例では、という名前のメソッドを作成しましたdivideNumbers()。このメソッドは2つのパラメーターxとyを取り、2つの引数firstNumberとを渡してメソッドを呼び出しましたsecondNumber

Javaの基本をいくつか理解したところで、オブジェクト指向プログラミングの原則をもう少し詳しく見ていきましょう。

オブジェクト指向プログラミングの主要な原則。

オブジェクト指向プログラミングパラダイムには、4つの主要な原則があります。これらの原則は、オブジェクト指向プログラミングの柱としても知られています。

オブジェクト指向プログラミングの4つの主要な原則は次のとおりです。

  1. カプセル化(情報隠蔽についても簡単に触れます)
  2. 継承
  3. 抽象化
  4. ポリモーフィズム

Javaでのカプセル化と情報隠蔽

カプセル化とは、データを1つのユニットにまとめることです。簡単に言えば、これは多かれ少なかれ、このシールドの外側のコードがデータにアクセスするのを防ぐ保護シールドのようなものです。

カプセル化の簡単な例はランドセルです。ランドセルは、本、ペン、鉛筆、定規など、すべてのアイテムを1か所に安全に保管できます。

プログラミングにおける情報隠蔽またはデータ隠蔽とは、プログラム全体の不注意による変更からデータまたは情報を保護することです。これは強力なオブジェクト指向プログラミング機能であり、カプセル化と密接に関連しています。

カプセル化の背後にある考え方は、「機密」データをユーザーから確実に隠すことです。これを実現するには、次のことを行う必要があります。

  1. クラス変数/属性をとして宣言しますprivate
  2. 変数の値にアクセスして更新するためのパブリックメソッドgetとメソッドを提供します。setprivate

覚えているように、private変数は同じクラス内でのみアクセスでき、外部クラスはそれらにアクセスできません。getただし、パブリックメソッドとメソッドを提供すればアクセスできますset

getおよびsetメソッドがどのように機能するかを示す追加の例を示します。

public class Student {
  private String name; // private = restricted access

  // Getter
  public String getName() {
    return name;
  }

  // Setter
  public void setName(String newName) {
    this.name = newName;
  }
}

Javaでの継承

継承により、クラスは他のクラスの属性とメソッドを継承できます。これは、親クラスが属性と動作を子クラスに拡張することを意味します。継承は再利用性をサポートします。

継承という用語を説明する簡単な例は、人間は(一般に)話す、呼吸する、食べる、飲むなどの能力など、クラス「人間」から特定のプロパティを継承することです。

「継承の概念」は次の2つのカテゴリに分類されます。

  • サブクラス(子)-別のクラスから継承するクラス。
  • スーパークラス(親)-継承元のクラス。

クラスから継承するには、extendsキーワードを使用します。

以下の例では、JerryTheMouseクラスからメソッドとフィールドを継承してクラスを作成していますAnimal

JerryTheMouseはサブクラスでAnimalあり、はスーパークラスです。

class Animal {

  // field and method of the parent class
  String name;
  public void eat() {
    System.out.println("I can eat");
  }
}

// inherit from Animal
class JerryTheMouse extends Animal {

  // new method in subclass
  public void display() {
    System.out.println("My name is " + name);
  }
}

class Main {
  public static void main(String[] args) {

    // create an object of the subclass
    JerryTheMouse labrador = new JerryTheMouse();

    // access field of superclass
    mouse.name = "Jerry, the mouse";
    mouse.display();

    // call method of superclass
    // using object of subclass
    mouse.eat();

  }
}

出力:

My name is Jerry

I can eat

Javaでの抽象化

抽象化は、オブジェクト指向プログラミングの概念であり、重要な属性のみを表示し、コード内の不要な情報を非表示にすることができます。抽象化の主な目的は、ユーザーから不要な詳細を隠すことです。

抽象化を説明する簡単な例は、電子メールを送信するときに関係するプロセスについて考えることです。電子メールを送信すると、送信直後に何が起こるか、サーバーが使用するプロトコルなどの複雑な詳細が隠されます。

電子メールを送信するときは、受信者の電子メールアドレス、電子メールの件名を入力し、内容を入力して、[送信]をクリックするだけです。

抽象クラスまたはインターフェースを使用して、ものを抽象化できます。

キーワードはabstract非アクセス修飾子であり、クラスとメソッドに使用されます。

  • 抽象クラス:オブジェクトの作成に使用できない制限付きクラスです。アクセスするには、別のクラスから継承する必要があります。
  • 抽象メソッド:本体を持たないメソッドは、抽象メソッドと呼ばれます。同じabstractキーワードを使用して抽象メソッドを作成します。

抽象メソッドの本体は、サブクラス(から継承)によって提供されます。

例:

// Abstract class
abstract class Animal {
  // Abstract method (does not have a body)
  public abstract void animalSound();
  // Regular method
  public void sleep() {
    System.out.println("Zzzz");
  }
}

// Subclass (inherit from Animal)
class Cow extends Animal {
  public void animalSound() {
    // The body of animalSound() is provided here
    System.out.println("The cow says: Moo");
  }
}

class Main {
  public static void main(String[] args) {
    Cow myCow = new Cow(); // Create a Cow object
    myCow.animalSound();
    myCow.sleep();
  }
}

Javaのポリモーフィズム

ポリモーフィズムとは、オブジェクトがさまざまな形をとる能力を指します。ポリモーフィズムは通常、継承によって相互に関連する多くのクラスがある場合に発生します。

ポリモーフィズムは、人が同時に異なる特性を持つことができる方法に似ています。

たとえば、男性は、父親、祖父、夫、従業員など、すべて同時になることができます。したがって、同じ人がさまざまな状況でさまざまな特性や行動を持っています。

例:

オブジェクトCowとCatを作成しanimalSound()、それぞれでメソッドを呼び出します。

class Animal {
  public void animalSound() {
    System.out.println("An animal can make a sound.");
  }
}

class Cow extends Animal {
  public void animalSound() {
    System.out.println("A cow says: Moooo");
  }
}

class Cat extends Animal {
  public void animalSound() {
    System.out.println("A cat says: Meeooww");
  }
}

class Main {
  public static void main(String[] args) {
    Animal myAnimal = new Animal();
    Animal myCow = new Cow();
    Animal myCat = new Cat();
        
    myAnimal.animalSound();
    myCow.animalSound();
    myCat.animalSound();
  }
}

継承とポリモーフィズムは、コードの再利用に非常に役立ちます。新しいクラスを作成するときに、既存のクラスの属性とメソッドを再利用できます。

Javaのインターフェース

Aninterfaceは抽象的なメソッドのコレクションです。言い換えると、anは、関連するメソッドを空の本体でグループ化するために使用されるinterface完全に「抽象クラス」です。

インターフェイスは、クラスが実行できることを指定しますが、クラスが実行できる方法は指定しません。

例:

// create an interface
interface Language {
  void getName(String name);
}

// class implements interface
class ProgrammingLanguage implements Language {

  // implementation of abstract method
  public void getName(String name) {
    System.out.println("One of my favorite programming languages is: " + name);
  }
}

class Main {
  public static void main(String[] args) {
    ProgrammingLanguage language = new ProgrammingLanguage();
    language.getName("Java");
  }
}

出力:

One of my favorite programming languages is: Java

結論

この記事では、オブジェクト指向プログラミングの主な概念のいくつかを見てきました。これらの概念を上手に使い、優れたコードを書きたい場合は、これらの概念をよく理解することが不可欠です。

この記事がお役に立てば幸いです。

私の名前はPatrickCyubahiroです。ソフトウェアとウェブの開発者、UI / UXデザイナー、テクニカルライター、コミュニティビルダーです。

Twitterで私と連絡してください:@ Pat_Cyubahiro、または次のアドレスに書いてください:ampatrickcyubahiro [at] gmail.com

読んでくれてありがとう! 

ソース:https ://www.freecodecamp.org/news/object-Oriented-programming-concepts-java/

#java #oop