研究帖6

 

 

 


作者へのメッセージ
研究課題 ナイスなパッケを作ろう

研究課題 ナイスなパッケを作ろう。

 

N 「そよ風さん。 」

S 「何ですか? 」

N 「君がこの前作ったクラスKioを、いつでも使えるよう、パッケージに入れよう。 」

S 「ああ、それはいいですね。 」

N 「できれば、javadocを使ってマニュアルも書いて欲しいんだ。 」

S 「じゃあ、やって見ましょう。コードに注釈を入れてjavadocを動かせば いいんですね。 」

【プログラムnice\\Kio.java】**************************

package nice;
import java.io.*;

/**
@author そよ風
@version 1.0

メソッド
String ioSet(String s)

コマンドプロンプトにsを表示し、キー入力を返す。

使用例
Kio ki=new Kio();
String sf=ki.ioSet("処理するファイル名を拡張子付きで入力して下さい。");
*/

public class Kio{
	String ioSet(String s){
		String str="";
		try{
			InputStreamReader isr=new InputStreamReader(System.in);
			BufferedReader br=new BufferedReader(isr);
			System.out.println("");
			System.out.println(s);
			str=br.readLine();	
		}
		catch(Exception e){
			System.out.println("例外:"+e);
		}
		return str;
	}
}


S 「こんなんでいいんでしょうか? 」

N 「分からんが、何か違うような気がするな。とりあえず、niceのファイルに入れて javadocをやって見よう。....................うわ!たくさんhtmlが出来たぞ! 」

S 「すごいですね!すごいけど、内容は、どうですか? 」

N 「おやっ、階層しか書かれていないぞ。やっぱりもっと研究しないといけないな。 」

S 「そうですね。」

 

B 「やあ、二人ともがんばってますね。 」

S 「あ!BB君、また私の研究にケチを付けに来たんじゃないの? 」

B 「ふっふっふっ。その通りだ。君のKioに重大な欠陥が見つかったんだ。 」

N、S 「欠陥だって?何だいそれは。」「そうよ、何の事? 」

B 「Kioは、パソコンを使う人に指示を出して入力させた文字列を得るクラスだろう。 」

S 「そうよ。 」

B 「そこで、入力する人が、間違ったキーを押したらどうする? 」

S 「何んだ、そんなこと?私のOIAIOを見たでしょ?正しい入力を得るまで、 ループでKioを動かせば良いのよ。 」

B 「ほう、はたしてそれで良いのかい? 」

N 「どういう事だね?BB君。 」

B 「つまり、そのやり方だと、Kioを使うプログラマーは、そのたびごとにループを 書かなくてはいけない、と言う事ですよ! 」

N、S 「ああっ!」「うっ!」 」

N 「じゃあ、どうすればいい? 」

B 「ふっふっふっ。これを見て下さい。 」

【プログラムKio.java】**************************

package nice;
import java.io.*;

/**
@author そよ風
@version 1.0

Kio

メソッド
String ioSet(String s)

コマンドプロンプトにsを表示し、キー入力を返す。


メソッド
String ioSet(String s,String[] ss)

コマンドプロンプトにsを表示し、キー入力を返す。入力がss内の要素と一致するまでループを繰り返す。


使用例
Kio ki=new Kio();
String sf=ki.ioSet("処理するファイル名を拡張子付きで入力して下さい。");
*/

public class Kio{
	public String ioSet(String s){
		String str="";
		try{
			InputStreamReader isr=new InputStreamReader(System.in);
			BufferedReader br=new BufferedReader(isr);
			System.out.println("");
			System.out.println(s);
			str=br.readLine();	
		}
		catch(Exception e){
			System.out.println("例外:"+e);
		}
		return str;
	}
	
	public String ioSet(String s,String[] ss){
		boolean b1=false;
		String sf="";
		do{
			sf=this.ioSet(s);
			try{
				for(int i=0;i<ss.length;i++){
					if(sf.equals(ss[i])){
						b1=true;
					}
				}
			}
			catch(Exception e){
			}
		}while(!b1);
		return sf;
	}
}


S 「ああっ!こ、これは」

N 「オーバーライドだ!いつの間にこんなハイテクニックを! 」

S 「ちょっと、博士。オーバーロードでしょ。 」

N 「ええっ、オーバーライドじゃないのか? 」

B 「博士、しっかりして下さい。オーバーロードです。そよ風さんのメソッドioSetを オーバーロードして、入力を指定したい時は、文字列の配列ssで指定できるようにしたんです。 」

S 「なかなか巧妙な手口ね。 」

B 「美しいコードと言ってくれないか? 」

S 「ようするに、パクッたんでしょ? 」

B 「違う!これこそ、オブジェクト指向の深遠なテクニックだ! 」

N 「ところで、修飾子がパブリックになっているのは、なぜかね? 」

B 「ふっふっふっ、、ディレクトリを別にしたクラスは、パブリックにしないと アクセス出来ないんです。そよ風さんのレベルでは分からなかったようですね。 」

 

S 「うるさい! 」

B 「おっ!またその顔か!いい加減慣れたぞ。画像の大きさを変えてやる。 どうだ!

 

 

 

S 「やったわね! 」

 

B 「うわ!!よし!縦横比をめちゃくちゃにしてやる!

 

 

S なっ、なんて事を!あなたの縦横比も!

B 「やっ、やったな!

N 「二人とも、いい加減にしなさい!こっ、こら!私の縦横比を変えるな!

 

* この日も、真剣な議論が夜更けまで交わされたのであった。(続く)

 

------------------------------------------------------------------------------

 

B 「博士、僕の作ったコードもナイスパッケに入れて下さい。 」

N 「ほう、何を作ったんだい。 」

B 「これなんですけど。

【プログラムC:\MyJava\nice\Db.java】**************************

package nice;

/**

*/
public class Db{
	/**
	コマンドプロンプトに変数の値を表示する。簡単なデバッグに使用する。
	
	*/
	public static void pp(int i){
		System.out.println(i);
	}
	public static void pp(String s){
		System.out.println(s);
	}
}

N 「これは?どうも良く分からないな。 」

B 「デバッグの時、変数の値が知りたい時が良くありますよね。 」

N 「うん。いつもそういう時は、System.out.println()を使ってるんだがね。 」

B 「でも、いちいちSystem.out.println()と打ち込むのは、面倒じゃないですか? 」

N 「そうだな。コピーペーストも結構やりにくいし。 」

B 「そういう時、このクラスDbさえあれば、Db.pp(変数)と、打ち込むだけで、 値がコマンドプロンプト画面に出るんです。 」

N 「ほほう、なるほど。簡単だが便利そうだね。」

 

 

B ふっふっふっ、BB君、あいかわらずセコいコードね。 」

B 「うわ!びっくりするじゃないか! 」

N 「いつのまにそんな所にいたんだね? 」

S 「さっきからいましたよ。気付きませんでしたか? 」

B 「何がセコいコードだ! 」

S 「ふっふっふっ、まあ、ちょっとこれを見なさい。」

【プログラムC:\MyJava\nice\Db.java】**************************

package nice;

/**

*/
public class Db{
	/**
	コマンドプロンプトに変数の値を表示する。簡単なデバッグに使用する。
	
	*/
	public static void pp(int i){
		System.out.println(i);
	}
	public static void pp(String s){
		System.out.println(s);
	}
	
	public static void pp(int[] ii){
		/**
		int型配列の内容をコマンドプロンプトに表示する。
		*/
		for(int i=0;i<ii.length;i++){
			System.out.print(ii[i]+",");
		}
		System.out.println("");
	}

}

B 「こっこれは! 」

N 「オーバーライドだ! 」

B 「ちょっと、博士、違いますよ。 」

S 「オーバーロードですよ。この前も言ったじゃないですか。 」

B 「いい加減覚えてくださいよ。しょうがないな。 」

N 「わっはっはっは!ところで、これは何に使うんだね? 」

S 「BB君のと同じです。デバッグの時、配列の中身を確かめたい時に使うんです。 」

B 「何だ!僕のコードのパクりじゃないか。 」

S 「ちがうわ。オブジェクト指向のハイテクニックよ。 」

b 「やっぱりパクりじゃないか! 」

S 「違うわよ!しつこいわね。もっと高度なテクニックよ。だいたい、No.2研究員の あなたとは、レベルが違うわよ! 」

B 「よっっ、よくも言ったな!よし!君の画像の縦横比を!.......... 」

N 「こらっ!私の縦横比を変えるな!」

 

この日も、熱心な議論が夜更けまで交わされたのであった。(続く)

 

   

そよ風さん「博士、ストリングバッハーを区切って配列に入れるクラスが出来ましたね。ナイスパッケに入れて下さい。」

ナイス博士「うん、さっそく入れよう。」

BB君「僕のDbも、ストリングバッハーを入れられるように変えたんで、書き換えて下さい。」

ナイス博士「うん。」

【プログラムC:\MyJava\nice\SBTokenizer.java】**************************

package nice;

import java.util.*;


public class SBTokenizer{
	StringBuffer[] sbo;
	
	/**
	1つのストリングバッハーsbを、指定した文字列stで区切り、ストリングバッハーの
	配列にして返す。配列の要素数を指定しなくてはいけない。
	*/
	
	public StringBuffer[] sbSplit(StringBuffer sb,String st,int index){
		sbo=new StringBuffer[index];
		int ik=0,ist=0,id=st.length(),i;
		
		for(i=0;i<index;i++){
			ik=sb.indexOf(st,ist);
			if(ik==-1){
				sbo[i]=new StringBuffer(sb.substring(ist,sb.length()));
				break;
			}
			sbo[i]=new StringBuffer(sb.substring(ist,ik));
			ist=ik+id;
		}
		return sbo;
	}
	
	/**
	1つのストリング(文字列)sbを、指定した文字列stで区切り、ストリングバッハーの
	配列にして返す。配列の要素数を指定しなくてはいけない。
	*/
	
	public StringBuffer[] sbSplit(String sb,String st,int index){
		sbo=new StringBuffer[index];
		StringTokenizer stk=new StringTokenizer(sb,st);
		int i=0;
		
		while(stk.hasMoreTokens()){
			sbo[i]=new StringBuffer(stk.nextToken());
			i+=1;
		}
		return sbo;
	}
}
		

【プログラムC:\MyJava\nice\Db.java】**************************

package nice;

/**





*/
public class Db{
	/**
	コマンドプロンプトに変数の値を表示する。簡単なデバッグに使用する。
	
	*/
	public static void pp(int i){
		System.out.println(i);
	}
	public static void pp(String s){
		System.out.println(s);
	}
	
	public static void pp(boolean b){
		System.out.println(b);
	}
	
	public static void pp(StringBuffer sb){
		System.out.println(sb);
	}
	public static void pp(int[] ii){
		/**
		int型配列の内容をコマンドプロンプトに表示する。
		*/
		for(int i=0;i<ii.length;i++){
			System.out.print(ii[i]+",");
		}
		System.out.println("");
	}
	
	public static void pp(StringBuffer[] ssb){
		/**
		StringBuffer型配列の内容をコマンドプロンプトに表示する。
		*/
		for(int i=0;i<ssb.length;i++){
			System.out.println(ssb[i]);
		}
		System.out.println("");
	}
	
	

}





続く

研究課題に戻る。