多币种资金.docx
《多币种资金.docx》由会员分享,可在线阅读,更多相关《多币种资金.docx(6页珍藏版)》请在三一文库上搜索。
1、1多币种资金我们就从Ward在WyCash系统中创建的多币种资金(multi-currency money)这个对象(参见“导言”)开始谈起吧。假设我们有这样的一个报表:票据 股份 股价 合计IBM10002525000GE40010040000合计65000为了使其变成一个多币种的报表,我们需要加上币种单位:票据 股份 股价 合计IBM100025美元25000美元Novartis400150瑞士法郎60000瑞士法郎合计65000美元当然,我们还需要为此指定汇率(exchange rate):源币种 兑换币种 汇率瑞士法郎美元1.5当瑞士法郎与美元的兑换率为2:1的时候,5美元+10瑞士法
2、郎=10美元5美元*2=10美元我们要怎么做才能产生上面经过修订的报表呢?或者说,哪些测试一旦通过,就能够说明目前我们信赖的这些代码可以正确地计算出报表了呢? 在假设已经给定汇率的情况下,要能对两种不同币种的金额相加,并将结果转换为某一种币种;3 要能将某一金额(每股股价)与某一个数(股数)相乘,并得到一个总金额。为此,我们将建立一个计划清单(to-do list)以提醒我们需要做哪些事情,它将使我们始终保持注意力集中,同时它也可以告诉我们什么时候可以完工。当我们开始某一项工作时,我们用粗体来表示它,就像这样。当我们完成某项工作时,我们将其划去,就像这样。如果我们想起其他要做的测试,就将其加入
3、清单。正如前面的计划清单所讲的一样,我们就从实现乘法这个功能开始。那么,我们首先需要建立什么对象呢?什么对象也不需要。记住,我们不是从建立对象开始,而是从测试开始。(我一直都在提醒自己注意这个问题,希望你也能时刻记住提醒自己。)既然如此,那么我们首先应该进行什么测试呢?清单中的第一个测试看起来很复杂,我们需要从比较简单的开始。第二个测试不过是实现乘法功能而已,能难到哪儿去呢?我们就从它开始吧。在编写测试的时候,我们总是为我们的操作设想最完美的接口(interface)。我们总是告诉自己这些操作在外界看来应该是个什么样子,尽管很多时候我们的设想并不能化为现实,最好是从一种尽可能优秀的应用编程接口
4、(application program interface,API)开始,然后再倒着进行设计,这要比从一开始就把一切都搞得很复杂、拙劣而“现实”好。下面是一个关于乘法功能的简单实例:我知道,我知道!这段代码有很多问题:公共域问题,副作用问题,货币金额用整数来表示的问题,等等。别急,一步一步来。我们将这些毛病记录下来,然后继续前进。显然,测试没有通过,但是我们希望测试能够尽快到达可运行状态(green bar)。 Junit测试工具运行测试时,如果测试全部运行通过,那么状态条是绿色的;如果存在没有通过的测试,那么状态条就是红色的。本书作者大量使用包含green或red的字句,我们以后统一将其译
5、作测试运行通过或没有通过。译者注当瑞士法郎与美元的兑换率为2:1的时候,5美元+10瑞士法郎=10美元5美元*2=10美元将“amount”定义为私有Dollar类有副作用吗?钱数必须为整数?我们刚才键入的测试程序甚至还不能通过编译。我会在后边讲测试框架(testing framework)JUnit的时候解释在什么地方键入以及怎样将其键入。修改这样的测试非常简单。即便是编译后也无法运行,但为了使其能够编译通过,我们至少要做哪些工作呢?我们存在以下四个编译错误: 没有Dollar类 没有构造函数 没有times(int)方法 没有amount域让我们逐一改正(我总是在寻找某种度量进度的数值化方
6、法)。我们可以通过定义Dollar类来去掉一个错误:一个错误已经解决,还有三个。现在我们需要一个构造函数,但是单单为了让测试能够编译通过,它不必实现任何功能:还有两个错误。我们需要times()的存根实现(stub implementation)。同样仅做可以使测试程序通过的最少的工作:仅剩下一个错误。最后,我们需要一个amount域:好了,现在我们可以运行测试程序,结果如图1-1所示,失败了。图1-1 虽然测试失败,但有进步!可以看出测试程序没有运行通过(red bar)。我们在测试框架(在该例中为JUnit)中运行了这个作为开篇所编写的一小段代码,可以发现,尽管我们希望结果是“10”,事实
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多币种 资金
链接地址:https://www.31doc.com/p-14993107.html