对于一个工程,项目
面向对象的分析(OOA):需求,做什么
面向对象的设计(OOD):怎么样去做
面向对象的编程(OOP):做
分析与设计占到整个项目的七成甚至以上
软件需求一直在变化的,想以最小的代价去满足需求的变化。
UML:统一建模语言,主要是类图,序列图
类与类之间的关系
1,继承(泛化)
A is B
可以使用空心的三件箭头从派生类指向基类
2,关联
A has B
关联关系有两种形式:双向的关联关系,单向的关联关系
双向的关联关系(客户与订单的关系)(直接使用直线连接两个类)
单向的关联关系(条件变量知道互斥锁的存在,互斥锁不知道条件变量的存在,可以使用条件变量到互斥锁的箭头)(A知道B的存在,B不知道A的存在)
数据成员使用的是指针或引用
彼此之间不会负责对方生命周期的销毁
3,聚合
A has B
从部分指向整体的空心菱形箭头,类与类之间表现为整体与局部的关系,整体部分并不负责局部部分的销毁。
在代码上可以使用指针或引用。
4,组合
A has B
从部分指向整体的实心菱形箭头,整体部分会负责局部对象的销毁,可以将局部类创建的对象作为整体的数据成员。
5,依赖
A use B,是偶然的,临时的,并非固定的
在代码上:B作为A的 成员函数参数;
B作为A的成员函数的 局部变量;
A的成员函数调用B的静态方法;
各关系的比较与总结
1,继承体现的是类与类之间的纵向关系(垂直关系),其他四种体现的是类与类之间的横向关系;
2,耦合:两个模块或者两个部分之间的连接关系;低耦合(让两个模块或者两个类之间的关系变得微弱一些)
耦合强度:
依赖 < 关联 < 聚合 < 组合 < 继承(泛化)
3,语义上说 继承(泛化)A is B ;关联、聚合、组合A has B;依赖 A use B;
4,当组合与依赖结合时,可以替代继承