在之前的系列专栏里,我们将一个现有的 ISO-C++ 应用程序逐渐转移到 Microsoft .NET Framework,阐明 C++/CLI 的互操作性功能,并强调 C++ 和 .NET 对象模型的差异。在这下一个系列专栏中,我们会探讨将 C++/CLI 作为完全与 .NET 兼容的语言使用。由于即将变得显而易见的原因,该应用程序代号命名为 EEK!因为目前我花费大量时间处理 MMOG(Massive Multiplayer Online Games,大批量多玩家在线游戏)的服务器端,EEK! 采纳了该领域的很多方面,不过进行了简化,以适应一个专栏有限的空间,而且明显有更多的弱化功能。
我的业余爱好(同样十分有限)是分子生物学,以及质疑在这样一种细节层次上发生的事情如何使我们在周围观察到的行为变得可能。在科学研究中,对老鼠的使用可能比任何其他活生物都要广泛,或许只有两个例外:果蝇和大肠杆菌(一种细菌),后两者我都不觉得有特别的吸引力。但是如果长时间观察老鼠,会发现它们有奇怪的熟悉感。它们合作找回掉出巢外的幼鼠,它们展示出不一样的个性,它们似乎可以从经验中记忆和学习,既通过个体也通过跨代的集体。
就像靠着低预算研究大猩猩的我们的动物学家 Dian Fossey 一样,我供养着很多老鼠并用人类学的办法观察它们(当然是有些随意性的)并给它们拍照。EEK! 是我的一个尝试,用于模拟该环境以及老鼠的行为。我在主页上给这个框架命名的代号就是 EEK!,以此献给我在“迪斯尼动画”的电脑制图朋友们。他们跟我担保那是老鼠在发觉自己被困住时发出的声音。
那么,我怎么开始呢?首先,我需要说明一组类,我用他们实现我的设计。它们一部分用来描述应用程序。我需要我的罐子、老鼠、某种标出时间推移的方式,以及一些方法来显示或可能保存随时间流逝而发生的变化。这一系列过程中我尝试使用尽可能多的 .NET 技术。
背离设计的类很大部分由应用程序的意图决定。如果我将 EEK! 设计成一个在线虚拟环境,其中用户作为虚拟老鼠登录,与其他人和环境交互,那么接下来几个月里我所从事的设计将不是最好的,因为它并不促成交互式游戏。换句话说,这是模拟错误层次的细节。也就是说,从同一领域空间出现的设计,很大程度上是应用程序意图的结果,而非领域空间本身。
老鼠是哺乳动物,因此它有很多人类的特点,但它的意图要简单很多并具有较少的目的性。那么,什么使老鼠在特定时间作出特定行为呢?原来老鼠的很多行为受到分子层次的驱动(通常经由环境中一种叫费洛蒙的化学物散发的气味),它对此毫无意识。这就是我希望在此设计中完成和探索的东西,也使此设计更具挑战性。
罐子和老鼠都是更加抽象的一组类的具体实例,它们构成了模拟框架层次结构的根部。图 1 可让您对该层次结构有个初步了解。
Figure1模拟框架的层次结构
public ref class Environment abstract;
public ref class Entity abstract;
public ref class NonSentientEntity : Entity abstract;
public ref class SentientEntity : Entity abstract;
public ref class Mouse : SentientEntity;
public ref class Tank : Environment;
public ref class ExerciseWheel : NonSentientEntity;
public ref class WaterDispenser : NonSentientEntity;
Figure1模拟框架的层次结构
public ref class Environment abstract;
public ref class Entity abstract;
public ref class NonSentientEntity : Entity abstract;
public ref class SentientEntity : Entity abstract;
public ref class Mouse : SentientEntity;
public ref class Tank : Environment;
public ref class ExerciseWheel : NonSentientEntity;
public ref class WaterDispenser : NonSentientEntity;