面向对象的三大特性是"封装、"多态"、"继承",五大原则是"单一职责原则"、"开放封闭原则"、"里氏替换原则"、"依赖倒置原则"、"接口分离原则"。数据库
面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1] 发展到必定阶段后的产物。编程
这里拿 PHP 的 OOP 举个编程实例。网络
封装,就是把客观事物封装成抽象的类,而且类能够把本身的数据和方法只让可信的类或者对象操做,对不可信的进行信息隐藏。一个类就是一个封装了数据以及操做这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据能够是私有的,不能被外界访问。经过这种方式,对象对内部数据提供了不一样级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。数据结构
继承,指可让某个类型的对象得到另外一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可使用现有类的全部功能,并在无需从新编写原来的类的状况下对这些功能进行扩展。 经过继承建立的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从通常到特殊的过程。要实现继承,能够经过 “继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用 基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、可是子类必须提供实现的能力。分布式
多态,是指一个类实例的相同方法在不一样情形有不一样表现形式。多态机制使具备不一样内部结构的对象能够共享相同的外部接口。这意味着,虽然针对不一样对象的具体操做不一样,但经过一个公共的类,它们(那些操做)能够经过相同的方式予以调用。编码
是指一个类的功能要单一,不能一应俱全。如同一我的同样,分配的工做不能太多,不然一天到晚虽然忙忙碌碌的,但效率却高不起来。人工智能
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。好比:一个网络模块,原来只服务端功能,而如今要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就可以增长客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。设计
子类应当能够替换父类并出如今父类可以出现的任何地方。好比:公司搞年度晚会,全部员工能够参加抽奖,那么不论是老员工仍是新员工,也不论是总部员工仍是外派员工,都应当能够参加抽奖,不然这公司就不和谐了。对象
具体依赖抽象,上层依赖下层。假设B是较A低的模块,但B须要使用到A的功能,这个时候,B不该当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。经过上层模块难以免依赖下层模块,假如B也直接依赖A的实现,那么就可能 形成循环依赖。一个常见的问题就是编译A模块时须要直接包含到B模块的cpp文件,而编译B时一样要直接包含到A的cpp文件。blog
模块间要经过抽象接口隔离开,而不是经过具体的类强耦合起来
简单地说,软件工程中对象之间的耦合度就是对象之间的依赖性。指导使用和维护对象的主要问题是对象之间的多重依赖性。对象之间的耦合越高,维护成本越高。所以对象的设计应使类和构件之间的耦合最小。
有软硬件之间的耦合,还有软件各模块之间的耦合。
耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息经过接口。
耦合能够分为如下几种,它们之间的耦合度由高到低排列以下:
总结
耦合是影响软件复杂程度和设计质量的一个重要因素,在设计上咱们应采用如下原则:若是模块间必须存在耦合,就尽可能使用数据耦合,少用控制耦合,限制公共耦合的范围,尽可能避免使用内容耦合。
内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的天然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当刚好作一件事。它描述的是模块内的功能联系。 耦合是软件结构中各模块之间相互链接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及经过接口的数据。 程序讲究的是低耦合,高内聚。就是同一个模块内的各个元素之间要高度紧密,可是各个模块之间的相互依存度却要不那么紧密。 内聚和耦合是密切相关的,同其余模块存在高耦合的模块意味着低内聚,而高内聚的模块意味着该模块同其余模块之间是低耦合。在进行软件设计时,应力争作到高内聚,低耦合。