1.类名、属性名、方法名命名不规范。
如,shoppingcart类,Name属性,SearchCommodity方法,delete_commodity方法。
解决方法:面向对象大作业第1次任务中的"参考资料1. 阿里巴巴Java开发手册 终极版(1.3.0)"中的一、编程规约。
2. 方法编写的太复杂。既有数据处理,又有界面交互。
如searchCommodity(int cid)方法包含了用户输入代码、在购物车里面搜索的代码,根据搜索结果进行提示的代码等。
编写原则
- 方法越简单越好、实现的功能尽量单一。类包含的功能也尽量和其自身的数据(属性)相关。
- 让处理数据的方法只处理数据,不要进行界面展示!处理完数据如果需进一步展示,应将数据传给其他类显示。
- 界面交互代码放在那里?放在调用数据处理相关类的地方,如Main类或者GUI、Menu相关的类。
比如,ShoppingCart类只负责对加入购物车的商品数据进行处理,不要处理界面显示、库存之类的信息。
以在购物车搜索商品然后进行展示为例,如下代码所示:
class ShoppingCart{ //该类只负责处理购物车内部的数据
private ArrayList<Commodity> commodityList;
其他代码
public Commodity searchCommodity(int cid){
仅包含"在commodityList中找到pid对应的Commodity并返回"的代码。
说明:该方法仅在list中处理数据。
}
}
class Main{ //该类是主类,负责协调用户输入、ShoppingCart与ConsoleGUI类
public static void main(String[] args){
ShoppingCart cart....;
其他代码;
Commodity c = cart.searchCommodity(pid);//这里得到处理好的数据放入c
这里可以放进一步处理c的数据。比如格式化显示c,或者以更面向对象的方式处理。如下所示。
if (c == null)
未找到商品的处理代码
else
ConsoleGUI.showCommodity(c);
}
}
class ConsoleGUI{ //该类专门负责控制台界面处理
public static void showCommodity(Commodity c){
格式化显示c
}
public static void showMainMenu(){
这里显示主菜单
}
}
3. 如何处理购物车内商品的数量?
可使用嵌套类,建议看在线课程的"5.10 案例(重要):面向对象-购物车改进"。
4. 类设计错误
让ShoppingCart继承自Commodity,这是一个典型错误,不要这样写。
5. 将所有的常用方法放到一个Functions类中
典型的面向过程的思维。应当将数据及其相关的方法放到不同的合适的类中。
比如ShoppingCart类只包含购物车应该关注的购物车内的商品列表(commodityList)及其相应方法,而不应包含界面处理相关类。
ConsoleGUI类只包含菜单显示、界面显示相关类。
Mall类只包含库存列表属性、库存商品初始化、库存商品数量管理、库存商品搜索相关方法。
6. 滥用super()
Eclipse自动生成会为类的构造方法生成super()代码,请搞清楚super()是什么意思,删掉会影响代码的运行吗?
7. 商品的价格使用double型
double本身是不精确的,一般不用于金融计算。比如购物车内商品总价值为200.00001,那么就无法使用200元进行支付。
8. UML图、系统功能图、流程图画的乱七八糟
画图时请注意布局。
不要出现没必要的折线,关系比较密切的类可以放在一起以减少线与线之间的跨越。