質問は不明ですが、「依存性注入」を発明したのだろうか?
パズルの最初の部分は、オブジェクトでラップすることにより、メソッドが複数の値を返すことができるということです。
public class ValuePair {
public int a;
public int b;
}
public ValuePair takeInput(){
ValuePair pair = new ValuePair();
println("Enter a number: (a) and (b)\n");
pair.a = readInt("a:");
pair.b = readInt("b:");
return pair;
}
そしてそれであなたはできる:
ValuePair p = takeInput();
System.out.println("Hypotenuse is " + calculateHypotenuse(p.a, p.b) + "\n";
(パブリック フィールドは通常、適切なスタイルとは見なされないことに注意してください。コードが短いため、ここではパブリック フィールドを使用します。実際のコードでは、ゲッターとセッターを使用します)。
それはあなたが必要とするすべての答えかもしれません。しかし、あなたは尋ねます:
これらのメソッドを別のメソッドに渡す方法はありますか?
そうですね、目的専用のクラスでそのメソッドをラップすれば可能です。理由が明らかになることを願っていますが、最初にインターフェイスを定義します。
public interface ValuePairSource {
public ValuePair getPair();
}
...そしてそれを実装するクラス:
public class UserInputValuePairSource implements ValuePairSource {
@Override
public ValuePair getPair() {
ValuePair pair = new ValuePair();
println("Enter a number: (a) and (b)\n");
pair.a = readInt("a:");
pair.b = readInt("b:");
return pair;
}
}
これで、値を取得する場所を指定できる Pythagoras クラスを作成できるようになりました。
public class Pythagoras {
private ValuePairSource valuePairSource;
public Pythagoras(ValuePairSource source) {
this.valuePairSource = source;
}
public double hypotenuse() {
ValuePair pair = valuePairSource.getPair();
return Math.sqrt(pair.a ^ 2 + pair.b ^ 2)
}
}
コンストラクターでは、作成する各 Pythagoras オブジェクトに値のペアを取得する方法を伝えます。したがって、次のように使用できます。
Pythagoras p = new Pythagoras(new UserInputValuePairSource());
double hypotenuse = p.hypotenuse();
これは何の役に立ちますか?つまり、他の種類の ValuePairSource を発明できるということです。たとえば、設定した Shape オブジェクトから値を取得する ShapeValuePairSource などです。
(これらは、質問の目的のための架空のクラスです)
したがって、次のように使用できます。
Triangle t = canvas.getLastTriangle(); // or whatever
ValuePairSource vps = new ShapeValuePairSource(triangle);
Pythagoras p = new Pythagoras(vps);
double hypotenuse = p.hypotenuse();
そのため、Pythagoras クラスをまったく変更せずに、ユーザー入力ではなく形状オブジェクトから値を読み取るようになりました。
OK、これは少し不自然な例ですが、「これらのメソッドを別のメソッドに渡すことができますか」という質問に答えています。これは、Spring のようなものの基礎です。
一部の言語では、ここにあるようにクラスにラップせずに、メソッドを他のメソッドに直接渡すことができることに注意してください。これを「関数型プログラミング」と呼び、通常は「メソッド」を「関数」と呼びます。