摘要:本次实验训练抽象数据类型的设计规约测试,并使用面向对象编程技术实现。改成泛型将函数声明和调用等修改一下即可调用之前我们实现的一个图结构实现方法如下读取文件输入,识别序列,构建图结构。
本次实验训练抽象数据类型(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
摘要:经过半年的沉淀,加上对,和分布式这块的补齐,终于开始重拾面试信心,再次出征。面试官提示没有提到线程的有内核态的切换,程只在用户态调度。三面综合技术面这面面的是阵脚大乱,面试官采用刨根问底的方式提问,终究是面试经验不够,导致面试的节奏有点乱。 经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征。 鹅厂 面试职位:go后端开发工程师,接受从Jav...
摘要:设计方案的容易改变这就是所谓的软件构建的可维护性,可扩展性和灵活性。这也可能表明类型或方法可能难以维护。基于源代码中不同运算符和操作数的数量的合成度量。对修改的封闭这种模块的源代码是不可侵犯的。 大纲 软件维护和演变可维护性度量模块化设计和模块化原则OO设计原则:SOLIDOO设计原则:GRASP总结 软件维护和演变 什么是软件维护? 软件工程中的软件维护是交付后修改软件产品以纠正故障...
阅读 1829·2021-11-11 16:54
阅读 2055·2019-08-30 15:56
阅读 2364·2019-08-30 15:44
阅读 1280·2019-08-30 15:43
阅读 1855·2019-08-30 11:07
阅读 812·2019-08-29 17:11
阅读 1464·2019-08-29 15:23
阅读 3006·2019-08-29 13:01