面向对象编程——总结
一、第四单元架构设计总结
在第四单元的作业中,通过对UML
的学习和了解,我们主要的任务是基于课程组给出的大部分代码,完成一个UML
图的解析器。
1.第一次作业
这一次作业的任务是完成对UML
类图的解析,类图中有很多的对象,我对这些对象各自拥有的属性建立表格,方便后期的设计和编程
UmlClass |
|
---|---|
parentID |
—— |
name |
类名 |
visibility |
public/private |
UmlOperation |
|
---|---|
parentID |
UmlClass |
name |
方法名 |
visibility |
public/private |
UmlParameter |
|
---|---|
parentID |
UmlOperation |
name |
方法名 |
direction |
RETURN/IN |
type |
数据类型 |
UmlAttribute |
|
---|---|
parentID |
UmlClass |
name |
属性名 |
visibility |
public/private |
UmlGeneralization |
|
---|---|
parentID |
UmlClass |
name |
null |
source |
UmlClass |
target |
UmlClass0 |
UmlInterface |
|
---|---|
parentID |
—— |
name |
接口名 |
visibility |
public/private |
UmlInterfaceRealization |
|
---|---|
parentID |
UmlClass |
name |
null |
source |
UmlClass |
target |
UmlInterface |
UmlAssociation |
|
---|---|
parentID |
UmlClass |
name |
null |
end1 |
UmlAssociationEnd1 |
end2 |
UmlAssociationEnd2 |
UmlAssociationEnd |
|
---|---|
parentID |
UmlAssociation |
name |
name |
reference |
UmlClass |
visibility |
public/private |
我的思路是:根据UML
类图在初始化阶段构建好实例,这样在查询的时候就可以方便快捷直观地找到需要的数据
其中初始化阶段:
Step 1:
assClass
: 将ItemClass
加入classes
中,将ItemInterface
加入interfacees
中
assMetAndPro
:将ItemProperty
加入propertys
队列中,将ItemOperation
加入operations
中,包括是否有参数和返回值
assAssociation
: 将关联对Pair<id1,id2>
加入association
队列中Step 2:
assInherit
: 将所有类和接口的parent
归位,将所有实现了接口的类归位Step 3:
将所有方法和属性加入到对应的类中,将所有类和接口的关联对应
在完成初始化之后,就可以根据指导书的要求进行类图的解析和查询了
2、第二次作业
第二次作业关于顺序图和状态图的解析思路与类图是一致的,对于类图的三个检查,我直接引用了在类图初始化阶段已经处理好了的数据
UmlRegion |
|
---|---|
parentID |
UmlStateMachine |
name |
name |
visibility |
public/private |
UmlStateMachine |
|
---|---|
parentID |
UmlClass |
name |
name |
visibility |
public/private |
UmlPseudostate |
|
---|---|
parentID |
UmlRegion |
name |
name |
visibility |
public/private |
UmlState |
|
---|---|
parentID |
UmlRegion |
name |
name |
visibility |
public/private |
UmlFinalState |
|
---|---|
parentID |
UmlRegion |
name |
null |
visibility |
public/private |
UmlTransition |
声明了一个实际的状态转换事件 |
---|---|
parentID |
UmlRegion |
name |
name 该状态转换的名称 |
guard |
该状态转换所能发生的时机(01阈值) |
visibility |
public/private |
source |
UmlState /UmlPseudostate |
target |
UmlState /UmlFinalState |
UmlEvent |
|
---|---|
parentID |
UmlTransition |
name |
name |
expression |
null |
visibility |
public/private |
UmlOpaqueBehavior |
|
---|---|
parentID |
UmlTransition |
name |
name |
expression |
null |
visibility |
public/private |
3、架构设计
在设计的时候,我非常不喜欢把所有的代码都堆到一个类里面,首先它肯定会超出500行代码风格的要求,其次也不符合个人美学。我将初始化阶段所用到的方法集中到另一个类中,对于类图、顺序图、状态图、UML
类图检查分别在各个类中实现,然后通过实例化对象,调用其中的方法来完成整个代码程序。
二、总结自己在四个单元中架构设计及OO
方法理解的演进
从刚开始的多项式求导,再到后来的电梯作业,在到后来的地铁站和这次的UML
,我对于程序设计的架构是越来越清晰的。
1.可复用性
从最初的代码结构臃肿紊乱,可复用性极差,导致每次都要重新写一份新的代码,对我的任务量可以说是非常大了。但是在这个过程中,我逐渐感受和理解了什么是面向对象编程的思想,学会怎样写出可以复用的代码,学会如何将一个方法抽象出来,甚至以前在C语言、数据结构中没有了解清楚,学的不是很懂的知识,比如说递归、还有各种数据结构,都在这学期的实验课程的实践和使用中更加的熟练。
2.层次化
举个例子,在多项式求导中,将多项式一层一层拆分求导;在UML
作业中,逐层根据给出的代码进行建模和实例化......
三、总结自己在四个单元中测试理解与实践的演进
从最初根据数据的合法性进行测试到后来更多的是关注代码的架构和算法的效率,我在这四个单元的实践中越来越关注代码中更为重要的东西,而不是仅仅停留在数据表面。不同的算法带来不同的实践复杂度、空间复杂度,严格的时间要求,所采用数据结构不同而导致不同的代码的复杂度,这些是我在这个过程中慢慢会更加考虑的东西,虽然说在编程的时候,要完全不信任用户的输入,但首先要能够保证我们设计的程序能够按照要求正确地执行好任务,对于正确输入数据的考虑是那之后的事情。
从一开始的扣字眼、再到后来的符合标准的大数据集构造、再到后来的单元化测试,我觉得测试程序是建立在对于要求和程序足够了解熟悉的基础上,这不仅仅是测试程序的正确性与否,更是在测试过程中,对于自己程序架构设计的又一次思考总结和检查。
四、我的收获&感想
1、Java语言的学习
2、对于以前学习到的知识的回顾和加深
3、工程化的思想
4、面向对象的思想
5、各种工具的使用
6、个人认为最重要的一点是,自我学习一项技术的能力
虽然我在这学期的实验中成绩不佳,但这门课程带给我的东西是真切拥有的,第一次完成千行规模代码的程序,第一次写出兼具正确性和个人美学的代码,第一次熬夜到天明解决了bug
,第一次明明已经很努力的在写却还是没有在规定时间前完成。
感谢老师们和助教们一学期的教导和努力!
五、建议
1、希望老师能够在学习刚开始的时候给予更多的指导,在最后一个单元吴际老师的暖心贴真的很棒,让我少走了许多的弯路
2、希望课程的时间设置更加的合理,不要上午刚学下午上机就会考察到,多留给我们一下自我学习理解的时间
3、希望课程时间线的设置可以更加的宽裕,这学期加班加点熬夜真的很难受