第1次任务:购物车程序的面向对象设计
2021/10/5 1:41:04
本文主要是介绍第1次任务:购物车程序的面向对象设计,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 目标
- 任务
- 人员分工
- 前期调查
- 系统功能结构图
- 系统描述
- UML类图
- 面向对象的封装性
- 项目包结构,主要功能与关键代码
- 商品类
- 菜单界面
- 购物车类
- 参考资料
目标
- 学会使用讲故事的方式找到系统中可能包含的类与属性
- 理解封装
任务
- 编码规范:使用英文对类、方法、包进行命名(查英文词典,不得出现拼音)。参考JAVA编码规范,进行类命名,方法命名、包命名,合适的缩进,有意义的变量名。见参考资料1中的1.1-1.4。
- 前期调查与功能设计:调查京东商城或者亚马逊商城中的购物车,体验从搜索商品、加入购物车、操作购物车、下单全过程,思考该过程可能包含的类。演示中要求图多字少。
- 面向对象设计:以面向对象的方法编写购物车代码。先设计有什么类,再考虑什么方法放到那个类中合适。初期可不用完成具体功能,只要将类名、类之间的关系、方法名设计好即可。见参考资料2、3。注意学习类与类之间的关系(先重点掌握关联关系与依赖关系)。
- PPT制作或博客制作并上台演示:演示前,请务必自己在同学面前预演一遍。
注意:初期将重点放在面向对象设计、命名规范。
人员分工
任务 | 姓名 |
---|---|
编码规范、前期调查与功能设计 | 原嘉怡 |
面向对象设计、博客制作 | 黄静 |
前期调查
我们以京东商城为例,体验从搜索商品、加入购物车、操作购物车、到最后下单的全过程,并对此过程进行思考和学习,设计自己的购物车相关代码。
-
首先,进入京东商城首页,可以看到有一个搜索栏,右方为自己的购物车,左下方还有商品的类别检索,以及各个市场或活动会场的入口。
-
然后,在搜索栏中输入想要查询的商品,点击搜索,出现大量商品可供选择,还可根据上方的类别索引更加精确地寻找商品。商品上有单价与加入购物车标识。
-
点击商品,进去商品详情页面,内部包含商品名称和图片,包含用户配送地址,还有商品种类,数量等选择,最后选择好后可加入购物车。
-
进入购物车界面,列举了所有加入购物车的商品名称,种类以及它们各自的单价,数量,总价,还包含整个订单中的商品总数量,总价格
-
用户可在购物车中进行对商品进行数量增减,选择并删除商品,选择并下单商品等相关操作,且下单之后的商品也会被移出购物车
-
至此,完成了从搜索商品、加入购物车、操作购物车、到最后下单的网上购物全过程
系统功能结构图
系统描述
用户 首先登陆主界面,选择进入商城,即可在商场内搜索自己需要购买的 商品 ,在商城中 展示用户所搜索查询的商品 之后,包括 商品的编号,名称,单价,类别等属性 ,用户可以选择将想要购买的商品 加入购物车 ,若购物车中已有该商品,即直接 增加该商品的数量 。在进入购物车后,可对购物车中的商品进行 展示 ,也可对选中的商品进行 删除 ,之后可根据用户的选择将选中的商品条目 生成订单 , 计算总价 ,完成购买。已购买商品从购物车中 移除 ,用户完成一次网上购物。
UML类图
类的关键属性与方法、类与类之间的关系,每个类的功能描述可由UML类图展示。
面向对象的封装性
商品的编号,名称、单价,类型等属性是购物车中商品的基本属性,不会因为用户的操作,如数量的增减而发生变化,在程序的运行过程中保持不变,因此,可对其进行封装。面向对象的封装性能够把信息封装,保证数据的完整和安全,使数据不会发生变化。
封装性包括属性的封装,方法的封装,类的封装,组件的封装等。
- 属性私有化,通过使用private修饰符关键字进行修饰,外部无法直接访问
- 使用this关键字。this的使用,访问本类当中的成员变量,需要使用格式:this.成员变量名
- 方法构造方法,创建对象时,就是在调用构造方法
项目包结构,主要功能与关键代码
商品类
package shoppingcar; import java.util.Objects; //商品类 public class Commodity { private Integer id; //商品编号 private String name; //商品名称 private double price; //商品单价 private String description; //类别 public Commodity(Integer id,String name,double price) { this.id=id; this.name=name; this.price=price; } public Commodity() { } //getter setter public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public boolean equals(Object obj) { //比较id是否相同,若相同说明两个商品相同 if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Commodity other = (Commodity) obj; if(id==null) { if(other.id!=null) return false; } else if(!id.equals(other.id)) return false; return true; } @Override public String toString() { return "Commodity [id=" + id + ", name=" + name + ", price=" + price + ", description=" + description + "]"; } } class Food extends Commodity{ //食品 继承商品 } class Book extends Commodity{ //书籍 继承商品 } class Electronics extends Commodity{ //电子产品 继承商品 }
菜单界面
package shoppingcar; import java.util.Scanner; public class Main { public static void main(String[] args) { Menu1(); } public static void Menu1() { System.out.println("------------------"); System.out.println("→【1】.进入市场"); System.out.println("→【2】.我的购物车"); System.out.println("→【0】.退出系统"); } public void Body(Commodity Item,ShoppingCart cart) { Scanner in=new Scanner(System.in); while(true) { Menu1(); //初始页面 int tmp=0; int choice=in.nextInt(); switch (choice) { case 1: //进入市场:添加商品到购物车中 Menu2(); break; case 2: //进入我的购物车:删除一个商品或者删除一整个商品条目并结算 Menu3(); break; case 0: tmp=1; break; } if(tmp==1) { System.out.println("成功退出系统!"); break; } } } private void Menu2() { // TODO Auto-generated method stub } private void Menu3() { // TODO Auto-generated method stub } }
购物车类
package shoppingcar; //购物车类:对购物车的商品进行增加、移除、结算 import java.util.ArrayList; import java.util.List; //商品清单 public class ShoppingCart { //将商品添加到购物车中 public boolean addCommodity(Commodity e,int count) { return true; } //从购物车中删除一个商品 public boolean removeCommodity(Integer id) { return true; } //从购物车中删除条目 public boolean deleteCommodity(Integer id) { return true; } //展示购物车 public void diplayShoppingCar() { } /** * 查找id在购物车中是否已存在相关条目 * 声明为private,因为只在本类中适用 * 如果包含 返回相关条目所在下标,否则返回-1 **/ //查询id private int searchID(Integer id) { return -1; } //内部类:购物车条目类 private class itemEntry{ Commodity item; //商品 Integer num; //数量 public itemEntry(Commodity item,int num) { this.item=item; this.num=num; } //添加商品数量 public void addNum() { num++; } //减少商品数量 public void decreaseNum() { num--; } //获取商品条目 public Commodity getItem() { return item; } @Override public String toString() { return "itemEntry [item=" + item + ", num=" + num + "]"; } } }
参考资料
- 阿里巴巴Java开发手册 终极版(1.3.0)
- 面向对象设计与UML类图中的什么是类与如何绘制类图。
- 5分钟读懂UML类图
这篇关于第1次任务:购物车程序的面向对象设计的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?