我们要写一个简单的目录系统来记录PC部件。各部件可能是其他部件的某部分,这里一台PC由硬盘HardDisk、主板Motherboard、DVD组成。示意图:
http://silva.cnblogs.com/gallery/image/26790.html为了对这些关系建模,我们引入两个概念:Part和Assembly. Part的一个例子是Hard Disk, 它是树的一个节点并且没有子节点。Assembly的一个例子是Motherboard,它由CPU, RAM and Graphics Card组成。对于Part和Assembly,我们要存储的信息是name, id, price and weight. Part只是记录它本身的信息,而对于Assembly,当我们要求它的price或weight的时候,应该是获得它所有的子部件的相关值的总和。
类的UML设计图如下,引入了一个抽象类InventoryItem,作为Part和Assembly的父类:
http://silva.cnblogs.com/gallery/image/26791.html代码框架:http://www.cnblogs.com/Files/silva/PreTest_DotNet(Update%20on%2017_Jun_06).zip 请下载。
您需要做的:
基于代码框架,完成代码,使SortedAssemblyTreePrinter由各字段组织起来,并使之可按照指定格式,指点排序方法,打印出来。下面是一个效果示意图(左边,未排序树; 右边,已按price排序的树)
http://silva.cnblogs.com/gallery/image/26792.html下面是模型和现实的相关Class在UML中的显示:
http://silva.cnblogs.com/gallery/image/26793.html

解决方案 »

  1.   

    英文原文:http://silva.cnblogs.com/archive/2006/07/11/448112.html
      

  2.   

    class Assembly : InventoryItem
    {
        private List<Assembly> childAssembly;
        private List<Part> part;
    }class Part : InventoryItem
    {}随便写写
      

  3.   

    目前有个问题:根据UML设计图,对象集合,把GetChildren() 方法的返回值类型定义为InventoryItem[]类型,因为在框架代码中,有代码行“.GetChildren().Length”。但是:怎么让这个InventoryItem[]包含InventoryItem类的实例?? 没有直接的Add方法?如果用ArrayList,需要去修改框架代码,因为ArrayList只有.Count来统计个数,不是用.Length.
      

  4.   

    目前有个问题:根据UML设计图,对象集合,把GetChildren() 方法的返回值类型定义为InventoryItem[]类型,因为在框架代码中,有代码行“.GetChildren().Length”。但是:怎么让这个InventoryItem[]包含InventoryItem类的实例?? 没有直接的Add方法?如果用ArrayList,需要去修改框架代码,因为ArrayList只有.Count来统计个数,不是用.Length.