逼不得已,这个我确实不会,昨办?

  按理说,C#对面向对象的支持应该是最好的语言了吗?至少我是这样认为的。
  但目前我对一些现实世界的建模发生了一些困难,不得不采用一些周边手段去解决,这样,让代码看起来,很不优美。

        在对象编程中,最常用的应该是继承技术,它大大地扩展了对象的复用性,减少了开发上的繁重任务。但是,如果只使用继承的话,有一些对象关系无法描述的。现在,也只有“是一个” 和“有一个”的
关系还有它们模拟的代理和关联等能够很容易实现,还有对于逆向特征传递也可以在C#中使用反射与接口相结合来进行部分实现(尽管还不完善),但类与类之间的相互扩充以及对象之间的象耦合上却有一些麻烦。

  比如,在一个类中的方法成员中,有着大量的过程性代码,如果,要程序在运行时修改这些代码中的一部分,将会是一个极度麻烦的事情,更重要的是,很多时候,你并无法预知你要修改什么。这是与现实世界所相不符的。

  工厂模式对于大家来说应该是比较熟悉的了,就以工厂模式来说,有一个缺点就是:它无法避免子类有额外的成员,目前解决的方法有几种,一个是是在基类中实现所有可能出现的方法成员,这是不现实的,因为你并不知道自己建立的对象模型是否正确的前提下,针对需求的不同变化,是无法预知一切的。还有一个是派生出这个基类的接口,用它来包含所需要的所有成员,这种方法要稍灵活一些。最后一个方法是我想的,就是在产生子类与工厂之间,再增加一个抽象类,在开发时,如果需要添加新成员,就在这个抽象类中实现,然后再进行派生,但这样也并不是完全解决问题方案,因为你为了维护这个本不需存在的东西,将会付出更多的测试时间。

  对象模型的确立,究竟应该如何去进行?假设这里有一个人,那么我们定义了一个完整的人后,假设继承的类中,要表述的人这个对象少了一根手指头,怎么办?因为一只手上有五根手指,一般情况下的实现都是建立一个类表示手,手指是它的成员。也许有人会说,可以继承手这个类,然后重新描述新的四个手指的手这个类。

  但是,实际上,子类中就是少了一根手指,我们却要重新描述整只手,尽管方法上不是问题,也没有失误之处,但是问题的关键是如何实现在原有类中移除一个成员,而不是让此成员由实体变成虚体。

  这个问题的关键性就在于,类的成员往往是具体而微的数据,其严重性就在于,这些数据并没有达到“夸克”级的描述,所以在面对大量的需求变化的时候,影响着对象思想的正确进行的,往往就是这些数据类型造成的。在对象设计中,给我们能够带来很强的灵活性就是类,阻碍我们的就是那些类中的数据,因为它们往往是作为具体的实体存在。

  我研究了许久,也许是水平太差,至今不知该如何解决这个问题。不过,因为此类问题往往出现在简单的建模问题上,而不是什么太过高难的算法之中,所以我认为应该有一个简单而高效的办法来实现,小弟在此,诚心向大家请教。

posted @ 2004-08-10 19:31  一根神棍研古今  阅读(1101)  评论(6编辑  收藏  举报
Web Counter