トップ その他 ITスキル体系 システム開発 プログラミング オブジェクト指向

オブジェクト指向プログラミング

このページは、オブジェクト指向プログラミングについて解説しています。

▲記事トップへ

目次

このページの目次です。

1. オブジェクト指向プログラミングとは
2. オブジェクト指向プログラミングの利点
3. オブジェクト指向プログラミングの特徴
4. プログラミング言語での実装方法

参考書籍
知識の幅を広げるための参考
更新履歴

1. オブジェクト指向プログラミングとは

オブジェクト指向プログラミングは、 オブジェクトという概念に注目し、これをモジュール化に役立てる手法です。 場合によっては、構造化手法のプログラムよりもコード量は多くなりますが、 独立性の高いプログラムの実現がしやすく、 構造化手法の手続き型のプログラムよりも拡張性の高い柔軟なプログラムが構築できます。

歴史的には、構造化手法の後に登場した手法で、 構造化手法の手続き型のプログラムの問題の克服という背景があります。

ベテランのCプログラマなど、デザインパターンを用いたり、オブジェクト指向を知らなくてもこのような書き方になると言われます。 逆に初心者のJavaプログラマなど、オブジェクト指向を知っているのにマンモスメソッドなど拡張性も保守性も低いコードが生まれてしまいます。 オブジェクト指向をマスターするには、ベテランのプログラマの習熟したコーディングスタイルを理解する必要があります。

2. オブジェクト指向プログラミングの利点

オブジェクト指向プログラミングでは、プログラムの部品化を行いますので、以下の利点があります。

利点1:拡張性

部品化することによって独立性が高くなります。 このため、変更や機能追加を加えても他への影響が少なくなります。

利点2:再利用性

部品化することによって再利用が容易になります。

利点3:保守性

部品化によって障害の対応が最小限のコストで実現できます。

3. オブジェクト指向プログラミングの特徴

以下に、オブジェクト指向プログラミングの特徴を解説します。

オブジェクト

データ(属性)と手続き(機能)をひとまとめにして、ものを表現する考え方です。 オブジェクトのことを、インスタンスと呼ぶこともあります。 また、データをプロパティと呼び、手続きはメソッドと呼ぶ方が一般的です。

データとメソッドをまとめることは、データを保護して、モジュールの独立性を高めるのに役立ちます。 これをオブジェクトの情報隠蔽(カプセル化)と言います。

メッセージと委譲

オブジェクトは、他のオブジェクトにメッセージを送るというイメージでオブジェクト同士のやり取りを行います。 メッセージを送るということは、他のオブジェクトに処理を依頼することを意味します。 これを委譲といいます。

ポリモーフィズム

オブジェクト指向の特徴の1つにポリモーフィズムがあります。

ポリモーフィズムとは

ポリモーフィズムとは、同じ名称の関数やメソッドで、異なる引数や戻り値の数やデータ型などのものを複数実装することで、呼び出しの時に使い分けるようにする仕組みです。

オブジェクトから1つのメッセージを送ると、相手のオブジェクトがそれぞれ自分の定義に応じて異なる処理を行います。 同じメソッド名でオブジェクトによって異なる振舞いが行え、これによって(構造化手法よりも)モジュール変更、拡張が行いやすくなります。

ポリモーフィズムの種類

ポリモーフィズムの種類には、上記の説明にあげた異なる引数や戻り値の数を実装するアドホック多相やパラメトリック多相以外にも、サブタイピング、ロー多相、ポリタイピズムなど種類があります。

C#のサブタイピングの例

以下は、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() {
        :
    }
}

クラスとオブジェクト

同じ種類のオブジェクトを抽象化した考え方をクラスと言います。 クラスをテンプレートにして、同じ種類のオブジェクトを効率よく作成することができるので、 (構造化手法よりも)コーディングの生産性が向上します。

汎化、特化(is-a)

電車、自動車⇒乗り物というように複数のクラスに共通する抽象的な性質を別のクラスにすることを汎化と言います。 また、逆に自動車⇒トラック、バスというように、抽象的なクラスからもっと具体的なクラスを考えることを特化と言います。

上位となる抽象的なクラスをスーパークラスといい、下位の具体的なクラスをサブクラスと言います。 サブクラスは、スーパクラスの機能を原則として受け継ぎスーパクラスの機能も持ち合わせます。 スパークラスの機能を受け継ぐことを継承と言います。

トラックは自動車である(Track is a car)と言え、この汎化と特化の関係をis-a関係と言います。

集約(part-ofまたはhas-a)

集約とは、全体と部分の関係を言います。 たとえば、自動車はハンドルやタイヤをもっているように、 あるクラスが別のクラスをデータ(属性)としてもっているという関係を言います。

ハンドルは自動車の一部である(The handle is a part of a motor vehicle)、 自動車はハンドルをもっている(Car has a handle)と言え、この集約の関係をpart-of関係、またはhas-a関係と言います。 なお、包含関係とも言います。

4. プログラミング言語での実装方法

プログラミング言語での実装方法についてまとめています。

JavaScriptのオブジェクト指向プログラミング

オブジェクト指向の説明からやり方や関連トピックなど。JavaScriptのオブジェクト指向プログラミングについてまとめています。

詳細

参考書籍

知識の幅を広げるための参考

もっと知識を広げるための参考です。

システム開発

システム開発をテーマに、要件定義からUATまでITの基礎スキルをまとめています。

詳細

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インフラサーバー
公開Webサーバー

ITインフラネットワーク
プログラミング /構築

ITインフラセキュリティ
公開サーバーのセキュリティ

PC製品
ZOTAC

SI
ホームページの作り方

その他
IT用語 /ITスキル体系

スポンサーリンク

関連サイト内検索ツール

zealseedsおよび関連サイト内のページが検索できます。

IPアドレス確認ツール

あなたのグローバルIPアドレスは以下です。

44.201.99.222

HTMLの表示色確認ツール

パスワード生成ツール

文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。

ここに生成されます。

スポンサーリンク