GRASP-中文版(2)

2020-02-21 15:26

因为MyMenu,MyToolBar,MyDialog由MainWindow所包含,MyTextbox,MyButton被MyDialog包含,MainWindow由Main类调用。

根据Creator模式所提倡的方法,它们的实例的创建职责的分配应该是: MainWindow的实例由Main创建;

MyMenu,MyToolbar,MyDialog的实例由MainWindow创建; MyTextbox,MyButton的实例由MyDialog创建。

反过来,如果MyMenu,MyToolBar,MyDialog等实例的创建都放在Main类里,那么Main就跟它们产生一种“关联”关系,如果 MyMenu,MyToolBar,MyDialog等发生修改,Main也不得不跟着一起修改,也就是说大大增强了Main类跟它们之间的耦合关系;而 Main类本身,也聚集了多余的实例创建功能,降低了Main类的聚合性。

GRASP High Cohesion Pattern - GRASP之高内聚模式

高内聚模式(High Cohesion)是GRASP模式中为降低类的复杂程度,简化控制而提出的面向对象设计的原则性模式。高内聚(High Cohesion)与低耦合(Low Coupling)模式是GRASP其他模式的根本。

问题

怎么做才能降低类的复杂程度,简化控制?

High Cohesion模式所提倡的解决方案

紧密相关的功能(职责)应该分配给同一个类。

所谓内聚,是指单个物体(类)内部的功能聚集度。比如,只包含有相互关联的功能的类,具有高内聚性,同时,它的外部表现(作用,意图)也就明显;反之,如果一个类由一些不相关的功能构成,它的内聚性就低,它的外部表现就不明显,一方面很难理解它的作用和意图,另一方面,一旦需求变化,扩展性就差。

在现实世界里,高内聚(High Cohesion)表现在“各司其职”上,也就是说自己只干跟自己相关的工作,别人的工作让别人做。比如,电视机只有信息传播的功能,冰箱只有冷藏冷冻的功能,它们就是一个功能高内聚的个体。为什么不把电视机与冰箱的功能做在一起呢?因为做在一起的话,一方面,只需要电视或冰箱功能的消费者却不得不同时购买它们的整合体,而且消费者如果想换代电视机时,冰箱也只有一起换代;另一方面,如果厂家需要升级电视功能,也不得不考虑怎么整合原来的冰箱功能。也就是说功能低内聚的产品,不利于消费者使用,不利于生产者维护,不利于产品本身的升级换代。

同样,反映到软件设计上,低内聚的类存在使用难,维护升级难的缺点。

高内聚(High Cohesion)与低耦合(Low Coupling)是GRASP模式的核心概念,是其它GRASP模式的根本。

优秀的面向对象设计,一般都遵从[高内聚,低耦合]原则。

应用High Cohesion模式的好处

- -

聚集相关功能,结构清晰,容易理解

只聚集相关功能,使得类的职责单一明确,从而降低类的复杂程度,使用简单

GRASP Low Coupling Pattern - GRASP之低耦合模式

低耦合模式(Low Coupling)是GRASP模式中为降低类之间的关联程度,适应可变性而提出的面向对象设计的原则性模式。高内聚(High Cohesion)与低耦合(Low Coupling)模式是GRASP其他模式的根本。

问题

怎么做才能降低类之间关联程度,能适应需求的变化呢?

Low Coupling模式所提倡的解决方案

为类分配职责时,应该尽量降低类之间的关联关系(耦合性)。亦即,应该以降低类之间的耦合关系作为职责分配的原则。

所谓耦合,是指多个物体(类)之间的物理或者意思上的关联程度。在面向对象方法中,类是最基本的元素,耦合主要指不同类之间相互关联的紧密程度。面向对象里的关联,主要指一个类对另一个类的调用,聚合(包含),参数传递等关系。

比如,所谓2个关联得非常紧密的类(高耦合),是指其中一个类发生变化(修改)时,另一个类也不得不跟着发生变化(修改)。

面向对象设计要求类之间满足“低耦合”原则,它是衡量一个设计是否优良的一个重要标准,因为“低耦合”有助于使得系统中某一部分的变化对其它部分的影响降到最低程度。

应用High Cohesion模式的好处

- -

高内聚(High Cohesion)与低耦合(Low Coupling)是GRASP模式的核心概念,是其它GRASP模式的根本。

优秀的面向对象设计,一般都遵从[高内聚,低耦合]原则。

独立性,有利于重用。

适应需求变化,一旦发生变化时,可以把影响缩小到最小范围。

内聚与耦合的辩证关系

1, 一方面,高内聚要求把紧密关联的功能(职责)聚集在同一个类中,防止功能的扩散和

类的无谓增加,从而减少类之间的关联,降低类之间的发生耦合的机率。 2, 另一方面,高内聚要求把不相关的功能分散到不同的类,类增加了,势必造成相互关联

类的增加,从而增大类之间发生耦合的机率。

面向对象设计,应该考虑效率,实现难度等因素,同时兼顾高内聚(High Cohesion)与低耦合(Low Coupling)性。

GRASP Controller Pattern - GRASP之控制器模式

控制器模式(Controller)是GRASP模式中解决事件处理职责问题的模式。

问题

在UI层之外,应该由哪个类来处理(控制)系统操作(事件)呢?或者说,当触发一个系统事件时,应该把对事件的处理职责分配给UI层之外的哪个层呢?

Controller模式所提倡的解决方案

把系统事件的处理职责分配给Controller(控制器)类。 担当Controller(控制器)类角色的候补类可能为: - -

系统全体,设备,子系统等的表现类(Facade Controller)

系统事件发生的用例的控制类,通常被命名为Handler,Coordinator,Session等(用例或Session的控制器)。整个系统事件都使用同一个控制器。 Controller模式相当于著名的MVC设计模式的C(Controller)部分。

类似于J2EE核心模式中的Front Controller模式(我们会在其它文章中介绍Front Controller模式)。

Controller模式提倡用一个专门的类来处理所有的系统事件。或者说Controller模式把所有系统事件的处理职责分配给一个专门的类集中处理。

应用Controller模式的好处

应用Controller模式的系统,对系统事件进行集中处理,所以: - - -

防止同类职责的分散。满足高内聚,低耦合原则。 有利于共通处理(前处理,后处理等)。

变化的高适应能力。能够把变化的修改范围控制在最小范围(控制器)之内。

Controller模式的应用例 MVC模式。

MVC模式

MVC模式Model-View-Controller头字母的缩写,中文翻译为“模型-视图-控制器” 模式(或者模型)。该模式把一个GUI应用划分为业务逻辑处理(M),画面表示(V),控制(C)三部分,并以此为基础进行设计和开发。


GRASP-中文版(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小学校园安全管理制度

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: