软件构造学习笔记一

什么是GRASP?

GRASP软件开发模式,全称通用职责分配软件模式(General Responsibility Assignment Software Patterns),是与著名的软件模式GoF(Gang of Four,即我们常说的那23种软件开发模式)齐名的另一种软件开发模式。

GRASP应用场景

顾名思义,“职责分配”是GRASP的核心。GRASP认为,在对象设计时,只要各个对象的职责分配清楚了,能够各司其职,耦合就会降低。GRASP提出在将现实世界的业务功能抽象成软件开发中具体对象的过程中,我们应当遵循的一些基本原则。遵循这些基本原则,我们才可以开发出高质量的软件出来。对于我们要开发的软件项目,我们可以不使用工厂模式、可以不使用单例模式、我们也可以不使用观察者模式,但是我们不可能不将现实世界的业务功能抽象成软件开发中具体对象。从这个角度说,我们要提高自己的软件开发质量。
因此GRASP最重要的应用场景是:我们项目的业务需求已经分析清楚了,正准备开始设计对象。GRASP告 诉我们,一个系统里面到底应当有哪些对象,应当来源于领域模型,换句话说就是来源于现实时间中的事物。现实世界中有什么事物,我们软件空间中就应当有什么 对象。当然,现实世界中的事物不一定都需要在软件空间中有对应的对象,要根据需求而定,但软件空间中的对象应当对应于现实世界中的事物,这种设计原则有个 专用术语叫“低表示差异”。按照这个原则设计好了我们的对象以后,应当如何分配它们的职责呢?当然是来源于现实世界。我们的对象在现实世界中应当有什么职 责,那么我们的对象就应当有什么样的职责。如此分析,每个对象的职责就非常清楚,那么业务需求中的各种功能应当如何分配给对象呢?现实世界是怎样分配的, 软件世界就怎样分配的。最后,如何在各个功能中将对象组织起来呢?GRASP的专家模式解答了这个问题;对象应当由谁来创建,GRASP的创建者模式解答了这个问题。GRASP通过这样一个步骤,设计对象、分配职责、确定功能、建立联系,一个项目的整体框架就展现出来了,这样的设计方法被称为“职责驱动设计(RDD,Responsibility Drive Design)”

GRASP与Gof

在软件设计时,GRASP只解决了整体设计中的耦合问题,只解决了一部分,而另一部分需要依靠GoF。
运用GRASP进行整体设计依靠的是现实世界和业务需求。这样的分析还没有介入任何技术的成分。但是随着我们的进一步分析,我们开始尝试运用各种具体的技术去实现这些业务需求需要实现的功能时,GRASP就无法有效地解决问题了。GoF的工厂模式告诉我们,这里需要设计一个工厂类。这里增加的这个工厂类不是来源于现实世界,GRASP称这样的对象为“纯虚对象”。纯虚对象是从现实对象中抽象出来的一些功能,但GRASP不能告诉我们应当抽象出哪些纯虚对象,解决这样的问题需要运用GoF。例如商场打折,有不同的折扣策略,对每一个商品子类把所有的折扣策略都重载显然是不现实的,不如将所有的折扣方法抽象出来,形成抽象的“折扣策略”父类和具体的折扣子类,然后由各个商品子类自己去选择自己需要的折扣策略。如此这般,就运用了GoF的策略模式。通过以上分析,我们不难看出,GoF是在具体实现中去解决对象的耦合问题的。它是在GRASP分析的整体框架下,对一些具体的对象及其方法进行重新组织,解决对象耦合问题的。

总结

对于不同岗位的人来说GRASP和Gof的效果各不相同,做分析的程序员可能觉得GRASP作用更大,但对于具体实现来说Gof更重要。其实无分大小,二者只有在最适合它们自己的场合使用才能发挥自己的最大作用。

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值