集美大学 计算机 郑如滨

教学博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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图、系统功能图、流程图画的乱七八糟

画图时请注意布局。
不要出现没必要的折线,关系比较密切的类可以放在一起以减少线与线之间的跨越。

posted on 2022-10-11 10:34  zhrb  阅读(385)  评论(0编辑  收藏  举报