OOPre博客总结
-
作业最终的架构设计, 在迭代中的架构调整及考虑
架构设计-
Main
类作为顶层处理模块,因业务需求还不是那么复杂,就直接负责读入命令与调用相应的方法,管理冒险者列表。 -
Adventurer
类作为主要业务逻辑体,基本上所有命令都是围绕其展开。负责冒险者相关的功能。 -
Logs
类负责管理战斗模式以及存储、查询日志。 -
Store
类负责处理冒险者购买与出售物品。 -
Commodity
类作为价值体的抽象类。子类Food
、Bottle
、Equipment
等负责其相关的功能。
架构调整
-
迭代中,针对要求,进行屎山开发
-
冒险者背包需求,并未新增类,笔者认为对背包的操作还是以冒险者为主体,利用现有的容器
HashMap
,将三种物品抽象成一个类,存入放在Adventurer
中即可,对背包内的操作也主要是增查删改,HashMap
够用了。 -
需要记录战斗日志,添加
Logs
类,存储日志与输出日志 -
在对药水和装备进行分类时,为
Bottle
和Equipment
添加多个子类,继承共有的属性方法,并通过重载实现它们不同的效果。 -
计算价值时,添加抽象类
Commodity
,给出价值体的通用属性和方法 -
冒险者购买与售卖物品等功能,封装到
Store
商店内。
-
使用junit的心得体会
-
不必对每个方法都进行测试,比如一个
getId()
,就直接return一个Id,写一个test没什么意义。换句话说,应该对逻辑较为复杂,对应具体功能的方法进行测试,而部分简单的方法在测试中基本上就会被调用。
-
要覆盖方法的所有分支,并针对数据的上下界以及0等特殊值进行测试。编写数据是比较麻烦的,可以尝试自动化生成测试数据。
-
可以重定向输入以模拟命令行输入。
-
-
学习oopre的心得体会
面向对象编程是一种广泛使用的编程范式,它以对象的思想为核心。面向对象编程有以下几个特点:
- 封装 - 面向对象编程强调将对象的属性和行为封装到对象内部,外界无法直接访问,只能通过对象提供的接口来访问。这有助于隐藏实现细节,提高代码的模块化程度。
- 继承 - 继承可以使得子类继承父类的属性和行为,增加了代码的重用性和可维护性。子类可以扩展和自定义父类的功能。
- 多态 - 多态使得调用相同的方法可以有不同的响应,增加了程序的灵活性。子类可以覆盖父类的方法来实现多态。
- 抽象 - 抽象类和接口可以将类中共有的属性和行为进行抽象,提取共性而忽略个性,有利于抽象思考和减少重复代码。
- 组合 - 组合使得类具有包含其他对象的能力,可以灵活地建立起复杂的对象之间的关系,增强了面向对象编程的表现力。
- 设计原则 - 面向对象编程还提出了一些设计原则,如单一职责原则、开闭原则等,这有助于编写灵活、可复用、可维护的代码。
- 模拟实体 - 面向对象编程可以通过模拟实际世界中的实体及其关系,使程序更贴近现实场景,增加了代码的可读性。
在编写代码之前,要先在脑中构建好实现功能需要的类以及它们之间的关系,尽量保证对象的独立性,业务逻辑之间足够清晰,不然将会给编写代码带来极大的麻烦,甚至需要进行代码重构。
碎碎念:上一次写大项目还是在
上一次,经过数据结构一份.c写完大作业,这次的迭代开发还是积累了很多写大项目(?)的经验,以往写的代码量少,没什么架构,能跑就完了,现在写大项目,再不规划架构,人和代码总得跑一个,人和学分总得没一个。