软件方法学

本文仅根据自己的水平来总结,水平有限,仅供参考。高手请提点下,谢谢。

软件方法学主要是研究软件开发的方法。那么软件开发的方法又是什么?

先说说设计模式,它是一种具体的,针对大小工程的方法。但我们在学设计模式的时候,大都关注这个模式的含义,在什么背景下用,或者在实践中,感受每种方法的优势。而软件方法学研究的是怎么提出一种新的方法去解决问题,打个不恰当的比方,这是一个研究并提出新的设计模式的过程。可见,软件方法学是一种比方法更抽象的学问,它研究的是分析实际问题和设计程序的“方法”。而设计模式是具体的方法,是在方法学提纲挈领的前提下,提出的设计程序的方法。方法学是因,设计模式是果——这个比喻可能不恰当,仅仅是用来帮助区分。对于一个初次接触方法学的人来说,我认为可以这样去简单记忆。

掌握方法学有什么好处?我觉得可以在思想上统一把握复杂的方法,市面上很多书籍,很多算法/模式类的,怎么知道它们是否合适自己?例如,游戏算法讲究状态/面向对象/规则化,大型服务器算法讲究形式化,小程序只需要过程化语言等。可能得学完方法学,才能明白不同的方法的适应范围。先总结下方法学史。


软件方法学史

针对不同的应用背景,前人主要提出了5类方法

1.结构化

这是传统的设计方法,在软件系统不怎么复杂的情况下,可以使用。例如购票系统,其流程比较明确,重点在于作好流程分析。

2.对象化

对于稍微复杂的系统,很多对象的系统,可以使用面向对象方法。例如学生系统/人员管理系统,里面很多对象。如果用结构化的编程思想,就会把程序设计的很庞大,且不易于维护。利用面向对象的思想,随着同一类型的对象增加,并不会提高系统的复杂度。但这种设计方法也不是万能的,对于各种对象之间的关系很复杂的系统,仅仅是用面向对象的方法是不足够的。所以有了后面三种设计方法。

3.状态化

游戏算法比较注重这一种设计,例如一个游戏人物的状态与状态切换,如果使用前面两种方法设计,会很难维护,代码量也大。但如果把状态当作一个实例对象,就会把情况简化,整个程序的设计都围绕着“状态对象”的变化。当你新增一个状态,并不会提高系统的复杂度;一般的做法是设计状态接口,所有的状态对象是根据这个接口设计的,新增加状态时,并不需要改变接口定义,这样,对系统的改动就很少了。当如果你使用的是前面两种方法,就得把整个系统改一遍了,要增加相当多的if/else语句。

4.规则化

棋类游戏使用这种方法较多,因为这类程序有很多固定的规则,状态/对象/结构的对象比较固定,因此使用前面3种方法比较不恰当。

5.形式化

在一些要求高精度的应用环境,必须使用形式化的方法,所谓形式化,就如数学算法这样,必须是可以证明在任何情况下都是正确的。这是为啥很多大公司的服务器,大数据运算,搜索引擎等职位,都要求数学和算法学的很好的工程师的原因。这种职位面对的是形式化的设计需求,你需要设计出绝对正确的程序,因为一旦崩溃,后果很严重。


吹水:我感觉驱动设计,系统的硬件接口设计比较偏向结构化设计。很多嵌入式工程师,都只关注硬件的配置/初始化和工作流程。因此很多工程师做久了,就会厌倦,觉得软件设计很程序化。当然,高手不会止于这一步,向上发展。这样就会接触到系统和内核技术,这里就有很多面向对象和形式化的设计思想。貌似系统设计中,状态化的设计思想不是重点,而游戏设计/人工智能的设计,这方面的使用会比较多。感觉了解了下软件方法学,对软件设计的思想有了新的认识。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值