本文约束条件
本文以单继承的角度进行分析,多继承要转化为单继承(多继承中定一个为基类,其他类为接口类等)。
1.继承关系
概念
继承又分为2种方式,一种实现继承一种接口继承。
参见笔记——2种继承方式学习笔记
OOPL(面向对象语言)中有继承的各规范语法(由编译器/解释器负责管理),比如python用括号表示继承,“子类(父类):”。
再比如c++用冒号表示继承,“子类:父类{}”。
在OOPC(c语言面向对象)中怎么判定呢?如果调用其基类时会调用该类的同名函数,那么基类和该类是继承关系(通俗点就是说,子类里的基类方法会调用子类里的方法)。
关键词:is a
画图符号:实线+空心三角形(空心三角形指向父类)
2.接口关系
概念
接口关系只是继承接口,增加新能力。
比如超人会飞——超人继承人类,外加继承一个飞的接口类。
再比如唐老鸭会说话,唐老鸭继承鸭类,外加继承一个说话的接口类。
OOPL(面向对象语言)中有接口的各规范语法(由编译器/解释器负责管理),比如c++里有virtual关键字,java里有interface关键字等。
在OOPC(c语言面向对象)中怎么判定呢?只包含函数指针的类是接口类。
关键词:interface
画图符号:虚线+空心三角形(空心三角形指向接口类)——与继承的差异是一个实线一个虚线,因为一个是真继承,一个是假继承——主要是继承方法而已。
3.组合关系
概念
组合关系用来表示类与类之间是整体与部分的关系,是一个强的has a的关系。
比如人有一双眼睛、一只鼻子、两只耳朵、一个嘴巴,那么人与眼睛、鼻子、耳朵、嘴巴就是组合关系,一体的,一损俱损,一荣俱荣,就是生命周期一样,那些眼睛、鼻子、耳朵、嘴巴是人类构造函数负责创建的。
OOPL(面向对象语言)中没有语法约定,实现形式是:构造函数中,其他类创建的对象作为该类的属性等形式。
在OOPC(c语言面向对象)中怎么判定呢?类的属性是其他类创建的对象,且初始化时负责创建该类对象作为自己的属性。
关键词:强的has a
画图符号:实心菱角形+实线+大于号>剪头(实心表示强烈的“has”(拥有)的关系,剪头指向被has的类)
4.聚合关系
概念
聚合关系相对组合关系来说的,是一个弱的has关系,用来表示类与类之间是合作、聚集的关系。
比如是人群是由一个个人类的集合,雁群是一个个大雁的集合。
OOPL(面向对象语言)中没有语法约定,实现形式是:构造函数中,某类的属性是另外一类的数组。
在OOPC(c语言面向对象)中怎么判定呢?类的属性是其他类定义成的数组。
关键词:弱的has a
画图符号:空心菱角形+实线+大于号>剪头(空心表示很弱的“has”(拥有)的关系,剪头指向被has的类)
5.依赖关系
概念
依赖关系用来表示一个类依赖另一个类的关系。
比如动物依赖阳光、空气、水、食物等。
OOPL(面向对象语言)中没有语法约定,实现形式是一类对象作为另一类的形参,那么形参的类是为被依赖的类。
在OOPC(c语言面向对象)中怎么判定呢?也好定义呀,就是该类方法的形参传入的是其他类的对象,其他类就是该类依赖的类,它们是依赖关系。
关键词:依赖关系
画图符号:虚线+大于号>剪头(虚线表示依赖的关系,剪头指向所依赖的类)
6.关联关系
概念
关联关系用来表示一个类会关联到另一个类。
比如人类与地球,人类与气候,企鹅与温度。
OOPL(面向对象语言)中没有语法约定,实现形式是一类的属性引用到另一类,且有关联则是关联关系。
在OOPC(c语言面向对象)中怎么判定呢?属性是某类的对象,且关系是关联型的。
关键词:关联关系
画图符号:实线+大于号>剪头(实线表示关联关系,剪头指向所关联的类)
总结
组合关系、依赖关系和关联关系因为OOPL和OOPC没有对应语法约束,这些关系从实现形式上很难认出来,都可以是类的属性——那只能靠人自己去区分了。
你看类、继承、接口在OOPC中都有语法约束,比如class关键字、继承形式(括号或者冒号)、virtual关键字和interface关键字,编译器/解释器会从语言层面解决——是不是关键字由编译器/解释器来决定和维护的(开发编译器/解释器的人才是这个语言的上帝)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)