「実用的なプログラマー」の演習を考慮して、いくつか質問があります。
それは言う:
1.1。
public void showBalance(BankAccount acct) {
Money amt = acct. getBalance() ;
printToScreen(amt .printFormat()) ;
}
変数acctはパラメーターとして渡されるため、getBalance呼び出しが許可されます。ただし、amt.printFormat()の呼び出しはそうではありません。私たちはamtを「所有」しておらず、それは私たちに渡されませんでした。
しかし、私たちはamtを所有していますか?これはメソッドで宣言され、LODは次のように述べています。メソッドがローカルオブジェクトを作成するとき、そのメソッドはローカルオブジェクトのメソッドを呼び出すことができます。
この例はLODを壊していますか?私の見方ではありませんか?
2.2。
public class Colada {
private Blender myBlender;
private Vector myStuff;
public Colada() {
myBlender = new Blender();
myStuff = new Vector() ;
}
private void doSomething() {
myBlender.addlngredients(myStuff.elements());
}
}
ColadaはmyBlenderとmyStuffの両方を作成して所有しているため、addIngredientsとelementsの呼び出しが許可されます。
doSomethingがmyBlenderとmyStuffを作成しなかったため、呼び出しを許可されている理由がわかりません。
3.3。
void processTransaction(BankAccount acct, int) {
Person *who;
Money amt;
amt.setValue(123.45);
acct.setBalance(amt);
who = acct .getOwner() ;
markWorkflow(who->name(), SET_BALANCE);
}
この場合、processTransactionはamtを所有し、スタック上に作成され、acctが渡されるため、setValueとsetBalanceの両方が許可されます。ただし、processTransactionはwhoを所有していないため、who-> name()の呼び出しは違反しています。
したがって、ここでは誰を宣言しますが、電話をかけることは許可されていません。おそらく私は「所有者」の概念を誤解しています。
誰かがこれを明確にしてくれませんか?
ありがとう