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相关推荐

  1. 软件构造学习笔记-实验3

    本次实验要求从五项要求(航班管理.高铁车次管理.操作系统进程管理.大学课表管理.学习日程管理)里完成三项要求,并且尽量实现复用. 面向可复用性和可维护性的设计:PlanningEntry 1.首先设计 ...

  2. 软件构造学习笔记-实验4

    磕磕绊绊也算是完成了最后一个实验.记录一下实验中遇到的问题. IDEA中SpotBugs的安装和使用 从网上找教程,都说IDEA没有使用版权.结果我直接在插件中就找到了.点击安装并重启即可. 使用时, ...

  3. 软件构造学习笔记-实验1

    记录一下做实验1时遇到的问题. 准备工作 1.GitHub的注册和配置 由于之前没有接触过GitHub,所以碰到了一些问题.GitHub是什么?怎么建立GitHub远程仓库与本地仓库的连接?怎么在Gi ...

  4. 软件构造学习笔记-第八周

    本周重点是Liskov可替换原则.它要求父类和子类的行为一致性,子类要有更强的不变量.更弱的前置条件.更强的后置条件.在该原则的要求下,每个子类都可以对父类进行替换.这在开发过程中会带来极大的便利,在 ...

  5. 软件构造学习笔记ATD

    在面向对象的编程中,ADT的编写十分重要,与传统的c语言不同,面向对象的编程更加商业化一点,所以保密需要做好,有点商业机密的感觉.如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示,避 ...

  6. 软件构造学习笔记(九)面向复用的软件构造技术

    目录链接 Part I What is Software Reuse? Part II How to measure "reusability"? Part III Levels ...

  7. 哈工大软件构造学习笔记1 Views and Quality Objectives of Software Construction

    先要搞清楚软件构造的对象是什么,如何刻画,在关注如何构造. 1,Five key quality objectives of software construction 软件构造的五个关键质量目标 容 ...

  8. 哈工大2022春软件构造学习笔记1

    课程概述 第一部分:软件构造基础 第二部分:ADT+OOP 第三部分:面向可复用性和可维护性的软件构造 第四部分:面向健壮性与正确性的软件构造 第一章 软件构造的多维度视图和质量目标 软件构造的多维度 ...

  9. 软件构造学习笔记-第九周、第十周

    因为本周五开始五一假期,所以只有一节软件构造课.因为内容还属于创建模式.结构模式.行为模式.将该堂课的内容整合到本博客中.本周的重点是程序开发模式,在写代码之前首先充分考虑采用哪种模式更有利于开发.维 ...

最新文章

  1. Cnnot find System Java Compiler Ensure that you have installed a JDK
  2. jquery通知插件toastr
  3. centos 5.5中如何由一般用户切换为root用户
  4. 一些变态的PHP一句话后门收集
  5. jquery学习手记(8)遍历
  6. Mysql数据库设计规范之四数据库操作行为规范
  7. shader变体是什么_shader 里面的分支
  8. 虚拟机+linux(NeoKylin)网络配置问题:UDP广播不能发送接收数据问题系列解决
  9. DevOps原则,听伍道长细细道来
  10. 计算机进去bios方式,bios怎么轻松进入?电脑进入bios方法大全
  11. 主题和母版页(母版页)
  12. 【链表】leetcode19.删除链表的倒数第N个节点(C/C++/Java/Js)
  13. wireshark Fiddler抓包分析与解密https Fiddler修改https请求和响应
  14. IntelliJ IDEA 2018版本操作总结(长期更新)
  15. 免费发布友情链接的渠道
  16. 博客推广,推广博客(转载)
  17. 下载和玩经典游戏的最佳网站
  18. 拉绳式位移计用于山体滑坡裂缝中
  19. Windows: Longmai GM3000 ukey修改注册表实现是否清PIN码方法
  20. 适合安装语音报警器的地方有哪些

热门文章

  1. 第二章指南(4.2)添加 Controller
  2. 手机的小窗口怎么弄_荣耀9X如何设置桌面小工具?划重点,这个要考
  3. linux终端常用命令和windows终端常用命令对比
  4. Android之数据转化崩溃问题
  5. java中s方法_Java中Arrys数组常用的方法
  6. linux ini文件,Shell script - Linux下解析ini配置文件
  7. 中yeti不能加载_将 PQ 查询加载到 Excel 中进行分析的三种常用的方式
  8. postman安装_Postman插件的应用与实战(二)
  9. 为什么卫星天线长得像口大锅?
  10. 13个圆可以画什么?数学与艺术完美邂逅!原来数学也可以这么美