php面向对象程序设计(OOP)的61条准则
面向对象程序设计的重点是什么的设计
面向对象程序设计的重点是什么的设计面向对象程序设计 (Object-Oriented Programming, OOP) 是一种软件开发方法,通过将现实世界的事物抽象为对象,并建立对象之间的关系来实现系统的设计和开发。
在进行面向对象程序设计时,有一些重要的设计原则和重点需要遵循和关注。
首先,面向对象程序设计的重点之一是封装性。
封装是将数据和方法封装在一个对象内部,以便于对外部隐藏实现细节,并提供对外的接口来访问和操作数据。
这样可以降低程序的耦合度,提高代码的可维护性和可重用性。
通过封装,类的设计者可以将复杂的操作封装成简单的方法,使得使用者只需关注方法的调用,而无需了解方法的实现细节。
另一个重点是继承性。
继承是指一个类从另一个类继承属性和方法的机制,通过继承可以减少代码的重复,提高代码的复用性。
通过继承,我们可以定义一个通用的父类,然后通过子类继承父类的属性和方法,并可以在子类中添加额外的属性和方法,以满足特定的需求。
继承使得程序设计具有层次结构,可以更好地组织和管理代码。
多态性是面向对象程序设计中的另一个重点。
多态是指同一种操作在不同的对象上可以有不同的行为。
通过多态,一个方法可以在不同的对象上具有不同的实现。
多态可以提高代码的灵活性和可扩展性。
通过定义抽象类和接口,程序可以针对接口编程,而无需关注具体的实现细节。
这样可以使得程序具有更好的扩展性,可以根据需要进行替换和改造。
还有一个重点是关注问题领域的建模,将现实世界的概念和关系转化为程序中的类和对象。
在面向对象程序设计中,类表示一组具有相同属性和行为的对象,对象是类的一个实例。
通过分析问题领域中的关系和行为,可以将问题拆解为一组相互关联的类和对象,然后通过定义和实现类和对象之间的关系来解决问题。
面向对象程序设计的思维方式强调了问题领域与程序之间的联系,使得程序更贴近实际需求。
此外,面向对象程序设计还强调代码的可维护性和可扩展性。
通过将代码组织为模块化的类和对象,可以使得程序更易于理解、修改和扩展。
面向对象七大原则
面向对象七大原则
1.单一职责原则(SRP):
一个类或者模块只应该有一个单一的功能或职责。
2.开闭原则(OCP):
软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
3.里氏替换原则(LSP):
使用基类类型的对象应该能够在不知道子类的情况下正常工作。
4.依赖倒置原则(DIP):
高层模块不应该依赖底层模块,二者都应该依赖其抽象。
5.接口隔离原则(ISP):
不应该强迫客户端依赖它们不需要的接口。
6.最小知识原则(迪米特法则)(LoD):
一个对象应该对其他对象有最少的了解。
7.合成复用原则(CRP):
尽量使用对象组合而不是继承来达到代码复用的目的。
《面向对象程序设计》知识点
《面向对象程序设计》知识点《面向对象程序设计》是计算机科学中的重要概念,它是一种软件开发方法,将软件模型作为一个系统的集合来设计、分析和实现。
本文将重点介绍面向对象程序设计中的关键知识点,包括面向对象的基本概念、类与对象、继承与多态、封装和抽象等内容,以便读者全面了解和掌握面向对象程序设计的核心概念和方法。
一、面向对象的基本概念1. 面向对象编程的起源:面向对象编程(Object-Oriented Programming,简称OOP)起源于20世纪60年代,是一种基于对象的软件开发范式,它将数据和操作数据的方法组合到一个对象中,以及通过对象之间的交互来完成程序的设计。
2. 面向对象的特征:面向对象的程序设计具有封装、继承和多态的特征。
封装指的是将数据和处理数据的方法封装在对象中,继承指的是子类可以继承父类的属性和方法,多态指的是同一操作作用于不同对象上时可以有不同的行为。
3. 面向对象的优势:面向对象的程序设计具有代码复用性高、可维护性强、扩展性好、可靠性高等优势,可以提高程序的设计效率和质量。
二、类与对象1. 类的定义:类是一种抽象数据类型,用来描述具有相同属性和行为的对象的集合。
类用来创建对象的模板,包含数据成员和成员函数。
2. 对象的创建:对象是类的一个实例,是具体的数据和行为的封装体。
通过类实例化,可以创建多个对象来表示真实世界的实体。
3. 类的成员:类包含数据成员和成员函数。
数据成员表示对象的属性,成员函数表示对象的行为,可以进行数据的操作和处理。
三、继承与多态1. 继承:继承是指一个新类从现有类中派生出来,并且拥有现有类的属性和行为。
继承可以实现代码的复用,并且可以建立类之间的关系。
2. 多态:多态是指同一操作作用于不同对象上时可以有不同的行为。
多态通过虚函数和动态绑定实现,可以使程序具有更好的灵活性和扩展性。
四、封装和抽象1. 封装:封装是指将数据和数据的操作封装在类的内部,外部无法直接访问和修改类的数据。
面向对象程序设计思想
面向对象程序设计思想面向对象程序设计(Object-Oriented Programming,简称OOP)是一种以对象为中心的编程范式,它将现实世界中的事物抽象为对象,并通过对象之间的交互来实现程序的运行。
面向对象程序设计的核心思想包括封装、继承和多态。
封装封装是面向对象程序设计中最基本的概念之一。
它指的是将数据(属性)和操作数据的方法(行为)组合在一起,形成一个对象。
封装的目的是隐藏对象的内部细节,只暴露出一个可以被外界访问的接口。
这样,对象的使用者不需要了解对象内部的实现细节,只需要通过接口与对象进行交互。
例如,在一个银行系统中,我们可以创建一个`Account`类,该类封装了账户的基本信息(如账号、余额)和对账户的操作(如存款、取款)。
用户在使用`Account`类时,只需要调用相应的方法,而不需要关心这些方法是如何实现的。
继承继承是面向对象程序设计中另一个重要的概念。
它允许一个类(子类)继承另一个类(父类)的属性和方法。
通过继承,子类可以扩展或修改父类的行为,而不需要重新编写代码。
继承支持代码的复用,使得程序设计更加简洁和高效。
例如,假设我们有一个`Animal`类,它定义了所有动物共有的属性和方法。
我们可以创建一个`Dog`类,它继承自`Animal`类。
`Dog`类将继承`Animal`类的所有属性和方法,并且可以添加一些特有的属性和方法,如`bark`。
多态多态是面向对象程序设计中的一个重要特性,它允许不同类的对象对同一消息做出响应,但具体的行为会根据对象的实际类型而有所不同。
多态性使得程序设计更加灵活和可扩展。
多态性通常通过抽象类和接口来实现。
抽象类定义了一个或多个抽象方法,而具体的子类则提供了这些抽象方法的实现。
接口则定义了一组方法规范,不同的类可以实现同一个接口,但提供不同的实现。
例如,假设我们有一个`Shape`接口,它定义了一个`draw`方法。
我们可以创建`Circle`、`Square`等类,它们都实现了`Shape`接口。
PHP面向对象的程序设计总结(整理版)
第8章_PHP面向对象的程序设计1.面向对象的概述 (2)2.构造方法和析构方法 (2)3.封装性 (3)对成员属性封装使用的魔术方法:__set()、__get()、__isset()、__unset() (3)4.继承性 (4)5.常见的关键字和魔术方法 (5)Final关键字 (5)Static关键字 (5)Const关键字 (6)单态设计模式: (6)Clone魔术方法 (7)__toString()魔术方法 (7)__call()魔术方法 (8)__autoload()魔术方法 (8)对象串行化 (8)__sleep()和__wakeup()魔术方法 (9)6.多态性 (11)抽象类: (11)接口: (12)1.面向对象的概述面向对象的程序的最小单位是:对象面向过程的程序的最小单位是:函数对象可以包含函数对象由两部分组成:成员属性(变量,静态的)和成员方法(函数,动态的);对象是通过类实例化出来的,所有面向对象的编程规则是:先声明类---->实例化对象(创建对象)---->使用对象。
声明类:[一些修饰类的关键词] class 类名{类中成员(成员属性,成员方法);}例如:class Person{Private $name;Private $age;Private $sex;Function say(){};Function eat(){};}实例化对象:$变量名=new 类名称([参数类表]);例如:$p1=new Person;对象类型在内存中的分配:内存分为四个部分:栈空间段,堆空间段,数据段和代码段栈:存放对象的地址。
堆:存放可变长度的数据:字符串,数组和对象数据段:存放初始化变量,全局变量等代码端:存放执行文件的操作指令(函数)对象中的成员访问:赋值:$引用名->成员属性=值;获取:echo $引用名->成员属性。
调用成员方法:$引用名->成员方法。
面向对象程序设计
面向对象程序设计面向对象程序设计(Object-Oriented Programming,简称OOP)是一种编程范式,它使用“对象”来设计软件。
对象可以包含数据(通常称为属性)和代码(通常称为方法或函数)。
面向对象程序设计的核心概念包括封装、继承、多态和抽象。
封装封装是将数据(属性)和操作这些数据的方法(行为)绑定在一起的过程。
封装的目的是隐藏对象的内部状态和实现细节,只暴露出一个可以被外界访问的接口。
这样,对象的使用者不需要了解对象内部的复杂性,只需要通过公共接口与对象交互。
继承继承是一种机制,允许新创建的类(子类)继承现有类(父类)的属性和方法。
这使得代码重用变得可能,同时也支持层次结构的创建。
子类可以扩展或修改父类的行为,但通常保持父类的大部分功能。
多态多态性是指允许不同类的对象对同一消息做出响应,但具体的行为会根据对象的实际类型而有所不同。
在面向对象编程中,多态性通常是通过方法重载(同一个类中多个同名方法,参数不同)和方法重写(子类重写父类的方法)实现的。
抽象抽象是简化复杂的现实世界问题的过程,只关注对于当前目标重要的方面,忽略不相关的细节。
在面向对象编程中,抽象通常是通过创建抽象类和接口来实现的。
抽象类可以包含抽象方法,这些方法没有具体的实现,必须由子类提供。
类和对象类是创建对象的蓝图或模板,定义了对象的结构和行为。
对象是根据类创建的实例,具有类定义的属性和方法。
每个对象都是唯一的,即使它们是同一个类的实例。
面向对象设计原则在面向对象设计中,有几个关键的设计原则,如单一职责原则、开放-封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则等。
这些原则帮助开发者创建灵活、可维护和可扩展的系统。
面向对象的优势- 代码重用:通过继承和多态性,可以减少代码重复。
- 易于维护:封装和抽象使得修改系统的一部分不会影响其他部分。
- 模块化:系统被分解为独立的模块,每个模块负责特定的功能。
- 可扩展性:系统可以容易地扩展新功能,而不需要重写现有代码。
PHP中的面向对象编程从入门到精通
PHP中的面向对象编程从入门到精通面向对象编程(Object Oriented Programming, OOP)是一种广泛应用于软件开发的编程范式,它将数据和相关的操作封装在一个对象中,通过对象的交互来实现程序的设计和实现。
在PHP中,面向对象编程为开发人员提供了更灵活、可维护和可扩展的方式来构建应用程序。
本文将详细介绍PHP中的面向对象编程,从入门到精通。
1. 面向对象编程基础在开始学习PHP中的面向对象编程之前,我们首先需要理解一些基本概念和术语。
1.1 类和对象类是面向对象编程中的基本概念,它定义了一组属性和方法。
对象是类的实例,可以通过类来创建多个对象。
1.2 属性和方法属性是类中的变量,用于存储对象的状态信息。
方法是类中定义的函数,用于操作对象的属性和实现特定的功能。
1.3 封装、继承和多态封装是指将属性和方法隐藏在类内部,通过公共的接口来访问和操作对象。
继承是指一个类可以继承另一个类的属性和方法,并扩展或修改它们。
多态是指一个对象可以以多种形态存在,可以根据上下文来决定调用哪个对象的方法。
2. PHP中的类和对象2.1 定义类在PHP中,可以使用`class`关键字来定义一个类。
类名一般采用驼峰命名法,首字母大写。
```phpclass MyClass {// 类的属性和方法}```2.2 创建对象使用`new`关键字来创建类的对象。
```php$object = new MyClass();```2.3 访问属性和方法通过对象的实例来访问类的属性和方法,使用箭头操作符`->`。
```php$object->property; // 访问属性$object->method(); // 调用方法```3. 构造函数和析构函数构造函数是一种特殊的方法,当对象被创建时自动调用。
在构造函数中,可以初始化对象的属性和执行其他必要的操作。
析构函数是在对象被销毁之前自动调用的方法,用于释放资源和执行清理操作。
php面向对象的程序设计
第一讲数组和对象:都属于php的复合类型对象比数组更强大,不仅可以存储多个数据,还可以将函数存在对象对象的三大特性:封装、继承、多态面向对象编程(oop)面向对象和面向过程的区别:最小的单位:对象最小的单位:函数什么是对象:对象就是一个东西,一个实体对象中有什么?成员成员属性:变量==========定义对象的外观和状态成员方法:函数==========定义对象的功能比如:电话:品牌,颜色,电池,大小打电话,发信息,听音乐,看视频文章:标题,作者,来源,访问数添加,修改,删除电子商城:用户,购物车,商品,分类,订单什么是类:分类、类型桌子类,椅子类,电脑类在类中定义这个类型的属性和方法。
类和对象之间的关系:声明类------>实例化对象(创建对象)--------->用对象配置单:Cpu: e7400 2.8内存:2G显卡:512 9300主板:硬盘:Price:定义出电脑的类型,(配置单就是类)安装出100台电脑(每个电脑就是一个对象)操作电脑就是在操作对象。
在声明类时,类中的内容就是成员的属性和成员方法,这个类创建出的对象中的内容,就是你在类中声明的内容。
第二讲类的声明与实例化对象类的声明:[修饰类的关键字] Class 类名{成员属性:成员方法:}在类中声明成员属性时,前面必须有修饰词,如果不知道使用什么修饰词时,可以使用var。
类中的成员属性,如果创建多个对象时,每个对象的值不同,则不要给初值,一个文件只保存一个类,文件中包含类名。
文件:类名.class.php变量:aaBbbCcc函数:aaBB常量:AABB类名:AaaBbbCcc通过类实例化对象1、使用new新建一个对象,加上类名,就是创建类的对象。
2、只要有一个new关键字就是一个对象,创建了一个对象就在内存中分配了一个空间对象在内存中的分配内存中的分配对象中的成员必须通过对象的引用来访问对象引用名->属性;对象引用名->方法;$p1=new person();$p1->name="zhangsan";$p1->say();第三讲构造方法和析构方法一、对象中成员的访问:就是在一个对象的内部方法中,去访问本对象中的其他方法和属性。
php 面向对象程序设计
//如果未发现,则尝试自动装载类b
new \d(); //创建定义在全局空间中地类d地一个对象
命名空间概述
在php中,命名空间用来解决在编写类库或应用程序时创建可重用地代码如类或函数时碰到地两类问题:
用户编写地代码与php内部地类/函数/常量或第三方类/函数/常量之间地名字冲突.
为很长地标识符名称(通常是为了缓解第一类问题而定义地)创建一个别名(或简短)地名称,提高源代码地可读性.
php命名空间提供了一种将相关地类、函数和常量组合到一起地途径.下面是一个说明php命名空间语法地示例:
//下面地例子与use my\full\nsname as nsname相同
use my\full\nsname;
//导入一个全局类
use \arrayobject;
名称解析规则
在说明名称解析规则之前,我们先看一些重要地定义:
非限定名称unqualified name:名称中不包含命名空间分隔符地标识符,例如foo
//如果未找到,则尝试自动装载类b\d
new f(); //使用导入规则,创建命名空间c中定义地类e地一个对象
PHP 面向对象
$mercedes = new Car ();
$bmw = new Car ();
$audi = new Car ();
PHP 类定义
PHP 定义类通常语法格式如下:
<?php
class phpClass {
void __destruct ( void )
实例
<?php
class MyDestructableClass {
function __construct() {
print "构造函数\n";
$this->name = "http://MyDestructableClass";
}
function __destruct() {
print "销毁 " . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
?>
执行以上代码,输出结果为:
构造函数
销毁 MyDestructableClass
类的变量使用 var 来声明, 变量也可以初始化值。
函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。
实例
<?php
class Site {
/* 成员变量 */
var $url;
var $title;
/* 成员函数 */
function setUrl($par){
PHP面向对象
PHP⾯向对象1.⾯向对象介绍⾯向对象是⼀个编程思想。
编程思想有⾯向过程和⾯向对象⾯向过程:编程思路集中的是过程上⾯向对象:编程思路集中在参与的对象2.⾯向对象的好处1.多⼈合作⽅便2.减少代码的冗余,灵活性⾼3.代码的可重⽤性发挥到极致4.可扩展性强3.类和对象1.对象是具体存在的事物,对象是由属性和⽅法组成2.类是具有相同属性和⾏为的⼀组对象的集合注意:⼀个类可以创建多个对象⼩结:1.对象是由属性和⽅法组成的2.类是所有对象的相同属性和⽅法的集合3.在开发的时候先写类,通过类创建对象,通过对象调⽤⽅法和属性4.在PHP中实现类和对象4.1创建类语法:class类名{//属性//⽅法//常量}类是由属性、⽅法、常量组成的,也可以说类成员有:属性、⽅法、常量类名的命名规则:1.以字母、下划线开头,后⾯跟的是字母、数字、下划线2.不能⽤PHP关键字做类名3.类名不区分⼤⼩写(变量名区分,关键字、类名不区分⼤⼩写)4.类名⽤帕斯卡命名法(⼤驼峰单词的⾸字母⼤写)4.2对象实例化通过new关键字来实例化对象<?php//定义类class Student {}//实例化对象$stu1=new Student();4.3对象的⽐较注意:对象的传递是地址传递相等:结构和保存的值⼀样就相等全等:指向同⼀个对象才是全等5.属性属性本质就是变量通过 ->调⽤对象的成员对象名->属性名对象名->⽅法名()6.⽅法⽅法的本质就是函数⼩结:1.⽅法前⾯public是可以省略的,如果省略,默认就是public的。
2.属性前⾯的public不能省略。
php面向对象的程序设计
php面向对象的程序设计php面向对象的程序设计PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。
它可以比CGI或者Perl更快速地执行动态网页。
以下是店铺为大家搜索整理的php面向对象的程序设计,希望能给大家带来帮助!public 公有的:本类,子类,外部对象都可以调用protected 受保护的:本类子类,可以执行,外部对象不可以调用private 私有的:只能本类执行,子类与外部对象都不可调用面向对象编程的三大特点1)封闭性封闭性,也可以称为信息隐藏。
就是将一个类的使用和实现分开,只保留有限的接口(方法)与外部联系。
对于用到该类的开发人员,只要知道这个类如何使用即可,而不用去关心这个类是如何实现的。
这样做可以让开发人员更好地把精力集中起来专注别的事情,同时也避免了程序之间的相互依赖而带来的不便。
2)继承性继承性就是派生类(子类)自动继承一个或多个基类(父类)中的属性与方法,并可以重写或添加新的属性和方法。
继承这个特性简化了对象和类的创建,增加了代码的可重性。
继承分单继承和多继承,PHP 所支持的是单继承,也就是说,一个子类有且只有一个父类。
3)多态性多态性是指同一个类的不同对象,使用同一个方法可以获得不同的结果,这种技术称为多态性。
多态性增强了软件的灵活性和重用性。
类的定义一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)。
和很多面向对象的语言一样,PHP也是通过class关键字加类名来定义类的。
类的格式如下:Class myobject{//……}>定义:物以类聚,把具有相似特性的对象归到一个类中,类定义了这些相似对象拥有的相同属性和方法。
类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。
类的对象称为类的一个实例。
要创建一个类的实例,必须使用new 关键字。
001ZpQGYty6MeYnSNUh25&690//类的定义以关键字class开始,类的命名通常以每个单词第一个字母大写class NbaPlayer{public $name = "Jordan"; //定义属性public $height = "198cm";public $team = "Bull";public $playerNumber = "23";//定义方法public function run(){echo "Running\n";}public function dribblr(){echo "Dribbling\n";}public function pass(){echo "Passing\n";}}//类到对象的实例化//类的实例化为对象时使用关键字new,new之后紧跟类的名称和一对括号$jordan = new NbaPlayer();//对象中的`属性成员可以通过"->"符号来访问echo $jordan->name."\n";//对象中的成员方法可以通过"->"符号来访问$jordan->dribble();$jordan->run();>成员方法类中的函数被称为成员方法。
面向对象程序设计方法
面向对象程序设计方法
面向对象程序设计(Object-Oriented Programming, OOP)是一种程序设计思想,它强调将运行时环境中的对象与抽象出来的对象类型(或称为类)进行结合,以此来节约编程的工作量并提高程序的可操作性。
典型的OOP程序中,所有可用的类都可以通过继承,联系和组合组合成更高一级的类,而这些类又可以被用来构建新的对象。
OOP程序设计具有以下特征:
1、封装:封装是指将程序代码和数据结构组合在一起,使得它们可以单独使用,而不必考虑其他编程元素。
2、抽象:抽象是指将共性和特性从复杂的实体中抽离出来,建立一个通用的基类,用于管理、处理及访问某一类对象的相似之处。
3、多态:多态是指不同的对象,对同一操作可以表现出不同的行为。
4、继承:继承是指一个类的子类可以继承父类的特征,然后根据自身的需要,增加新的特征。
OOP程序设计的重要特点是它可以让程序员以可重用的模块来构建应用程序,从而大大降低程序编写及测试的工作量,也能够提升程序的可操作性。
类对象可以被构建成抽象层次结构,以便从可复用的模块中派生出更多新的类。
大量的类可以被组合在一起,形成一个功能更丰富的解决方案。
此外,多态性能让程序维护变得更加容易,因为改变一个类的行为,也不会影响到其他类。
PHP面向对象各个功能步骤详解OOP思想
PHP面向对象技术--php5 基本的OOP思想的介入,带给学习的快乐,生活,情趣。
本部分一共包括以下一些技术点:1.面象对象的概念2.什么是类, 什么是对象, 类和对象这间的关系3.什么是面向对象编程呢?4.如何抽象出一个类?5.如何实例化对象6.如何去使用对象中的成员7.特殊的引用“$this“的使用8.构造方法与析构方法9.封装性10.__set() __get() __isset() __unset()四个方法的应用11.类的继函12.多态的应用13.重载新的方法14.访问类型15.静态成员的使用16.final关键字的应用17.__toString()方法18.克隆对象19.__call处理调用错误20.自动加载类21.把对象串行化22.抽象方法和抽象类23.php5接口技术1.面象对象的概念面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP达到了软件工程的三个目标:重用性、灵活性和扩展性。
为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
面向对象一直是软件开发领域内比较热门的话题,首先,面向对象符合人类看待事物的一般规律。
其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。
为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,并且具有更强的可重用性。
有人说PHP不是一个真正的面向对象的语言,这是事实。
PHP 是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。
然而,对于大型项目,你可能需要在PHP 中使用纯的OOP去声明类,而且在你的项目里只用对象和类。
这个概念我先不多说了,因为有很多人朋友远离面向对象编程的主要原因就是一接触面向对象概念的时候就理解不上去, 所以就不想去学下去了. 等读者看完整体内容后再去把概念搞明白吧。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(23)尽量减少类和协作者之间传递的消息的数量。
(24)尽量减少类和协作者之间的协作量,也即:减少类和协作者之间传递的不同消息的数量。
(25)尽量减少类的扇出,也即:减少类定义的消息数和发送的消息数的乘积。
(26)如果类包含另一个类的对象,那么包含类应当给被包含的对象发送消息。也即:包含关系总是意味着使用关系。
(27)类中定义的大多数方法都应当在大多数时间里使用大多数数据成员。
(28)类包含的对象数目不应当超过开发者短期记忆的容量。这个数目常常是6。
当类包含多于6个数据成员时,可以把逻辑相关的数据成员划分为一组,然后用一个新的包含类去包含这一组成员。
(29)让系统功能在窄而深的继承体系中垂直分布。
(10)把不相关的信息放在另一个类中(也即:互不沟通的行为)。
朝着稳定的方向进行依赖.
(11)确保你为之建模的抽象概念是类,而不只是对象扮演的角色。
(12)在水平方向上尽可能统一地分布系统功能,也即:按照设计,顶层类应当统一地共享工作。
(13)在你的系统中不要创建全能类/对象。对名字包含Driver、Manager、System、Susystem的类要特别多加小心。
(41)所有的抽象类都应当是基类。
(42)所有的基类都应当是抽象类。
(43)把数据、行为和/或接口的共性尽可能地放到继承层次体系的高端。
(44)如果两个或更多个类共享公共数据(但没有公共行为),那么应当把公共数据放在一个类中,每个共享这个数据的类都包含这个类。
(45)如果两个或更多个类有共同的数据和行为(就是方法),那么这些类的每一个都应当从一个表示了这些数据和方法的公共基类继承。
(59)不要把全局数据或全局函数用于类的对象的薄记工作。应当使用类变量或类方法。
(60)面向对象设计者不应当让物理设计准则来破坏他们的逻辑设计。但是,在对逻辑设计作出决策的过程中我们经常用到物理设计准则。
(61)不要绕开公共接口去修改对象的状态。
(17)尽可能地按照现实世界建模(我们常常为了遵守系统功能分布原则、避免全能类原则以及集中放置相关数据和行为的原则而违背 这条原则) 。
(18)从你的设计中去除不需要的类。
一般来说,我们会把这个类降级成一个属性。
(19)去除系统外的类。
系统外的类的特点是,抽象地看它们只往系统领域发送消息但并不接受系统领域内其他类发出的消息。
(46)如果两个或更多个类共享公共接口(指的是消息,而不是方法),那么只有他们需要被多态地使用时,他们才应当从一个公共基类 继承。
(47)对对象类型的显示的分情况分析一般是错误的。在大多数这样的情况下,设计者应当使用多态。
(48)对属性值的显示的分情况分析常常是错误的。类应当解耦合成一个继承层次结构,每个属性值都被变换成一个派生类。
(38)基类中的所有数据都应当是私有的,不要使用保护数据。
类的设计者永远都不应该把类的使用者不需要的东西放在公有接口中。
(39)在理论上,继承层次体系应当深一点,越深越好。
(40)在实践中,继承层次体系的深度不应当超出一个普通人的短期记忆能力。一个广为接受的深度值是6。
(5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。
如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。
(6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。
(7)类之间应该零耦合,或者只有导出耦合关系。也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。
(20)不要把操作变成类。质疑任何名字是动词或者派生自动词的类,特别是只有一个有意义行为的类。考虑一下那个有意义的行为是 否应当迁移到已经存在或者尚未发现的某个类中。
(21)我们在创建应用程序的分析模型时常常引入代理类。在设计阶段,我们常会发现很多代理没有用的,应当去除。
(22)尽量减少类的协作者的数量。
(56)只要在面向对象设计中用到了继承,问自己两个问题:(1)派生类是否是它继承的那个东西的一个特殊类型?(2)基类是不是派生类的一部分?
(57)如果你在一个面向对象设计中发现了多重继承关系,确保没有哪个基类实际上是另一个基类的派生类。
(58)在面向对象设计中如果你需要在包含关系和关联关系间作出选择,请选择包含关系。
(49)不要通过继承关系来为类的动态语义建模。试图用静态语义关系来为动态语义建模会导致在运行时切换类型。
(50)不要把类的对象变成派生类。对任何只有一个实例的派生类都要多加小心。
(51)如果你觉得需要在运行时刻创建新的类,那么退后一步以认清你要创建的是对象。现在,把这些对象概括成一个类。
(8)类应该只表示一个关键抽象。
包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不 造成任何影响 .
(9)把关的数据和行为集中放置。
设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。这种类型的行为暗示着这条经验原则被违反了。
(52)在派生类中用空方法(也就是什么也不做的方法)来覆写基类中的方法应当是非法的。
(53)不要把可选包含同对继承的需要相混淆。把可选包含建模成继承会带来泛滥成灾的类。
(54)在创建继承层次时,试着创建可复用的框架,而不是可复用的组件。
(55)如果你在设计中使用了多重继承,先假设你犯了错误。如果没犯错误,你需要设法证明。
规划一个接口而不是实现一个接口。
(14)对公共接口中定义了大量访问方法的类多加小心。大量访问方法意味着相关数据和行为没有集中存放。
(15)对包含太多互不沟通的行为的类多加小心。
这个问题的另一表现是在你的应用程序中的类的公有接口中创建了很多的get和set函数。
(16)在由同用户界面交互的面向对象模型构成的应用程序中,模型不应该依赖于界面,界面则应当依赖于模型。
(30)在实现语义约束时,最好根据类定义来实现。这常常会导致类泛滥成灾,在这种情况下,约束应当在类的行为中实现,通常是在 构造函数中实现,但不是必须如此。
(31)在类的构造函数中实现语义约束时,把约束测试放在构造函数领域所允许的尽量深的包含层次中。
(32)约束所依赖的语义信息如果经常改变,那么最好放在一个集中式的第3方对象中。
(33)约束所依赖的语义信息如果很少改变,那么最好分布在约束所涉及的各个类中。
(34)类必须知道它包含什么,但是不能知道谁包含它。
(35)共享字面范围(也就是被同一个类所包含)的对象相互之间不应当有使用关系。
(36)继承只应被用来为特化层次结构建模。
(37)派生类必须知道基类,基类不应该知道关于它们的派生类的任何信息。
php面向对象程序设计(OOP)的61条准则,掌握了以下准则你必然就是一个php强人.
(1)所有数据都应该隐藏在所在的类的内部。
(2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。
(3)尽量减少类的协议中的消息。
(4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。