短いと、仲間のプログラマーの紹介として、言語のオブジェクト指向の特徴を示す良い例を探しています。 「良い」とは、実行して、意味のあるものを出力することができます。言語のオブジェクト指向の機能や構造を感じる良い例は何ですか?
たとえば、ほとんどのコントロールフローの構成をマンデルブロセットの例で、または機能の側面をmergesortの例で示すことができます。しかし、私はOOの構造の良い例をまだ見つけていません。
短いと、仲間のプログラマーの紹介として、言語のオブジェクト指向の特徴を示す良い例を探しています。 「良い」とは、実行して、意味のあるものを出力することができます。言語のオブジェクト指向の機能や構造を感じる良い例は何ですか?
たとえば、ほとんどのコントロールフローの構成をマンデルブロセットの例で、または機能の側面をmergesortの例で示すことができます。しかし、私はOOの構造の良い例をまだ見つけていません。
「実世界」の1つの例は、java.io.InputStreamクラスとその子です。これは、多態性のまともな例です。InputStreamの使用方法を理解するコードを書くと、InputStreamによって課せられた規約に準拠している限り、基本クラスの仕方は関係ありません。したがって、いくつかのクラスにメソッドを持たせることができます
public void dump(InputStream in) throws IOException {
int b;
while((b = in.read()) >= 0) {
System.out.println(b);
}
}
このメソッドはデータの出所を気にしません。あなたは、ファイルからデータをダンプする方法を使用したい場合は、ソケットからデータをダンプを使用したい場合は
さて、あなたは、
dump(new FileInputStream("file"));
を呼び出したりすることができます
dump(socket.getInputStream());
か、あなたはバイト配列を持っている場合、あなたは
dump(new ByteArrayInputStream(theArray));
のInputStreamラップオットその場合は実装がありますを呼び出すことができますr InputStreams。
dump(new SequenceInputStream(new FileInputStream("file1"),
new FileInputStream("file2"));
独自の、カスタムInputStreamを作成する場合は、入力ストリームクラスを拡張することができ、および方法)(int型の読み取りをオーバーライドします:
public class ZerosInputStream extends InputStream {
protected int howManyZeros;
protected int index = 0;
public ZerosInputStream(int howManyZeros) {
this.howManyZeros = howManyZeros;
}
@Override
public int read() throws IOException {
if(index < howManyZeros) {
index++;
return 0;
} else {
return -1;
}
}
例えば、たSequenceInputStreamは、あなたが一つに複数いるInputStreamsをglomすることができます
次に、あなたがあなたのダンプ・コールでその使用することができます。
dump(new ZerosInputStream(500));
を