软件构造学习笔记-实验2
P1
1.设计目标
首先对图的ADT进行两种实现(从边和顶点出发),然后选择一种实现的ADT,根据输入的文件构建语料库,再利用构建的语料库,对输入字符串进行插入操作,并返回修改后的字符串。
2.有关AF和RI的概念,在实验刚开始时是没有讲到的。进一步学习之后才完成代码的这个部分。
AF:R->A(抽象函数)给出R空间的数据,如何映射到A空间的解释。
RI:R->boolean(表示不变性)某个具体的表示是否是合法的。也可以将RI看成所有表示值的一个子集,包含了所有合法的表示值。同时可以将RI看作描述什么是合法表示值的条件。
3.接口是不允许存在构造方法的,因为接口无法被实例化。接口中可以存在工厂方法,返回接口的实现的实例,从而构造出具有接口所有方法的实例。
4.在不可变类中,方法不能直接返回可变的引用类型。因为这么做会造成表示暴露。正确的做法应该是返回其复制,即防御式拷贝。
P2
1.有关private成员域的继承问题
在实现FriendshipGraph类时,老师明确要求用继承写,而不能调用Graph的工厂方法创建图的实例。这让我很疑惑,因为刚完成的图的两种实现中,它们的成员域都是private final修饰的,也就是说无法被继承的。既然没有父类的成员域,那怎么完成使用父类成员域的成员方法呢?
从网上查找博客,我了解到,父类的privare成员域其实是被继承了,但是子类没有访问权限,只能通过调用继承父类的方法,对父类的private成员域进行修改。这也就能说得通了。
P3
1.将小的、表示数据的类设置成不可变类。如Player类、Piece类、Positon类。而Board类则必须是可变类,因为棋盘上的棋子会发生变化。
2.关于如何实现游戏结束后查看走棋历史,我选择在Action类中设置一个StringBuilder成员域,在每个操作调用完成后,在该成员域添加一行操作信息。当需要查看走棋历史时,将其转化成String类型并返回即可。
3.客户端代码设计
-初始化
获得输入信息后,对游戏进行初始化。由于两类游戏的棋盘大小和棋子的初始状态不同,而玩家信息相同,所以在创建玩家实例之后对两种游戏分别进行初始化。在初始化象棋游戏时,将象棋棋子添加到棋盘上。
-进行游戏
用int类型的变量operation记录用户输入的操作,从1到8每个数字代表一种操作,在终端中显示(通过调用printMenu方法)。然后将该值传入performAction方法,进行对应操作。该方法返回布尔值,标记是否操作成功。如果操作成功,则进入对方回合(round取反),否则仍是当前玩家的回合。
-游戏结束
游戏结束时会提示玩家是否查询走棋信息。如果是,则打印走棋历史,否则直接退出游戏。
软件构造学习笔记-实验2相关推荐
- 软件构造学习笔记-实验3
本次实验要求从五项要求(航班管理.高铁车次管理.操作系统进程管理.大学课表管理.学习日程管理)里完成三项要求,并且尽量实现复用. 面向可复用性和可维护性的设计:PlanningEntry 1.首先设计 ...
- 软件构造学习笔记-实验4
磕磕绊绊也算是完成了最后一个实验.记录一下实验中遇到的问题. IDEA中SpotBugs的安装和使用 从网上找教程,都说IDEA没有使用版权.结果我直接在插件中就找到了.点击安装并重启即可. 使用时, ...
- 软件构造学习笔记-实验1
记录一下做实验1时遇到的问题. 准备工作 1.GitHub的注册和配置 由于之前没有接触过GitHub,所以碰到了一些问题.GitHub是什么?怎么建立GitHub远程仓库与本地仓库的连接?怎么在Gi ...
- 软件构造学习笔记-第八周
本周重点是Liskov可替换原则.它要求父类和子类的行为一致性,子类要有更强的不变量.更弱的前置条件.更强的后置条件.在该原则的要求下,每个子类都可以对父类进行替换.这在开发过程中会带来极大的便利,在 ...
- 软件构造学习笔记ATD
在面向对象的编程中,ADT的编写十分重要,与传统的c语言不同,面向对象的编程更加商业化一点,所以保密需要做好,有点商业机密的感觉.如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示,避 ...
- 软件构造学习笔记(九)面向复用的软件构造技术
目录链接 Part I What is Software Reuse? Part II How to measure "reusability"? Part III Levels ...
- 哈工大软件构造学习笔记1 Views and Quality Objectives of Software Construction
先要搞清楚软件构造的对象是什么,如何刻画,在关注如何构造. 1,Five key quality objectives of software construction 软件构造的五个关键质量目标 容 ...
- 哈工大2022春软件构造学习笔记1
课程概述 第一部分:软件构造基础 第二部分:ADT+OOP 第三部分:面向可复用性和可维护性的软件构造 第四部分:面向健壮性与正确性的软件构造 第一章 软件构造的多维度视图和质量目标 软件构造的多维度 ...
- 软件构造学习笔记-第九周、第十周
因为本周五开始五一假期,所以只有一节软件构造课.因为内容还属于创建模式.结构模式.行为模式.将该堂课的内容整合到本博客中.本周的重点是程序开发模式,在写代码之前首先充分考虑采用哪种模式更有利于开发.维 ...
最新文章
- Cnnot find System Java Compiler Ensure that you have installed a JDK
- jquery通知插件toastr
- centos 5.5中如何由一般用户切换为root用户
- 一些变态的PHP一句话后门收集
- jquery学习手记(8)遍历
- Mysql数据库设计规范之四数据库操作行为规范
- shader变体是什么_shader 里面的分支
- 虚拟机+linux(NeoKylin)网络配置问题:UDP广播不能发送接收数据问题系列解决
- DevOps原则,听伍道长细细道来
- 计算机进去bios方式,bios怎么轻松进入?电脑进入bios方法大全
- 主题和母版页(母版页)
- 【链表】leetcode19.删除链表的倒数第N个节点(C/C++/Java/Js)
- wireshark Fiddler抓包分析与解密https Fiddler修改https请求和响应
- IntelliJ IDEA 2018版本操作总结(长期更新)
- 免费发布友情链接的渠道
- 博客推广,推广博客(转载)
- 下载和玩经典游戏的最佳网站
- 拉绳式位移计用于山体滑坡裂缝中
- Windows: Longmai GM3000 ukey修改注册表实现是否清PIN码方法
- 适合安装语音报警器的地方有哪些
热门文章
- 第二章指南(4.2)添加 Controller
- 手机的小窗口怎么弄_荣耀9X如何设置桌面小工具?划重点,这个要考
- linux终端常用命令和windows终端常用命令对比
- Android之数据转化崩溃问题
- java中s方法_Java中Arrys数组常用的方法
- linux ini文件,Shell script - Linux下解析ini配置文件
- 中yeti不能加载_将 PQ 查询加载到 Excel 中进行分析的三种常用的方式
- postman安装_Postman插件的应用与实战(二)
- 为什么卫星天线长得像口大锅?
- 13个圆可以画什么?数学与艺术完美邂逅!原来数学也可以这么美