C++升级之整洁之道(五)——类的设计原则

  类被视为封装的软件模块,它们将结构特征(数据成员)和行为特征(成员函数)组合成一个有聚合力的单元。

1.让类尽可能小

  大类的问题是显而易见的,很难拿被剂嘞,并且可维护性和可测试性很差,更不要说可复用性了。小类更容易使用、理解和测试,每个软件系统都可以分解成小的基本块。

2.单一职责(SRP)原则

  每个软件单元,组件、类和函数,应该只有一个单一且明确定义的职责。如果系统不同方面的新需求或需求变得而需要更改类时违背了该原则,则可以改变该类。遵循SRP的类通常很小并且具有很少的依赖性。

3.开闭原则

  软件实体对扩展应该是开放的,但是对修改应该是封闭的。在面向对象中,支持这一原则的一种方法就是继承。

4.里氏替换原则(lsp)

  有时遇到子类型并不真正想要适应类型层次结构的情况。
  在C++11中,final被支持使用,有两种使用方法,一种是避免在派生类中重写单个虚成员函数,防止将完整的类作为继承的基类。

  PS:运行时类型信息是一种C++机制,指在运行时访问关于对象数据类型的信息。RTTI北航的一般性概念被称为类型反射。在C++中,typeid运算符和dynamic_cast < T > <T> <T>都属于RTTI(在头文件 < t y p e i n f o > <typeinfo> <typeinfo>中定义)。类型为std::type_info的const引用现在包含关于对象的类的信息。从C++11开始,hash_code已经可以使用了,而引用相同类型的std::type_info对象的hash code也算相同的。

5.接口隔离原则(ISP)

  接口隔离原则指出接口不应该包含那些与实现类无关的成员函数,或者这些类不能以有意义的方式实现覆盖,应该将“宽接口”分离成更小且高度内聚的接口。生成的小接口也称为角色接口。

6.无环依赖原则

  环依赖原则指出组件或类的依赖图应该没有环。环依赖是紧耦合的一种不良表现。
  打破环依赖的方法:(1)设置第三方接口(2)依赖倒置原则:面向对象设计id基础不是具体软件模块的特殊熟悉,相反,它们的共同特性应该被合并在共享使用的抽象体中,高级模块不应该依赖于低级模块,两种都应该依赖于愁绪;抽象不应该依赖于细节,细节应该依赖于抽象。

7.迪米特法则

  (1)允许成员函数直接调用其所在类作用域内的其他成员函数(2)允许成员函数直接调用其所在类作用域内的成员变量的成员函数(3)如果成员函数具有参数,则允许成员函数直接调用这些参数的成员函数(4)如果成员函数创建了局部对象,则允许成员函数调用这些局部对象的成员函数(5)成员函数中的一种调用返回了一个在结构上比该类的直接相邻元素更远的对象。则应该禁止调用这些对象的成员函数

8.避免贫血类

  把对象作为一堆数据的包装,只是具有数据结构的面向过程编程,它与面向对象无关,严重违反了信息隐藏原则,这种类称为贫血类。

9.只说不问

  如果对象能够自行决定,那么我们不应该要求对象提供关于其内部状态的信息,并在次对象之外该做什么。
  该原则加强类的封装,增强了信息隐藏,增强了类的内聚性。

10.避免使用静态成员变量和静态成员函数

  因为其偏向过程编码的风格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值