资讯专栏INFORMATION COLUMN

软件构造lab2

孙吉亮 / 693人阅读

摘要:本次实验训练抽象数据类型的设计规约测试,并使用面向对象编程技术实现。改成泛型将函数声明和调用等修改一下即可调用之前我们实现的一个图结构实现方法如下读取文件输入,识别序列,构建图结构。

本次实验训练抽象数据类型(ADT)的设计、规约、测试,并使用面向对象编程(OOP)技术实现 ADT。

3.1 Poetic Walks
建立对ADT的基本印象,比如如何设计一个能够泛型化的ADT。
加深对AF,RI,rep exposure 这些抽象概念的理解
这个实验给出了一个如何设计泛型ADT的方法,首先先针对某一个特定实例设计具体的ADT:

给出接口Graph
通过不同方法实现该接口,对于该类的实现遵循ADT设计的基本方法,写好Spec,AF,RI,并避免泄露,
3.1.1 Get the code
实验报告中给出了github仓库的的地址

3.1.2 Problem 1: Test Graph
进行测试。

3.1.3 Problem 2: Implement Graph
两种方式实现Graph。

3.1.3.1 Implement ConcreteEdgesGraph

Edge类实现
Edge包含两个String类型,source和target存放每个边的起点终点,一个int类型weight保存权重。

ConcreteEdgesGraph实现
ConcreteEdgeGraph类中含有成员变量:
vertices
edges

3.1.3.2 Implement ConcreteVerticesGraph

Vertex类:
包含一个String类型 label存放该顶点的标签名称,
Map类用于存放以该点为起点的边的信息,即终点和权重

ConcreteVerticesGraph类
ConcreteEdgeGraph类中含有一个成员变量
vertices顶点列表。

3.1.4 Problem 3: Implement generic Graph
改成泛型:将函数声明和调用等修改一下即可

3.1.5 Problem 4: Poetic walks
调用之前我们实现的一个GraphADT图结构实现

3.1.5.1 Implement GraphPoet
方法如下:
GraphPoet
读取文件输入,识别序列,构建图结构。相邻元素,在图中新增边。
poem
两个连续单词A B,利用sources函数,检查图中B的前一个单词,比如存在C到B的边,还存在D到B的边,那就检查C的前一个单词,比方说A到C没有边,A到D有边,那就说明有路径ADB,那么打印诗句的时候就打印ADB

3.2 Re-implement the Social Network in Lab1
利用前面实现的graph,重新实现Social Network。

3.2.1 FriendshipGraph类
函数声明:
addVertex
addEdge
getDistance
多调用Gragh中的函数,很容易改写

3.2.2 Person类
只需要一个label表示姓名即可:

3.3 Playing Chess
ADT设计/实现方案
ACTION BOARD PIECE PLAYER POSITION
PIECE类,int belong记录是哪一方的子,String label记录KING.QUEEN等

POSITION类,记录坐标,每个position都有一个piece,当然棋子的起始设为0,隐形子,相当于没有子

PLAYER类,记个名字就好

BOARD类,构造方法中参数决定棋盘的大小

ACTION类,按指导书的要求完成
心得:
面向ADT的编程和直接面向应用场景编程,需要适应它们的区别
初步体会使用泛型的好处
一个ADT可以在多个应用场景下使用,这种复用,很舒服
为ADT撰写specification, invariants, RI, AF,时刻注意ADT是否有rep exposure,是很重要的

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77899.html

相关文章

  • Android 将数据写入Execl格式导出U盘、发送邮件

    摘要:创建写入数据导入盘创建表创建表表名页数在指定单元格插入数据标签标签标签标签从内存中写入文件中向写入数据数据邮箱地址写入的路径,比如盘路径当前行数数据数据数据数据判断是写入盘还是发送邮件导出盘中等待进度条导入盘完成获取文件夹卡指定文件夹保存创建Execl、写入Execl数据、导入U盘 public WriteExcel(Context mContext){ this.mContext...

    hankkin 评论0 收藏0
  • ucore操作系统实验笔记 - Lab2

    摘要:操作系统课程笔记光就实验而言并不难,但实验外的东西还是很值得研究的。系统内存的探测中断与参数在我们分配物理内存空间前,我们必须要获取物理内存空间的信息比如哪些地址空间可以使用,哪些地址空间不能使用等。 操作系统课程笔记 - Lab2 Lab2光就实验而言并不难, 但实验外的东西还是很值得研究的。指导书上也说了,Lab1和Lab2对于初次接触这门课的同学来说是一道坎,只要搞懂了这两Lab...

    CODING 评论0 收藏0
  • APK自我保护 - 代码乱序

    摘要:传送门自我保护代码乱序乱序原理为了增加逆向分析的难度可以将原有代码在格式上进行乱序处理同时又不会影响程序的正常运行。代码对比生成的不能直接用查看源码,所以可以工具转化为文件上边为未做处理的反编译代码,下边为乱序后的代码。 代码乱序是指在不影响原有的代码逻辑,打乱代码布局,增加逆向分析的难度。代码乱序的原理与操作并不复杂,但是必须分析编译后的源码逻辑,而且实际运用到生成中难度比较大,所以...

    JiaXinYi 评论0 收藏0
  • 三年半Java后端面试经历

    摘要:经过半年的沉淀,加上对,和分布式这块的补齐,终于开始重拾面试信心,再次出征。面试官提示没有提到线程的有内核态的切换,程只在用户态调度。三面综合技术面这面面的是阵脚大乱,面试官采用刨根问底的方式提问,终究是面试经验不够,导致面试的节奏有点乱。 经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征。 鹅厂 面试职位:go后端开发工程师,接受从Jav...

    kviccn 评论0 收藏0
  • 第6章:可维护性软件构建方法 6.1可维护性的度量和构造原则

    摘要:设计方案的容易改变这就是所谓的软件构建的可维护性,可扩展性和灵活性。这也可能表明类型或方法可能难以维护。基于源代码中不同运算符和操作数的数量的合成度量。对修改的封闭这种模块的源代码是不可侵犯的。 大纲 软件维护和演变可维护性度量模块化设计和模块化原则OO设计原则:SOLIDOO设计原则:GRASP总结 软件维护和演变 什么是软件维护? 软件工程中的软件维护是交付后修改软件产品以纠正故障...

    chanjarster 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<