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