UML视频看完了,在这个过程中,也记了笔记,画图的时候,才发现有的图符用起来不知道如何抉择,例如include和extend。故决定以此为引,将一些可以对比学习的概念汇总到一起学习,从而起到加深理解的作用。
include与extend
先看两张图,结合定义,我认为include与extend二者的区别在于 必须与非必须。include的内在含义是必须拥有,就像下边这张图,一个总的功能需要其他的子功能构成,保持功能的完整性,缺一不可。
类图的4种关系
(1)关联
——普通关联
——组合
——聚合
(2)依赖
(3)泛化
(4)实现
组合和聚合
聚合:整体和部分之间的关系是松耦合,即不存在先有什么后有什么的问题,例如:书架和书没有先后关系。
组合: 整体和部分之间的关系是紧耦合,即先有什么再有什么,例如先有书后有页码,相对于聚合有很强的附属关系。
综上所述:聚合和组合的区别在于生命期的管理:聚合——火车不存在,但是引擎可以独立存在;组合——链表不存在了,节点就不存在了。
依赖和泛化
依赖:是一种使用关系,类A中的方法或是参数需要用到类B,二者时间就是依赖关系,虚线箭头指向被依赖方。
泛化:实际上描述的是类和类之间的继承关系。
——单重继承:相当于师承一人。
——多重继承:相当于有多个师父,例如郭靖,有江南七怪当师傅,也有洪七公,老顽童,一灯大师当师傅。
相关图的比较
>活动图和状态图
前者侧重从行为的动作描述,后者侧重从行为的结果描述。
>顺序图和协作图
顺序图,强调消息的时间顺序,通过生命线体现对象间的交互关系(时间顺序)
协作图,强调参加交互的对象的组织,通过数字标号顺序体现对象间的交互关系(对象关系)
模式和框架的比较
模式:支持软件结构和设计的重用(宽泛)
形象地说:设计模式就像是房屋中墙壁的装修设计方式,是小单元的架构元素,使用范围更广,与应用的相关性更小;框架就像是房屋。
面向对象和面向过程
面向对象和面向过程的思维方式不一样,前者从类出发,考虑属性和方法,以及类和类之间的关系;后者从模块出发。
比如拿学生早上起来的事情来说说这种面向过程吧,粗略的可以将过程拟为:
(1)起床
(2)穿衣
(3)洗脸刷牙
(4)去学校
这4步就是一步一步地完成,它的顺序很重要,你只须一个一个地实现就行了。而如果是用面向对象的方法的话,可能就只抽象出一个学生的类,它包括这四个方法,但是具体的顺序就不能体现出来。
好了,就总结到这里,对比是一种非常好的加深理解的方式,与实例搭档起来更合适!
原文链接:https://www.f2er.com/javaschema/284336.html