当前位置:首页 > 日记 > 正文

面向61规则的PHP面向对象分析设计

面向61规则的PHP面向对象分析设计
(1)所有数据都应该隐藏在它所在的类中。
(2)类的用户必须依赖于类的公共接口,但类不能依赖于它的用户。
(3)最小化类协议中的消息。
(4)实现所有类都理解的最基本的公共接口。例如,复制操作(深拷贝和浅拷贝)、相等判断、正确输出内容、ASCII描述分析等。
(5)不要将实现细节(如公共代码的私有函数)放入类的公共接口中。
如果类的两个方法有一段公共代码,则可以创建阻止这些公共代码的私有函数。
(6)不要因用户不能使用或不感兴趣而干扰类的公共接口。
(7)类之间应该是零耦合,或者只有派生的耦合关系,也就是说,一个类可以与另一个类无关,或者只在另一个类的公共接口中使用该操作。
(8)类应该只表示一个关键抽象。
一个包中的所有类都应该在同一类属性上合在一起。如果一个更改影响包,它将对包中的所有类产生影响,并且不会对其他包产生任何影响。
(9)相关数据和行为的集中化。
设计者应该注意那些通过诸如get这样的操作从其他对象获取数据的对象。
(10)把不相关的信息放在另一个类中(即不相互交流的行为)。
依靠稳定的方向。
(11)确保所建模的抽象概念是一个类,而不仅仅是对象的角色。
(12)系统的功能在水平方向上尽可能统一,即按照设计的要求,最高阶层要统一工作。
(13)不创造全能的类/对象在您的系统。小心类的名字包括司机、经理、系统、和Susystem。
规划接口而不是接口。
(14)对于在公共接口中定义大量访问方法的类要更加小心,大量的访问方法意味着相关数据和行为不以集中方式存储。
(15)对于那些包含太多不沟通的课程要更加小心。
这个问题的另一个表现是在应用程序中的类的公共接口中创建许多get和Set函数。
(16)在由与用户接口交互的面向对象模型组成的应用程序中,模型不应该依赖于接口,而接口应该依赖于模型。
(17)尽可能根据现实世界进行建模。我们经常违反这一原则,以遵循系统功能分配原则,避免万能原则,集中放置相关数据和行为。
(18)从设计中删除不需要的类。
一般来说,我们会把这类为一个属性。
(19)移除系统之外的类。
系统外部的类以抽象视图为特征,它们只向系统域发送消息,但不接受系统域中其他类发送的消息。
(20)不要把操作变成一个类,将任何名称作为动词或派生的自动词提问,特别是只有一个有意义的行为。考虑是否有意义的行为应该被移到已经存在或未被发现的类中。
(21)我们在创建应用程序的分析模型时经常引入一个代理类,在设计阶段,我们经常发现许多代理不使用它,应该被删除。
(22)尽可能减少班级合作者的数量。
类使用的其他类的数量应该尽可能的小。
(23)最小化类与合作作者之间传递的消息数量。
(24)尽量减少类与合作作者之间的协作量,也就是减少类和关联的联合作者之间传递的不同消息的数量。
(25)最小化类的扇出,即消息数量和类定义发送的消息数的乘积。
(26)如果类包含另一个类的对象,则包含类应该向包含的对象发送消息。
(27)类中定义的大多数方法应该在大多数时间内使用大多数数据成员。
(28)类所包含的对象数量不应超过开发人员短期内存的容量,这个数字通常是6。
当一个类包含超过6个数据成员时,逻辑相关的数据成员可以被划分为一个集合,然后包含一个新的包含类来包含组成员。
(29)让系统功能在一个窄而深的继承系统中垂直分布。
(30)当语义约束被实现时,最好根据类定义实现它,这常常导致类的溢出。在这种情况下,约束应该在类行为中实现,通常在构造函数中实现,但不一定。
(31)当在类构造函数中实现语义约束时,约束测试被放置在构造函数域中的包容层次结构的深度中。
(32)如果约束所依赖的语义信息经常被改变,最好放在一个集中的第三方对象中。
(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)不要绕过公共接口来修改对象的状态。

相关文章

使用SQL命令修改数据表中字段的非

使用SQL命令修改数据表中字段的非

字段,命令,修改,语句,数据表,ALTER TABLE表列{姓名}改变varchar(60)空; 表1表名称 命名字段名称为什么添加{ },因为名称是SQL关键字冲突错误,所以以防万一。 如果在name字段中创建了索引,如果需要修改它,则必须先删除索引以使其正确。…

如何用PHP生成扭曲和旋转的验证代

如何用PHP生成扭曲和旋转的验证代

验证,如何用,代码,电脑软件,PHP,复制代码代码如下所示: 功能make_rand($长度= 32){ / /验证码文本生成函数 $str =abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz1234567890 ; $结果; ($ i = 0;$ i $ $长度;$ + +){ Num { } =美元美元我兰…

对mtx.exe-甲的作用是什么

对mtx.exe-甲的作用是什么

作用,电脑软件,mtx,exe,点评:mtx.exe是微软微软处理的服务支持您的计算机上的其他应用程序 进程文件:MTX或mtx.exe 过程名称:微软事务服务器(MTS) 过程类别:安全风险的过程 英文描述: mtx.exe是微软事务服务器(MTS)的一部分,MTS,它也被称为以下三个…

Fedora9没有声音的解决方案

Fedora9没有声音的解决方案

解决方案,声音,电脑软件,点评:uff1a Fedora 9系统听不到声音,怎么能不好,只有求助,结果发现了一种方法。 方法是: 打开声音的第一个选项,检查环绕声,然后打开环绕声开关来听到声音。…

什么过程mcupdate过程查询mcupdate

什么过程mcupdate过程查询mcupdate

查询,过程,电脑软件,mcupdate,exe,点评:mcupdate.exe是迈克菲网络安全套装相关程序将连接到服务器的McAfee病毒特征库升级 进程文件:mcupdate或mcupdate.exe 进程名称:mcupdate 过程类别:安全风险的过程 英文描述: mcupdate.exe是McAfee互联网…

什么是文件的icwconn2过程可以由ic

什么是文件的icwconn2过程可以由ic

进程,删除,文件,过程,电脑软件,点评:icwconn2.exe是微软连接向导程序,用于帮助用户连接到互联网 进程文件:icwconn2或icwconn2.exe 过程名称:Internet连接向导 过程类别:安全风险的过程 英文描述: icwconn2.exe是一部分的连接向导程序,用于帮助…

当游戏调整时,游戏自动退出游戏。

当游戏调整时,游戏自动退出游戏。

退出,调整,游戏,电脑软件,问题: 当你玩火线时,开始认为它是偶然的,再试几次,同样的退出游戏的现象。这是游戏本身的问题,还是计算机系统的问题 答案uff1a 在这种情况下,建议重新启动计算机,然后清理浏览器的缓存。如果问题仍然存在,可能会有一个…

PHP第二部分的数据类型的字符串类

PHP第二部分的数据类型的字符串类

字符串,类型,数据类型,第二部分,电脑软件,PHP中的字符串可以用以下4种方式定义: 单引号 双引号 文本的语法结构 nowdoc语法结构(自PHP 5.3.0) 单引号 定义字符串最简单的方法是用一个引号(标点符号)包围它。 如果你想输出一个单引号,你需要添…

48基于Win2000的计算机使用

48基于Win2000的计算机使用

电脑软件,你对这个视频有一个坏的评论。谢谢你提供反馈! 你顶这个视频。我们将改善您的推荐accordingly.win2003故障 电脑维修 该视频已添加到相应的播放列表。 视频已添加到观看播放列表稍后。 视频采集成功。 操作需要登录,请登录或重…

什么是过程的wdfmgr.exewdfmgr过程

什么是过程的wdfmgr.exewdfmgr过程

过程,电脑软件,wdfmgr,exewdfmgr,点评:该wdfmgr.exe过程相关的程序为微软microsoftwindowsmediaplayer10球员。其效果是减少兼容性问题,这是不是一个系统的程序。如果你需要关闭的过程中,你可以直接关闭它。它不会造成计算机系统的影响 进程…

PHP获取本地IP代码

PHP获取本地IP代码

代码,电脑软件,PHP,IP,复制代码代码如下所示: get_client_ip()函数 { 如果($ _server { 'remote_addr ' }){ 美元美元'remote_addr_server CIP = { }; } elseif(getenv(remote_addr )){ $ CIP = getenv(remote_addr ); } elseif(getenv(http_client_ip…

MySQL语句使用实例

MySQL语句使用实例

语句,实例,电脑软件,MySQL,主键 tablename表添加new_field_id int(5)符号默认0不空anto_increment。 添加新列 MySQL > tablename表添加字段名FieldType 如: 修改表添加d时间戳; 修改表信息添加字段不为空的默认0前; 删除列 MySQL >修改表tabl…