复杂系统的层级原理与模型驱动软件体系结构

eeflogo.gif -> home

复杂系统的层级原理与模型驱动软件体系结构

 

余彤鹰 2002-5-17


写在前面

  最近看到模型驱动在国内渐渐被更多的人注意,前几天又看到一些关于UML优劣和应用方面的争论。作为繁忙工作中的一种休息,从过往的研究笔记中整理一点东西放在这里,与大家交流。

层级理论是构建复杂软件体系的基本原则

  诺贝尔奖获得者赫伯特 A. 西蒙曾论述到:“要构造一门关于复杂系统的比较正规的理论,有一条路就是求助于层级理论……我们可以期望,在一个复杂性必然是从简单性进化而来的世界中,复杂系统是层级结构的”。对于软件这样复杂的人造事务,发现层级和运用层级,是分析和构建的基本原则。

软件的体系结构是层级的

  粗略地观察一下软件表述方式(语言)的发展:从穿孔纸带(机器的语言)开始,首先是汇编语言,然后是高级语言,再往后有面向对象语言和所谓第四代语言(FGL)出现……应当留意:每一代的语言并不是在“取代”前一代语言,而是用上一代语言来“写”下一代语言。在这个自然的进化过程中,西蒙所论述的复杂体系的层级特征清晰地出现了。

  进一步看,在由简单到复杂的进化道路上,软件的体系结构、软件开发的体系结构、软件开发工具的体系结构等等,都呈现出层级的特征。“好”的软件体系具有更加清晰的层级。

一维语言之后是模型

  这里不想展开讨论这个问题,只是提出一些思考的结果。与自然语言类似,现有的“程序设计语言”是单维的,它的基本语法是以前后顺序为基础的。当系统的复杂程度提高时,用这样的语言精确描述复杂系统变得越发困难,更遑论有效地修改维护;可视化开发平台、代码管理工具(甚至某种意义上共享组件也可包括在内)等的出现对此是一种补充,但仍然不是最终的解决方法。软件描述体系进化到这里,面临着一次突变,将有新的物种出现,这个新物种可能就是模型。笔者认为,模型与程序语言主要的区别不在于图形化,也不在于抽象的程度,而在于表达方式突破了“单一顺序”的限制,最简单的例子就是二维表。模型可以更容易和直接地表达复杂的结构。

模型和语言都是对系统的描述

  传统的编程语言和模型都是一种表述的体系,前者适合表述顺序过程,后者适合表述复杂结构。模型的必要性可以通过下面这个例子看出来:

  为了精确地复现,你可以用语言精确地叙述一个立方体,甚至10个立方体组合的形状,但你不会试图用语言描述一栋房子,适当的方式是用工程图纸。

  建立企业应用系统的情形可以从以上例子得到启发,企业系统要表述的,主要是复杂的结构,过程占的比重很小,因此,模型就变得更加重要乃至必要了。

OMG组织的MDA战略

  OMG最新的战略,是建立模型驱动体系架构(Model Driven Architecture, MDA),它的意义不是三言两语可以说清楚的,但从软件进化的角度来说,可能带有一种必然性,从上面的讨论,至少可以引申出两个理由:

  1. 更有效地描述复杂系统的需要;
  2. 系统复杂化带来的层级区分的需要。

关于模型的几个分析要素

  笔者认为,以下特征对软件体系中模型的运用是十分重要,或者有特殊意义的:

  • 模型的时效性(time-effectiveness of model):关于这一点最重要的区分在于,是“运行期模型”(Run-Time Model),还是开发期模型?这个区别,有点类似于解释的语言和编译的语言间的区别,但其意义却非同一般,笔者认为,“运行期模型”,揭示了模型驱动的本质。
  • 模型的可进化性(evolutionableness of model):是否可以在系统的应用过程中,持续地适应应用环境与需求的变化,不断地由应用者或自适应地对模型进行改进?这是对模型“性能”的一种度量。
  • 模型的层级性(hierarchy of model):正如语言有多个层次一样,没有理由认为模型只有一个层次,当系统足够复杂时,模型的层次划分将会是必要的。

UML和企业模型

  运用上面的要素分析一下,可以发现:

  UML是“紧贴”高级软件语言(例如C++)的模型体系,其时效是在软件生命周期的开发期间,而不是运行期间,其描述的层级是在软件的组件、对象一级,典型要素是软件中的对象,软件上一个操作的动作等。

  企业模型(比如ARIS, CIM-OSA, GERAM),典型的要素是组织,产品,过程等,它们是从企业的业务对象着眼的。二者在层级上有差距,而且企业模型追求的最终结果,是从“开发期模型”到达“运行期模型”,并且,笔者认为它最终应当是一种可进化的模型,这与UML的设计目标并不符合。

  它们两者间并不相互排斥,而应当考虑它们的“层接”。按照笔者的理解,OMG的MDA即使全面实现,也仍然不能做为或替代企业模型,但有可能成为企业模型的基础,这不是模型好坏或能力的问题,而是层级定位的问题。

写在后面

  面向对象(Object Oriented, OO)作为软件体系结构方面的一种演进而出现,也曾经被一些人误解为对过程化语言(或面向过程的体系结构)的取代。笔者认为,尽管OO反应了一种世界观,是一种思维的方式,但并不代表一切;且从层级和进化的观点上,也不应当将它看作是对既有东西的一种简单的取代。模型或模型驱动同样如此,它可能是继面向对象之后,软件体系结构的又一个重大的进化,但不是用来取代面向对象或结构化设计。笔者在1998年撰写《迈向21世纪的企业信息技术应用》一文时,对于模型的地位和作用并没有今天这样的认识,现在我坚信,对于企业信息系统这样复杂的系统,要想做到有效、可控制地规划与构建乃至具有“柔性”、可在运行期间不断地调整,“模型”是必须的,而且,表达与构建复杂企业系统时所需的模型,可能是多层次的,所谓“通用企业平台上的专用执行系统”,就应当是一个由运行期模型驱动的系统。


企业工程论坛  1998 - 2002

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: three.js是一个用于创建WebGL渲染的JavaScript库,可以用来呈现三维模型。在three.js中,我们可以通过层级模型和树结构来管理和组织多个对象的关系和位置。 层级模型在three.js中使用Object3D类的实例来表示,它可以作为一个容器,包含其他的3D对象或层级模型。通过将对象添加到层级模型中,我们可以实现对它们的组织和管理。例如,我们可以创建一个层级模型用于表示一个房间,然后将墙、地板、家具等对象添加到层级模型中。这样,当我们对该层级模型进行旋转或平移操作时,其中的所有对象都会相应地进行变换。 树结构是一种层次组织的方式,在three.js中也可以应用于层级模型的组织。通过在层级模型中添加多个层级模型,我们可以创建一个包含多层次的树结构。例如,我们可以创建一个根层级模型,用来表示整个场景,然后再在根层级模型中添加多个子层级模型,分别表示不同的物体和场景组件。这样,我们就可以通过操作树结构的不同层级来对整个场景进行管理。 举个例子,假设我们要创建一个虚拟城市的三维模型。我们可以创建一个根层级模型来表示整个城市,然后再在根层级模型中添加多个子层级模型,分别用于表示不同的建筑物、道路、车辆等。这样,我们可以通过树结构的层级关系来管理和控制城市中的各个组成部分。 综上所述,通过three.js的层级模型和树结构,我们可以方便地组织和管理多个对象的关系和位置,从而创建出复杂的三维模型场景。 ### 回答2: three.js层级模型是指通过three.js库创建的模型中存在不同层级的关系。在three.js中,可以通过添加子对象来构建层级关系,子对象可以有自己的位置、旋转和缩放属性。这种层级结构能够使得模型的各个部分可以独立运动或者进行组合动作。 举个例子,我们可以创建一个树结构的模型,树干作为整体的基础部分,树枝作为树干的子对象,叶子作为树枝的子对象。这样的层级结构可以通过设置每个子对象的位置、旋转和缩放来实现树的展示效果。 首先,我们可以创建一个树干的几何体和材质,并将它们合并到一个Mesh对象中。然后,创建树枝的几何体和材质,并将其作为树干的子对象,通过设置树枝的位置来使其连接到树干上。接着,创建叶子的几何体和材质,并将其作为树枝的子对象,同样设置叶子的位置来连接到树枝上。 通过对树枝和叶子的子对象进行旋转和缩放操作,可以实现树的分支和展开效果。另外,可以通过模型的整体旋转和缩放来实现整个树的运动和变化。 总之,通过three.js库提供的层级模型功能,我们可以构建复杂的树结构模型,实现树的展示和动画效果。这种层级结构使得模型的各个部分可以独立控制,为模型的展示和交互提供了更多灵活性和自由度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blacktigers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值