从软件隐喻到设计模式的思考(thinking in software metaphors)

原创 2017年01月03日 15:54:26
  软件开发人员怎么理解软件开发过程具有十分重要的意义,在工作中我经常用房屋建造来比喻和思考软件开发,这样的比喻能够帮助工程师注意开发过程中的潜在问题,对于提高代码质量,提高工作效率,降低技术风险都有重要的作用。
     常见的软件开发过程是为了解决一个显示的问题,针对问题进行需求分析,选定一个或者多个操作系统平台,针对需求进行架构设计,详细设计,经过各种测试之后得到一个符合用户要求的系统。房屋的构建过程和软件的开发过程是及其相似的。首先我们要决定在哪个地方(选择系统平台)创建什么类型(问题定义)的房子,接着我们要找某个建筑设计师探讨我们的设计(架构设计),然后建筑设计师根据实际情况会规划出整个房子的设计蓝图(详细设计),在设计基本完成后又会有景观设计师,油漆工,装修工的介入来完善(优化)我们的房子。最后还有各种人员来验收与查看我们房子的质量和安全设计是否符合要求(测试和审查)。正是因为软件开发和我们的工程或者工业生产具有如此相同之处,软件开发语言也存在着工业级的开发语言之称。
     用房屋设计的思想来理解软件开发的过程具有比较清晰的脉络。
     普通工程设计的大体过程:
     1. 工程模块的划分
     2. 决定自我建造还是外包
     3. 工程对接
     4. 验收
          
     软件开发面向对象编程的大体流程:
     1. 项目分成多个模块,每个模块分成多个类
     2 .决定每个类或者模块是要团队内部设计还是外包
     3.根据类构建出对象,每个对象之间相互配合形成我们的系统
     4.测试与修正

我们可以看出来在oop的设计思想中包含了三个核心的思想,那就是 1.对象的功能划分 2.对象的创建过程 3.对象的协作机制。这三个核心思想其实就是我们编程所强调的设计模式试图通过方法论来解决的问题。设计模式会出现在现在的软件工程设计中其本质是oop设计的需要,本事不先存在着设计模式的条条框框,设计模式只是人们在面向对象编程中的长期总结罢了。
     OOP的设计原则就是把整个系统分成很多个子系统,每个子系统又分为多个对象。设计模式要解决的问题就是把系统以适当的粒度拆分,定义类接口与继承,建立对象之间的基本关系。设计模式的期望:使得OOP立足现在有针对性,面向未来有可扩展性。(低耦合高内聚,复用)

     根据设计模式的核心思想可以如下分类各种设计模式:

对象创建存在的需求:
     (1)复制对象(原型模式)
     (2)限制单一对象(单例模式)
     (3)构建复杂对象(构建者模式)
     (4)功能相同的对象(工厂模式)

对象协作的需求:
     (1)改变接口(适配器模式)
     (2)增加新的功能(装饰模式)
     (3)代理模式
     (4)组合模式
     (5)桥接模式
     (6)外观模式
     (7)享元模式

对象功能划分的需求:

     (1)命令模式
     (2)责任链模式
     (2)解释器模式
     (3)迭代器模式
     (4)中介者模式
     (5)备忘录模式
     (6)观察者模式
     (7)状态模式
     (8)策略模式
     (9)模板方法
     (10)访问者

用隐喻理解软件开发

用隐喻理解软件开发 何为隐喻?隐喻即是一种比喻,用一种事物暗喻另一种事物。在软件的开发过程中恰当的适应隐喻可以起到事半功倍的效果。 在科学的探索中,科学家可以借助隐喻的力量来产生新的发现,比如化学...
  • fendouzhe_wupeng
  • fendouzhe_wupeng
  • 2012年07月24日 20:59
  • 283

软件的隐喻

写往往是一种个人活动,而软件开发需要很多人分担各种不同的责任,当你写完一封信,把它装进信封并把它邮寄出去,你就再也不能改变它的内容了,无论从哪个角度说,这项工作都已经完成了.软件的内容确是很容易改变的...
  • asong24
  • asong24
  • 2006年04月25日 10:14
  • 435

thinking in java中出现的设计模式代码例子

模板模式 例子一:随机创建不同类型的宠物 测试需要的javaBean类 //: typeinfo/pets/Individual.java package typeinfo.pets; public...
  • ccssddnnbbookkee
  • ccssddnnbbookkee
  • 2014年03月30日 01:39
  • 1276

深度理解开发中的设计模式

有些同事总是提前考虑性能优化,需求变更又是一大堆的重写,让我想起了Donald Knuth 提到的:对软件的过早地优化是万恶的根源。这里就简单的说几条重要的软件名人哲学。 1:软件中唯一不变的就...
  • AinUser
  • AinUser
  • 2016年09月06日 21:09
  • 570

代码大全中提到的软件隐喻

 偶尔看到了《代码大全》的连载,感觉其中提到的软件/编程隐喻很特别,特摘录一二如下:原文对隐喻的关键点总结:■         隐喻是启示而不是算法。因此它们往往有一点随意(sloopy)。■    ...
  • alvin_2005
  • alvin_2005
  • 2006年12月01日 10:50
  • 702

解读极限编程的十二大原则——隐喻

 隐喻:普通语言和术语的集合,用来预见项目中的功能。《敏捷软件开发:原则、模式与实践》一书中对隐喻的解读如下:隐喻(metaphore)是所有XP实践中最难理解的一个。极限编程者在本质上都是务实主义者...
  • blueluhan
  • blueluhan
  • 2008年08月08日 14:02
  • 5107

隐喻的重要性

要的研发成果常常产自类比(analogy)。通过把你不太理解的东西和一些你较为理解、且十分类似的东西做比较,你可以对这些不太理解的东西产生更深刻的理解。这种使用隐喻的方法叫做“建模(modeling)...
  • qinghua217
  • qinghua217
  • 2008年05月21日 18:38
  • 168

圣经中的隐喻

        圣经是西方和美国文化的源泉,基督教在西方和美国得以发扬光大,圣经功不可没。圣经不仅仅讲以色列人的历史还有很多很多的布教福音,教人从善。一方面它是统治阶级的统治工具,另一方面它也...
  • cuiyouzhi
  • cuiyouzhi
  • 2006年04月26日 09:15
  • 1128

软件隐喻

 代码大全开门见山提出了隐喻的概念。自我感觉就是合适的隐喻就是创建合适的模型,也就是建模的过程。正确的模型可以是你更加关注最应该关注的方面,而忽略其余次要的方面,它是启发性的。譬如一团泥巴,建筑学家会...
  • apolo11hao
  • apolo11hao
  • 2009年05月19日 22:25
  • 284

设计模式系列:责任链模式

引入1.案例2.面向实现编程方案首先来看一段代码: public void test(int i, Request request){ if(i==1){ Ha...
  • a910626
  • a910626
  • 2016年02月28日 18:03
  • 453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从软件隐喻到设计模式的思考(thinking in software metaphors)
举报原因:
原因补充:

(最多只允许输入30个字)