martin

thinking

常用链接

统计

software

最新评论

利用C++开发架构程序的方法

在运用JAVA,C++等面向对象的语言进行开发的时候,不可避免地要用到继承.即从一个父类(P)派生出相应的子类(C).在开发应用的时候,我们可以仅从单个类的角度来考虑继承或派生.但是我们可以进一步对它进行引申.比如我们可以用基类(或纯抽象类,JAVA中的接口)来开发处理某类业务的抽象架构或平台,然后针对具体的应用,我们派生出相应的派生类,让它们来完成具体业务的具体逻辑.
在C++中,基础架购用基类写就,但具体业务逻辑用派生类来实现.为了做到这一点,我们必须在架构中指向基类对象的指针(->操作符),并且定义相应的虚函数(或纯虚函数).这样实现程序的动态多态.这样实现既满足了面向对象设计的OCP原则(open-close principle).
 
在基础架构中可能还包含保存基类指针的容器,这些指针可能后来所赋之值是派生类的指针,并且考虑到对象的生命周期,这些对象应该是通过NEW操作在heap上生成的对象,而不是在stack上保存的局部对象.为了保证这些对象的自动销毁,不需要应用开发人员的人工干预,这些保存在容器中的指针最好是含有基类指针的智能指针SmartPointer,或者说是代理类.SmartPointer是代理类中的一种.
 
根据前一篇文章的分析,在应用对对象指针的处理,采用了智能指针.但指向基类(P)的智能指针(SmartPp)与指向子类(C)的智能指针(SmartPc)不是父类与子类的关系,它们应该是同一类的不同实例.因此还应该对智能类定义如下操作,使之满足转型要求:
(1)从智能指针中获取指向对象指针的能力.
(2)根据指向对象的指针生成智能指针的能力.
满足这两点,我们就可以从SmartPc中获取pC(指向子类的指针),然后把它转型成pP(指向父类的指针),然后再根据pP生成SmartPp,然后保存在基础架构的容器中.在实际应用的过程中,会用到指向父类的指针,但此时它实际上是指向子类的指针,在程序运行的过程中,将用到动态多态性,即虚函数来处理相应的应用.
 
BTW(顺便说一下),因为一般说来容器(MAP,vecotr,或数组)只能保存一种类型,另外又要用到运行时的多态,最好保存指向基类对象的指针,而不直接保存对象,否则子对象将被切割,只保留父类部分,其余将被丢弃.另外为减少对对象管理的负担,最好在容器中保存对象的代理对象.

posted on 2009-03-03 15:10 martin_yahoo 阅读(1446) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理