logo

OOP |オブジェクト指向設計

オブジェクト指向設計 コンピューターが発明された瞬間から始まりました。プログラミングが存在し、プログラミングのアプローチが登場しました。プログラミングとは、基本的にコンピュータに特定の命令を与えることです。
コンピューティング時代の初めには、プログラミングは通常、機械語プログラミングに限定されていました。マシン言語とは、特定のマシンまたはプロセッサに固有の、0 と 1 の形式の命令セットを意味します。これらはビットのシーケンス (0100110…) です。しかし、機械語でプログラムを書いたり、ソフトウェアを開発したりするのは非常に難しいです。
ビットのシーケンスを使用して今日のシナリオで使用されるソフトウェアを開発することは実際には不可能です。これが、プログラマーが次世代のプログラミング言語に移り、容易に理解できる英語に十分近いアセンブリ言語を開発する主な理由でした。これらのアセンブリ言語はマイクロプロセッサで使用されていました。マイクロプロセッサの発明により、アセンブリ言語が隆盛し、業界を支配しましたが、それだけでは十分ではありませんでした。ここでも、プログラマは何か新しいもの、つまり構造化された手続き型プログラミングを考案しました。



構造化プログラミング –
構造化プログラミング アプローチの基本原理は、プログラムを関数とモジュールに分割することです。モジュールと関数を使用すると、プログラムがより理解しやすくなり、読みやすくなります。これは、よりクリーンなコードを作成し、関数とモジュールの制御を維持するのに役立ちます。このアプローチでは、データではなく機能が重要視されます。大規模なソフトウェア アプリケーションの開発に重点を置いています。たとえば、最新のオペレーティング システムの開発には C が使用されていました。プログラミング言語: PASCAL (Niklaus Wirth によって導入) および C (Dennis Ritchie によって導入) は、このアプローチに従っています。
手続き型プログラミングのアプローチ –
このアプローチはトップダウン アプローチとも呼ばれます。このアプローチでは、プログラムは特定のタスクを実行する関数に分割されます。このアプローチは主に中規模のアプリケーションに使用されます。データはグローバルであり、すべての関数がグローバル データにアクセスできます。手続き型プログラミングのアプローチの基本的な欠点は、データがグローバルであり、どの関数からもアクセスできるため、データが保護されないことです。プログラム制御フローは、関数呼び出しと goto ステートメントによって実現されます。プログラミング言語: FORTRAN (IBM によって開発) および COBOL (グレース マレー ホッパー博士によって開発) は、このアプローチに従っています。
これらのプログラミング構造は 1970 年代後半から 1980 年代に開発されました。これらの言語は、よく構造化されたプログラムやソフトウェアなどの基準を満たしていましたが、まだいくつかの問題がありました。当時の要件ほど構造化されていませんでした。それらは過度に一般化されているようで、リアルタイム アプリケーションとは相関していません。
このような問題を解決するために、オブジェクト指向アプローチである OOP が解決策として開発されました。

オブジェクト指向プログラミング (OOP) アプローチ –
OOP の概念は基本的に、現実世界のアプリケーションにそれほど近くない上記のプログラミング方法論の欠点を克服するために設計されました。需要は増加しましたが、依然として従来の方法が使用されていました。この新しいアプローチは、プログラミング方法論の分野に革命をもたらしました。
オブジェクト指向プログラミング (OOP) は、特定のクラスとリアルタイム オブジェクトを利用してプログラムを作成できるようにするものに他なりません。これらのクラスとオブジェクトの状態と動作は現実世界のオブジェクトとほぼ同じであるため、このアプローチは現実世界とそのアプリケーションに非常に近いと言えます。
以下に示す OOP の一般的な概念をさらに詳しく見てみましょう。
クラスとオブジェクトとは何ですか?
これは OOP の基本概念です。 C で使用される構造の拡張概念。抽象的なユーザー定義のデータ型です。これは、いくつかの変数と関数で構成されます。クラスの主な目的は、データと情報を保存することです。クラスのメンバーは、クラスの動作を定義します。クラスはオブジェクトの設計図ですが、クラスの実装がオブジェクトであるとも言えます。クラスは世界から見えませんが、オブジェクトは見えます。



CPP






Class car> {> >int> car_id;> >char> colour[4];> >float> engine_no;> >double> distance;> > >void> distance_travelled();> >float> petrol_used();> >char> music_player();> >void> display();> }>

>

>

COBOLプログラミング

ここで、クラス car には、car_id、color、engine_no、および distance というプロパティがあります。これは、同じ仕様を持つ現実世界の車に似ており、パブリック (クラス外の全員に表示)、保護、プライベート (誰にも表示) として宣言できます。また、 distance_travelled()、petrol_used()、music_player()、display() などのメソッドもあります。以下のコードでは、car はクラスであり、c1 は car のオブジェクトです。

CPP




#include> using> namespace> std;> > class> car {> public>:> >int> car_id;> >double> distance;> > >void> distance_travelled();> > >void> display(>int> a,>int> b)> >{> >cout <<>'car id is= '> << a <<>' distance travelled = '> << b + 5;> >}> };> > int> main()> {> >car c1;>// Declare c1 of type car> >c1.car_id = 321;> >c1.distance = 12;> >c1.display(321, 12);> > >return> 0;> }>

>

>

データの抽象化 –
抽象化とは、重要で特別な機能を、その機能に関する背景の詳細​​や説明を含めずに表現する行為を指します。データの抽象化によりデータベース設計が簡素化されます。

    身体レベル:
    レコードがどのように保存されるかについて説明しますが、多くの場合、ユーザーには隠されています。これは、ストレージのブロックというフレーズで説明できます。
    論理レベル:
    データベースに保存されているデータとデータ間の関係について説明します。プログラマは、データ間の関係を維持するために必要な機能を認識しているため、通常、このレベルで作業します。
    表示レベル:
    アプリケーション プログラムは、セキュリティ上の理由から、データ型と情報の詳細を隠します。このレベルは通常、GUI を使用して実装され、ユーザー向けの詳細が表示されます。

カプセル化 –
カプセル化は、オブジェクト指向プログラミング (OOP) の基本概念の 1 つです。データをラップするという考え方と、Java のクラスなどの 1 つのユニット内でデータを処理するメソッドについて説明します。この概念は、オブジェクトの内部状態表現を外部から隠すためによく使用されます。
継承 -
継承とは、あるクラスが、親クラスと呼ばれる別のクラスの機能またはプロパティを継承する機能です。クラスを作成するとき、他のクラスからプロパティを継承します。したがって、クラスを作成するときに、すべてのプロパティと関数を何度も記述する必要はありません。これらは、それを所有する別のクラスから継承できるためです。継承により、ユーザーは可能な限りコードを再利用し、コードの冗長性を減らすことができます。

ジャワ




import> java.io.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >System.out.println(>'GfG!'>);> > >Dog dog =>new> Dog();> >dog.name =>'Bull dog'>;> >dog.color =>'Brown'>;> >dog.bark();> >dog.run();> > >Cat cat =>new> Cat();> >cat.name =>'Rag doll'>;> >cat.pattern =>'White and slight brownish'>;> >cat.meow();> >cat.run();> > >Animal animal =>new> Animal();> > >animal.name =>'My favourite pets'>;> > >animal.run();> >}> }> > class> Animal {> >String name;> >public> void> run()> >{> > >System.out.println(>'Animal is running!'>);> >}> }> > class> Dog>extends> Animal {> > /// the class dog is the child and animal is the parent> > >String color;> >public> void> bark()> >{> >System.out.println(name +>' Wooh ! Wooh !'> >+>'I am of colour '> + color);> >}> }> > class> Cat>extends> Animal {> > >String pattern;> > >public> void> meow()> >{> >System.out.println(name +>' Meow ! Meow !'> >+>'I am of colour '> + pattern);> >}> }>

>

>

C++


文字列を整数に変換



#include> #include> using> namespace> std;> > class> Animal {> public>:> >string name;> >void> run(){> >cout<<>'Animal is running!'>< } }; class Dog : public Animal { /// the class dog is the child and animal is the parent public: string color; void bark(){ cout<' Wooh ! Wooh !' <<'I am of colour '< } }; class Cat : public Animal { public: string pattern; void meow(){ cout<' Meow ! Meow !'<<'I am of colour '< } }; int main(){ cout<<'GFG'< Dog dog; dog.name = 'Bull dog'; dog.color = 'Brown'; dog.bark(); dog.run(); Cat cat; cat.name = 'Rag doll'; cat.pattern = 'White and slight brownish'; cat.meow(); cat.run(); Animal animal; animal.name = 'My favourite pets'; animal.run(); return 0; //code contributed by Sanket Gode. }>

>

>

出力

GfG! Bull dog Wooh ! Wooh !I am of colour Brown Animal is running! Rag doll Meow ! Meow !I am of colour White and slight brownish Animal is running! Animal is running!>

ポリモーフィズム –
ポリモーフィズムとは、データを複数の形式で処理できる機能です。同じタスクをさまざまな方法で実行できるようになります。これは、メソッドのオーバーロードとメソッドのオーバーライドで構成されます。つまり、メソッドを 1 回作成し、同じメソッド名を使用して多数のタスクを実行します。

CPP




#include> using> namespace> std;> > void> output(>float>);> void> output(>int>);> void> output(>int>,>float>);> > int> main()> {> >cout <<>' GfG! '>;> >int> a = 23;> >float> b = 2.3;> > >output(a);> >output(b);> >output(a, b);> > >return> 0;> }> > void> output(>int> var)> {>// same function name but different task> >cout <<>'Integer number: '> << var << endl;> }> > void> output(>float> var)> {>// same function name but different task> >cout <<>'Float number: '> << var << endl;> }> > void> output(>int> var1,>float> var2)> {>// same function name but different task> >cout <<>'Integer number: '> << var1;> >cout <<>' and float number:'> << var2;> }>

>

>

OOP について知っておくべき重要な点:

  1. OOP はデータを重要な要素として扱います。
  2. 手順ではなくデータに重点​​が置かれます。
  3. 問題をより単純なモジュールに分解します。
  4. データがシステム全体で自由に流れること、つまり局所的な制御フローが許可されません。
  5. データは外部機能から保護されます。

OOP の利点 –

  • 現実世界を非常によくモデル化しています。
  • OOP を使用すると、プログラムの理解と保守が容易になります。
  • OOP はコードの再利用性を提供します。すでに作成されたクラスは、再度作成することなく再利用できます。
  • OOP を使用すると、クラスの並行開発が可能なプログラムの迅速な開発が容易になります。
  • OOP を使用すると、プログラムのテスト、管理、デバッグが容易になります。

OOP の欠点 –

  • OOP では、クラスが過度に一般化される傾向がある場合があります。
  • クラス間の関係は時々表面的になります。
  • OOP の設計は難しく、適切な知識が必要です。また、OOP プログラミングの適切な計画と設計を行う必要があります。
  • OOP を使用してプログラミングするには、プログラマーには、設計、プログラミング、オブジェクトやクラスなどの観点からの考え方など、適切なスキルが必要です。