其他分享
首页 > 其他分享> > BUAA-OO第三单元总结

BUAA-OO第三单元总结

作者:互联网

目录

总述

本单元的任务是实现简单的社交网络关系的模拟和查询, 包括人与人互动、消息收发等操作。学习目标是理解JML规格在面向对象设计与构造中的重要意义,并掌握利用JML规格提高代码质量的能力。官方包已经通过JML给定了整个社交网络的基本功能规格,如何设计层次之间的交互方法甚至额外层次是本单元作业的关键。

一、基于JML规格准备测试数据

JML为测试提供了划分依据和判定依据,代码需要实现的功能规格都已给出,可以针对每个具体方法构造单独构造测试数据。依据前置条件分别构造满足不同前置条件的数据类型,通过后置条件和不变式检查结果,以及异常行为是否正确。而用Junit可以实现测试执行的自动化。

仍然需要注意构造边界数据,比如 group 中人数上限是1111。针对age相关计算、不同类型消息的收发操作构造特殊数据。

由于部分操作需要遍历,如果没有没有采用合适的数据结构或算法,所有的查询和分析都要遍历整个大图,性能会极低,可以针对此类操作如qgav、 qbs、qlc等构造大量查询的数据。

二、架构设计与图模型构建和维护策略

2.1 第一次作业

2.2 第二次作业

2.3 第三次作业

三、性能问题和修复情况

四、NetWork 的扩展

4.1 要求

假设出现了几种不同的Person

如此Network可以支持市场营销,并能查询某种商品的销售额和销售路径等 请讨论如何对Network扩展,给出相关接口方法,并选择3个核心业务功能的接口方法撰写JML规格(借鉴所总结的JML规格模式)。

4.2 规定

为了扩展NetWork,做出如下规定:

为满足新规定,Network 新增:

/*@ public instance model non_null Product[] products;
  @*/

//@ ensures \result == (\exists int i; 0 <= i && i < products.length; products[i].getId() == id);
public /*@ pure @*/ boolean containsProduct(int id);

/*@ public normal_behavior
  @ requires containsProduct(id);
  @ ensures (\exists int i; 0 <= i && i < products.length; products[i].getId() == id &&
  @         \result == products[i]);
  @ also
  @ public normal_behavior
  @ requires !containsProduct(id);
  @ ensures \result == null;
  @*/
public /*@ pure @*/ Product getProduct(int id);

4.3 实现

五、心得体会

总体来说,本单元作业没有前两个单元难度大。所有方法的具体操作都由JML明确规定,但同时需要我们严格遵守规格。jml 作为一种接口规格语言,可以准确定义和表示方法行为的正确性,提供了一种通过逻辑来检查代码的方式。

通过本单元的练习,我学会了jml的方法规格表示和基于规格的测试方法,以及类型层次下的规格分析设计,体会到了jml的优势。但在阅读一些比较复杂的jml描述时需要花很长时间理解,比如对qlc、qbs等方法的描述,面对复杂的jml时,可以通过画图、转换自然语言等加快理解。

此外,在作业中巩固了许多图论算法及其优化。

标签:OO,get,int,BUAA,getPerson,root1,id,单元,root2
来源: https://www.cnblogs.com/wwllll/p/16344623.html