杨龙升三次大作业总结
前言
这几次大作业从设计简单的角色类开始,逐步深入到复杂的电路模拟系统。每道题目都要求运用面向对象的设计原则,合理设计类结构,并通过代码实现相应的功能。通过这些题目,不仅加深了我对面向对象编程的理解,也锻炼了分析问题和解决问题的能力。
设计与分析
题目一:校园角色类设计-1
该题需要设计一个角色类系统,包含学生和员工等不同角色。这个题目主要考察对面向对象设计原则的理解,尤其是类的继承和多态性。
在设计过程中,我首先创建了一个基类 Role,它包含了角色的基本属性和方法。然后,我通过继承创建了 Student 和 Employee 类,后者又进一步分为 Faculty 和 Staff。这种设计使得代码结构清晰,易于扩展。
类图分析

Role 类
作为基类,定义了通用属性 name 和 age。
提供 show() 方法,用于显示角色信息。
Student 类
继承自 Role,增加了 id 和 classname 属性。
重写 show() 方法,展示学生特定信息。
Employee 类
继承自 Role,增加了 id、year、month 和 day 属性。
重写 show() 方法,展示员工特定信息。
Faculty 和 Staff 类
继承自 Employee,增加了 title 属性。
各自重写 show() 方法,展示各自的特定信息。
设计心得
通过继承,实现了代码复用和扩展性。
各类通过重写 show() 方法,实现多态性。
题目二:设计一个学生类和它的一个子类——本科生类
该题是对第一题的扩展,要求创建一个学生类和一个本科生类。这道题目进一步考察了对继承和方法重写的理解。
在实现过程中,我创建了一个基类 Student,包含姓名和年龄两个属性。然后,创建了一个子类 Undergraduate,增加了一个专业属性。在 Undergraduate 类中,我重写了 show() 方法,以输出更多的信息。
类图分析

Student 类
包含基本属性 name 和 age。
提供 show() 方法用于显示学生信息。
Undergraduate 类
继承自 Student,增加了 major 属性。
重写 show() 方法,展示本科生特定信息。
设计心得
继承结构简单,适合表示基本的学生信息。
为不同类型学生的扩展提供了灵活性。
题目三:答题判题程序-4
本题要求设计一个答题判题系统,这是一道相对复杂的题目,涉及多种题型的处理和答案判定。为了实现这一功能,我设计了多个类,分别负责题目管理、试卷管理、学生信息管理和答卷判定。
在实现过程中,我使用了抽象类来定义题目的基本行为,然后通过具体类实现不同题型的判定逻辑。这样设计不仅提高了代码的可读性,也增强了系统的灵活性。
类图分析

Paper 类
管理试卷信息,包含问题的集合 questions。
提供方法计算总分和获取问题列表。
Question 类及其子类
Question 类:
基础类,定义问题的基本属性和方法。
NormalQuestion:
继承自 Question,表示普通问题。
MultipleChoiceQuestion:
增加 correctAnswers 属性,用于存储正确答案。
FillInTheBlankQuestion:
增加 possibleAnswers 属性,用于存储可能的答案。
Student 和 AnswerSheet 类
Student:管理学生基本信息。
AnswerSheet:关联学生和试卷,记录学生的答案。
InputHandler 和 OutputHandler 类:
处理输入和输出,管理数据流。
设计心得
使用集合和映射结构,便于管理复杂关系。
通过继承和多态,灵活处理不同类型的问题。
题目四:家居强电电路模拟程序-1
第四题要求模拟一个智能家居电路系统,涉及多种设备的状态和行为模拟。这道题目考察了对面向对象设计和电路模拟的理解。
在实现过程中,我设计了多个类,分别负责设备管理、电路管理和状态输出。通过使用面向对象的设计原则,我能够有效地组织代码,模拟复杂的电路行为。
类图分析

Device 类
定义设备的基本属性和方法。
作为所有设备的基础类。
ControlDevice 类及其子类
ControlDevice:
继承自 Device,增加控制功能。
SwitchDevice:
增加状态管理,控制开关状态。
StepSpeedController 和 ContinuousSpeedController:
用于不同类型的速度控制。
具体设备类
IncandescentLamp 和 CeilingFan,继承自 ControlDevice,增加设备特定属性。
DeviceFactory 和 CommandHandler,用于设备创建和命令处理。
设计心得
设备控制通过继承实现,便于扩展。
设计模式清晰,职责分明,易于维护。
题目五: 家居强电电路模拟程序-2
该题是对前一题的扩展,增加了电阻和并联电路的处理。这道题进一步考察了对电路模拟的理解和复杂系统的设计能力。
在实现过程中,我增加了对电阻的处理,并设计了并联电路类,以模拟更复杂的电路行为。通过这种设计,我能够在不改变原有代码结构的情况下,扩展系统功能。
类图分析

CircuitDevice 类
定义电路设备的基本属性和方法。
作为所有电路设备的基础类。
ControlDevice 类及其子类
ControlDevice:
继承自 CircuitDevice,增加控制功能。
Switch、StepRegulator 和 ContinuousRegulator:
用于不同类型的控制。
具体设备类
IncandescentLight 和 CeilingFan,继承自 ControlDevice,增加设备特定属性。
Circuit 类
管理电路设备集合,支持串联和并联电路。
提供方法添加设备、处理输入和模拟电路。
设计心得
通过组合和继承,灵活管理复杂电路系统。
使用集合管理设备,便于扩展和维护。
采坑心得
在完成这些题目时,我遇到了一些问题和挑战,下面是我在解决过程中积累的一些经验和心得。
问题一:类设计不合理
在最初设计角色类时,我没有充分考虑角色之间的继承关系,导致代码重复和不易扩展。在重构代码时,我引入了基类 Role,并通过继承实现不同角色的特定功能。这种设计不仅减少了代码重复,也提高了系统的可扩展性。
例如,在初版代码中,我为每个角色都单独实现了姓名和年龄属性,这导致代码重复且难以维护。通过引入基类 Role,我将这些公共属性提取到基类中,子类只需关注特定的功能实现。这样的设计不仅提高了代码的可读性,也便于后期的功能扩展。
问题二:方法重写的使用
在实现学生和本科生类时,我遇到了方法重写的问题。由于对方法重写的理解不够深刻,我在子类中没有正确实现 show() 方法,导致输出信息不完整。通过查阅资料和实验,我逐渐掌握了方法重写的技巧,并成功解决了这个问题。
具体来说,我最初在 Undergraduate 类中没有调用父类的 show() 方法,导致输出中缺少了姓名和年龄信息。在学习了方法重写的原理后,我通过 super 关键字调用了父类的方法,确保输出中包含所有必要的信息。
问题三:复杂系统的设计
在实现答题判题系统时,我一度陷入了复杂的设计中。由于系统涉及多个模块和类,我在设计时没有充分考虑模块之间的关系,导致代码难以维护。在重构过程中,我引入了抽象类,以定义模块的基本行为,并通过具体类实现不同的功能。这种设计不仅提高了代码的可读性,也增强了系统的灵活性。
在初版代码中,我将所有题型的判定逻辑混杂在一起,导致代码冗长且难以理解。在重构时,我通过抽象类 Question 定义题目的基本行为,并通过具体类实现不同题型的判定逻辑。这种设计不仅使代码结构更加清晰,也便于后期的功能扩展。
问题四:电路模拟的实现
在实现智能家居电路模拟时,我对电路模拟的理解不够深入,导致模拟结果不准确。在查阅相关资料后,我了解到电路模拟的基本原理,并通过设计合理的类结构,成功实现了电路模拟。
例如,在初版代码中,我没有考虑电阻对电路的影响,导致模拟结果不符合实际。在学习了电路模拟的基本原理后,我在设备类中增加了电阻属性,并在计算电压时考虑了电阻的影响。这样的设计不仅提高了模拟的准确性,也增强了系统的灵活性。
问题五:并联电路的处理
在实现并联电路时,我遇到了电流分配的问题。由于对并联电路的理解不够深入,我在计算电流分配时遇到了困难。通过查阅资料和实验,我逐渐掌握了并联电路的计算方法,并成功实现了并联电路的模拟。
具体来说,我在初版代码中没有正确计算并联电路中的电流分配,导致模拟结果不准确。在学习了并联电路的基本原理后,我通过增加 ParallelCircuit 类,实现了并联电路的正确模拟。这样的设计不仅提高了模拟的准确性,也便于后期的功能扩展。
改进建议
在完成这些题目后,我对代码的改进有以下几点建议:
一:优化类设计
在设计类结构时,可以通过引入更多的抽象类和接口,以提高代码的可扩展性和可维护性。通过合理的类设计,我们可以减少代码重复,提高系统的灵活性。
例如,在答题判题系统中,可以通过引入接口 Judgeable,定义判题的基本行为,并通过具体类实现不同题型的判定逻辑。这种设计不仅提高了代码的可读性,也便于后期的功能扩展。
二:引入设计模式
在设计复杂系统时,可以引入设计模式,以提高代码的可读性和可维护性。通过合理使用设计模式,可以更好地组织代码,增强系统的灵活性。
例如,在角色类设计中,可以引入工厂模式,以简化对象的创建过程。通过工厂模式,我们可以将对象的创建与使用分离,提高系统的灵活性和可维护性。
三:优化算法和数据结构
在实现复杂计算时,可以通过优化算法和数据结构,以提高系统的性能。通过合理选择算法和数据结构,我们可以减少计算时间,提高系统的效率。
例如,在答题判题系统中,我们可以通过使用哈希表存储题目信息,以提高查找效率。通过优化数据结构,我们可以显著提高系统的性能。
总结
通过完成这三次大作业,我不仅提高了编程技能,还加深了对面向对象设计、继承、多态、数据处理和电路模拟等知识的理解。在完成这些题目时,我遇到了一些问题和挑战,但通过查阅资料和实验,我逐渐掌握了解决问题的方法。
在未来的学习中,我将继续深入研究面向对象设计和复杂系统的实现,以提高自己的编程能力。
通过这次学习,我深刻体会到编程能力的重要性,也认识到不断学习和实践的重要性。在未来的学习中,我将继续努力,不断提高自己的编程技能,为实现更复杂的系统打下坚实的基础。
在作业的设计中,我觉得可以多添加些详细的测试用例和提示,以降低编码难度,便于取得更高的分数和提示大概方向,从而更深入的学习。
浙公网安备 33010602011771号