收藏 分享(赏)

现代软件设计技术.ppt

上传人:jw66tk88 文档编号:5229057 上传时间:2019-02-13 格式:PPT 页数:36 大小:239KB
下载 相关 举报
现代软件设计技术.ppt_第1页
第1页 / 共36页
现代软件设计技术.ppt_第2页
第2页 / 共36页
现代软件设计技术.ppt_第3页
第3页 / 共36页
现代软件设计技术.ppt_第4页
第4页 / 共36页
现代软件设计技术.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、现代软件设计技术潘爱民2003-12-26http:/ Generic Programming 构造框架 (framework)的技术 构造可重用类库的技术Generic programming 思想: “通过参数化技术达到重用的目的 (reuse through parameterization)”, 使得组件更容易被定制。实现静态配置代码,从而获得很高的效率。 Generic Programming可以消除类型和算法之间本来不必要的相依性 STL是成功的 generic programming典型 generic programming限制代码产生的方式:用实体类型代替类型参数,使这些预先

2、编制好的代码模型成为真正的代码,无法产生完全新的代码。相关的 programming Aspect-Oriented Programming (AOP) An aspect is a modular unit that cross-cuts the structure of other modular units Aspects exist in both design and implementation. A design aspect is a modular unit of the design that cross-cuts the structure of other parts

3、of the design. A program or code aspect is a modular unit of the program that cross-cuts other modular units of the program. 把问题分解为功能单元 (组件 )和 aspect 在 AOP系统中,组件和 aspects(交织 )组合起来得到一个系统的具体实现。交织组合既可以在 compile-time, 也可以在 runtime AOSD, 参考: http:/ programming Generative Programming 建立起一族软件系统的模型,在特定的要求下,

4、利用一些基本的、可重用的组件,通过配置,能够自动根据需要产生一个高度定制和优化的软件系统实例 一些原则 用参数化技术来概括出差异性 对于相依性和交互进行分析和建模 通过静态链接 (compile-time)消除不必要的开销,以及执行与特定领域相关的优化 将问题空间和方案空间分离,通过配置建立两者的映射关系 Separation of concerns: borrowed from AOP 特点 Generative Programming涉及到软件开发过程的各个阶段 与 Domain Engineering结合 A Model-Based Approach: http:/www.sei.cmu

5、.edu/domain-engineering/domain_engineering.html Active LibrariesC+ Generic Programming Template技术 使 C+成为 two-level language metaprogram 从科学计算用途 -一般性的抽象,即 generic programming 对于编译器 代码产生、优化 在编译时刻,实现静态绑定 partial evaluation 对于库开发人员 Active libraries, 提供一种抽象的功能,并且控制优化过程 许多技术,如 policy(traits)、 编译时刻计算功能 对于应

6、用开发人员 定制 template class或者 template functionC+ Generic Programming(续 ) 设计思想 编译时刻程序设计,类似于 logic-programming即,在 compile-time让编译器完成一些功能,例如 静态的计算功能 if/else, loop, switch 对 type进行一些基本的逻辑操作 (编程 ) 保证类型安全 宁可要 compile-time error, 也不要 runtime error 尽可能地泛化 抽象性 跟传统的设计方法结合起来,比如利用 patternsTemplate基础 class template

7、templateclass Array public:Treturn m_rgn;protected:T m_rgMAX_ELEMS;使用:Array a1;Array a2;Template基础 模板特化template specializationtemplate 0);Template技术 代替 runtime的临时变量templateclass countBits enum bit3 = (N public:enum nbits = bit0+bit1+bit2+bit3 ; ;int i = countBits:nbits;int countBits(int N)int bit3 =

8、 (N return bit0+bit1+bit2+bit3;int i = countBits(13);Template技术 计算 Compile-time functions 一般原则: 局部变量用 enum类型 循环转化为递归,结束条件为一个特化版本 也可以是多重循环,需要用到部分特化特性 条件分支用模板特化解决 效果:以类型为基础,实现各种操作 例如 sin x = x - x3/3! + x5/5! - x7/7! + 在编译时刻求 pow(x,y), 即 x的 y次方Template技术 计算 pow(x,y) templatestruct ctime_pow enum resul

9、t = X*ctime_pow:result ;templatestruct ctime_powenum result = 1; ;用法:const int z = ctime_pow:result;Trait技术 定义一些 “函数 ”,这些函数的参数和返回值都是类型 (type), 而不是数据 (data) 例如:对于一个数组类,它的元素类型和平均数的类型不一定相同,可以用一个 trait class来建立这种映射关系 对应关系 Average_type(T) - T Average_type(int) - float Trait的使用: Average的实现Partial evaluati

10、on 一个程序的计算分为两个部分 静态计算:在编译时刻执行 动态计算:在运行时刻执行 例如,计算立方体的体积Template技术 模板类作为基类 某种程度上可以代替模板特化templateclass String : public Array public :/ additional functionalitybool operator=(const StringTemplate技术 以模板参数作为基类 允许用户把自己的类插入到类层次的中间 用户提供基类,类库使用基类templateclass Deriving : public Base C+ as a two-level language

11、将 type当作 first-class value来对待 例如 一种做法: 下面的句子 typedef T T_average; 相当于 typedef T_average = T; 实现了类型的赋值Template技术:动态绑定 模拟虚函数多态性templateclass Array public :virtual int Compare(const Arraybool operator bool operator=(const Array templateclass Array public :.bool operator bool operator=(const Array frame

12、work 领域工程 单个系统 一类系统 有较强的抽象能力 组件库 提供定制功能,允许开发人员对于框架主体部分进行修改 不同层次上的 framework 基于二进制代码的 framework, 例如 MMC 基于源代码的 framework, 例如 MFC基于二进制的 framework 接口: 为应用中的组件提供二进制接口 以对象形式封装 以功能为单位 粒度 大而全的接口 小型接口,允许动态发现新的接口 通信模型 用户组件与框架进行通信 用户组件之间如何通信? 通过框架传递信息 通过框架建立直通模型基于源代码的 framework 接口: 一般为抽象类,用户提供虚函数的实现,并注册到主框架中

13、用户定制的余地比较大 通信模型 用户组件与框架进行通信 用户组件之间容易建立起直通途径从派生类传播类型到基类的一种模式 意图: 基类有时需要根据子类的类型执行一些功能,而基类又不可能直接得到子类的静态类型 这对于 generic programming非常重要,因为编译器要靠静态类型来实例化模板 (函数或者类 ) 解决方案 用虚函数不能解决问题 runtime多态性 在子类中插入一个函数,由该函数调用模板函数或者模板类,或者该函数调用基类中的模板成员函数 仅对基于源代码的 framework适用Framework举例 为报社提供一套 frameworkSnap-In管理器FrameSite FrameSite FrameSiteSnapIn对象 SnapIn对象SnapIn对象Security管理器Database管理器UI管理器SnapIn仓库IFrameSiteISnapInfoSnapIn DLL SnapIn DLL SnapIn DLL可重用类库的设计 (一 ) 在所有的系统设计中,可重用类库的设计是难度比较大的,要做到: 使用:灵活性和易用性 功能:广泛性和效率 经验非常重要 实现同样的功能会有许多不同的道路,如何选择?效果怎么样? 类库的基础 是否使用其他的类库?是否使用特殊的平台和编译环境? 参考成功的类库 起点要高

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 行业软件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报