绪论:软件开发方法的演化与最新趋势
一、引言
二、系统与结构
1.系统
(1)相互作用的多元素的复合体——贝塔朗菲
①多元性
②相关性
③整体性
(2)相互作用和相互依赖的若干组成部分结合成的具有特定功能的有机体——钱学森
①由许多部分组成
②部分之间存在着相互关联、相互作用、相互制约
③具有某种功能的整体 整体的功能性
(3)整体大于部分之和——亚里士多德
2.耗散系统
(1)耗散系统就是指一个远离平衡态的开放系统通过不断与外界交换物质和能量,在外界条件的变化达到一定阈值时,就有可能从原有的混乱无序状态过渡到一种在时间上、空间上或功能上有序的规范状态。
(2)耗散系统具有真正意义上的时间单向性。
(3)我们生存的宇宙是一个我们现在能感知的最大的耗散系统。
(4)软件系统也是耗散系统。
3.系统的结构
(1)静态结构
系统处于尚未运行或停止运行状态时各部分之间的基本联系方式
(2)动态结构
系统处于运行过程中所体现出来的各部分之间的相互依存,相互支持,相互制约的关联方式
(3)时间结构
系统组成部分依赖于时间流程所体现出来的关联方式
(4)空间结构
系统组成部分依赖于空间的分布、排列或者配置所决定的关联方式
(5)时空结构
系统组成部分既依赖于空间又依赖于时间的关联方式
4.结构
(1)结构是一个由种种转换规律组成的体系。
(2)这个转换体系作为体系(相对于其他各成分的性质而言)含有一些规律。
(3)正是由于有一套转换规则的作用,转换体系才能保持自己的守恒或使自己本身得到充实。
(4)性质
①整体性
②转换性
③自身调整性
三、模型的概念
1.模型
(1)模型在日常生活中无处不在
(2)模型在科学研究与工程中广泛使用
(3)模型对人类活动至关重要
2.科学模型
(1)科学理论和人类所掌握到的一切知识,都不过是推测和假想。——卡尔·波普尔
(2)科学具有的性质
①可证伪性
②可解释性
③可预言性
3.工程模型
(1)工程的定义
应用有关的科学知识和技术手段,通过一群人的有组织活动将某个(或某些)现有实体(自然的或人造的)转化为具有预期使用价值的人造产品过程。
(2)工程定义为由一群人为达到某种目的,在一个较长时间周期内进行协作活动的过程。
(3)工程是科学和数学的某种应用。
(4)有用模型的特征
①抽象
强调重要的方面忽略无关的方面
②可理解
以一种对观察者容易理解的方式表现
③可模拟
模拟其代表的事物的结构和行为
④精确
忠实的反映被建模系统
⑤预言
可用来导出关于被建模系统的正确结论
⑥便宜
比被建模系统更便宜构造及学习
⑦转化
模型可以转化为现实事物
4.软件模型
(1)主观性强
(2)可模拟性不强
(3)转化为代码需要经历多种模型的转化
5.模型的定义
(1)模型是所研究的系统、过程、事物或概念的一种表达形式,也可指根据实验、图样放大或缩小而制作的样品。
(2)微软的电子百科全书(Encarta Encyclopedia):
①一个对象的副本 特别是比原始对象规模小的副本。
②简化版本 复杂事物的简化模型,用于分析解决问题或进行预测。
6.软件开发的复杂性
(1)很难精确表述出用户需求
(2)开发过程中需求经常变化
(3)需求常以大量的文本的形式表现出来,难以理解并互相冲突二义性
(4)很难发现大应用项目隐蔽的复杂性
(5)人类本身处理复杂现象的能力有限
(6)很难预估最终输出的执行效果及其是否能满足用户的期望
(7)1+1+1>3
7.软件开发中模型的作用
(1)模型的重要性
(2)便于更好地理解我们正在开发的系统。
(3)可以模拟或验证设计结果,避免造成不必要的损失或浪费。
(4)便于工程中所涉及的人员之间的准确、快速地信息传递。
四、方法、方法学、语言与图
1.方法与方法学(论)
(1)方法=模型+过程
(2)方法论是一种观点,是一个有理论意义的架构
2.软件方法学
(1)是以方法为研究对象的软件学科。
(2)主要涉及指导软件设计的原理和原则,以及基于这些原理、原则的方法和技术。
(3)狭义是也指某种特定的软件设计指导原则和方法体系。
(4)关注的中心问题是如何设计正确的软件和高效率地设计软件。
(5)软件工程与软件方法学的不同
①软件工程师侧重于借鉴传统工程学科,最终目的是把软件生存变成一门制造工程。
②两者之间的关系是软件工程需要软件方法学为依据和指导;方法学依赖于软件工程,特别是环境工具来发挥实际效用。
3.语言
(1)什么是语言?
①语言是人类特有的一种符号系统。
②乔姆斯基:语言是承载信息的表示符。
(2)语言=语法+语义+(语用)
①语法(Syntax):是一套将语言元素(字)组织成表达式(词、短语)规则。
②语义(Demantics):是一套将语法的表达式赋予某种意义的规则。
③语用(Pragmatics):在一定的语境中对语言表达和语言理解等活动。
4.语法
(1)抽象语法
当语言具有图形语法的时候,以独立于表示法的方式定义语法就变得重要了,这就是抽象语法。
(2)具体语法
通过将表示法映射到抽象的语法,可以定义具体的语法。
5.语义
(1)静态语义
①静态的语义定义了一个结构的实例应该怎样与其他实例连接才有意义
②X/y y≠0
(2)动态语义
而动态语义定义了这种良构结构的意义。
6.图
UML中模型基本都是以图的方式表现,并等价于图G。
五、软件方法学的历史
(1)结构化方法
(2)E-R图
(3)状态图
(4)规则
(5)形式化方法
六、软件方法学的现状
1.面向对象的软件开发范型
现实世界
面向对象的需求分析
面向对象的系统分析
面向对象的系统设计
OO高级语言
非OO高级语言
汇编语言
计算机世界
2.面向对象的优势
(1)面向对象方法改变了人们开发软件的方式
(2)面向对象语言使得从客观世界到计算机的语言鸿沟变窄
(3)面向对象方法使从问题域到计算机间的鸿沟变窄
(4)易于维护和复用
(5)有助于提高软件的质量和生产效率
3.统一建模语言UML的产生与发展
4.面向对象AO
(1)是对OOP的增强
(2)解决核心业务与其他业务的交织的问题
(3)应用
①持久化
②事物管理
③安全性
④日志
⑤调试
5.面向方面
6.AOP概念
(1)方面(Aspect)
关注的模块化
(2)连接点(Join point)
程序执行中插入方面的地点
(3)通知(Advice)
在特定连接点的动作
(4)切入点(Pointcut)
定义通知什么时候激发的连接点集合
(5)引入(Introduction)
对已经存在的类添加新的方法
(6)目标对象(Target object)
包含连接点的对象
(7)织入(Weaving)
装配方面产生新的对象(代理)
7.智能Agent
(1)智能Agent是一种抽象的实体,可以把它想象成一个存在于系统中、程序中的机器人,它接受外部环境给它的讯息,同时也对环境做出动作,并影响环境。
(2)自治性
代理可以在没有人或其它代理直接干预的情况下运作,而且对自己的行为和内部状态有控制能力;
(3)社会性
代理和其它代理可以通过代理语言进行信息交流;
(4)反应性
代理能够理解周围环境,并对环境的变化作出实时的响应;
(5)能动性
代理不仅简单地对其环境作出反应,也能够通过接受某些启动信息,表现出有(6)目标的行为。
(7)人/硬件机器人/软件机器人
七、元模型与扩展机制
1.对UML进行扩展的必要性
(1)为了适应不同的方法
(2)为了适应不同的领域
(3)为了适应不同的平台
(4)为了适应新的方法与技术
(5)UML并不能将任何领域描述清楚
(6)不同的领域需要不同的规约
(7)但是,如果UML可以随便扩展,标准就失去意义
2.UML扩展机制的作用
(1)扩展UML的语法和语义,适合不同领域不同层次的建模。
(2)保证扩展方案仍遵守一定的规范,仍然可以共享和交流。
3.UML Profile
外扩 投影
4.UML&SysML
5.奇怪的Meta
关于词头met(a)-
在和IT相关的词汇中,meta多译为‘元’
6.Meta与形而上学
7.BNF范式(Backus Naur Form)
(1)BNF可以描述所有高级语言的语法。
(2)BNF是所有高级语言的元语言。
8.元模型
模型的模型,是模型语法语义的规约
9.UML元模型
是UML模型的语法和语义的规约
10.基本扩展机制
(1)UML1.X
①Stereotypes
②Constraints
③Tagged Values
(2)UML2.0
①Profile
②Meta model
八、软件方法的未来发展
1.MDA的产生发展
2.对象与模型
(1)“任何事物都是对象”
(2)“任何事物都是模型”
3.软件危机
4.对象范型的不足
(1)并不能表示所需的概念
①方面
②服务
③模式
(2)分析\设计\编码的演化过程并不能保证模型的无缝映射
5.MDA兴起的原因
(1)软件系统越来越复杂
(2)异构性问题亟待解决
①语言与范型
②数据处理与访问协议
③操作系统与中间件平台
④软件开发技术
(3)UML已发展成熟,并成为事实上的标准建模语言
6.MDA的基本原理
(1)MDA的关键技术是元建模技术、模型转换技术和代码生成技术。
(2)模型转换使用的标准规范是QVT。