見出し画像

よく聞くオブジェクト指向ってなんですか?

はじめに

プログラミング学習をしていると、オブジェクト指向という単語に出くわした人も少なくないと思われます。

私も最初、これが何のか、他と比べて何がいいのかといったことをよく理解せずに使っていました。

しかし、最近やっと理解が出来てきたので、今回はこれについてまとめていきます。


1.オブジェクト指向プログラミング(OOP)の概要

オブジェクト指向プログラミング(Object-Oriented Programming)は、データとそれに関連する操作を一つの単位(オブジェクト)としてまとめます。
JavaやPython、Rubyなどが具体例です。

オブジェクトはクラスから生成され、クラスは属性(データ)とメソッド(操作)を定義します。
この構造により、以下のような利点が得られます。

1.1再利用性
クラスは他のプログラムでも再利用可能です。
一度定義したクラスを使いまわすことで、同じコードを何度も書く手間が省けます。

1.2カプセル化
データとメソッドが一つのオブジェクトにまとめられるため、データの保護や管理が容易になります。
外部からの直接なアクセスを制限し、メソッドを通じてのみデータを操作できるようにします。

1.3継承
既存のクラスを基に新しいクラスを作成できます。
これにより既存の機能を拡張しつつ、コードの重複を避けられます。

1.4ポリモーフィズム
異なるクラスのオブジェクトが同じインターフェースを共有し、異なる動作をすることが可能です。
これにより、柔軟で拡張性の高いコードを実現できます。


2.手続き型プログラミング(POP)との比較

手続き型プログラミング(Procedural Oriented Programming)は、プログラムを手続き(関数やサブルーチン)の集合として構築します。
C言語が代表的な例です。

2.1構造
手続き型は関数を中心にプログラムを構成しますが、オブジェクト指向はデータとそれに関連するメソッドを中心に構築します。

2.2データ管理
手続き型では、データはグローバルに管理されることが多く、複数の関数からアクセスできます。
これに対し、オブジェクト指向ではデータをオブジェクト内部にカプセル化し、データの整合性を保ちやすくします。

2.3再利用性
オブジェクト指向はクラスを再利用しやすく、継承やポリモーフィズムによって柔軟なコードの再利用が可能です。
一方手続き型の再利用性は、関数の再利用に依存しますが、データとロジックが密接に結びついていないので、再利用が難しいことがあります。


3.関数型プログラミング(FP)との比較

関数型プログラミング(Functional Programming)は、データの状態変更を避け、関数の合成や高階関数を重視するパラダイムです。
HaskellやScalaが代表例です。

3.1状態管理
関数型は不変のデータ構造を重視し、状態変更を最小限に抑えます。
これに対し、オブジェクト指向は内部状態を変更することが前提となっています。

3.2関数の扱い
関数型では、関数は第一級オブジェクトであり、他の関数の引数や戻り値として使用できます。
オブジェクト指向でもメソッドを利用できますが、関数そのものを操作することは関数型ほど一般的ではありません。

3.3並行性
関数型は状態を変更しないため、並列プログラミングに適しています。
オブジェクト指向でも並行性を扱えますが、状態の変更があるため、スレッドセーフティや同期の問題は発生しやすくなります。

4.OOPの実際の適用例

オブジェクト指向は、複雑なソフトウェアシステムの設計に非常に適しています。

例えば、GUIアプリケーションでは、ボタンやテキストフィールドなどのUIコンポーネントをクラスとして定義し、それぞれの動作をメソッドとして実装します。

こうすることにより、UIの要素を再利用しやすく、メンテナンスもしやすくなります。


まとめ

上記のように、オブジェクト指向プログラミングは、データと操作を一つの単位として扱うことで、再利用性、カプセル化、継承といった多くの利点を開発者に提供します。

他の手法と比べると、それぞれに異なる利点がありますが、オブジェクト指向は特に大規模で複雑なシステム設計に向いています。

それぞれの違いを完全に理解して使いこなせてるわけではないので、継続して学習/アウトプットを続けていきたいです。

この記事が気に入ったらサポートをしてみませんか?