c++|题目1
有人将面向对象设计原则简单归为三条:
1)封装变化点_
2)对接口进行编程_
3)多使用组合,而不是继承?
请查阅相关资料并结合本章所学内容,谈谈对这三条的理解?
隔离变化点的好处在于,将系统中经常变化的部分和稳定的部分隔离,有助于增加复用性,并降低系统耦合度。很多设计模式的意图中都明显地指出了其对问题的解决方案,学习设计模式的要点是发现其解决方案中封装的变化点。结合面向对象设计原则_ 谈谈对类与接口“粒度”的理解?
对接口编程的一个好处在于客户端程序并不需要了解具体的实现,而只需要了解接口中声明的方法。更大的好处在于能够使用多态性执行动态性的行为。
继承是静态行为,也就是编译时行为。这种设计缺乏灵活度,并且具有比组合更高的耦合度。而组合是动态行为,即运行时行为。可以通过使用组合的方式在设计上获得更高的灵活性。
【c++|题目1】粒度就像代码分层的单位,代码被分的越细,粒度就越小。但是在面向对象的语言中,应该以复用对象为前提,所以类粒度就是必不可少的,如果继续被分到方法或函数那一块,虽然粒度更小了,但是代码就不会简洁了。结合李氏代换原则讨论:正方形是否是长方形的子类? 圆是否是椭圆的子类?
不是,因为长方形或者椭圆的实体类并不一定适合正方形或者园,new出对象时,前者传入两个参数,然后后者接收时,就是报运行时错误。显然不符合LSP。下面的类是否违反了迪米特法则?为什么?
class NewsPaper
{
public:
Color getColor()
{
return ariticle.getTitle().getColor();
}
private:
Article article;
}
//说明_1)Color, Article为二个类的类名,且类的实现省略了,不影响理解
//2)从代码可以看出, Articlel类有个方法为 getTitle()_ 其返回值为Ariticle对象_
//getColor()是Color类的方法,返回值为Color
违反了,因为迪米特法则是一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,而ariticle.getTitle().getColor(); 显然是调用了另一个类的方法,显然违反了迪米特法则。
推荐阅读
- 画解算法(1.|画解算法:1. 两数之和)
- opencv|opencv C++模板匹配的简单实现
- leetcode|leetcode 92. 反转链表 II
- 童年回忆
- 年国考行测备考(重要的题目做三遍)
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 凭什么要对外卖小哥说谢谢()
- 人外有人
- 【C】题目|【C语言】题集 of ⑥
- c++基础概念笔记