271
社区成员
发帖
与我相关
我的任务
分享道生一,一生二,二生三,三生万物
主要分为三个部分:指令选择类,冒险者管理和物品管理。具体如图:

功能:原始指令的读入,调用相应的函数方法。
(ps:Main函数-提供一个进入函数的入口,不自行实现功能)
├── adventurer
│ ├── Adventurer.java管理冒险者个人属性
│ ├── AdventurerManager.java管理冒险者之间的交互
│ ├── RelationshipSearcher.java查询冒险者之间的关系
│ └── RelationParser…… 递归下降批量增加冒险者关系
主要管理物品的各种数值。
又名:迭代中的架构调整及考虑
训练目标:
1. 学习git和gitlab的使用
2. 学习Java的基本语法并完成给定代码的错误修改
作业要求:
* 学习使用git进行作业的推拉
* 基于给定 Java 代码完成错误的修改➡️熟悉Java语法
又名熟悉tab键的使用。
训练目标:
1. 构造方法
2. 对类进行封装
3. 学习容器的使用
作业要求:
1. 实现冒险者类、药水瓶类、装备类➡️实现类与容器
2. 给冒险者加/删药水瓶➡️实现部分方法
在这一次作业中我第一次自己借助IDEA写Java程序,当时的思路还是很彻底面向过程的。物品类承担了类似于结构体的作用,但所有的操作都是在adventurer类里面进行的。
(ps 并非说不能在adventurer类里进行,事实上物品的属性确实应该由adventurer来管理调度。只是此次作业实现的功能还比较简单,不能很明显地看出面向过程与面向对象的差距)
训练目标:
1. 继承
2. 接口
作业要求:
1. 通过继承机制划分药水瓶的类别
2. 设计并实施背包系统
3. 通过接口增加对可用物品的使用
在这次作业中我其实是尝试使用了接口的为什么我最终版本一个interface都没有呢,但由于我对接口的理解并不深入,当时也没能很好地对题意进行抽象,所以使用得非常难受。
哦对我当时在IDEA的建议下开了一个抽象类abstractuse来实现use,然后还按照教程单独给bottle了bring接口。现在看起来真令人难绷。
训练目标:
1. Java程序的bug分析与调试
2. java内存情况
3. 深克隆与浅克隆
作业要求:
1. 书籍管理系统
十一假期~起初人们认为这只是一次普通的放假……
训练目标:
1. 熟悉并掌握容器使用
2. 掌握对象的层次结构,理解类的层次
3. HashMap,HashSet,工厂模式
作业要求:
1. 背包功能的完善与物品数量控制➡️容器
2. 装备类型的细化与实现➡️继承
3. 战斗系统的细化与冒险者属性调整
4. 金钱系统➡️工厂模式
十一回来之后感觉oop难度骤增。
这次作业乍一看没什么特别的,主要新加了**物品集中统一管理**和**冒险者战斗交互**两个方面的内容。
物品管理套工厂模式的模版+学习各种容器的特性即可轻松应对。
战斗交互我当时直接在adventurer类里面库库写了一个100+行的方法,这个方法于是成为了我oop之路上最臭代码(捂鼻子)。显然这个方法不合适,但我当时的思路还非常面向过程,现在回看冒险者攻击另外的冒险者这个操作居然放在adventurer类里面,显然不合理啊。
训练目标:
1. 设计模式
2. 尤其是观察者模式
作业要求:
1. 雇佣系统实现
2. 可用物品使用目标限制
3. 援助➡️观察者模式
在这一次作业中我的adventurer类开到了500+行,成功被checkstyle制裁。
观察者模式一般而言要通过接口实现,但很遗憾我还是没能领悟到接口的精髓,而且观察与被观察的对象只有adventurer类,所以我并没有多加接口,而是增加了一个needSupport属性,在HP变化的时候改变属性,在通知的时候采用dfs。
训练目标:
1. 递归下降思想与方法
作业要求:
1. 利用递归下降实现批量导入指令的功能
或许是十一以来最简单的一次作业,因为不用迭代与重构。感觉跟学c语言时学的递归如出一辙。
在写博客作业的时候我属实不能直视我的代码结构,于是在课程的尾声我对自己的代码进行了一次大重构。
在此感谢吴老师在这个过程中给出的指导与建议。
针对adventurer这个巨类,通过观察不难发现他既管理了冒险者的属性,又管理着冒险者的交互。这样它的功能就不够单一。于是把这个大类拆成3个类,分别是管个人属性的、管集体交互的和管关系查询的。
再次回扣一下第五次作业中出现的坏味方法,我把它分在了Adventurer和AdventurerManager两个类中。冒险者只用进行攻击和被攻击,其余一切选择判断调用由Manager进行。
再次观察又不难发现adventurer类里有大量代码在管理它的物品。正所谓钱乃身外之物,物品不应该跟冒险者的属性属于一个层次,所以可以单独开一个抽象类来管理它。没有用接口,因为这方面我学得不够好(逃)
首先,从使用体验和上手难度来说JUnit非常亲民。它的语法比较简单,创建测试的过程也非常方便快捷。
JUnit主要聚焦于小方法的测试,能够很好地验证单个函数方法的正确性。但如果出现了不同类之间相互作用,以及复杂的逻辑关系,JUnit就不那么好用了。
当然可能是我太菜还没理解精髓。
曾经有人问我:“你们面向对象到底在学什么呀?”我承认在那一瞬间我感受到了老师抽背课文而我只记得第一句的慌张与空白。
回顾这八周,我很难用简练的语言来概括我的学习内容。在面向对象的过程中,我们学习了Java、学习了git操作、学习了类的操作与管理、学习了设计模式、学习了递归下降……但要问学习面向对象过程中的最大感受,我的第一反应是这句,来自《道德经》:
道生一,一生二,二生三,三生万物。
如果把**面向对象的思想**理解为`道`,`一`就是我们**抽象**出来的各种**类**,`二`就是类中**封装**的属性与方法,`三`是**继承**形成的不同子类或是**多态**下产生的不同行为,`万物`是最后实例化出的各种各样的对象。这些对象在代码下进行行为交互,产生了各式各样的输出与bug。
但单从程序设计角度,我觉得一句相对粗浅的话也许更加合适:
>人被杀,就会死。
也许学习面向对象的过程就是学会视角管理,着眼于对象属性在不同操作下的变化或者在某些对象角度能对什么对象进行操作。
能不能开一个ooprepre讲讲Java的语法呢。正常学习过程中积累的语法知识似乎不能很丝滑地切入oop的学习。怎么会有人既用抽象类又用接口实现相似的功能啊