オブジェクト指向について書かれたテキストの多くはわかりにくいです。
でもこのテキストは違います!
とりあえず「オブジェクト指向」は忘れる!
まず、このテキストでは当分の間「オブジェクト指向」という言葉は忘れます!
「オブジェクト指向」という「考え方」の部分は後回しにします。実際、最後の章までは「オブジェクト指向」という単語はほとんど使いません! 「オブジェクト」という単語すら使いません!
とりあえずは抽象的で概念的なものは捨てて、実利に走りましょう。
その実利とは、プログラムが読めて理解できて作れるということです。
Javaから見たオブジェクト指向
オブジェクト指向のことは忘れて代わりに何を学ぶかというと、それは「Javaそのもの」です。
このテキストでは、まずJavaプログラミング言語で使用されている「オブジェクト指向的機能」について、「オブジェクト指向」という用語抜きで説明していきます。
なぜかというと、Javaがちゃんとわかればオブジェクト指向もわかるからです。
Javaの言語仕様には、ちゃんとオブジェクト指向のエッセンスが含まれています。カプセル化、継承、ポリモーフィズム、インタフェース……これらをちゃーんと理解すれば、オブジェクト指向もちゃんと理解できます。
たとえば、Javaのソート機能。
import java.util.Arrays;
import java.util.Comparator;
/**
* 文字列の長さで比較するComparator。
*/
class LengthComparator implements Comparator
{
public int compare( Object lh, Object rh )
{
String strL = (String)lh;
String strR = (String)rh;
// 「左の長さ」-「右の長さ」を返します。
return strL.length() - strR.length();
}
}
/**
* 実行用クラス。このクラスを実行してください。
*/
class SortWithComparator
{
public static void main( String[] args )
{
// Stringクラスの配列を用意します。
String[] strings = { "AAA", "B", "CC" };
// 文字列の長さが短い順にソートします。
Arrays.sort( strings, new LengthComparator() );
// ソートされたので出力してみます。
for( int iF1 = 0; iF1 < strings.length; ++iF1 )
{
System.out.print( strings[iF1] + ", " );
}
System.out.println();
// B, CC, AAA,
// このように、文字列の長さが短い順に並び替えられました。
}
}
// SortWithComparator.java import java.util.Arrays; import java.util.Comparator; /** * 文字列の長さで比較するComparator。 */ class LengthComparator implements Comparator { public int compare( Object lh, Object rh ) { String strL = (String)lh; String strR = (String)rh; // 「左の長さ」-「右の長さ」を返します。 return strL.length() - strR.length(); } } /** * 実行用クラス。このクラスを実行してください。 */ class SortWithComparator { public static void main( String[] args ) { // Stringクラスの配列を用意します。 String[] strings = { "AAA", "B", "CC" }; // 文字列の長さが短い順にソートします。 Arrays.sort( strings, new LengthComparator() ); // ソートされたので出力してみます。 for( int iF1 = 0; iF1 < strings.length; ++iF1 ) { System.out.print( strings[iF1] + ", " ); } System.out.println(); // B, CC, AAA, // このように、文字列の長さが短い順に並び替えられました。 } }
このプログラムは、Javaに備わっているArraysクラスのsort()メソッドを使用してソートを行うものです。ソートを行う際、要素の比較をComparatorインタフェースの実装クラスで行っています。
この「Comparatorインタフェースの実装クラスで行う」という部分が、Javaのオブジェクト指向的な部分です。つまり、Javaには「Javaに備わっているクラス」からしてオブジェクト指向の考え方が組み込まれているのです。
Java言語の「オブジェクト指向的な部分」をちゃんと勉強することで、まずこのような「Java言語の機能」をフル活用することができるようになります。そしてその結果、オブジェクト指向についても理解できるようになることでしょう。
このテキストを読む前に
さて、次章から解説を始めますが、その前に、「Javaの基本的な使い方」については理解しておくようお願いいたします。
と言っても、「簡単なクラスの作り方」「変数の宣言」「最初にmain()メソッドが呼び出される」や、「ソースファイルの作り方」「コンパイルと実行」といったことができれば問題ありません。
具体的に言えば、上記のプログラムを「SortWithComparator.javaソースファイルに書きjavacコマンドでコンパイルしてjavaコマンドでSortWithComparatorクラスを実行する」もしくは「EclipseでSortWithComparator.javaソースファイルを作成し貼り付けてSortWithComparatorクラスを実行する」といったことができれば問題ありません。
また、上記のプログラムはかなり難しい例を挙げただけなので、これが分からなくても問題ありません。実際の解説ではずっと簡単なサンプルプログラムを使用します。
ですので、「Javaについて書かれた書籍の、最初の方のサンプルプログラムを試すことができる」といったレベルであれば問題ありませんので、最低でもそこまでは勉強していただければと思います。