gpt4 book ai didi

language-agnostic - 面向对象风格的编程,用于对象之间的交互

转载 作者:行者123 更新时间:2023-12-03 23:25:20 25 4
gpt4 key购买 nike

我正在尝试以面向对象的风格编写程序。在对两个对象之间的交互进行编码时,我有一些困惑。

设想:
人(约翰)给人(贝蒂)5 美元。

可能的解决方案(伪代码):

A) John.pays(Betty, 5);
B) Betty.receives(John, 5);
C) 银行转账(John, Betty, 5);
D)
开始交易:
约翰.减少(5);
贝蒂.增加(5);
结束交易:
E) Service.transferMoney(John, Betty, 5);//服务是一个通用的服务对象

请告诉我哪一种是更合适的 OOP 编码方式,以及其背后的原因。我正在寻找一些指导方针,比如“告诉,不要问”规则。

谢谢。

最佳答案

我注意到的一件事是,刚接触 OOP 的人会试图将物理世界映射到他们正在编写的代码中。你真的关心约翰和贝蒂是人还是你真的想描绘一个银行账户?我认为您在示例中选择的对象实际上使找出问题的解决方案变得更加困难。

这其中的重要部分是
1) 将如何转移资金的逻辑放在哪里。
2)每个人有多少钱的数据存储在哪里。

您需要决定是否要在个人或银行客户(可能是个人、公司或其他事物)的背景下讨论问题。我猜你在谈论一个客户,因为假设它是一个人会限制和误导。此外,银行是一个非常通用的术语,它是里面有人的大砖砌建筑,还是有几个不同页面做不同事情的在线网站。
银行账户对象可以有一种方法(可能是静态的,取决于您决定如何存储数据以及您将使用对象的目的)知道如何从一个账户转移到另一个账户。如何转账的逻辑不属于Betty或John或银行,它属于bankAccount,如果涉及费用等,可以根据帐户类型有特殊的逻辑。如果你把这个逻辑交给银行,你最终会得到一个巨大的银行类,其中包含从吸引客户到在非常特定的帐户类型中处理资金的所有方法。每种账户类型对于如何处理转账都有不同的规则。想想您可能希望将转账或存款显示为待处理的情况。

如果只是解决转账的问题,没必要创建一堆对象。根据已知的要求和假定的 future 要求,以下将是一个不错的选择。
CheckingAccount.Transfer(johnsAccountNo,bettysAccountNo,金额)

关于language-agnostic - 面向对象风格的编程,用于对象之间的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com