哈工大2020春软件构造期末试题:参数合法性检测与诗歌类实现

需积分: 0 0 下载量 23 浏览量 更新于2024-08-05 收藏 596KB PDF 举报
"哈尔滨工业大学2020年春季学期软件构造期末考试试题" 这份试题主要涉及两个知识点:Java编程中的参数合法性验证以及面向对象程序设计中的抽象数据类型(ADT)。 1. Java参数合法性验证: 题目要求在方法`method`中使用assert语句对传入的参数`String credit`进行预条件(pre-condition)检查,确保其符合特定的格式,即"在[1,10]范围内的正整数,或正整数后面带有小数点0.5"。这涉及到Java中的正则表达式和字符串处理。合法的`credit`格式可以由以下正则表达式表示:`^[1-9]\d*(\.5)?$`,其中`^`表示字符串开始,`\d*`匹配任意数量的数字,`[1-9]`确保数字至少为1,`(\.5)?`允许出现一次小数点后跟0.5,`$`表示字符串结束。因此,对应的Java代码可以写为: ```java public void method(String credit) { assert credit.matches("[1-9]\\d*(\\.5)?") : "Invalid input format for credit!"; // 此处开始为method所完成的常规逻辑,无需填写 } ``` 这段代码首先检查`credit`是否匹配上述正则表达式,如果不匹配,则assert语句抛出一个AssertionError,并附带错误信息"Invalid input format for credit!"。 2. 面向对象编程(OOP)与抽象数据类型(ADT): 题目中给出的`Poem`类是一个简单的ADT,代表了一首诗,包含了四个属性:标题(title)、作者(author)、诗行(lines)和发表日期(date)。这个ADT的设计体现了面向对象的思想,通过封装实现了数据隐藏,只暴露了对外接口。 - `Poem`类的构造函数用于初始化一个新诗实例,接受标题、作者、诗行列表和日期作为参数。 - `addOneLine`方法用于向诗中添加一行内容,体现了ADT的可变性。 - `plagiarize`方法创建了一个新的`Poem`对象,其作者更改为参数`newAuthor`,这展示了类的继承特性,即使没有明确的继承关系,但可以通过创建新对象并修改部分属性来模拟。 - `addPrefix`方法向所有诗行添加前缀,这是ADT操作的一个例子,改变了对象的状态而不改变其身份。 这个ADT的设计鼓励了代码的复用和模块化,每个方法都专注于其特定的任务,使得代码易于理解和维护。同时,通过封装保护了内部数据不被外部随意修改,确保了数据的安全性。