5.13 有关游戏设计的总结
一、设置eclipse游戏开发的JRE
windows---preference---Install JREs---jdk---edit--- -Xmx128m
二、统一建模语言UML(Unified Modeling Language)
是专门用来进行软件系统和架构建模的一门可视化建模语言,它通过各种图示展示了软件系统的方方面面。
IBM的系统建模语言UML成为业界认同的统一建模技术。
一个类中包含:属性,方法,关系。
在UML中,抽象类的类名以及抽象方法的名字都用斜体字表示。
-:私有,+:公有,#:受保护,~:默认
接口名前有《interface》,没有就表示类。
类和类,类和接口,接口和接口之间存在的关系:实现关系,泛化关系,关联关系,依赖关系,聚合关系,组合关系
- 实现关系:一个类实现一个接口(由实现类指向接口)
- 泛化关系:一个类继承另一个类(由子类指向父类)
- 关联关系:
- 依赖关系:(1)一个类是另一个类的方法(2)一个类是另一个类方法的参数(3)一个类是另一个类方法返回类型
- 聚合关系:一个类是另一个类的属性,是整体和部分的关系(部分指向整体)
- 组合关系:一个类是另一个类的属性,是整体和部分的关系,部分是整体不可分割的一部分(部分指向整体)
三、面向对象的七个原则
- 单一职责原则:一个类只应该有一个引起它变化的原因,不要让一个类存在多个变化的理由。换句话说,一个类只应该做和一个职责相关的业务,不要让一个类拥有过多职责。
- 开闭原则:软件实体应该面向修改关闭,面向扩展开放。其实其核心是抽象。将相同的部分抽象出来,便于代码重用,这就是闭。将不同的部分也抽象出来,便于功能的扩展,这就是开。开闭原则是面向对象设计原则的核心原则,其他的设计原则都是开闭原则的具体表现和补充。
- 聚合/组合复用原则:尽量使用聚合/组合达到代码复用,少使用继承复用。继承只能单根继承,无法通过继承达到多个类代码的重用。但可以通过聚合/组合关系达到多个类的代码重用。
- 依赖倒置原则:依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
我们知道,依赖一定会存在于类与类、模块与模块之间。当两个模块之间存在紧密的耦合关系时,最好的方法就是分离接口和实现:在依赖之间定义一个抽象的接口使得高层模块调用接口,而底层模块实现接口的定义,以此来有效控制耦合关系,达到依赖于抽象的设计目标。
抽象的稳定性决定了系统的稳定性,因为抽象是不变的,依赖于抽象是面向对象设计的精髓,也是依赖倒置原则的核心。
依赖于抽象是一个通用的原则,而某些时候依赖于细节则是在所难免的,必须权衡在抽象和具体之间的取舍,方法不是一层不变的。依赖于抽象,就是对接口编程,不要对实现编程。 -
接口隔离原则
其核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。
具体而言,接口隔离原则体现在:接口应该是内聚的,应该避免“胖”接口。一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。
接口有效地将细节和抽象隔离,体现了对抽象编程的一切好处,接口隔离强调接口的单一性。而胖接口存在明显的弊端,会导致实现的类型必须完全实现接口的所有方法、属性等;而某些时候,实现类型并非需要所有的接口定义,在设计上这是“浪费”,而且在实施上这会带来潜在的问题,对胖接口的修改将导致一连串的客户端程序需要修改,有时候这是一种灾难。在这种情况下,将胖接口分解为多个特点的定制化方法,使得客户端仅仅依赖于它们的实际调用的方法,从而解除了客户端不会依赖于它们不用的方法。
分离的手段主要有以下两种:1、委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但是会增加系统的开销。2、多重继承分离,通过接口多继承来实现客户的需求,这种方式是较好的。 -
迪米特法则
一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
-
里氏替换原则
其核心思想是:子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。在父类和子类的具体行为中,必须严格把握继承层次中的关系和特征,将基类替换为子类,程序的行为不会发生任何变化。同时,这一约束反过来则是不成立的,子类可以替换基类,但是基类不一定能替换子类。
Liskov替换原则,主要着眼于对抽象和多态建立在继承的基础上,因此只有遵循了Liskov替换原则,才能保证继承复用是可靠地。实现的方法是面向接口编程:将公共部分抽象为基类接口或抽象类,通过Extract Abstract Class,在子类中通过覆写父类的方法实现新的方式支持同样的职责。
Liskov替换原则是关于继承机制的设计原则,违反了Liskov替换原则就必然导致违反开放封闭原则。
Liskov替换原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机制,能够减少代码冗余,避免运行期的类型判别。