このページは、オブジェクト指向プログラミングについて解説しています。
このページの目次です。
1. オブジェクト指向プログラミングとは
2. オブジェクト指向プログラミングの利点
3. オブジェクト指向プログラミングの特徴
4. プログラミング言語での実装方法
オブジェクト指向プログラミングは、 オブジェクトという概念に注目し、これをモジュール化に役立てる手法です。 場合によっては、構造化手法のプログラムよりもコード量は多くなりますが、 独立性の高いプログラムの実現がしやすく、 構造化手法の手続き型のプログラムよりも拡張性の高い柔軟なプログラムが構築できます。
歴史的には、構造化手法の後に登場した手法で、 構造化手法の手続き型のプログラムの問題の克服という背景があります。
ベテランのCプログラマなど、デザインパターンを用いたり、オブジェクト指向を知らなくてもこのような書き方になると言われます。 逆に初心者のJavaプログラマなど、オブジェクト指向を知っているのにマンモスメソッドなど拡張性も保守性も低いコードが生まれてしまいます。 オブジェクト指向をマスターするには、ベテランのプログラマの習熟したコーディングスタイルを理解する必要があります。
オブジェクト指向プログラミングでは、プログラムの部品化を行いますので、以下の利点があります。
部品化することによって独立性が高くなります。 このため、変更や機能追加を加えても他への影響が少なくなります。
部品化することによって再利用が容易になります。
部品化によって障害の対応が最小限のコストで実現できます。
以下に、オブジェクト指向プログラミングの特徴を解説します。
データ(属性)と手続き(機能)をひとまとめにして、ものを表現する考え方です。 オブジェクトのことを、インスタンスと呼ぶこともあります。 また、データをプロパティと呼び、手続きはメソッドと呼ぶ方が一般的です。
データとメソッドをまとめることは、データを保護して、モジュールの独立性を高めるのに役立ちます。 これをオブジェクトの情報隠蔽(カプセル化)といいます。
オブジェクトは、他のオブジェクトにメッセージを送るというイメージでオブジェクト同士のやり取りを行います。 メッセージを送るということは、他のオブジェクトに処理を依頼することを意味します。 これを委譲といいます。
オブジェクト指向の特徴の1つにポリモーフィズムがあります。
ポリモーフィズムとは、同じ名称の関数やメソッドで、異なる引数や戻り値の数やデータ型などのものを複数実装することで、呼び出しの時に使い分けるようにする仕組みです。
オブジェクトから1つのメッセージを送ると、相手のオブジェクトがそれぞれ自分の定義に応じて異なる処理を行います。 同じメソッド名でオブジェクトによって異なる振舞いが行え、これによって(構造化手法よりも)モジュール変更、拡張が行いやすくなります。
ポリモーフィズムの種類には、上記の説明にあげた異なる引数や戻り値の数を実装するアドホック多相やパラメトリック多相以外にも、サブタイピング、ロー多相、ポリタイピズムなど種類があります。
以下は、C#のサブタイピングの例です。
public class Shape { : public virtual void Draw() { : } } public class Circle : Shape { public override void Draw() { : } } public class Rectangle : Shape { public override void Draw() { : } } public class Triangle : Shape { public override void Draw() { : } }
同じ種類のオブジェクトを抽象化した考え方をクラスといいます。 クラスをテンプレートにして、同じ種類のオブジェクトを効率よく作成することができるので、 (構造化手法よりも)コーディングの生産性が向上します。
電車、自動車⇒乗り物というように複数のクラスに共通する抽象的な性質を別のクラスにすることを汎化といいます。 また、逆に自動車⇒トラック、バスというように、抽象的なクラスからもっと具体的なクラスを考えることを特化といいます。
上位となる抽象的なクラスをスーパークラスといい、下位の具体的なクラスをサブクラスといいます。 サブクラスは、スーパクラスの機能を原則として受け継ぎスーパクラスの機能も持ち合わせます。 スパークラスの機能を受け継ぐことを継承といいます。
トラックは自動車である(Track is a car)と言え、この汎化と特化の関係をis-a関係といいます。
集約とは、全体と部分の関係をいいます。 たとえば、自動車はハンドルやタイヤをもっているように、 あるクラスが別のクラスをデータ(属性)としてもっているという関係をいいます。
ハンドルは自動車の一部である(The handle is a part of a motor vehicle)、 自動車はハンドルをもっている(Car has a handle)と言え、この集約の関係をpart-of関係、またはhas-a関係といいます。 なお、包含関係ともいいます。
プログラミング言語での実装方法についてまとめています。
オブジェクト指向の説明からやり方や関連トピックなど。JavaScriptのオブジェクト指向プログラミングについてまとめています。
もっと知識を広げるための参考です。
システム開発をテーマに、要件定義からUATまでITの基礎スキルをまとめています。
ITスキルを体系的に把握するコンテンツとしてzealseedsのITスキル体系をまとめています。
更新履歴になります。
スポンサーリンク
サイト内のページ
言語
C・C++
/HTML
/Java
/JavaScript
/PHP
/シェルスクリプト
開発環境
Ant
/Burp
/Eclipse
/Fiddler
/gcc
/gdb
/Git
/g++
/JDK
/JMeter
/JUnit
/Teraterm
/ZAP
技術・仕様
Ajax
/CORBA
/Jakarta EE(旧称J2EE、Java EE)
/JNI
ライブラリ/Framework/CMS
bootstrap
/jQuery
/FuelPHP
/Lucene
/MyBatis
/Seasar2
/Spring
/Struts
/WordPress
Web API
Google Maps
ITインフラOSとミドルウェア
Linux
/Windows
/シェル
ActiveMQ
/Tomcat
/MariaDB
/MySQL
/Nagios
/Redis
/Solr
ITインフラセキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
3.144.255.247
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved. Loarding…