C++多范型设计
基本信息
- 原书名: Multi-Paradigm Design for C++
- 原出版社: Addison Wesley
编辑推荐
本书详细地介绍了从“应用领域”到“方案领域”的C++设计实现方法,以及开发者在设计思考和设计实践过程中需要用到的记法、图表和设计模型。在读完这本书以后,读者将会了解如何根据应用领域的共同性和差异性分析来确定C++方案领域的结构,也就是如何选择适用于应用领域同时又为C++所支持的范型来形成方案领域的结构。
全书涵盖了这样一些重要的概念或方法,需要读者重点把握:软件族、共同性、积极或消极差异性、领域分析、领域划分、领域词汇表、面向对象的分析、复用、迭代、绑定、依赖关系图、范型混合,以及模式等。
本书第1章分析多范型设计的必要性,第2章和第3章分别介绍共同性和差异性分析。第4章解释如何使用领域分析来找到应用领域中的抽象。第5章说明怎样将领域工程的原则用作对象范型的抽象技术的基础。第6章应用“分析”来描述“方案领域”的特征,并且将C++结构放到形成共同性和差异性基础的正式框架中。第7章综合考虑前几章的内容,介绍了结构复杂性不同的设计问题的分类,以及可作为基于领域分析和多范型设计技术基础的高级活动集合。第8章研究结构复杂的设计,并介绍如何组合各种范型。第9章补充说明了流行的设计模式与领域工程之间的关系,提供了对模式、领域
工程以及二者关系的新的认识。
阅读本书需要读者一定程度地掌握了C++编程语言,并具有一定的面向对象编程的经验。书中大量引用了相关著作,读者朋友可根据需要参阅参考文献中相关书目。
内容简介回到顶部↑
c++是一种支持多种范型的编程语言:类、重载函数、模板、模块以及过程编程,等等。除了该语言的灵活性和丰富性以外,此前创建一种设计模式以支持在单个应用中使用多种范型的努力还很欠缺。
本书介绍了使用多范型设计的一连串框架,提供了形成正式多范型设计方法的基础的一系列超前的设计实践。
本书提供了利用c++的多范型能力的分析过程和设计过程的知识。书中使用易于理解的记法和易读的解释来帮助所有的c++程序员(不仅是系统构建工程师或设计者)在他们的应用开发中组合多种范型,以获得更加高效、健壮、更具可移植性和更容易复用的软件。
读者将获得对支持多范型设计的领域工程方法的理解、本书揭示了如何使用共同性和差异性的原则来分析应用领域,从而根据最适合每个领域的范型来定义子领域。多范型设计比任何一种技术或方法挖掘得更深,以处理软件抽象和设计的基本问题。
本书介绍了所有形成领域工程基础的概念和技术、这些概念包括:深入了解共同性和差异性分析,领域工程如何与常用设计模式相互影响,如何找到应用领域中的抽象,以及领域工程的原则如何用作对象范型的抽象技术的基础。最重要的是,本书讨论了在设计阶段如何将最适当的范型应用于实现的分析技术。
本书介绍了使用多范型设计的一连串框架,提供了形成正式多范型设计方法的基础的一系列超前的设计实践。
本书提供了利用c++的多范型能力的分析过程和设计过程的知识。书中使用易于理解的记法和易读的解释来帮助所有的c++程序员(不仅是系统构建工程师或设计者)在他们的应用开发中组合多种范型,以获得更加高效、健壮、更具可移植性和更容易复用的软件。
读者将获得对支持多范型设计的领域工程方法的理解、本书揭示了如何使用共同性和差异性的原则来分析应用领域,从而根据最适合每个领域的范型来定义子领域。多范型设计比任何一种技术或方法挖掘得更深,以处理软件抽象和设计的基本问题。
本书介绍了所有形成领域工程基础的概念和技术、这些概念包括:深入了解共同性和差异性分析,领域工程如何与常用设计模式相互影响,如何找到应用领域中的抽象,以及领域工程的原则如何用作对象范型的抽象技术的基础。最重要的是,本书讨论了在设计阶段如何将最适当的范型应用于实现的分析技术。
作译者回到顶部↑
本书提供作译者介绍
James O.Coplien是对象范型和C++方面的主要专家和作者,自从进入AT&T以后,他就一直致力于对C++语言的研究。现在他是朗讯贝尔实验室的成员,他的著作主要集中在多范型开发方法和软件开发过程的人工组织学上。Coplien以前的著作包括:《Pattern Languages of Program Design》(与Douglas C.Schmidt合著)、《Pattern Languages of Program Design》第二卷(与JohnM.Vlissides和Norman L.Kerth合著)、《Advanced C++:Programming Styles and Idioms》(《Advanced C++中文版》已由中国电力出版社出版)。<.. << 查看详细
目录回到顶部↑
译者序
前言
第1章 简介:多范型的必要性
1.1 领域工程和多范型
1.2 设计、分析、领域、族:术语定义
1.3 超越对象
1.4 共同性和差异性分析
1.5 软件族
1.6 多范型设计
1.7 多范型开发和编程语言
1.8 共同性分析:其他方面
1.9 小结
第2章 共同性分析
2.1 共同性:抽象的本质
2.2 起动分析;领域词汇表
2.3 共同性维度和共同性类别
2.4 共同性的例子
2.5 回顾共同性分析
2.6 共同性和演进
2.7 小结
前言
第1章 简介:多范型的必要性
1.1 领域工程和多范型
1.2 设计、分析、领域、族:术语定义
1.3 超越对象
1.4 共同性和差异性分析
1.5 软件族
1.6 多范型设计
1.7 多范型开发和编程语言
1.8 共同性分析:其他方面
1.9 小结
第2章 共同性分析
2.1 共同性:抽象的本质
2.2 起动分析;领域词汇表
2.3 共同性维度和共同性类别
2.4 共同性的例子
2.5 回顾共同性分析
2.6 共同性和演进
2.7 小结
译者序回到顶部↑
C++是一种支持多范型的编程语言。C++之父Bjarp.~Stroustrup认为,“多范型”可以有一种比较朴实的说法——“多种编程风格”。多范型设计的两个主要原则是共同性和差异性。本书正是根据共同性和差异性的基础来确定“范型”概念的。多范型程序设计是综合应用多种程序设计风格的程序设计方法,是产生架构的活动的集合,其目标是找到能够最自然地表达应用领域结构的方案领域结构。多范型设计是一种技巧,它并不完全是一种严格的规范。
本书详细地介绍了从“应用领域”到“方案领域”的C++设计实现方法,以及开发者在设计思考和设计实践过程中需要用到的记法、图表和设计模型。在读完这本书以后,读者将会了解如何根据应用领域的共同性和差异性分析来确定C++方案领域的结构,也就是如何选择适用于应用领域同时又为C++所支持的范型来形成方案领域的结构。
全书涵盖了这样一些重要的概念或方法,需要读者重点把握:软件族、共同性、积极或消极差异性、领域分析、领域划分、领域词汇表、面向对象的分析、复用、迭代、绑定、依赖关系图、范型混合,以及模式等。
本书第1章分析多范型设计的必要性,第2章和第3章分别介绍共同性和差异性分析,第4章解释如何使用领域分析来找到应用领域中的抽象。第5章说明怎样将领域工程的原则用作对象范型的抽象技术的基础。第6章应用“分析”来描述“方案领域”的特征,并且将C++结构放到形成共同性和差异性基础的正式框架中。第7章综合考虑前几章的内容,介绍了结构复杂性不同的设计问题的分类,以及可作为基于领域分析和多范型设计技术基础的高级活动集合。第8章研究结构复杂的设计,并介绍如何组合各种范型。第9章补充说明了流行的设计模式与领域工程之间的关系,提供了对模式、领域工程以及二者关系的新的认识。
阅读本书需要读者一定程度地掌握了C++编程语言,并具有一定的面向对象编程的经验。书中大量引用了相关著作,读者朋友可根据需要参阅参考文献中相关书目。
经过两个月的艰苦努力,本书的译稿终于完成并交付出版。译者由衷地希望读者朋友们能从这本译作中获取新的知识,提高自己的编程能力。本书由鄢爱兰、周辉主译,李明对全书进行了审校。欧阳宇、谢君英、谢俊、盛海燕、谢小花、李常青为本书的翻译做了很多工作。另外,吴晓晶、林知原也为本书的翻译工作提供了很大帮助,盛海燕和谢小花还完成了本书的初排和代码的录入工作,在此对他们表示衷心的感谢。由于译者水平和时间所限,译文中难免出现错误和不当之处,敬请广大读者批评指正。
译 者
2003年7月
本书详细地介绍了从“应用领域”到“方案领域”的C++设计实现方法,以及开发者在设计思考和设计实践过程中需要用到的记法、图表和设计模型。在读完这本书以后,读者将会了解如何根据应用领域的共同性和差异性分析来确定C++方案领域的结构,也就是如何选择适用于应用领域同时又为C++所支持的范型来形成方案领域的结构。
全书涵盖了这样一些重要的概念或方法,需要读者重点把握:软件族、共同性、积极或消极差异性、领域分析、领域划分、领域词汇表、面向对象的分析、复用、迭代、绑定、依赖关系图、范型混合,以及模式等。
本书第1章分析多范型设计的必要性,第2章和第3章分别介绍共同性和差异性分析,第4章解释如何使用领域分析来找到应用领域中的抽象。第5章说明怎样将领域工程的原则用作对象范型的抽象技术的基础。第6章应用“分析”来描述“方案领域”的特征,并且将C++结构放到形成共同性和差异性基础的正式框架中。第7章综合考虑前几章的内容,介绍了结构复杂性不同的设计问题的分类,以及可作为基于领域分析和多范型设计技术基础的高级活动集合。第8章研究结构复杂的设计,并介绍如何组合各种范型。第9章补充说明了流行的设计模式与领域工程之间的关系,提供了对模式、领域工程以及二者关系的新的认识。
阅读本书需要读者一定程度地掌握了C++编程语言,并具有一定的面向对象编程的经验。书中大量引用了相关著作,读者朋友可根据需要参阅参考文献中相关书目。
经过两个月的艰苦努力,本书的译稿终于完成并交付出版。译者由衷地希望读者朋友们能从这本译作中获取新的知识,提高自己的编程能力。本书由鄢爱兰、周辉主译,李明对全书进行了审校。欧阳宇、谢君英、谢俊、盛海燕、谢小花、李常青为本书的翻译做了很多工作。另外,吴晓晶、林知原也为本书的翻译工作提供了很大帮助,盛海燕和谢小花还完成了本书的初排和代码的录入工作,在此对他们表示衷心的感谢。由于译者水平和时间所限,译文中难免出现错误和不当之处,敬请广大读者批评指正。
译 者
2003年7月
前言回到顶部↑
我很少像这次一样,花如此多的精力来为一本书命名。随着对原稿的修改,书名逐渐从强调一组基本元素(领域、工程、多范型、分析、设计、编程,以及C++)变为总是强调一个或两个概念。出版社担心,使用大家所不熟悉的术语严领域工程”(domain engineering)]难以迎合目标市场。审阅者Tim Budd担心他使用的“多范型”
(multi-paradigm)会与本书中所使用的“领域工程”相混淆。而我则关心类似“分析” (analysis)这样的术语,因为我希望本书能对普通程序员(本书就是要介绍他们想要了解的问题)有所帮助。Tim Budd婉转地提出,我们的要求分歧大到足以容纳“多范型”定义的宽泛区间。我坚持使用一个强调程序员的作用、而不是强调方法论者作用的书名。结果我们愉快地达成了一致,也就是形成了现在的书名——“C++多范型设计”。
我向来不考虑包含“模式”(pattern)、“对象”(object)、CORBA、“组件”(component)和Java类似措辞的书名。多范型试图比任何技术和方法挖掘得更深,以阐明软件的抽象和设计的基本问题。什么是多范型?分析、设计和实现之间是什么关系?这些问题涉及到支撑编程的基本范型的抽象基础。
一个最基本的问题是——什么是抽象?抽象是软件设计的关键工具之一。对于管理计算机系统无限的、不断增长的复杂性来说,抽象是必需的。此问题的共同答案通常都与“对象”有些关系,因此这也反映了过去十年或二十年形成的、用于支持面向对象技术的文献和工具的总体。但这种回答忽略了程序员经常使用的“共同设计结构”,它们并非是面向对象的:模板、重载函数系列、模块、通用函数及其他一些内容。C++中这种用法非常普遍,尽管它并不是惟一的。
有些抽象原则是与所有的这些技术所共同拥有的。每项技术都是依据它们共同的属性(包括各个实体互不相同的规律性)进行分组抽象的不同方法。对有些技术来说,共同性捕获了系统经常出现的外部属性,这些属性与系统的领域有密切的关系。对其他一些技术来说,共同性有助于使分析在递归解决方案中为领域所揭示的隐式结构规则化。
多范型设计兼具上述两个方面的特性。例如,多范型设计技术(被称为面向对象的设计) 将对象分组为“类”,它描述了这些对象的共同结构和行为的特性。这种技术将类分组为层次或图表,它们反映了结构和行为中的共同性,同时允许结构和实现某个给定行为的算法中有规则的差异存在。模板可以用共性和差异的不同特性进行描述。共同性和差异性提供了宽泛而又简单的抽象模型,比对象和类都要宽泛,足以处理大部分的设计和编程技术。
共同性和差异性对软件设计模型来说并非是什么新鲜的事物。Parna关于软件族的概念[Parnasl976]至少在二十年以前就产生了。族是共同性相关的软件元素的集合,族的单个成员依据各自的变化而不同。从软件族中形成的设计思想,经常可以在被广泛接受的编程语言中获得体现。这里有一些很好的例子:模块、类和对象,以及通用结构。Lai和Weiss在专用语言环境方面的努力将这一思想发挥到了极限[Weiss 1999]。注重软件族的发现的所谓分析活动,与注重如何表达这些抽象的所谓编码活动,总是紧密融合在一起的。多范型设计显然认可了语言、设计、领域结构,及它们表达共性和差异的方式之间的这种紧密联系。
我们在“领域分析”(它是另一个拥有很长历史的领域[Neighbors l980])的活动中找到软件族。软件复用是领域分析的最初目标,此目标与软件族正好相符。多范型设计显然注重对于复用比较重要的问题。为帮助设计者思考能对预期市场的范围自适应的软件,多范型设计将共同性(假设它不变)与差异性(假设它确实发生变化)显式地分离开来。我们要努力进行领域分析,而不止于一般意义上的分析。我们要设计抽象族,而不是设计抽象。如果进展顺利,这种设计方法将使系统长期获得更简单的维护(假设我们对差异性预测得很好)和更有弹性的架构(每次进行修改时不必“挖出”系统的“根基”)。当然,多范型开发只是帮助支持复用的技术目标的工具。只有在组织问题、市场问题和软件经济学的更大型的环境中,才能产生高效的复用。
我们使用共同性和差异性这些基础来确定“范型”(paradigm)的概念。尽管范型广泛使用在当代的软件设计中,但它只是根据共性和差异属性组织系统抽象的一种方法。对象范型根据基于结构中共同性的抽象,以及系统和算法中的行为和差异来组织系统。模板范型是基于族成员的结构共同性的,它将变化因素显式地转化成模板参数。重载函数形成这样的族:族成员共享相同的名字和语义,族的每个成员依据各自的形参类型相区别。
C++是一种支持多范型(类、重载函数、模板、模块、普通的程序性编程等)的编程语言。这正如C冉的创造者Bjarne Stroustrup期望的那样。多数程序员使用了对象以外的C++特性(尽管有些人过度滥用这些特性,而另有一些人则在应当使用其他语言特性提供的更自然的设计表达时,对设计强制套用了面向对象的模式)。John Barton和Lee Nackman[Bartonl994]的强大的模板代码或许是对多范型设计的不错尝试。
尽管Stroustrup指明了C++是一种多范型语言,但C++中并没有创建一种与丰富的C++特征相配的设计方法的认真尝试。C++提供了多范型编程的一个特别丰富而生动的例子,其他的编程语言也同样获得了多范型开发的机会。当前的设计风格与当前实践中反映出来的C++特性的预期用法之间存在一个鸿沟。本书使用简单的记法和词汇表来帮助开发者将多种范型有启发性地组合在一起,为这个鸿沟架起一座桥梁。
1995年9月,我在DePaul大学演讲期间,系主任Helmut Epp先生建议本书使用
“meta-design”这个术语,因为本书首先关心的是确定适合领域(软件正是为该领域而开发)的设计技术。这种看法对本书所采用的方法很有用,实际上,它描述了多数开发者是如何开始设计的。开发者首先必须决定使用什么范型,然后可以使用范型的规则和工具划分适合它们使用的系统。领域不仅属于系统构架者和设计者,它还属于普通的程序员。
决定使用什么范型是一回事,使用工具表达给定范型的抽象是另外一回事。我们可以使用共性和差异的原则来分析应用领域,以将其分成多个子领域,每个子领域适合用某种具体的范型进行设计。开发阶段进行的这种划分通常称为“分析”。但是,因为它试图创建实现技术能够表达出的抽象,所以将它当作设计的初始阶段更好。并非所有的实现工具(编程语言和其他工具,比如应用程序生成器)都可以表达全部的范型。因此,进行领域分析,(而不仅仅是应用领域的分析,还包括解决领域的分析)是很重要的。多范型设计将领域分析变成一种很明确的活动。解决领域的分析是多范型设计的“meta-design”本质的另一个方面。
本书有诸多特点。本书不是一种综合的设计方法、软件开发的生命周期模型、或是准备进行设计的方法。多数优秀的新设计都与以前的设计有所不同。我们很少会面临一个全新的或惟一的软件问题。对新系统中的每个模块都使用本书的记法和技术既不合适,也浪费时间。但在新问题出现的时候,我们应当准备好去面对它们,发现其中的结构,并将对它的理解运用到设计和实现中。而且,多范型设计的记法和技术为文件设计(可以为面向对象技术增加其他范型)提供了统一的方式。
多范型设计是一种技巧,它既不完全是一门艺术,也不完全是一种严格的规范。本书介绍了支持开发者思考过程的记法、图表和设计模型。由于有了所有的这些记法,我们总想尝试使用它们。多范型设计是产生架构的活动的集合,架构与各个部分之间的关系有关,但架构也与效用和审美有关——没有使用通常方法的优秀软件的属性。要获得良好的体验,有一个关键的地方,我并不期望多范型技术能够推动自动设计和编码。良好的体验部分来自经验,部分来自于良好的洞察力。因此,这也不是一本入门书。读者应当具有一年或两年在大型系统中使用C++进行面向对象(至少)编程的经验。
把这些技术与常识一起使用,将很好地补充人们的判断力和经验。如果读者发现应用这些技术得到了一个既不喜欢又无法理解的设计,那么请不要采用这个设计。多范型设计技术只是工具,而不是指令。但所有的读者都应当通过本书认识到这样一点:对象范型或其他范型只是一组有用的范型,设计所表达的结构必须比任何单个范型所能表达的结构更宽泛。
本书的结构安排
为建立新的概念,并增加读者对领域工程和多范型技术的理解,每一章都建立在其前面章节的基础之上。多数读者都应按顺序阅读各章,然后返回具体章节作为参考。
第1章到第7章是基础章节,为领域工程打下了基础。
(multi-paradigm)会与本书中所使用的“领域工程”相混淆。而我则关心类似“分析” (analysis)这样的术语,因为我希望本书能对普通程序员(本书就是要介绍他们想要了解的问题)有所帮助。Tim Budd婉转地提出,我们的要求分歧大到足以容纳“多范型”定义的宽泛区间。我坚持使用一个强调程序员的作用、而不是强调方法论者作用的书名。结果我们愉快地达成了一致,也就是形成了现在的书名——“C++多范型设计”。
我向来不考虑包含“模式”(pattern)、“对象”(object)、CORBA、“组件”(component)和Java类似措辞的书名。多范型试图比任何技术和方法挖掘得更深,以阐明软件的抽象和设计的基本问题。什么是多范型?分析、设计和实现之间是什么关系?这些问题涉及到支撑编程的基本范型的抽象基础。
一个最基本的问题是——什么是抽象?抽象是软件设计的关键工具之一。对于管理计算机系统无限的、不断增长的复杂性来说,抽象是必需的。此问题的共同答案通常都与“对象”有些关系,因此这也反映了过去十年或二十年形成的、用于支持面向对象技术的文献和工具的总体。但这种回答忽略了程序员经常使用的“共同设计结构”,它们并非是面向对象的:模板、重载函数系列、模块、通用函数及其他一些内容。C++中这种用法非常普遍,尽管它并不是惟一的。
有些抽象原则是与所有的这些技术所共同拥有的。每项技术都是依据它们共同的属性(包括各个实体互不相同的规律性)进行分组抽象的不同方法。对有些技术来说,共同性捕获了系统经常出现的外部属性,这些属性与系统的领域有密切的关系。对其他一些技术来说,共同性有助于使分析在递归解决方案中为领域所揭示的隐式结构规则化。
多范型设计兼具上述两个方面的特性。例如,多范型设计技术(被称为面向对象的设计) 将对象分组为“类”,它描述了这些对象的共同结构和行为的特性。这种技术将类分组为层次或图表,它们反映了结构和行为中的共同性,同时允许结构和实现某个给定行为的算法中有规则的差异存在。模板可以用共性和差异的不同特性进行描述。共同性和差异性提供了宽泛而又简单的抽象模型,比对象和类都要宽泛,足以处理大部分的设计和编程技术。
共同性和差异性对软件设计模型来说并非是什么新鲜的事物。Parna关于软件族的概念[Parnasl976]至少在二十年以前就产生了。族是共同性相关的软件元素的集合,族的单个成员依据各自的变化而不同。从软件族中形成的设计思想,经常可以在被广泛接受的编程语言中获得体现。这里有一些很好的例子:模块、类和对象,以及通用结构。Lai和Weiss在专用语言环境方面的努力将这一思想发挥到了极限[Weiss 1999]。注重软件族的发现的所谓分析活动,与注重如何表达这些抽象的所谓编码活动,总是紧密融合在一起的。多范型设计显然认可了语言、设计、领域结构,及它们表达共性和差异的方式之间的这种紧密联系。
我们在“领域分析”(它是另一个拥有很长历史的领域[Neighbors l980])的活动中找到软件族。软件复用是领域分析的最初目标,此目标与软件族正好相符。多范型设计显然注重对于复用比较重要的问题。为帮助设计者思考能对预期市场的范围自适应的软件,多范型设计将共同性(假设它不变)与差异性(假设它确实发生变化)显式地分离开来。我们要努力进行领域分析,而不止于一般意义上的分析。我们要设计抽象族,而不是设计抽象。如果进展顺利,这种设计方法将使系统长期获得更简单的维护(假设我们对差异性预测得很好)和更有弹性的架构(每次进行修改时不必“挖出”系统的“根基”)。当然,多范型开发只是帮助支持复用的技术目标的工具。只有在组织问题、市场问题和软件经济学的更大型的环境中,才能产生高效的复用。
我们使用共同性和差异性这些基础来确定“范型”(paradigm)的概念。尽管范型广泛使用在当代的软件设计中,但它只是根据共性和差异属性组织系统抽象的一种方法。对象范型根据基于结构中共同性的抽象,以及系统和算法中的行为和差异来组织系统。模板范型是基于族成员的结构共同性的,它将变化因素显式地转化成模板参数。重载函数形成这样的族:族成员共享相同的名字和语义,族的每个成员依据各自的形参类型相区别。
C++是一种支持多范型(类、重载函数、模板、模块、普通的程序性编程等)的编程语言。这正如C冉的创造者Bjarne Stroustrup期望的那样。多数程序员使用了对象以外的C++特性(尽管有些人过度滥用这些特性,而另有一些人则在应当使用其他语言特性提供的更自然的设计表达时,对设计强制套用了面向对象的模式)。John Barton和Lee Nackman[Bartonl994]的强大的模板代码或许是对多范型设计的不错尝试。
尽管Stroustrup指明了C++是一种多范型语言,但C++中并没有创建一种与丰富的C++特征相配的设计方法的认真尝试。C++提供了多范型编程的一个特别丰富而生动的例子,其他的编程语言也同样获得了多范型开发的机会。当前的设计风格与当前实践中反映出来的C++特性的预期用法之间存在一个鸿沟。本书使用简单的记法和词汇表来帮助开发者将多种范型有启发性地组合在一起,为这个鸿沟架起一座桥梁。
1995年9月,我在DePaul大学演讲期间,系主任Helmut Epp先生建议本书使用
“meta-design”这个术语,因为本书首先关心的是确定适合领域(软件正是为该领域而开发)的设计技术。这种看法对本书所采用的方法很有用,实际上,它描述了多数开发者是如何开始设计的。开发者首先必须决定使用什么范型,然后可以使用范型的规则和工具划分适合它们使用的系统。领域不仅属于系统构架者和设计者,它还属于普通的程序员。
决定使用什么范型是一回事,使用工具表达给定范型的抽象是另外一回事。我们可以使用共性和差异的原则来分析应用领域,以将其分成多个子领域,每个子领域适合用某种具体的范型进行设计。开发阶段进行的这种划分通常称为“分析”。但是,因为它试图创建实现技术能够表达出的抽象,所以将它当作设计的初始阶段更好。并非所有的实现工具(编程语言和其他工具,比如应用程序生成器)都可以表达全部的范型。因此,进行领域分析,(而不仅仅是应用领域的分析,还包括解决领域的分析)是很重要的。多范型设计将领域分析变成一种很明确的活动。解决领域的分析是多范型设计的“meta-design”本质的另一个方面。
本书有诸多特点。本书不是一种综合的设计方法、软件开发的生命周期模型、或是准备进行设计的方法。多数优秀的新设计都与以前的设计有所不同。我们很少会面临一个全新的或惟一的软件问题。对新系统中的每个模块都使用本书的记法和技术既不合适,也浪费时间。但在新问题出现的时候,我们应当准备好去面对它们,发现其中的结构,并将对它的理解运用到设计和实现中。而且,多范型设计的记法和技术为文件设计(可以为面向对象技术增加其他范型)提供了统一的方式。
多范型设计是一种技巧,它既不完全是一门艺术,也不完全是一种严格的规范。本书介绍了支持开发者思考过程的记法、图表和设计模型。由于有了所有的这些记法,我们总想尝试使用它们。多范型设计是产生架构的活动的集合,架构与各个部分之间的关系有关,但架构也与效用和审美有关——没有使用通常方法的优秀软件的属性。要获得良好的体验,有一个关键的地方,我并不期望多范型技术能够推动自动设计和编码。良好的体验部分来自经验,部分来自于良好的洞察力。因此,这也不是一本入门书。读者应当具有一年或两年在大型系统中使用C++进行面向对象(至少)编程的经验。
把这些技术与常识一起使用,将很好地补充人们的判断力和经验。如果读者发现应用这些技术得到了一个既不喜欢又无法理解的设计,那么请不要采用这个设计。多范型设计技术只是工具,而不是指令。但所有的读者都应当通过本书认识到这样一点:对象范型或其他范型只是一组有用的范型,设计所表达的结构必须比任何单个范型所能表达的结构更宽泛。
本书的结构安排
为建立新的概念,并增加读者对领域工程和多范型技术的理解,每一章都建立在其前面章节的基础之上。多数读者都应按顺序阅读各章,然后返回具体章节作为参考。
第1章到第7章是基础章节,为领域工程打下了基础。
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· C/C++ 经典著作(《C专家编程》《C++ Templates中文版》《C和指针 》《C陷阱与缺陷》《C++沉思录》)


点击看大图





加载中...
