科技: 人物 企业 技术 IT业 TMT
科普: 自然 科学 科幻 宇宙 科学家
通信: 历史 技术 手机 词典 3G馆
索引: 分类 推荐 专题 热点 排行榜
互联网: 广告 营销 政务 游戏 google
新媒体: 社交 博客 学者 人物 传播学
新思想: 网站 新书 新知 新词 思想家
图书馆: 文化 商业 管理 经济 期刊
网络文化: 社会 红人 黑客 治理 亚文化
创业百科: VC 词典 指南 案例 创业史
前沿科技: 清洁 绿色 纳米 生物 环保
知识产权: 盗版 共享 学人 法规 著作
用户名: 密码: 注册 忘记密码?
    创建新词条
科技百科
  • 人气指数: 8433 次
  • 编辑次数: 1 次 历史版本
  • 更新时间: 2009-08-19
高兴
高兴
发短消息
相关词条
DOS操作系统历史
DOS操作系统历史
软件设计和开发的简史
软件设计和开发的简史
推荐词条
希拉里二度竞选
希拉里二度竞选
《互联网百科系列》
《互联网百科系列》
《黑客百科》
《黑客百科》
《网络舆情百科》
《网络舆情百科》
《网络治理百科》
《网络治理百科》
《硅谷百科》
《硅谷百科》
2017年特斯拉
2017年特斯拉
MIT黑客全纪录
MIT黑客全纪录
桑达尔·皮查伊
桑达尔·皮查伊
阿里双十一成交额
阿里双十一成交额
最新词条

热门标签

微博侠 数字营销2011年度总结 政务微博元年 2011微博十大事件 美国十大创业孵化器 盘点美国导师型创业孵化器 盘点导师型创业孵化器 TechStars 智能电视大战前夜 竞争型国企 公益型国企 2011央视经济年度人物 Rhianna Pratchett 莱恩娜·普莱契 Zynga与Facebook关系 Zynga盈利危机 2010年手机社交游戏行业分析报告 游戏奖励 主流手机游戏公司运营表现 主流手机游戏公司运营对比数据 创建游戏原型 正反馈现象 易用性设计增强游戏体验 易用性设计 《The Sims Social》社交亮 心理生理学与游戏 Kixeye Storm8 Storm8公司 女性玩家营销策略 休闲游戏的创新性 游戏运营的数据分析 社交游戏分析学常见术语 游戏运营数据解析 iPad风行美国校园 iPad终结传统教科书 游戏平衡性 成长类型及情感元素 鸿蒙国际 云骗钱 2011年政务微博报告 《2011年政务微博报告》 方正产业图谱 方正改制考 通信企业属公益型国企 善用玩家作弊行为 手机游戏传播 每用户平均收入 ARPU值 ARPU 游戏授权三面观 游戏设计所运用的化学原理 iOS应用人性化界面设计原则 硬核游戏 硬核社交游戏 生物测量法研究玩家 全球移动用户 用户研究三部曲 Tagged转型故事 Tagged Instagram火爆的3大原因 全球第四大社交网络Badoo Badoo 2011年最迅猛的20大创业公司 病毒式传播功能支持的游戏设计 病毒式传播功能 美国社交游戏虚拟商品收益 Flipboard改变阅读 盘点10大最难iPhone游戏 移动应用设计7大主流趋势 成功的设计文件十个要点 游戏设计文件 应用内置付费功能 内置付费功能 IAP功能 IAP IAP模式 游戏易用性测试 生理心理游戏评估 游戏化游戏 全美社交游戏规模 美国社交游戏市场 全球平板电脑出货量 Facebook虚拟商品收益 Facebook全球广告营收 Facebook广告营收 失败游戏设计的数宗罪名 休闲游戏设计要点 玩游戏可提高认知能力 玩游戏与认知能力 全球游戏广告 独立开发者提高工作效率的100个要点 Facebook亚洲用户 免费游戏的10种创收模式 人类大脑可下载 2012年最值得期待的20位硅谷企业家 做空中概股的幕后黑手 做空中概股幕后黑手 苹果2013营收 Playfish社交游戏架构

软件设计和开发的简史 发表评论(0) 编辑词条

目录

软件设计和开发的简史编辑本段回目录

软件设计和开发的简史

软件开发方法的演化史绝对是一部寻找“银弹”的历史,即研究管理软件复杂度方法的历史。我个人的体会:开发复杂的软件系统的确,呃,复杂,由此带来不菲的时间和金钱的花费。下面我们看一下5种软件方法论的发展及应用。

4.1 结构化编程(Structured programming)

在结构化编程思想提出之前几年,我就已经开始了(始于1973)职业编程生涯。结构化编程涉及正确使用代码块,过程调用以及各种循环结构。还有一条黄金法则:go-to是有害的。

程序结构应该清晰、流程控制易于理解,这点在今天看来是毋庸质疑的。同时我也认为,结构化编程的想法已经融入后来所有的编程方法论之中。 

4.2 面向对象编程(Object oriented programming)

面向对象编程(OOP)方法自然也是从结构化编程思想演化而来。OOP通过封装代码与代码使用的数据来管理软件复杂度。我们习惯于处理真实世界的物理对象,在OOP中,我们可以为真实世界的对象建模(如编写模拟程序,这也是OOP概念开始提出的地方),并对非具体概念如进程、信息组织方法等建立软件模型。

程序里“对象”维护自己的内部状态,这与结构化编程非常地不同。在结构化编程里面,代码是以一种结构化的、容易理解的方式组织,全局共享数据对于软件系统的各个部分都是可见的,包括那些并不需要访问或修改那些共享数据的部分。 

4.3 设计模式(Design patterns)

睿智的人关注他们世界的各种模式。学生时候,我们可能会注意班上同学的良好学习习惯所形成的学习模式带给他们优异的成绩。我们学习烹饪时,可能注意到有经验的厨师做菜的模式,如烹饪前先备料,加调料的时候不断的尝一下等。

在软件开发领域,设计模式的使用是基于对某些项目失败而另外类似项目成功的观察(这些也可能是管理模式,计划模式,测试模式等等)。在软件设计过程中,模式的使用是基于对一些通用的设计方式在成功项目中的重复使用的进一步研究的结果。 

4.4 极限编程(Extreme programming)

极限编程基于对客户需求的快速确认,快速开发与快速交付使用。极限程序员与客户交流过程中使用简单的设计,并以迭代方式优先开发软件最被需要的部分。

极限编程与传统开发方式背道而驰。传统开发方式是开发者与客户花费大量时间来试图事先将一切细节写入文档,这种开发方式占用相当长的时间。有经验的开发者知道,阶段性的完成编码对设计流程有正面影响。极限编程尤其适合那些需求复杂、或需求事先无法达成一致的情况。

在学习本书中的UML时候,我们会涉及个人如何使用软件系统的例子。极限编程有类似的概念,叫做"user stories"(这个词不知道应该如何正确翻译-by译者),即客户提供的他们感觉软件系统应该如何使用的信息。User stories会被用来估计开发时间,并帮助建立自动测试用例——用于开发测试和交付用户测试。

极限编程经常被描述为——对于我而言更加容易理解——测试驱动的编程,在编码前即编写测试代码!然后编写足够的能通过测试的代码即可。在所有单元测试通过之前,软件代码不允许改动。使用像JUnit(www.junit.org) 这样的工具来编写自动测试。 

4.5 面向切面编程(Aspect oriented programming)

面向切面编程(AOP)后面的主要思想是对软件系统不同关注点的分离,开发者通过拦截方法调用并在方法调用前后添加辅助代码来实现。切面可以在对象里除了行为之外新定义特定的切面数据(aspect-specific data)。原理上,这种哲学允许系统开发更加模块化,这种模块化的实现通过程序员不同的关注点来驱动。对于Java程序员,我推荐看一下AspectJ项目(eclipse.org/aspectj). 下面是从AspectJ站点引用的:

”AspectJ 通过对以下关注点的横切达到简洁的模块化:错误检测和处理,同步,对上下文敏感的行为,性能优化,监控及日志,调试支持,多对象协议”

无论是免费的Eclipse还是商业的IntelliJ Java IDE都支持AspectJ. AspectJ 是Java语言的扩展,需要预处理。我在为开源web框架Jaffa做收费咨询的时候用过Java的切面。在使用动态语言像Ruby和Lisp时,切面更加有用。Ruby和Common Lisp允许在任何源文件为一个类增加方法,这种优势意味着特殊的目的以及特定应用的对库的扩展可以与库的源代码相分离。

一个简单的使用切面的例子如下:你有一个类库来处理收发邮件,然后来了一个商业方面的需求,按收信人和发信人分类,记录邮件的数目和大小。分离的切面就能让你通过代码注入的方式来实现对邮件的监测,而不需要改变原类库的代码。这会让类库作者更加容易地维护他们的代码,不用增加对邮件监测的代码。(麦子塔)

参考文献编辑本段回目录

http://www.markwatson.com/opencontent/software_development_book/bookch5.html

http://www.yeeyan.com/articles/view/92681/55352


→如果您认为本词条还有待完善,请 编辑词条

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
0

标签: 软件设计和开发的简史

收藏到: Favorites  

同义词: 暂无同义词

关于本词条的评论 (共0条)发表评论>>

对词条发表评论

评论长度最大为200个字符。