their participation in the message exchange.
不可否认性:一个消息的发送者有传递的证明,接收者保证了发送者的身份。这意味着既不能反驳他们的信息交换的参与。
18、实现高可用性的策略(三种)PPT146页
Strategies for high availability:
Eliminate single points of failure 消除单点故障 Replication and failover 复制和故障转移
Automatic detection and restart 自动检测和重新启动
19、信息隐藏原理
PPTlecture9 88页
信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。
信息隐藏(封装)主要是为了提高软件的可重用性和可维护性。信息隐藏造成了系统各个部分耦合性低。系统是由各个部分构成的,如果这些部分耦合性低的话,那么这个系统开发、维护等就较容易
? Often one hides, e.g.
– Data representation. – Choice of algorithm.
– Interface details / access mechanism of external entity (e.g. database,
hardware) – …
? Goal: particular design choice “invisible” to clients. Why would we want to do this?
? Information Hiding may or may not be supported at the programming language
level.
20、GRASP模式的具体内容(9个),各种模式的定义,解决的什么问题
1创造者 Creator ○
分配给类B职责来创造类A的一个实例如果: (1) B聚合A的对象 (2) B包含A的对象
(3) B记录A的对象的实例 (4) B紧密地使用A的对象 (5) B被创建时有初始化的数据传递给
解决方案:将创建一个类A的实例的职责指派给类B的实例,如果下列条件满足的
话:
a) B聚合了A对象 b) B包含了A对象
c) B纪录了A对象的实例 d) B要经常使用A对象
e) 当A的实例被创建时,B具有要传递给A的初始化数据(也就是说B是创建A的实例这项任务的信息专家) f) B是A对象的创建者
如果以上条件中不止一条成立的话,那么最好让B聚集或包含A 通俗点就是:我要用你所以我来创建你,请不要让别人创建你 这个模式是支持低耦合度原则的一个体现
○2专家 Creator
在设计对象(类)时,如果某个类能够在某方面具有完整信息,足以实现某责任,就将这个责任分配给这个类,
解决方案:将职责分配给具有履行职责所需要的信息的类
通俗点就是:该干嘛干嘛去,别管别人的闲事或者我的职责就是搞这个,别的事不管。
举个简单的例子,如果有一个类是专门处理字符串相关的类,那么这个类只能有字符串处理相关的方法,而不要将日期处理的方法加进来。也就是提高软件高内聚一种原则。
3控制器 Controller ○
控制器是在用户接口层上的第一个对象,负责接收和处理系统的操作信息。
解决方案:将处理系统事件消息的职责分派给代表下列事物的类: a) 代表整个“系统”的类(虚包控制者) b) 代表整个企业或组织的类(虚包控制者)
c) 代表真实世界中参与职责(角色控制者)的主动对象类(例,一个人的角色) d) 代表一个用况中所有事件的人工处理者类,通常用“<用例名>处理者”的方式命名(用例控制者)
这是一个控制者角色职责分配的原则,就是哪些控制应该分派给哪个角色。
4低耦合 Low Coupling ○
测量存在于模块之间的依赖程度
解决方案:在分配一个职责时要使保持低耦合度。
耦合度(coupling)是一个类与其它类关联、知道其他类的信息或者依赖其他类的强弱程度的度量。一个具有低(弱)耦合度的类不依赖于太多的其他类。
5高内聚 High Cohesion ○
测量一个共享的模块内元素的相关性 ;一个单独模块执行任务的程度是功能相关的
解决方案:分配一个职责的时候要保持类的高聚合度
聚合度或内聚度(cohesion)是一个类中的各个职责之间相关程度和集中程度的度量。一个具有高度相关职责的类并且这个类所能完成的工作量不是特别巨大,那么他就是具有高聚合度。
6多态 Polymorphism ○
当相关的供选方案或行为随着类型的变化而变化时,给行为分配职责—使用多态操作—来适合行为变化的类型。
也就是说尽量对抽象层编程,用多态的方法来判断具体应该使用那个类,而不是用
if instanceof 来判断该类是什么接来执行什么。
7纯虚构 Pure Fabrication ○
分配一系列高度聚合的职责给虚假的类或是不表现某事完成的领域问题概念的有用的类,它支持高内聚、低耦合、可重用。
一个纯虚构意味着虚构某些事物,而不是到了迫不得已我们才这样做。
例,我们的Sale类的数据要存入数据库,但是他必须和数据库接口相连接,如果将接口连接放入Sale类中势必增加该类的耦合度,所以我们可以虚构一个类来处理与数据库接口连接的问题。这个类就是我们虚构出来的一个事物。
8间接 Indirection ○
问题:如何分配职责避免直接耦合?如何减弱对象的耦合?
解决方案:分配职责给中间的调解对象来调解两个组件之间的关系。
将职责分配给一个中间对象以便在其他构件或服务之间仲裁,这样这些构件或服务没有被直接耦合。这个中间对象(intermediary)在其他构件或服务间创建一个中介者(Indirection)。这个中间对象也就事7)中的纯虚构。
9防止编译Protected Variations ○
问题:如何设计对象,子系统和系统,使其内部的变化和不稳定不会对其他元素产生不良影响?
解决方案:识别设计变化或不稳定之处,分配职责用以在这些变化之外创建稳定接口
分配职责给一个客户端的直接对象以使它与一个间接对象进行协作,这样客户端无
需知道这个间接对象。
这个模式-也被叫做(Demeter)准则。 通俗点就是:只与你直接的朋友们通信 不要跟“陌生人”说话
每个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位
GRASP用职责设计对象:\它包含了9个基本模式: 1.信息专家(Information expert) 2.创建者(Creator) 3.高内聚(High Cohesion) 4.低耦合(Low Coupling) 5.控制器(Controller) 6.多态性(Polymorphism) 7.纯虚构(Pure Fabrication) 8.间接性(Indirection) 9.变化预防(Protected Variations)
GRASP的主要特征: - 对象职责分配的基本原则。 - 主要应用在分析和建模上。 GRASP的核心思想的理解: 自己干自己的事(职责的分配) 自己干自己的能干的事(职责的分配) 自己只干自己的事(职责的内聚)
21、OO设计的五个基本原则及课件中讲述的其它软件原理 r-32-71
1单一职责原则 ○
这个原则和关注点分离紧密联系。它陈述了每个对象应该只有一个理由去改变,单一聚焦在
职责上。通过依附这个原则,你避免了庞大的类的设计问题,那就像瑞士的军刀。有了精确的对象,你再次增加了系统的可读性和可维护性。 2开闭原则 ○
这个原则陈述了类应该对扩展开放,对修改关闭,那样你就能够添加新的特征,扩展一个类而不用改变它内部的行为。这个原则旨在避免破坏存在的类及依赖它的其他类,这使得你的整个应用程序中产生故障和错误的涟漪。 3 Liskov替换原则 ○
Liskov替换原则要求你应该能够使用任何衍生出的类代替父类,不用修改就有同样的行为。这个原则与开闭原则一致,它保证了一个衍生出的类不影响父类的行为,或者说,衍生出的类必须能够被它们的基类替代。 4接口分离原则 ○
这个原则是j将一个抽象方法分裂成几组职责,给这些组分配接口来防止客户端实现一个很大的接口,这个接口容纳了很多它们不使用的方法。目的是为了让类使用相同的接口只需要实现一些具体的方法,而不是有很多方法的庞大的接口。 5依赖反转原则 ○
把你的类从具体的实现中隔离开,使它们依赖于抽象类或接口。它促进了对接口而不是实现的译码,这通过保证对实现的低耦合来增加系统的灵活性。 PPT耿祥义-7: 1.面向抽象原则
设计一个类时,不让该类面向具体的类,而是面向抽象类或接口 2.开-闭原则
设计应当对扩展开放,对修改关闭。