进度:第六周
在开始本练习之前,我们建议你仔细阅读整个问题。
介绍
在接下来的两个练习中,你需要创建一个投资跟踪器, 它是一个用来跟踪股票投资值的应用程序。在开始第二个练习之前应该完成第一个练习并提交其结果,以对其进行评分。
在第一个练习中,你将决定程序的基本功能:为它设计一个图形用户接口(GUI);指定一个应用程序接口(API),GUI可以通过它访问获取股票报价的代码;维护一个数据库中的数值,等等。
通过创建一个良好定义的API将应用程序分解为两个部分(一个前端的GUI和一个后端的实现),将允许使用不同前端的客户端访问你的系统并使用它提供的功能。你并不需要真正编写实现API的代码,但是你需要写一个桩程序:一段可以用来测试API的代码,但是它只提供很有限的功能。例如,你可以创建一个并不完成任何计算而只是查询一个固定表格的数值的桩。通过桩你可以组装并测试GUI,并且所有的功能看起来都是合理的。在第二个练习中,你将实现API自己的功能,你并不需要对GUI或API做任何改变。
第一个练习的焦点是设计API以及实现GUI。你可能需要学习怎样使用Swing。Java™在线指南(http://java.sun.com/docs/books/tutorial/)中包含了一段对Swing的使用以及Java基础类的介绍,你可以在http://java.sun.com/docs/books/tutorial/uiswing/找到它。
第二个练习的焦点是后端的设计和实现。你并不需要学习任何新东西,但是你将重新练习你所学过的技术:抽象数据类型的设计、对象模型等等。你不需要实现获取股票报价的代码,我们将为你提供一个类,这个类中提供了一个简单的方法,它需要一个字符串型的订单符号作为输入并返回一个价格。
练习 5
通过投资跟踪器用户能够跟踪多个股票投资的内容和值。一个能够用来管理和维护多个股票投资,其中一个投资是一组持有股票的集合。一个投资也能包含保存个人交易历史记录、统计等的元数据。通过万维网查询一个股票报价服务器来获取股票当前的价格。你的第一个任务就是确定投资跟踪器应该提供哪些功能。但是,它至少应该能够完成以下功能:
- 创建多个投资;
- 查看一个投资中的资产(股票名称、包含的份额、每份的价格、持有的
数量);
- 增加或减少一个股票的份额;
- 查看一个投资的总值。
我们提供了一些可能实现的功能的屏幕截图:screenshots。
这里是一些可行的功能,你可能需要考虑在你的设计中包含它们:
- 将投资信息保存到磁盘中;
- 指出价格是上升还是下降了,可以通过对改变文字颜色或者小的彩色箭头来表示;
- 允许用户输入一个股票的买入价格,从而评估得失;
- 保持对过高和过低的追踪;
- 设置一个监视功能,当股票升高或降低一定数量时做出响应动作;
- 按值、订单符号等对资产进行排序。
你应该选择一组你打算实现的功能。我们建议你按照难度和重要程度对它们排序,并仔细考虑如果问题的困难程度出乎你的意料之外应该放弃哪个。
更基础的,你应该考虑一些基本问题,比如
- 怎样标识投资(通过用户提供的名称?);
- 何时更新股票的价格(定期自动更新?通过外部命令?);
- 怎样处理例外情况,比方说订单符号与股票不匹配,或者当网站没有响应的时候应该怎样处理;
- 能否同时显示多个投资;
- 是否允许多个视图同时访问一个投资;
这些机制应该在开始的时候就确定好,否则它们将变得很难处理。
在API的设计中,你也需要解决一些基本的机制问题。其中两个很重要的问题是:
- API是否应该是被动的,也就是说应用程序仅简单的把它当作一个数据源;或者它应该是主动的,例如周期性的发出检查信号。
- 接口应该是什么类型的。
你的API的规格说明应该是一个除了程序和用户怎样通过GUI通讯问题之外,程序功能的完整描述。你应该为你的API使用一个Java™接口。你的GUI应该是容易使用的,并且易于创建。在你开始设计它之前,你可能会许需要体验一下Swing来了解这些事情是怎样做的以及什么是可能完成的。
你应该提交以下项目:
(a) 概述 [一页或更少]
对于这个应用程序目的的一个简洁扼要的描述;它提供哪些功能;你的GUI看起来是什么样子的以及如何使用它。想象这部分是一个压缩了的用户手册:在传单上常常见到的产品功能简介。
(b) 问题对象模型 [一页]:总结了用户角度的应用程序抽象状态的对象模型。这里的对象应该来自问题域(例如股票和价格),而不是来自代码的具体对象。尽量保持它的抽象性,避免涉及任何实现细节。要检查你的模型是否完整,考虑你所设计的模型是否包含了足够的状态来实现你所想象的行为。列出所有不能以图形化描述、从问题自身的属性中产生的约束。
(c) API的规格说明 [两页或更少]:一个API的概述,指出它与你的系统的高层的概要的交互情况。还应给出一个详细的规格说明,以需求/保证/改变标准形式描述各个方法。
(d) GUI的屏幕截图:GUI的一组屏幕截图,应该展现出它的组织形式以及它所提供的功能。
(e) 代码:你提交的代码应该包括GUI的代码,API的Java接口,一个实现API接口的桩类,以及所有你编写的测试代码。你应该完善你的代码使得所有的用户接口的交互都能够使用,显示合理的结果,并演示GUI和API的连接。你的GUI中的类不需要额外的说明,但是应该为它们填写良好的注释,而且所有难以理解的公有方法也应该有仔细的说明。
勘误
问题&回答
这部分将对练习中一些常见问题进行澄清和回答。我们将尽力保持对这部分的更新,因此,当你遇到问题时这部分应该是你最先查看的地方(在仔细的阅读问题描述讲义和规格说明之后)。