平易な英語におけるオブジェクト指向プログラミング



あなたは何があるか尋ねられるとき、車はそうです.可能性のある答えは、車は4輪の車輪を持ち、機械的な力が作用するときはいつでも距離を移動できる物体であるということです.これはニュートンの第三法則に従う.
車がおもちゃの車か本当の車であるかどうかに関係なく、あなたが知っている唯一のものは、車が裸の目から隠される若干の詳細を持っていなければならないということです、そして、それが特定の機能を実行するとき、それは若干のボタンを持っていなければなりません、そして、車は異なるモデルで現れます.しかし、ここでは、makeまたは名前は重要ではありません、我々が知っているすべては、車のふるまいと操作が類似しているということです.
したがって、車が同じ実装の詳細、操作機能とセダン、トラック、残りのような多分同様のクラスを持っている場合は、コードでは、我々はオブジェクトとしてのmakeに関係なく車を定義することができます私に同意します.
オブジェクト指向プログラミングはスパゲッティコードを書く持続可能な方法を提供するそれはあなたのプログラムを一連のパッチとしてaccreteすることができます.
ポール・グラハム
名前が示すように、オブジェクト指向プログラミングまたはOopsはプログラミングでオブジェクトを使用する言語を意味します.オブジェクト指向プログラミングは、プログラミングの継承、隠蔽、多元性などの実世界実体を実装することを目的としています.OOPの主な目的は、コードの他の部分がその機能以外のこのデータにアクセスすることができないようにデータとそれらを操作する関数を結合することです.
クラスとしてOOPのオブジェクトを定義することができます.クラスには、そのようなオブジェクトを定義するのを奨励するパターンがあります.e . g私たちは車の中で座ることができます.これはクラスで定義できるデータです.クラスのメソッド「start ()」を定義することができます.
オブジェクトはオブジェクト指向プログラミングの基本単位で、実生活実体を表します.典型的なJavaプログラムは多くのオブジェクトを作成します.オブジェクトは
  • *状態*:オブジェクトの属性で表されます.また、オブジェクトのプロパティを反映します.
  • *振る舞い*:オブジェクトのメソッドで表されます.また、他のオブジェクトを持つオブジェクトの応答を反映します.
  • * Identity *:それはオブジェクトにユニークな名前を与え、1つのオブジェクトが他のオブジェクトと対話するのを可能にします.
  • *メソッド:メソッドは、特定のタスクを実行し、呼び出し元に結果を返すステートメントのコレクションです.メソッドは何かを返すことなく特定のタスクを実行できます.メソッドを使用すると、コードを再入力せずにコードを再利用できます.Javaでは、あらゆるメソッドはC、C++とPythonのような言語とは異なるクラスの一部でなければなりません.
    メソッドは時間セーバで、コードを再入力せずにコードを再利用するのに役立ちます.
  • 車のエンジンの中にシャフトがあり、完全に隠されています.シャフトは私たちから抽象化されています、私たちは車で何をするかを知る必要はありません、しかし、それは仕事がそれを実装するクラスによって知られそうです.
    車のモデルが完了すると、我々は現在、車の異なるバージョンを構築することができます、トヨタVenzaとトヨタAvalon共有ほとんど同じエンジン、主要な違いは、名前、ボディビルドとインテリアデザインです.それで、我々は現在、彼らが同じ自動車モデルまたはクラスからそれらの特性を継承しそうであると言うことができます.
    これらはすべて、遺伝、抽象、多形、カプセル化であるOOPのコア原理に導かれます.
    車のクラスを定義し、それらの用語が何であるかを説明するためにそれを使用しましょう.
    _package Car_;
    
    _public class_ Car {
        _private_ String brand;
        _private_ String model;
        _private int_ mileage;
        _private int_ engineCapacity;
    
        _public_ Car(String brand, String model, _int_ mileage, _int_ engineCapacity) {
            _this_.brand = brand;
            _this_.model = model;
            _this_.mileage = mileage;
            _this_.engineCapacity = engineCapacity;
        }
    
        _public_ String getBrand() {
            _return_ brand;
        }
    
        _public void_ setBrand(String brand) {
            _this_.brand = brand;
        }
    
        _public_ String getModel() {
            _return_ model;
        }
    
        _public void_ setModel(String model) {
            _this_.model = model;
        }
    
        _public int_ getMileage() {
            _return_ mileage;
        }
    
        _public void_ setMileage(_int_ mileage) {
            _this_.mileage = mileage;
        }
    
        _public int_ getEngineCapacity() {
            _return_ engineCapacity;
        }
    
        _public void_ setEngineCapacity(_int_ engineCapacity) {
            _this_.engineCapacity = engineCapacity;
        }
    
        _@Override  
     public_ String toString() {
            _return_ "Car{" +
                    "brand='" + brand + '\'' +
                    ", model='" + model + '\'' +
                    ", mileage=" + mileage +
                    ", engineCapacity=" + engineCapacity +
                    '}';
        }
    
        _private void_ start() {
            System.out.println("Car is starting");
        }
    
        _private void_ stop() {
            System.out.println("Car is stopping");
        }
    
        _public void_ pushStartButton() {
            start();
        }
    
        _public void_ pushBreak() {
            stop();
        }
    }
    
    ここで起こっていること
    最初に、我々はカプセル化を持ちます.そして、それは一つの単位の下でデータのラッピングアップと定義されます.それはコードを結合するメカニズムとそれが操るデータです.カプセル化について考えるもう一つの方法は、このシールドの外のコードによってデータがアクセスされるのを防ぐ保護シールドです.カプセル化のように、クラスのデータは他のクラスから隠されます.カプセル化は、クラスのすべての変数をprivateとして宣言し、クラスのパブリックメソッドを記述して変数の値を設定して取得することで実現できます.
    第二に、抽象化を行っており、データ抽象化は、無関係な詳細を無視するオブジェクトの必要な特徴だけを識別するプロセスとして定義されてもよい.オブジェクトのプロパティと振る舞いは、類似の型の他のオブジェクトからそれを区別し、また、オブジェクトの分類/グループ化に役立ちます.
    車を運転する人を考えなさい.男は、プッシュスタートボタンを押すと、車を起動し、加速度計は、車の速度を増加したり、ブレーキを適用すると、車を停止するが、彼はどのようにプッシュスタートを押すか、またはアクセルを押すと、実際に増加しているアクセルを押して知っていない、彼は車の内部機構やアクセラレータの実装を知らない.車のブレーキなど.
    さあ、トヨタクラスを持ちましょう
    _package Car_;
    
    _public class_ ToyotaCamry _extends_ Car {
        _public_ ToyotaCamry(String brand, String model, _int_ mileage, _int_ engineCapacity) {
            _super_(brand, model, mileage, engineCapacity);
        }
    
        _@Override  
     public void_ pushStartButton() {
            System.out.println("Welcome To Toyota Camry is starting.");
            _super_.pushStartButton();
        }
    
        _@Override  
     public void_ pushBreak() {
            System.out.println("Thank you for using Toyota Camry.");
            _super_.pushBreak();
        }
    
        _@Override  
     public void_ setModel(String model) {
            _super_.setModel(model);
        }
    
        _@Override  
     public void_ setBrand(String brand) {
            _super_.setBrand(brand);
        }
    
    }
    
    第三に、我々は、1つのクラスが別のクラスの機能(フィールドとメソッド)を継承することができるJavaといくつかのプログラミング言語のメカニズムである継承を持っています.
    頻繁に使用される重要な用語のいくつかを議論しましょう

  • スーパークラス:特徴が継承されるクラスは、スーパークラス(または基本クラスまたは親クラス)として知られています.

  • サブクラス:他のクラスを継承するクラスは、サブクラス(または派生クラス、拡張クラス、または子クラス)として知られています.サブクラスは、スーパークラスのフィールドとメソッドに加えて独自のフィールドとメソッドを追加できます.

  • 再利用性:継承は「再利用可能性」の概念を支持します.すなわち、我々は新しいクラスを作成したいとき、我々が望むコードのいくつかを含むクラスが既に存在する場合、既存のクラスから新しいクラスを派生させることができます.これを行うことで、既存のクラスのフィールドとメソッドを再利用します.
  • 最後に、多形は、オブジェクトが多くの形をとる能力です.
    OOPの多型はスーパークラスがサブクラスオブジェクトを参照したときに発生します.
    すべてのJavaオブジェクトは、1つ以上のAS - A関係を共有しているため、多様性があると見なされます(少なくともすべてのオブジェクトは、自分自身の型とクラスオブジェクトに対してISS - Aテストを通過します).
    参照変数でオブジェクトにアクセスできます.参照変数は1つのタイプだけでありえます.一度宣言された場合、参照変数の型を変更できません.
    参照変数は、クラスまたはインターフェイス型として宣言できます.
    単一のオブジェクトは、それらが同じ型またはオブジェクトのスーパータイプである限り、多くの異なる型の参照変数によって参照することができます.