第1次任务:购物车程序的面向对象设计

目录

目标

  • 学会使用讲故事的方式找到系统中可能包含的类与属性
  • 理解封装

任务

  1. 编码规范:使用英文对类、方法、包进行命名(查英文词典,不得出现拼音)。参考JAVA编码规范,进行类命名,方法命名、包命名,合适的缩进,有意义的变量名。见参考资料1中的1.1-1.4。
  2. 前期调查与功能设计:调查京东商城或者亚马逊商城中的购物车,体验从搜索商品、加入购物车、操作购物车、下单全过程,思考该过程可能包含的类。演示中要求图多字少。
  3. 面向对象设计:以面向对象的方法编写购物车代码。先设计有什么类,再考虑什么方法放到那个类中合适。初期可不用完成具体功能,只要将类名、类之间的关系、方法名设计好即可。见参考资料2、3。注意学习类与类之间的关系(先重点掌握关联关系依赖关系)。
  4. PPT制作或博客制作并上台演示:演示前,请务必自己在同学面前预演一遍。

注意:初期将重点放在面向对象设计、命名规范

人员分工

任务 姓名
编码规范、前期调查与功能设计 原嘉怡
面向对象设计、博客制作 黄静

前期调查

我们以京东商城为例,体验从搜索商品、加入购物车、操作购物车、到最后下单的全过程,并对此过程进行思考和学习,设计自己的购物车相关代码。

  • 首先,进入京东商城首页,可以看到有一个搜索栏,右方为自己的购物车,左下方还有商品的类别检索,以及各个市场或活动会场的入口。
    第1次任务:购物车程序的面向对象设计

  • 然后,在搜索栏中输入想要查询的商品,点击搜索,出现大量商品可供选择,还可根据上方的类别索引更加精确地寻找商品。商品上有单价与加入购物车标识。
    第1次任务:购物车程序的面向对象设计

  • 点击商品,进去商品详情页面,内部包含商品名称和图片,包含用户配送地址,还有商品种类,数量等选择,最后选择好后可加入购物车。
    第1次任务:购物车程序的面向对象设计

  • 进入购物车界面,列举了所有加入购物车的商品名称,种类以及它们各自的单价,数量,总价,还包含整个订单中的商品总数量,总价格

  • 用户可在购物车中进行对商品进行数量增减,选择并删除商品,选择并下单商品等相关操作,且下单之后的商品也会被移出购物车
    第1次任务:购物车程序的面向对象设计

  • 至此,完成了从搜索商品、加入购物车、操作购物车、到最后下单的网上购物全过程
    第1次任务:购物车程序的面向对象设计

系统功能结构图

第1次任务:购物车程序的面向对象设计

系统描述

用户 首先登陆主界面,选择进入商城,即可在商场内搜索自己需要购买的 商品 ,在商城中 展示用户所搜索查询的商品 之后,包括 商品的编号,名称,单价,类别等属性 ,用户可以选择将想要购买的商品 加入购物车 ,若购物车中已有该商品,即直接 增加该商品的数量 。在进入购物车后,可对购物车中的商品进行 展示 ,也可对选中的商品进行 删除 ,之后可根据用户的选择将选中的商品条目 生成订单 计算总价 ,完成购买。已购买商品从购物车中 移除 ,用户完成一次网上购物。

UML类图

类的关键属性与方法、类与类之间的关系,每个类的功能描述可由UML类图展示。
第1次任务:购物车程序的面向对象设计

面向对象的封装性

商品的编号,名称、单价,类型等属性是购物车中商品的基本属性,不会因为用户的操作,如数量的增减而发生变化,在程序的运行过程中保持不变,因此,可对其进行封装。面向对象的封装性能够把信息封装,保证数据的完整和安全,使数据不会发生变化。
封装性包括属性的封装,方法的封装,类的封装,组件的封装等。

  • 属性私有化,通过使用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 + "]";
		}
		
	}
	
	
}



参考资料

  1. 阿里巴巴Java开发手册 终极版(1.3.0)
  2. 面向对象设计与UML类图中的什么是类如何绘制类图
  3. 5分钟读懂UML类图
上一篇:springboot之JWT实现权限认证


下一篇:信息安全管理——网络安全