JavaA2Z

KAB-studio > プログラミング > JavaA2Z > オブジェクト指向とは

オブジェクト指向

日本語 物体中心
英語 object oriented
ふりがな おぶじぇくとしこう
フリガナ オブジェクトシコウ

解説

オブジェクト」中心の考え方。
プログラムオブジェクトによって構成されている」という考え方。もしくはそれを元にプログラムを作ることを指す。
 
Javaに当てはめて考えると「隠蔽化」や「ポリモーフィズム」等がオブジェクト指向を踏まえてわれていると言える。
フィールドprivateフィールドとすることで使用する側から直接アクセスすることはできなくなる。これを「隠蔽化」と言う。
また、メソッドオーバーライドすることで参照変数とは別のメソッドが呼ばれる場合がある。これを「ポリモーフィズム」と言う。
これらは、インスタンスを使用する側の自由にさせず、インスタンスの側でコントロールすることになる。つまり「オブジェクトプログラムの主導権を握る」ことが「オブジェクト指向」ということになる。
 
ただし「オブジェクト指向」は言語に依存しない「学問」である。
たとえば、オブジェクト指向ではクラスインスタンスの区別は存在しない。クラスを用いずにオブジェクトを作ることができるし、またそういったことが可能なプログラミング言語も存在する。
また、元々は純粋な研究によるものだったため、パフォーマンス等の問題からオブジェクト指向の考え方をそのままプログラムに適用する場合には無理がある場合がある。
Javaでオブジェクト指向をする上ではそういったことを踏まえた上で現実的な利用法が求められる。
 
オブジェクト指向は「手続き指向」の対となる考え方である。
「手続き」とは関数Javaで言うstaticメソッドのことを指す。
昔のプログラミング言語ではこの「手続き」のみが存在し、クラスや非staticメソッドは存在しなかった。そのため、変えて欲しくない変数隠蔽化することもできなければ、オーバーライドによって一部の処理のみを上書きするということができなかった。
あるのは変数やその塊だけであり、それをどう扱うかは「手続き」の自由であったため、「手続き」は扱う変数がどのような意味を持つのか正しく理解しそれを踏まえて注意して使用する必要があった。
その注意を怠ったために発生したバグが多々あったたため「変数を守る」ためにオブジェクト指向という考え方が生まれたわけである。
 
上記の説明は主に「オブジェクト指向プログラミング」についてのものである。
「オブジェクト指向」の実際の意味としては「オブジェクト指向プログラミング」だけでなく「オブジェクト指向開発」や「オブジェクト指向設計」といったものの総称として使われる。
これらの違いや、実際に使用する場合の言語等、単に「オブジェクト指向」と言っても人それぞれイメージしているものが異なる場合があるため注意が必要。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // Stringクラスを作ります。
        String string = new String( "あいうえお" );
        // たとえば、こうして作られたStringクラスのインスタンス内に
        // 格納されている文字列を修正することはできません。
        // これが「隠蔽化」です。
        // オブジェクト指向では、このようにオブジェクトが望まないことを
        // することはできません。

        // Objectクラスにアップキャストして格納します。
        Object object = string;
        // ただし、これは参照型変数の型がStringからObjectに変わっただけで、
        // 実際のインスタンスの型はStringのままです。
        System.out.println( object.toString() );
        // あいうえお
        // ObjectクラスのtoString()メソッドではなく、
        // StringクラスのtoString()メソッドが呼ばれています。
        // 見かけの型ではなく実際のインスタンスのメソッドが呼ばれています。
        // これが「ポリモーフィズム」です。
        // オブジェクト指向では、このようにオブジェクトが「呼ぶメソッド」を
        // 決定します。呼び出す側で呼ぶメソッドを指定することはできません。
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // Stringクラスを作ります。
        String string = new String( "あいうえお" );
        // たとえば、こうして作られたStringクラスのインスタンス内に
        // 格納されている文字列を修正することはできません。
        // これが「隠蔽化」です。
        // オブジェクト指向では、このようにオブジェクトが望まないことを
        // することはできません。

        // Objectクラスにアップキャストして格納します。
        Object object = string;
        // ただし、これは参照型変数の型がStringからObjectに変わっただけで、
        // 実際のインスタンスの型はStringのままです。
        System.out.println( object.toString() );
        // あいうえお
        // ObjectクラスのtoString()メソッドではなく、
        // StringクラスのtoString()メソッドが呼ばれています。
        // 見かけの型ではなく実際のインスタンスのメソッドが呼ばれています。
        // これが「ポリモーフィズム」です。
        // オブジェクト指向では、このようにオブジェクトが「呼ぶメソッド」を
        // 決定します。呼び出す側で呼ぶメソッドを指定することはできません。
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/04/13
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。