考虑到“务实的程序员”中的练习,我有一些问题。
它说:
1.
public void showBalance(BankAccount acct) {
Money amt = acct. getBalance() ;
printToScreen(amt .printFormat()) ;
}
变量 acct 作为参数传入,因此允许调用 getBalance。然而,调用 amt.printFormat() 不是。我们不“拥有”amt,它也没有传递给我们。
但是我们确实拥有amt 对吗?它在方法和 LOD 中声明:当您的方法创建本地对象时,该方法可以调用本地对象上的方法。
这个例子是否打破了 LOD?在我看来,不是吗?
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 和元素。
现在我不明白为什么允许 doSomething 调用 myBlender 和 myStuff ,因为它没有创建它。
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->name() 是违规的。
所以在这里它确实声明了谁,但不允许调用它。也许我误解了“拥有”的概念。
有人可以澄清一下吗?
谢谢