OOPとは?

8923 ワード

誕生背景
ハードウェアのパフォーマンスが爆発的に増加するにつれて、ソフトウェアに必要な技術はますます複雑になり、膨大になります.伝統的なプロセス向けの方法は多くの困難をもたらした.
これらの問題を解決するために,関数単位で構造化された構造化プログラミング法が出現した.しかし、この方法は、データを処理する部分が構造化され、データ自体が構造化されているため、グローバルネーミング空間が飽和(ネーミング)する可能性がある.さらに,データ状態によって関数が変化することが多くなるにつれて,プログラムが大きくなるほど変数の追跡が困難になる.
{ Object-Oriented Programming }
これらの問題を解決するために,オブジェクト向けプログラミング(Object-oriented Programming)が出現した.
オブジェクト向けのアプローチは、大きな問題を小さな問題に分割するのではなく、小さな問題を解決できるオブジェクトを作成し、大きな問題を解決するBoottom upメソッドを組み合わせます.
各オブジェクトは独立して使用でき、アクセス可能なインタフェースを制限することで誤用を最小限に抑えることができます.
特長
パッヶージ
  • オブジェクトの場合、オブジェクトは特定の目的のために必要な変数またはメソッドを組み合わせます.
  • は、クラス内で特定の変数およびメソッドを構成する必要があります.
  • public class dog {
    	name = 'cookie',
    	size = 'middle',
    	const shout = function() {
    		console.log('wal! wal!');
    		}
    }
    // public -> anyone 
    // private -> safe
  • カプセル化を行う重要な目的は、情報を隠すことである.
  • と宣言された場合、誰でもアクセスできますが、プライベートに設定されている場合は、データを保護できます.
  • カプセル化は、「カプセル化==情報隠匿」の概念ではなく、情報隠匿の利点を生み出す.
  • ユーザにとっては,共通属性として定義されているだけでも構わない.
  • 抽象
  • 目的に関係のない部分を除去し、必要な部分の概念のみを表現する.
  • 共通要素または特徴を収集するプロセス.
  • // 강아지나 고양이의 공통적인 부분만 추상화한 클래스.
    public class animal {
    	head = 1, // 머리는 하나
    	leg = 4, // 다리는 4개
    	ear = 2, // 귀는 2개
    	nose = 1, // ...이런식
    	tail = 1,
    	function shout(shout) {
    		console.log(shout);
    	}
    // ...etc
    }
    
  • の上のコードのように、動物の共通点セットを合成するクラスを抽象クラスと呼ぶ.
  • たけいせい
  • 継承により拡張または変更機能が可能になります.
  • は形態は同じであるが,戻り値は異なる.
  • 
    class dog extends animal {
    	shout = animal.shout("wal wal");
    // 출력.. wal wal 
    }
    
    class cat extends animal {
    	shout = animal.shout("meow meow");
    // 출력.. meow meow
    }
  • shout()という関数を使用して、子犬は「walwal」を出力し、猫は「meowmeow」を出力します.
  • この形式の再利用により、コードのメンテナンスが容易になります.
  • このような多形性を使用するには、overridingとoverloadingが必要です.
    オーバーライド(Override)
  • 親類から子に引き継がれ、子類では自分の好みに応じて置き換えや再利用される.
  • は、利用可能な方法を拡張した.
  • かふか
  • と同名の方法を用いたが,各方法には異なる用途があり,異なる結果を実現できた.
  • class overLoading {
      function over() {
        console.log("Hello World");
      }
      function over(name) {
        console.log("my name is" + name);
      }
      function over(name, age) {
        console.log(`my name is ${name} and my age ${age}`);
      }
    }
  • のような関数であっても、複数の機能を実行、処理、および生成することができる.
  • これにより,多形性は同じ名前を用いてメソッド名を浪費する必要がなく,APIを複雑に追加する必要もない.
    継承性
  • オブジェクト向けプログラミングの主な機能は、クロック親子関係の作成です.
  • コードの重複を解消するために必要な概念.
  • の膨大なクラスを作成したら、拡張するクラスにクラス名を貼り付けるだけです.→メンテナンスが容易で、コストを削減する.
  • 間違った表現があったらメッセージを残してください
    Reference
  • https://limkydev.tistory.com/30
  • https://gracefulprograming.tistory.com/130
  • オブジェクト向けプログラミングYes-開発