面向对象设计大作业第二阶段:QQ的“联系人”功能

1.功能调查与系统功能框架图

1.1 功能调查

本次面向对象设计大作业功能调查是基于QQ电脑版功能进行调查的,点开QQ首先需要输入用户名和密码进行登录

在主界面我们可以看到分组以及分组内的联系人

具体点开某个联系人的资料卡,我们可以查看当前联系人的各项基本信息

1.2 系统功能框架图


2.类的设计:UML类图

2.1 MVC模式图

2.2 Model实体类之间的继承关系以及DAO接口的实现

2.3 主控流程类


3.类说明:说明主要类的属性和主要方法。

  1. Person类,联系人

    • 主要属性
      • QQ:Integer ,QQ号
      • nickname:String ,联系人昵称
      • notes:String ,备注
      • group:String ,所属分组
      • sex:Gender ,性别
      • age:Integer ,年龄
      • birthday:Calendar ,出生年月日
      • constelletion:Constelletion ,星座
      • twelveAnimals:String ,生肖
      • address:Address ,所在地
    • 主要方法
      • setConstelletion():void ,根据出生年月日来设置星座
      • settwelveAnimals():void ,根据出生年月日来设置生肖
  2. ContactsDAOListImpl类,ContactsDAO接口List实现类,MVC模型类

    • 主要属性
      • groupList:List,所有的分组。分组可能不止有一个,因而用List存储,下标对应personList中某个分组名。
      • personList:List<List>,所有的联系人。在List中嵌套List,外层List用于存储每个分组,内层List用于存储分组内的联系人,下标对应groupList中某个分组的联系人。
    • 主要方法
      • add(Person p):boolean,添加联系人。
      • delete(String QQ):boolean,删除联系人。
      • search(String QQ):Person,根据QQ号查找对应的联系人。
      • getGroups():List,获取所有分组。
      • getPersons(String group):List,获取某个分组下的所有联系人。
      • writeContacts(OutputStream out):boolean,将联系人写入文件。
  3. ContactsDAOMapImpl类,ContactsDAO接口Map实现类,MVC模型类

    • 主要属性
      • contactsMap:Map<String, List>,分组与其内的联系人映射表。用一个Map可以很好地表示分组与其联系人的关系,keyset存放所有分组,valueset存放相应分组的所有联系人。
    • 主要方法
      • add(Person p):boolean,添加联系人。
      • delete(String QQ):boolean,删除联系人。
      • search(String QQ):Person,根据QQ号查找对应的联系人。
      • getGroups():List,获取所有分组。
      • getPersons(String group):List,获取某个分组下的所有联系人。
      • writeContacts(OutputStream out):boolean,将联系人写入文件。
  4. PersonView类,MVC视图类

    • 主要属性
      用于视图展示,无属性。
    • 主要方法
      • printPerson(Person p):void,输出某个联系人的详细信息。
  5. ContactsController类,MVC控制类

    • 主要属性
      • contacts:ContactsDAO,联系人列表。
      • personView:PersonView,展示视图。
    • 主要方法
      • addPerson(Person p):boolean,调用contacts添加联系人。
      • delete(String QQ):boolean,调用contacts删除联系人。
      • search(String QQ):Person,调用contacts查找联系人。
      • writeContacts(OutputStream out):boolean,调用contacts将联系人写入文件。
      • printPeron(String QQ):void,调用personView展示联系人详细信息。
  6. Log类,登录注册类

    • 主要属性
      用于登录注册,无属性。
    • 主要方法
      • login(String name, String pwd):User,登录。
      • logon(String name, String pwd):boolean,注册。

4.系统的包(package)的规划设计


5.特色:

5.1 是否使用DAO模式?带来了什么好处?

是,使用了DAO模式,使用DAO模式的好处有

  • 隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。
  • 能够很方便地在两种或者两种以上的数据存储方式中快速切换。当需要添加新的数据存储方式的时候,只需要实现一个新的DAO接口实现类即可,而无需重写代码。降低了代码的藕合性,提高了代码扩展性和系统的可移植性。

5.2 是否使用MVC模式?哪里体验?

是,使用了MVC模式,在此次设计中将ContactsDAO(及其实现类)作为Model,将PersonView作为View,将ContactsController作为Controller,ContactsController将PersonView中更新得到的数据传递给ContactsDAO(及其实现类),ContactsDAO(及其实现类)更新内部的数据之后反馈给PersonView,更新视图(详细图解见2.1 MVC模式图),将ui界面和内部数据处理分割开来,有利于分层开发。

5.3 是否进行数据持久化(数据存储)?准备使用什么方案?

是,将要进行数据持久化(数据存储),准备将用户信息(用户名和密码)和各个用户的联系人列表存储在txt文本文件中,程序开始运行时读取用户信息文件进行登录,成功登录之后,读取该用户的联系人列表文件创建联系人列表;程序结束时,将更新后的联系人列表写入到登录用户对应的联系人列表文件中。

5.4 是否使用阿里巴巴代码规范扫描插件对项目代码进行扫描?

是,已经使用阿里巴巴代码规范扫描插件对项目代码进行扫描。
初次扫描

第一次修正后再次扫描

第二次修正后扫描

5.5 是否使用Git管理代码?

是,已使用Git管理代码,代码仓库地址:QQ的联系人功能


posted @ 2020-12-09 20:21  朱振豪  阅读(240)  评论(0编辑  收藏  举报