C++59期提高部分
Day01
面向对象的基本概念、类与类之间的关系、面向对象的设计原则、设计模式;C++11的线程库、互斥锁、条件变量、pc、线程池;计算机网络的概念、socket网络编程、IO多路复用;Reactor、Reactor + 线程池。
一、面向对象的基本概念
面向对象的分析(OOA):分析出需求、要做什么。
面向对象的设计(OOD):需要根据需求设计出类,以及类中的数据成员以及成员,设计出类与类之间的关系,以及需要遵循的设计原则。
面向对象的编程(OOP):将上述的需求分析以及设计转换为代码。
UML语言:统一建模语言。
二、类与类之间的关系(重要)
1、继承
两个类之间一种很强的关系,基类部分会成为派生类的一部分。在语义层面上表现的是:A is B。在类图的画法上:从派生类指向基类的空心三角箭头。
继承:先有基类,然后派生出新的类,也就是派生类。先有基类然后才有派生类。
泛化(一般化):先有派生类,然后抽象出基类。先有派生类,然后抽象出基类。
2、关联
双向的关联关系
彼此知道对方的存在,但是彼此并不负责对方的生命周期。在语义层面上:A has B。在代码层面上:使用的是指针或者引用。在类图的画法上:直接使用实心直线。
单向的关联关系
A知道B的存在,但是B并不知道A的存在,彼此并不负责对方的生命周期。在语义层面上:A has B。在代码层面上:使用的是指针或者引用。在类图的画法上:从A指向B的直线箭头。
3、聚合
是一种稍微强一点的关联关系,表现为整体与局部的关系,整体并不负责局部对象的销毁。在语义层面:A has B。在代码层面上:使用指针或着引用。在类图的画法上:从局部指向整体的空心菱形箭头。
4、组合
是一种最强的关联关系,表现为整体与局部的关系,整体部分会负责局部的销毁。在语义层面上:A has B.在代码层面上:使用的是子对象。在类图的画法上:从局部指向整体的实心菱形箭头。
5、依赖
是两个类之间的一种不确定的关系,语义上是一种A use B的关系,这种关系是偶然的,临时的,并非固定的 。在类图的画法上:使用虚线的箭头,从A指向B,代码表现形式:
-
B作为A的成员函数参数;
-
B作为A的成员函数的局部变量(B作为A的成员函数的返回值);
-
A的成员函数调用B的静态方法。
总结:
1、继承关系是一个垂直关系,但是其他的四种是横向关系
2、在语义层面上:继承 is;关联、聚合、组合 has;依赖:use。
3、耦合程度:依赖 < 关联 < 聚合 < 组合 < 继承
4、关联、聚合、组合:三者强调的是数据成员之间的关系。依赖:体现在类之间的成员函数上。继承:不仅表现在数据成员上,还表现在成员函数上。
三、面向对象的设计原则(重要)
要求:低耦合与高内聚。
耦合:强调的是类与类之间、或者模块与模块之间的关系。聚合:强调的是类内部、或者模块内部的关系。
1、单一职责原则
核心思想:一个类,最好只做一件事,只有一个引起它变化的原因。