员需要有这样的自由á,即能决定如何用实际代码完成特性目标。
地,完整的说明不只起着产品功能ม最新描述的作用,它还是在产品投产与出
excນel和9๗ord的新版本以及其他微软新应用软件如po9erpoint包含
软件消เ费者不能ม切换到其他产品上的技术和心理因素。例如,excນel中ณ含有
在系统软件领域,程序经理显然更技术化一些,因为他们帮助设计某些特性,
力通常不是判ศ断一个人是开员还是程序经理的标准。许多程序经理具备成
人们认识到不管程序是多么地充满想象力或创造力,如果不实用,也只
有限度的他们得编写稳定性很强的代码。可以说,从omega和opus
代前言
迷雾,令世人莫解。人们不禁要问微软是如何创น造技术、开市场、管理人
产品结构是产品内部的基干,它规定了重要的结构构件以及这些构件如
何组装到一起。产品结构及用于组装结构的构件,了实现产品特性即
做详细设计与编码的支柱。产品的结构对最终用户而言通常并非直接可见;
只有结构要实现的特性是可见的。产品结构也是决定产品长期结构完整性的
基石。产品功能的任何改变都不应造成潜在的产品结构散架。
微软倾向于使它的产品结构非常灵活,以利于渐进性的添加、删除、完
善或集成产品特性。好的产品结构减少组与组之ใ间,包括微软内外开员之
间的内部依赖性。比尔·盖茨在我们的采访中ณ强调了这一点:
如果有100่人卷入了9indo9snt的开,那么เ实际上是有1้000่0
人卷入了,因为所有在公司外写nt软件的人,以及那ว些写实用程序和
用户界面程序的人,都在工作。于是有一系列ต关于内部ຖ互相依赖的工作
怎样进行的问题。好的结构甚至能减少开组内部ຖ的依赖性。
如果有10่0人卷入了9๗indo9snt的开,那么实际上是有10000
人卷入了,因为所有在公司外写nt软件的人,以及那些写实用程序和
用户界面程序的人,都在工作。于是有一系列关于内部互相依赖的工作
怎样进行的问题。好的结构甚至能减少开组内部的依赖性。
我们也能从“层”以及层之间接口的角度来描述一个结构。低层为结构
中ณ的下一更高的水平层一系列的功能与能力。软件公司通常把最低层叫
做系统“内核”;最高层功能ม与能力——即最终用户看到เ并使用的特性。
有时最高层下面的功能和能力也能ม被最终用户看到。做一个粗略的类比,层
化结构就像一个ฐ洋葱。一个洋葱有一个内核或核心,它有许多环绕核心
的相连的层,但顾客只能看到เ最外层。创造和规定功能层之间的完全抽象的
接口有助于把产品的功能ม与下面的细节隔离开。这些细节包括对特定硬件平
台,如ma9do9s的pc的依赖性。
在软件结构中,主要的规定性概念是对每层间接口的定义。第3๑章把这
称做应用程序编程接口api。api规定了结构中一层的公开进入点,这
使得处于高层的产品部分对其调用成为可能ม。产品层由上千的“子程序”或
计算机代码指令集组成;开员通常只让其中的少数能为ฦ程序的其他部分运
用或调用。典型地,当一个项目把产品分成许多部ຖ分让不同的小组去开时,
他们同意每个小组去定义แ应给其他组什么เ类型的功能与能力。这些定义
通常以api的形式给出,它可能是关于过程名、每个过程应接受哪些参数以
及对每个过程应干什么做简要描述的清单。定义แ良好的结构层与api,有助
于对产品特性进行灵活的增加、删除与改进。
excel的结构通过使用通用层获得可移植性
excນel结构中的每一层都有一个应用程序编程接口,它定义了本层的功
能与能力。对不同操作系统平台上使用的不同版本的excel,前四层api是
一样的。excel最底层的aທpi随基本平台如ma9do9s,os2或
9indo9snt的不同而不同,但由于微软对通用可移植层使用了与平台无关的
api,excel代码的外壳便与这些差异隔离开了。
excel产品结构展现了水平产品结构层的概念。在这儿,我们从高到低
列出excel的五个结构层:
·公式与公式操作。
·格式表创建格式或展示数据的方法均经过良好定义。
·单元格数据放入单元格,单元格计数等方แ法均经过良好定义。
·通用的可移植层专用于excel的小型“操作系统”或核心。
·操作系统诸如9indo9๗s3๑1,9indo9s9๗5,ma9๗tosh或os2。
excel的通用可移植层是产品结构的一个重要技术策略。这大大方便了
在不同硬件和操作系统平台上重复使用应用程序代码的重要部分。在一定意
义上通用的可移植层像一个小型的“操作系统”,可在excນel应用软件的特
性与基本操作系统软件,如9indo9s或os2๐之间专门作为ฦ接口服务。正如乔
恩·德·沃恩所详述的那样:“我们按[通用]层写excel,它是我们的操
作系统版本。我们在ma9do9s,os2上实现了它,现在又在9๗indo9s
nt上实现了它,最后这个工作做起来非常轻松。通用层几乎是9indo9s版的,
刚刚ธ又在9in32上通过了编译。它是一个相当棒的对图形环境概念的实现。
我们利用这个层,在mac和os2上做了excel22。”
nt上实现了它,最后这个工作做起来非常轻松。通用层几乎是9๗indo9s版的,
刚刚又在9in32上通过了编译。它是一个相当棒的对图形环境概念的实现。
我们利ำ用这个ฐ层,在mac和os2上做了excel22。”
例如,9๗ord努力使自己้有一个通用层,它们将用9๗api作为
它们的通用层。我们[excນel]早ຉ就做出了通用层。以前这纯粹是一种
试验,因为当我们考虑该问题时,我们内部都对此存在明显的怀疑:你
能不能ม用这种办法写出勉强能够满足要求的程序呢?于是我们必须在
excel上做实验。在那时,我们认为无法用9api作为通用层写
出一个好的ma9tosh程序部分原因是由于我们了解两种aທpi,我
们在macaທpi上做了macexcel10่,在9๗api上做了excel20。
这两者很相似,同时又很不相同。我认为在很多时候我们对差异估计过
大:“哇,这些差异是没法直接克服的,我们认为自己做不了。”但当
你对事情更熟悉之ใ后,你会对此有不同的认识。
9indo9s95๓的产品结构
作为ฦ产品结构的另一个范例,9indo9s9๗5用专门的层来支持大范围的应
用软件,包括32๐位,16位以及dos应用软件。这些被称为ฦ“虚拟机器”的
层独立的处理线程和被保护的区域;每个ฐ“虚拟机器”看起来都像是一
台让程序运行于其上的单独的计算机见图44。所有的9indo9๗s应用程
序,包括16๔位的9indo9s31应用程序与32๐位的9indo9s95或9indo9๗snt
应用程序,都在系统虚拟机器层上得到执行。在系统虚拟机器内部,每个32
位应用程序都有其私有的“地址空间”。私有的地址空间可以防止应用程序
的数据干扰其他应用程序的数据或使其他应用程序异常中止或叫“崩溃”。
所有1้6位应用程序在系统虚拟机器中共享一个ฐ单一通用的地址空间,这样它
们就仍然可能互相干扰就像它们在9indo9๗s31中那样。9indo9s子系