模块化C代码与UML对象模型之间的映射(4)——常见问题小结
2012-03-19 14:07
351 查看
下面是零零散散做的一些笔记。
1、为什么说双向关联往往是设计的坏味道?
从可复用性的角度来看,如果两个类间的关系是双向的,则每个类都需要知道对方,因此两者都不能复用。说明单向关联有助于标识可复用的类。
2、聚合组合方式会遇到对象生命期管理的问题,怎么解决?
例如,A_Create(B_Create()->IA, B),即类B实现接口IA供类A内部使用,那么IA的生命期该由谁来管理呢?常见的做法是在IA中加入Destroy接口,那么A可以由此释放IA。可是这违背了一个原则,一般内存管理是谁申请谁释放的。我知道的另一个办法是借鉴Linux设备驱动程序的做法,把IA定义为全局变量。“生命期管理是个很大的课题。”后续再慢慢研究。
3、如何区别泛化与实现关系
我是这样理解的:泛化(继承)对应抽象类;实现对应接口。
根据不同角度的理解,设计上会做出不同的抉择,但
请慎用继承,因为:
(1)继承是过紧的耦合,每当父类变化,子类也得跟着变,违背了开闭原则。
(2)继承不支持多态,父类与子类之间的关系在编译时就静态绑定了。
“所以一般都提倡,只继承接口不继承实现,通过组合达到代码重用的目的。”
btw:关于C语言实现面向对象机制,我目前只是初探,目的是在必要的时候能够有效的驾驭和简化用C语言开发的代码复杂度。
但如果需求已经足够简单,代码已经足够清晰,那么杀鸡焉用牛刀呢。
1、为什么说双向关联往往是设计的坏味道?
从可复用性的角度来看,如果两个类间的关系是双向的,则每个类都需要知道对方,因此两者都不能复用。说明单向关联有助于标识可复用的类。
2、聚合组合方式会遇到对象生命期管理的问题,怎么解决?
例如,A_Create(B_Create()->IA, B),即类B实现接口IA供类A内部使用,那么IA的生命期该由谁来管理呢?常见的做法是在IA中加入Destroy接口,那么A可以由此释放IA。可是这违背了一个原则,一般内存管理是谁申请谁释放的。我知道的另一个办法是借鉴Linux设备驱动程序的做法,把IA定义为全局变量。“生命期管理是个很大的课题。”后续再慢慢研究。
3、如何区别泛化与实现关系
我是这样理解的:泛化(继承)对应抽象类;实现对应接口。
4、关联与依赖有何区别?
这个问题有很多种版本的解释,摘要如下:
依赖是比关联弱的关系,依赖是两个事物之间的语义关系,而关联代表一种结构化的关系。体现在代码中:
(1)关联有双向与单向之分。若类A与类B双向关联,则A与B相互作为对方的attribute;若类A单向关联指向类B,则在类A中存在一个attribute B b*。
(2)依赖就只有单向的。若类A依赖类B,则不会有B这个属性。类A依赖类B有三种方式:一是类B是全局的,二是类B在类A中实例化,三是类B作为参数被传递。
5、继承or聚合/组合,这是一个问题
根据不同角度的理解,设计上会做出不同的抉择,但
请慎用继承,因为:
(1)继承是过紧的耦合,每当父类变化,子类也得跟着变,违背了开闭原则。
(2)继承不支持多态,父类与子类之间的关系在编译时就静态绑定了。
“所以一般都提倡,只继承接口不继承实现,通过组合达到代码重用的目的。”
btw:关于C语言实现面向对象机制,我目前只是初探,目的是在必要的时候能够有效的驾驭和简化用C语言开发的代码复杂度。
但如果需求已经足够简单,代码已经足够清晰,那么杀鸡焉用牛刀呢。
相关文章推荐
- 模块化C代码与UML对象模型之间的映射(4)——常见问题小结
- 模块化C代码与UML对象模型之间的映射(1)——类、单例类及实用类
- 模块化C代码与UML对象模型之间的映射(1)——类、单例类及实用类
- 模块化C代码与UML对象模型之间的映射(3)——UML关系
- 模块化C代码与UML对象模型之间的映射(2)——抽象类与继承
- 模块化C代码与UML对象模型之间的映射(3)——UML关系
- 模块化C代码与UML对象模型之间的映射(2)——抽象类与继承
- 使用 SharePoint 对象模型时的常见代码问题 (来源MSDN)
- SharePoint 对象模型常见代码问题概述 -转
- 使用 SharePoint 对象模型时的常见代码问题 (来源MSDN)
- HM代码中Z-order扫描和Raster扫描之间的地址映射问题
- 使用Mapstruct来进行domain实体与Entity模型之间的映射操作,减少类之间代码转化
- 微软文档翻译:【最佳实践】使用sharepoint对象模型编程时候的常见问题
- WPF中当资源之间相互依赖(xaml资源与类对象资源相互依赖)时,常见无法加载的问题
- 【最佳实践】使用sharepoint对象模型编程时候的常见问题
- 面向对象三种模型之间的关系
- c模块化编程常见问题
- 浅谈UML中类之间的五种关系及其在代码中的表现形式
- 3.HUD 定时任务 常见问题 模型 一个控件看不到有哪些可能
- SuperMap Max Plugin常见操作问题小结