- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
现代软件的设计技术
现代软件设计技术 潘爱民 2003-12-26 /CompCourse2003/ 内容 Generic Programming 构造框架(framework)的技术 构造可重用类库的技术 Generic programming 思想: “通过参数化技术达到重用的目的(reuse through parameterization)”,使得组件更容易被定制。实现静态配置代码,从而获得很高的效率。 Generic Programming可以消除类型和算法之间本来不必要的相依性 STL是成功的generic programming典型 generic programming限制代码产生的方式:用实体类型代替类型参数,使这些预先编制好的代码模型成为真正的代码,无法产生完全新的代码。 相关的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 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, 参考:/ generative programming Generative Programming 建立起一族软件系统的模型,在特定的要求下,利用一些基本的、可重用的组件,通过配置,能够自动根据需要产生一个高度定制和优化的软件系统实例 一些原则 用参数化技术来概括出差异性 对于相依性和交互进行分析和建模 通过静态链接(compile-time)消除不必要的开销,以及执行与特定领域相关的优化 将问题空间和方案空间分离,通过配置建立两者的映射关系 Separation of concerns: borrowed from AOP 特点 Generative Programming涉及到软件开发过程的各个阶段 与Domain Engineering结合 A Model-Based Approach:/domain-engineering/domain_engineering.html Active Libraries C++ Generic Programming Template技术 使C++成为two-level language metaprogram 从科学计算用途-〉一般性的抽象,即generic programming 对于编译器 代码产生、优化 在编译时刻,实现静态绑定 —— partial evaluation 对于库开发人员 Active libraries,提供一种抽象的功能,并且控制优化过程 许多技术,如policy(traits)、编译时刻计算功能 对于应用开发人员 定制template class或者template function C++ Generic Programming(续) 设计思想 编译时刻程序设计,类似于logic-programming即,在compile-time让编译器完成一些功能,例如 静态的计算功能 if/else,loop,switch 对type进行一些基本的逻辑操作(编程) 保证类型安全 宁可要compile-time error,也不要runtime error 尽可能地泛化 —— 抽象性 跟传统的设计方法结合起来,比如利用patterns Template基础 —— class template templatetypename T, size_t MAX_ELEMS = 8 class Array { public: T operator[](size_t n) { if (n 0 || n=MAX_ELEMS) throw Out of bounds! ; return m_rg[n]; } protected: T m_rg[MAX_ELEMS]; }; Template基础 —— 模板特化te
文档评论(0)