集美大学 计算机 郑如滨

教学博客

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

第0次任务:面向对象入门

目标:
学会设计简单的类(找出类的属性与方法)
任务:

  1. 请完成作业03-面向对象入门中的书面作业2.1以面向对象方式改造数据结构作业“有理数”(重点).
  2. 展示自己的以面向对象方式设计的有理数。

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

本次任务,按小组完成。

目标:

  • 学会使用讲故事的方式找到系统中可能包含的类、属性、方法。
  • 思考:方法、属性应归入哪个类中?哪些属性与方法可以设置为static或非static?
  • 理解类、封装、模块化之间的关系。

任务:

在线上课程的购物车代码的基础上,改进与增加:

  1. 改进-购物车类:尝试解决同一商品多次存储问题,解决购物车内商品数量问题。
  2. 改进-商品类:建议只包含商品相关的数据。
  3. 新增-商城类:商品初始化、商品搜索。该类仅处理数据,不得出现控制台输入、输出。
  4. 新增-菜单类:主要用于处理输出的信息。比如,显示主菜单或子菜单。
  5. 新增-Main类:该类主要用于处理输入输出、调用其他类进行数据处理。
  6. 新增-界面相关类:用于处理不同功能的一系列输入输出、调用其他类进行数据处理。这些代码可放入Main类,也可从Main类中抽取出来形成一个独立的类。
  7. 新增-其他类:比如工具类、其他功能相关的类。

注意:1. 尽量保证你的程序中只新建了一个Scanner类;2.尽量少用全局变量;3.负责数据处理的类(如,购物车类)尽量不包含控制台输入、输出的代码。

步骤:

  1. 前期调查与功能设计:调查京东商城或者亚马逊商城中的购物车,体验从搜索商品、加入购物车、操作购物车、下单全过程,思考该过程可能包含的类。演示中要求图多字少。
  2. 面向对象设计:以面向对象的方法编写购物车代码。先考虑有什么类,再考虑哪些功能、哪些数据、功能放到哪个类中合适。具体的,可完善课件中的中购物车代码。并增加商城类、菜单类等你需要的类。。注意学习类与类之间的关系(先重点掌握关联关系依赖关系)。类的设计详见参考资料2、3。
  3. 编码规范检查:使用英文对类、方法、包进行命名(查英文词典或英文搜索引擎,不得出现拼音)。类名不得使用动词,方法名一般来说应使用动词。参考JAVA编码规范,进行类命名,方法命名、包命名,合适的缩进,有意义的变量名。见参考资料1中的1.1-1.4。
  4. PPT制作或博客制作并上台演示:需上台演示的同学请制作PPT或博客。提交前,应先从头到尾自查一遍,再在同学面前展示一遍。
  5. 作图:思维导图(表示有层级关系的图,如系统功能架构图),UML图(确定好线型、箭头类型),截图(应在上面做出标记说明)。

注意:初期将重点放在面向对象设计、命名规范
以上任务,请小组组长明确分工,课堂展示时教师将针对每个组员负责的部分进行提问检查。
未完成所负责任务,考核不合格。

分工表格示例(请组长将上述任务妥善分配):

任务 姓名
类1、类2;功能1;面向对象设计、前期调查与功能设计 组长:张一
类3、类4;功能2;编码规范检查、前期调查与功能设计 张二
类5、类6;功能3;PPT制作或博客编写 张三

面向对象设计建议

  1. 系统的功能设计尽量简单,功能做到少而精。比如,建议系统只包含购物车相关功能与商品管理相关功能,而不用包含管理员、评价、订单等功能。
  2. 系统的主要功能分为购物车相关功能商品管理功能(初始化商品列表、商品搜索等)两大块。建议将这两大块功能放到两个不同的类中。
  3. 菜单代码放到一个类中,用户交互类代码可以放到Main类中也可以放到其他合适的类中,通用的工具类代码(比如对字符串、日期进行处理)可放到单独的类中。
  4. 必须包含购物车类。购物车类应只包含数据处理的代码不要包含任何用户交互代码(控制台输入与输出)
  5. 类的设计一定要从逻辑上思考是否合理,而不能仅从功能实现来考虑。比如,不能让购物车类继承自商品类
  6. 不能滥用static定义类、属性、方法。思考使用static方法的时机。
  7. 除非你明确知道要怎么用,否则不要用Map、LinkedHashMap等还未学过的接口与类。
  8. 建议以Java程序设计在线课程中的"3.7 案例(重要):面向对象-类的设计"章节的案例代码(较简单)为基础,在其上进行修改与扩充。也可参考"5.10 案例(重要):面向对象-购物车改进"中的案例代码(略复杂)。

课堂演示按顺序主要包含如下几个部分(博客编写也可按照如下顺序组织)

  1. 人员分工
  2. 前期调查。
  3. 系统功能结构图:可使用思维导图绘制。
  4. 系统描述:一段用来描述系统功能与流程的文字,用红色字代表可能的对象(名词)或属性,用蓝色字代表可能的方法(动词)。
  5. 类设计说明:类概述(每个类的用途)、类的关键属性与关键方法、类与类之间的关系。可选:类与类之间的关系可使用UML类图描述。建议使用ProcessOn绘制。
  6. 本系统哪里体现了面向对象的封装性?可选:哪里体现了继承、多态?
  7. 项目包结构(package的划分)与关键代码:项目的包结构(为什么要这样设计包结构),主要功能(如网购物车添加、删除商品)的流程图与关键代码。

考核前自查表格
提交老师进行答辩前,请先打印如下自查表格。

序号 自查项目 负责人
1 代码:编码规范(类、属性、方法、变量命名)、代码格式化(请使用IDE的代码格式化进行格式化) 张一
2 代码:是否去除了IDE中的警告(即,叹号)、包的划分 张二
3 代码:代码是否滥用了super() 张一
4 代码:如果使用了Map,请说明为何使用Map,在本系统中使用Map的优缺点 张三
5 代码:说明如何购物车内商品的数量 张三
6 博客、PPT:UML图、功能结构图与流程图的绘制、代码是否使用了Markdown语法展示 张二
7 设计:按照上面的面向对象设计建议进行了检查 张三

注意:

  • 编码规范与代码格式化请查看参考资料1中第一章"一、编码规约"。
  • 流程图、功能结构图与UML图中的线不要出现无必要的交叉、转折。
  • 每个人要对自己的任务负责。即使项目整体完成良好,自己负责的任务也可能被判定为不合格。

不合格的标准:

  • 自己完成的任务与参考资料中给定的模板、规范多处不一致。
  • 敷衍了事。
  • 不熟悉自己写的代码。回答自己负责的相关问题时,基本都不会。
  • 无自己编写的代码

参考资料:

  1. 阿里巴巴Java开发手册 终极版(1.3.0)
  2. 面向对象设计与UML类图中的什么是类如何绘制类图
  3. 5分钟读懂UML类图

第2次任务:迭代改进购物车1(面向对象设计改进、UML、包结构与Git)

目标:

  • 合理规划包结构
  • 使用git进行项目协同开发

代码阅读:
阅读面向对象设计案例代码,改进自己的购物车代码。见参考资料3中的人、借款者、姓名、地址StuManagementDemo.java

任务及设计注意事项:

  1. 购物车面向对象改造:不少同学的系统还是从功能出发,然后将功能写成方法生搬硬套到某个类上。请大家以面向对象的方式重新改造。设计是否合理,请按照如下原则判定:
    • 每个类中包含的方法是否合适。比如User类中包含showMenu(显示菜单)方法,显然不合理。实际上,User虽然需要进行显示菜单操作,但是菜单功能应该由商城相关类负责提供。
    • 涉及到继承的设计使用“is-a”准则来判定自己面向对象建模是否合理。比如,ShoppingMall is-a Commodity,这种设计显然不合理。初学者,暂且不要使用继承进行设计。
    • 类之间的关系设计是否合理?如,ShoppingCart与Commodity如果设计成1对1的关系(即一个ShoppingCart只能包含一个Commidty),显然不合理。
    • 控制台输入输出代码不要放到业务相关的类。比如将“请输入要查找的商品id”这种提示信息放在某个表示负责具体搜索任务(如,在某个数组中根据给定商品id查找该商品)的方法中,就是一种不好的设计。
  2. 为自己的面向对象系统绘制UML。见参考资料1、2。注意:UML中的不要包含太多细节(比如不要包含setter/getter方法),只要体现必要的属性、方法、类之间的关系即可。建议使用Processon绘制UML类图。图不要太大,可画多张图突出展示重点。
  3. 为自己的项目规划合理的包结构。见参考资料4。
  4. 使用Eclipse+Git方式管理你的项目。项目提交记录中应该体现不同成员的提交。见参考资料5。

答辩注意事项:
请先查看本博文中的"常见问题:前两次任务"小节中的两篇博客,将自己代码与博文中明显的错误进行修改。

  1. 常见问题:面向对象大作业第1、2次任务
  2. 面向对象设计大作业第一阶段常见问题

参考资料

  1. 深入浅出UML类图。注:这篇文章是5分钟读懂UML类图的详解版。
  2. 作业04-面向对象设计与继承中的2.1(面向对象设计)
  3. 面向对象设计案例代码
  4. OnlineShop项目模板
  5. 使用Eclipse Egit与码云管理你的代码

常见问题:前两次任务

  1. 常见问题:面向对象大作业第1、2次任务
  2. 面向对象设计大作业第一阶段常见问题

第3次任务:面向对象案例分析(已放入超星互评,可选)

  1. 完成作业04-面向对象设计与继承书面作业2.2ManagerTest.zip代码分析(继承、多态)
  2. 使用UML图绘制题目1中的各种类及类之间的关系。
  3. 上台讲解体现在ManagerTest.zip代码中体现的面向对象技术。
  4. 完成作业05-继承、多态、抽象类与接口中的4. 面向接口案例分析,并上台讲解。

第4次任务:迭代改进购物车2(购物车需求变更:使用继承、接口与多态)

目标

  • 掌握继承与多态
  • 掌握DAO模式

任务

  1. 使用子类与继承体现不同商品的特性:网上商城不同类别的商品有一些共同信息,比如商品名、价格。但有的信息并不相同。比如,书本可能包含出版社、ISBN、作者信息,手机则可能包含厂商、屏幕尺寸等信息。设计显示不同商品的页面,可根据商品的类别显示不同的信息。请根据改进后的需求重新设计商品类及相关类的继承架构。
  2. 使用多态、DAO模式为商城增加不同的存储方法:商城可能使用文件存储商品数据、也可能使用列表存储数据。尝试使用DAO模式实现此功能,使得涉及到存储相关的代码可以轻松在两种存储模式之间进行切换。请参考作业05-继承、多态、抽象类与接口中的4. 面向接口案例分析

DAO模式说明

  1. DAO模式主要用于数据存取。如果你的代码中包含对数据的存取(数组、列表、文件存取、数据库)操作,可以考虑设计DAO接口。
  2. 一般来是对某个实体(model)设计对应DAO接口。包含常见的对某个实体进行数据存取的方法。比如对用户实体(User对象),我们可以为其设计UserDao接口,如下所示:
interface UserDao{
    User getUserById(Long id); //通过id在后台查找相应的用户数据,组装成User对象后返回。找不到返回null
    List<User> getUsersByName(String name);  //根据name获得User列表,找不到返回空的List列表。
    int update(User user); //根据传入的user对象,更新后台已有的User对象数据,返回该操作影响的数据个数。这个已有的User对象数据可能存放在文件或数据库。
    boolean add(User user); //将传入的user对象添加到后台文件或数据库中,添加成功返回true。
    int deleteUserById(Integer id); //通过id删除后台的User对象数据,返回成功删除的个数。比如从从文件或数据库中删除,或者只是打上删除标记。
}

可以看到该UserDao接口包含的所有方法,基本上都是对后台数据的存取。

思考

  1. 对于我们的购物ShoppingCart类,需要设计ShoppingCartDao接口吗?
    首先要考虑你的系统中有没有需要将ShoppingCart存储到后来中的需要。如果你想设计一个类似京东的购物车,不管你有没有关机、在哪里登录都能获得购物车的数据。那么可以考虑设计一个ShoppingCartDao。如果你的购物车是一次性的,关机就没了,下回登录还是空的购物车。也就是说不需要存储购物车的数据,那么就不需要为ShoppingCart类设计相应的DAO接口。
  2. 设计与实现ShoppingCartDao需要考虑什么?
    首先需要考虑最常用的操作是什么?比如,根据用户id返回购物车ShoppingCart getCarByUserId(Long id)、将购物车信息保存到后台boolean saveCartInfo(ShoppingCart cart)。然后再考虑到底需要将什么数据存储到后台。比如京东购物车是与每个用户(User)绑定,还包含了商品列表。那么在设计相应的DAO接口的时候,就要考虑有对这两类信息存取到后台的方法。实现的时候还要考虑具体对哪些数据实现存取,是否需要存取整个User对象的信息与商品对象的信息。
    大家可以再思考一下,有必要将商品加入购物车、结算等方法放入ShoppingCartDao中?

参考资料

第5次任务:迭代改进购物车3(添加图形界面)

目标:

  • 掌握图形界面编程
  • 掌握MVC模式
  • 懂得使用package合理划分包结构。

报告应按顺序包含如下内容:

  1. 简述:主要使用了什么方法、什么工具对系统做出了哪些改进。亮点在哪里?难点在哪里?
  2. 运行截图。注:不得使用Eclipse启动,应通过双击某个.jar或.exe文件的形式进行启动。
  3. 简述:系统中使用的MVC模式。并明确自己的系统中M、V、C各有什么类?可以用一个完整的功能演示与代码来说明C如何协调M与V完成该功能。
  4. 简述:如何对项目中的类使用包进行管理。结合MVC,阐述为什么要这样分包。见OnlineShop项目模板
  5. 简述:能否直接复用以前编写的系统代码?在复用以前的代码时,会碰到什么问题。
  6. 可选:你的git仓库。

报告中无需包含:
系统功能架构图等。

编程中应避免的情况:

  1. 界面上的动态数据(比如购物车的商品数据)不得直接写死在代码。
  2. 尽量避免使用无模式窗体。窗体跳出时,不得出现在左上角。

建议:
使用JTable展示数据。

参考资料:

1. MVC模式简介-主要看StudentController是怎样协调Model与View
2. OnlineShop项目模板
3. JTable常见用法细则
4. JTable案例-Netbeans项目


第6次任务:面向对象大作业-自主选题

本次选题可以用于课程设计。建议及早准备,为期末的课程设计打下良好的基础。

基本要求与完成步骤

团队:3-4人合作。人越多,对组长的能力(任务分解、知人善用)要求越高,建议组长量力而行。
建议:更多把精力放在面向对象设计上面。不建议实现太复杂的功能(功能越复杂,设计越难做好)。
使用AI:建议使用AI辅助选题。主要分为这几个步骤:

  1. 将你所要做的大致内容告诉AI,让他给你一些选题思路。然后逐步给出更准确、更细致的你所要做的东西的功能描述。
  2. 询问你感兴趣的选题的技术栈。描述时尽量加入一些限定词,比如说java、swing、java web等。
  3. 在AI的帮助下逐步确定系统的几个主要流程、几个主要功能模块。
  4. 组长可以询问一下如果要完成这个任务有什么任务分工的建议。
  5. 针对每部分所要完成的功能模块逐步细化描述。

基本步骤

  1. 确认选题
    确定要解决什么问题。
    建议找一些实际问题进行解决(比如处理Excel文件、生成Word文档、存在txt中的数据、冗余数据等等)。
    也可以找一些传统的问题进行练习。比如,学生管理、图书管理、通讯录管理、邮件系统。
    也可以直接选择课程设计的题目。有一些题目很大,暂时无法一下解决不了,但可以先思考。先设计。
  2. 系统功能设计与前期准备
    这部实际上是确定系统的边界。确定哪些是不要做的,那些是要做的。确定边界有助于聚焦焦点。建议不要做的太复杂。
    考虑数据怎么存储(使用文件还是数据库还是直接在内存中),界面是什么(控制台、GUI、GUI中什么控件)。
    使用什么工具(Eclipse)?要不要用Git管理代码?
  3. 面向对象设计
    根据系统功能进行类的设计。
    思考哪些数据放在那些类中,哪些功能放在哪些类中。
    合理规划包、类的命名。
  4. 编程
    建议大家分工完成。使用Git管理代码有加分
  5. 测试
    对一些常见功能建立测试用例(就是一些常见的测试数据,类似PTA题目的各种特殊情况下测试用例)。当代码修改的时候,可以快速检测代码是否能正常运行。
    建议使用JUnit
  6. 发布
    你的程序最好能独立运行(比如发布成jar包或.exe)。要脱离了开发环境也能运行。
  7. 宣传
    一个好的宣传(博客、课堂展示)可以让你的程序传播的更远,让你的程序更容易被接受。

面向对象大作业题目参考

1.教务管理系统、公选课选课系统

教务管理系统:
管理员想管理多个班级与学生,每个班级可以有多个学生、但每个学生只能属于一个班级。管理员希望可以对学生实现增删改查。请以面向对象的方式设计这个学生管理系统。
提示:菜单可以单独设计成一个类,专门用来处理输入、输出。
进阶:引入课程、成绩、老师。

公选课选课系统:
模拟你们使用的公选课系统。支持教师开设课程,学生搜课、选课(要有人数限制)、退课、查看选课结果,管理员管理所有课程。

2. QQ或微信联系人的通讯录、信息发送

3. 电子邮件系统、图书馆

电子邮件系统:不需要真正实现通过SMTP发送邮件、POP接收右键的功能,只是模拟管理。
图书馆:至少包含图书管理员、学生两大角色,包含对学生的简单管理与图书的管理(实现查书、借书、还书)。

4. 游戏类

请参考Java第05次实验提纲(Java图形界面编程)中的游戏参考资料。

5. 数据处理类系统

可以处理Txt、Excel文件、Word文档、数据库里的数据

6. 课程设计相关

课程设计选题

7. 团队管理迭代改进任务

面向对象大作业(自主选题)-第一次提交

请针对面向对象设计大作业迭代任务第6次任务:面向对象大作业-自主选题任务提交你们的博客链接。

所需提交资料:选题名称,博客链接,组员名单。
如:图书馆,你的博客链接,张三、李四、王五。

博客内容

  1. 选题与前期调查。
    想要做什么:简述自己要做的系统。
    别人是怎么做的:这里可以展示其他人已完成的系统。加上参考链接即可。
    准备实现哪几部分:我准备实现哪几部分。
  2. 系统功能设计
    系统所要实现的功能:功能1、功能2、功能3.
    数据如何存储:文件、数据库、内存。
    界面:GUI、控制台。
    开发工具:Eclipse, NetBeans, JUnit, git, 阿里巴巴代码规约IDE插件。

面向对象设计优秀作业

网络18-基于MySQL的购物车-谢晓淞、李天明、康友煌、严威,对MVC与DAO模式有自己的描述。
网络17-购物车-面向对象设计-余景胜、刘格铭组
网络17-购物车-GUI-兰泽祥、吴修恩组
网络17-购物车-GUI-何昕桐、李志婷、梁琦珧、陈慧琳

posted on 2018-09-20 08:20  zhrb  阅读(6186)  评论(3编辑  收藏  举报