面向对象设计61点经验原则讨论----1-10

yjdn 2006-02-03 03:36:17
/**************************************
*
*在网上只找不到<<OOD启示录>>
*只有这61条经验,很多东西从字面上还
*无法理解,所以,现在拿出来,一方面请教大家
*另一方面,有理解冲突的地方,大家可以讨论
*讨论.
*
**************************************/

(1)所有数据都应该隐藏在所在的类的内部。p13
//
//所有数据是否可以理解为Sql语句等,隐藏理解为就是放在类内?
//

(2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。p15

//
//在这里,什么叫作类的作用者?
//

(3)尽量减少类的协议中的消息。p16

//
//这个看不明白
//

(4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。 p16

//
//我理解是,创建类,要有一个最基本的公有接口,但是有必要所有的类都需要一个接口吗?
//

(5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。p17
如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。

//
//公共的方法的公共代码都写成一个私有的方法?
//

(6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。p17

//
//这个应该就是传说中的接口污染
//

(7)类之间应该零耦合,或者只有导出耦合关系。也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。 p18

//
//这个理解
//

(8)类应该只表示一个关键抽象。p19
包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响 .

//
//不理解什么叫"关键抽象"
//

(9)把相关的数据和行为集中放置。p19
设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。这种类型的行为暗示着这条经验原则被违反了。

//
//相关数据和行为集中放置什么意思?
//

(10)把不相关的信息放在另一个类中(也即:互不沟通的行为)。p19
朝着稳定的方向进行依赖.

//
//把不相关信息放在另一个类中,再看一下第四点,这样的类也有必要创建一个接口吗?
//
...全文
397 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zd_zhou2 2006-02-19
  • 打赏
  • 举报
回复
wrwerwsf
老之 2006-02-19
  • 打赏
  • 举报
回复
mark
yjdn 2006-02-19
  • 打赏
  • 举报
回复
再顶一下,再没人讨论的话,就结帖了
flashccie 2006-02-19
  • 打赏
  • 举报
回复
看看再说
yjdn 2006-02-07
  • 打赏
  • 举报
回复
再顶一下
lidong6 2006-02-07
  • 打赏
  • 举报
回复
现在太忙, 一会儿有时间研究一下.
JackLucifer 2006-02-07
  • 打赏
  • 举报
回复
mark
真相重于对错 2006-02-06
  • 打赏
  • 举报
回复
9)把相关的数据和行为集中放置。p19
====================
OO其实就更好的把程语言和现实事物进行映射,也就是说每个对象其实就是映射到现实某个具体的物体
而类方法和属性就是现实事物的行为和状态,所以说相关数据和行为要集中放置
wokagoka 2006-02-06
  • 打赏
  • 举报
回复
嗯,通吃
接分
yjdn 2006-02-06
  • 打赏
  • 举报
回复
还有9)中的,"数据和行为集中放置"怎么放置,懂的朋友可否举列说明?
yjdn 2006-02-06
  • 打赏
  • 举报
回复
看看第十点中的,什么叫"互不沟通的行为"?
jxufewbt 2006-02-06
  • 打赏
  • 举报
回复
收藏
yjdn 2006-02-06
  • 打赏
  • 举报
回复
9)把相关的数据和行为集中放置。p19
====================
OO其实就更好的把程语言和现实事物进行映射,也就是说每个对象其实就是映射到现实某个具体的物体
而类方法和属性就是现实事物的行为和状态,所以说相关数据和行为要集中放置

//
//怎么样才算集中放置?一般来说,放在一个类里算不算集中放置?
//如果不算,怎么样的写法才算是集中放置?
//
meixiaofeng 2006-02-06
  • 打赏
  • 举报
回复
多多讨论
yjdn 2006-02-05
  • 打赏
  • 举报
回复
我再顶
dazhu2 2006-02-03
  • 打赏
  • 举报
回复
jf
yjdn 2006-02-03
  • 打赏
  • 举报
回复
第四点看来是我理解错了,由楼上的解释,才明白了,原来是让去实现那几个方法 .

楼上再看看这两个续帖:
http://community.csdn.net/Expert/topic/4538/4538978.xml?temp=.9335443
http://community.csdn.net/Expert/topic/4538/4538993.xml?temp=.1695215

我会把61点都列出来,不过,现在先消化这前面的30点

midthinker 2006-02-03
  • 打赏
  • 举报
回复
(1) 数据可能意味着业务所操纵的数据,即Field
数据代表一个对象运行时的状态,我们可以通过接口(方法、属性、事件)改变一个对象的状态,但我们不应该直接操纵数据来达到改变对象状态的目的,这样会使得实现的具体细节暴露在外,同时也使得程序缺乏了灵活性和安全性。

(2)类的使用者(应该)是指直接依赖于该类型的对象。多态是面向对象的三大特性之一,多态可以通过继承体系实现,接口(interface)更多时候可以被看做是一种意图和概念,依赖于接口,对接口编程而不要对实现编程的目的是为了增加灵活性,降低类型之间的偶合与依赖,以实现解偶

(3)没看懂,是指减少类型消息传递中的参数?

(4)公共函数:ToString(),Equals(),HashCode(),Clone等从object class中继承的方法。但对于实现每一个公共函数我存有异议,ToString是自描述的方法,应该被实现;Equals方法与HashCode方法是一对方法,只有在必要时才去实现,因为实现HashCode方法并不容易。而Clone接口一直以来都是一个非常有争议的接口,我无法确定是否应该提供该方法,但从必须继承Clonable接口才能使用Clone方法的实现来看,至少语言的实现者也在严格控制该方法的使用。

(5)对该句话,我的理解是不要轻易提供Public接口。

(6)模糊的叙述,保持接口最小化?

(7)呵呵,呵呵呵呵

(8)“关键抽象”的含义可能是单一职责,“抽象”代表着“概念”,“具体”代表着“实现”,保持一个关键抽象,意味着一个类型的职责应该尽可能单一。

(9)去除Data Object

(10)......

@.@||~
yjdn 2006-02-03
  • 打赏
  • 举报
回复
自己顶一下

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧