(转贴)基本的设计原则

本文列举了面向对象设计的53条基本原则,涵盖了类的设计、继承的使用、接口的规划等多个方面,帮助开发者创建高质量的软件系统。

你不必格遵守些原背它也不会被以宗教刑。但你当把些原看成警,若背了其中的一条,那就会响起。”

----------Arthur J.Riel


(1)所有数据都应该隐藏在所在的的内部。


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


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


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


(5)不要把实现细节(例如放置共用代的私有函数)放到的公有接口中。

如果的两个方法有一段公共代,那就可以建一个防止些公共代的私有函数。


(6)不要以用无法使用或不感趣的西的公有接口。


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


(8)类应该只表示一个关键抽象。

包中的所有类对于同一应该是共同封的。一个化若一个包影响,包中的所有类产生影响,而其他的包不造成任何影响 .


(9)把相的数据和行集中放置。

设计当留意那些通get操作从象中取数据的象。这种类型的行暗示着经验反了。


(10)把不相的信息放在另一个(也即:互不沟通的行)

朝着定的方向行依.


(11)确保你之建模的抽象概念是,而不只是象扮演的角色。


(12)在水平方向上尽可能一地分布系功能,也即:按照设计顶层类应一地共享工作。


(13)在你的系中不要建全能/象。名字包含DriverManagerSystemSusystem要特多加小心。

划一个接口而不是实现一个接口。


(14)公共接口中定了大量访问方法的多加小心。大量访问方法意味着相数据和行没有集中存放。


(15)包含太多互不沟通的行多加小心。

问题的另一表是在你的用程序中的的公有接口中建了很多的getset函数。


(16)在由同用界面交互的面向象模型构成的用程序中,模型不应该于界面,界面则应当依于模型。


(17)尽可能地按照现实世界建模(常常了遵守系功能分布原、避免全能以及集中放置相数据和行的原条原)


(18)从你的设计中去除不需要的

一般来,我会把成一个属性。


(19)去除系外的

外的的特点是,抽象地看它只往系统领送消息但并不接受系统领域内其他类发出的消息。


(20)不要把操作疑任何名字是动词或者派生自动词,特是只有一个有意。考一下那个有意的行是否当迁移到已存在或者尚未发现的某个中。


(21)用程序的分析模型常常引入代理。在设计阶段,我常会发现很多代理没有用的,当去除。


(22)尽量减少作者的数量。

一个用到的其他的数目当尽量少。


(23)尽量减少作者之间传递的消息的数量。


(24)尽量减少作者之作量,也即:减少作者之间传递的不同消息的数量。


(25)尽量减少的扇出,也即:减少的消息数和送的消息数的乘


(26)如果包含另一个象,那包含类应被包含的送消息。也即:包含是意味着使用系。


(27)中定的大多数方法都当在大多数时间里使用大多数数据成


(28)包含的象数目不当超过开发者短期记忆的容量。个数目常常是6

包含多于6个数据成员时,可以把逻辑的数据成划分,然后用一个新的包含去包含


(29)功能在窄而深的承体系中垂直分布。


(30)实现语义约,最好根据实现常常会成灾,在这种情况下,当在的行实现,通常是在构造函数中实现,但不是必如此。


(31)的构造函数中实现语义约,把测试放在构造函数域所允的尽量深的包含次中。


(32)束所依语义信息如果常改,那最好放在一个集中式的第3象中。


(33)束所依语义信息如果很少改,那最好分布在束所及的各个中。


(34)知道它包含什,但是不能知道包含它。


(35)共享字面范(也就是被同一个所包含)象相互之当有使用系。


(36)承只被用来特化构建模。


(37)派生知道基,基应该知道于它的派生的任何信息。


(38)中的所有数据都当是私有的,不要使用保数据。

设计者永都不应该的使用者不需要的西放在公有接口中。


(39)在理上,次体系当深一点,越深越好。


(40)践中,次体系的深度不当超出一个普通人的短期记忆能力。一个广接受的深度6


(41)所有的抽象当是基


(42)所有的基当是抽象


(43)把数据、行/或接口的共性尽可能地放到次体系的高端。


(44)如果两个或更多个共享公共数据(但没有公共行),那么应当把公共数据放在一个中,个共享个数据的都包含


(45)如果两个或更多个有共同的数据和行(就是方法),那么这一个都当从一个表示了些数据和方法的公共基类继承。


(46)如果两个或更多个共享公共接口(指的是消息,而不是方法),那只有他需要被多地使用,他当从一个公共基类继承。


(47)对对型的示的分情况分析一般是错误的。在大多数这样的情况下,设计当使用多


(48)属性示的分情况分析常常是错误的。类应当解耦合成一个构,个属性都被变换成一个派生


(49)不要通过继系来为类动态语义建模。试图用静态语义关系来为动态语义建模会致在运行换类型。


(50)不要把成派生任何只有一个例的派生都要多加小心。


(51)如果你得需要在运行建新的,那退后一清你要建的是象。在,把象概括成一个


(52)在派生中用空方法(也就是什也不做的方法)来覆写基中的方法当是非法的。


(53)不要把可包含同对继承的需要相混淆。把可包含建模成承会来泛成灾的


(54)建可用的框架,而不是可用的件。


(55)如果你在设计中使用了多重承,先假你犯了错误。如果没犯错误,你需要明。


(56)只要在面向设计中用到了承,自己两个问题(1)派生是否是它承的那个西的一个特殊型?(2)是不是派生的一部分?


(57)如果你在一个面向设计发现多重系,确保没有哪个基类实际上是另一个基的派生


(58)在面向设计中如果你需要在包含系和关联关作出选择请选择包含系。


(59)不要把全局数据或全局函数用于象的薄工作。当使用类变量或方法。


(60)面向设计者不物理设计来破坏他逻辑设计。但是,在对逻辑设计作出决策的程中我们经常用到物理设计


(61)不要绕开公共接口去修改象的状

转载于:https://www.cnblogs.com/game-over/articles/891149.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值