21.依赖和关联之间的区别
依赖(Dependency):
依赖关系是一种较弱的关系,它表示一个类在某些条件下使用了另一个类。一个类的变化可以影响到依赖它的类,但不必须反过来,即依赖关系是一个单向的。依赖关系通常是一种短期的或临时的关系,表示在特定的情况下需要使用另一个类的功能或服务。在UML类图中,依赖关系用一个虚线箭头表示,箭头指向被依赖的类。
关联(Association):
关联关系是一种较强的关系,它表示一个类的对象与另一个类的对象之间存在关联。关联关系可以是双向的,也可以是单向的,它表示两个类之间的关联或连接。一个类的变化可能会影响到与它关联的其他类。在UML类图中,关联关系用一条实线连接两个类,实线两端通常有一个箭头指向被关联的类。可以使用导航箭头来表示关联方向,箭头指向被关联的类表示单向关联,箭头同时指向两个类表示双向关联。还可以使用多重性(Multiplicity)来表示关联的数量和约束。
总结来说,依赖关系表示一个类对另一个类的临时使用或依赖,而关联关系表示两个类之间的较强的连接和关联。依赖关系是一种短期的、临时的关系,而关联关系是一种持久的、更加稳定的关系。
22.泛化与类的继承有区别吗
泛化(Generalization)和类的继承是相互关联的概念,它们描述了类与类之间的层次关系。
泛化(Generalization):
泛化是面向对象编程中的一种机制,用于描述类与类之间的一般与特殊关系。它表示一个更一般的类(父类、超类),和一个或多个更具体的类(子类、派生类)之间的关系。父类通常具有通用的特征和行为,而子类则通过继承父类的特征和行为,并可以添加自己特有的特征和行为。在UML类图中,泛化关系用一条带空心箭头的实线表示,箭头指向父类。
继承(Inheritance):
继承是面向对象编程中的一种实现泛化关系的机制。它允许子类可以继承父类的属性和方法,并且可以在子类中添加额外的属性和方法。通过继承,子类可以重用父类的代码,并且可以通过覆盖(Override)父类的方法来实现多态性。继承是一种代码重用和扩展的机制,它使得类与类之间形成了层次结构。子类可以访问和使用父类的公共成员,而不需要重新实现相同的功能。
综上所述,泛化和继承是相关联的概念,泛化描述了一般与特殊之间的关系,而继承是实现泛化关系的一种具体机制。泛化是面向对象的术语,而继承是面向对象编程中的实现机制。
23.聚合和组合的异同
聚合(Aggregation)和组合(Composition)都描述了对象之间的关联关系,但它们在关联程度和关系强度上存在一些区别。
聚合(Aggregation):
聚合表示一种"包含"关系,其中一个对象包含另一个对象。它表示了一个弱关联,两个对象可以分别存在,即使一个对象不存在,另一个对象仍然可以单独存在。实例之间的聚合关系在生命周期上是相对独立的。聚合关系中的对象之间可以共享资源,但它们的生命周期可以独立控制。例如,一个班级对象(容器)和多个学生对象(成员),即使班级不存在,学生仍然可以存在。
聚合关系用一个带空心菱形的实线来表示,菱形指向被包含的对象。
组合(Composition):组合表示一种更强的"整体-部分"关系,一个对象是另一个对象的一部分。它表示了一个强关联,两个对象之间的生命周期是紧密相关的。一个对象的存在依赖于另一个对象的存在。在组合关系中,整体对象控制着其部分对象的生命周期。当整体对象被销毁时,它包含的部分对象也会被销毁。例如,一个汽车对象(整体)包含多个轮胎对象(部分),当汽车被废弃时,轮胎也被废弃。
组合关系使用一个实线带实心菱形来表示,菱形指向被包含的对象。
在总结上述区别时,可以用以下的规则:如果两个对象之间的关系符合"整体-部分"关系,其中一个对象是另一个对象的一部分,且整体的销毁会影响到部分,那么它们之间的关系应该被定义为组合。如果两个对象之间的关系是"容器-成员"关系,其中一个对象是另一个对象的容器,但成员的生命周期不依赖于容器,那么它们之间的关系应该被定义为聚合。
需要注意的是,聚合和组合只是关系的一种描述方式,并不是语言本身的特性。在许多编程语言中,没有明确的语法来表示聚合和组合关系,只有通过注释或者代码中的命名来描述这种关系。
24.顺序图的元素
角色,对象,生命线,激活期,消息
25.顺序图的消息
同步消息,异步消息,返回消息
26.返回消息是必须的吗,顺序图中消息顺序号是必须的吗
不是,但为了阅读方便一般每个消息都有返回消息
不是,在顺序图中,消息序列号并不是必需的,但它可以提供有关消息发送和接收顺序的信息,并帮助阐明系统中的顺序和交互过程。尽管消息序列号具有很多好处,但在简单的顺序图或交互中,可以省略它们以简化图形,并使用直观的方式描述消息之间的顺序关系。因此,是否使用消息序列号取决于需求和图形的复杂性。对于复杂的顺序图或需要清晰表示消息次序的场景,推荐使用消息序列号。
27.通信图的元素
活动者,对象,链接,消息
28.通信图和顺序图的关联
同:都表示出了对象间的交互作用相互转换
异:顺序图强调消息的时间顺序,图像是一张表;通信图强调对象间的关系(发送和接收消息的对象之间的组织结构),图像是定点和弧的结合
顺序图可以反映对象的创建、激活、销毁等生命周期;通信图没有
通信图能反映动作路径,消息必须有顺序号;顺序图没有
顺序图常用于表示方案,通信图用于过程的详细设计
29.顺序图和通信图中分别怎么表示循环
在顺序图中,可以使用循环图标来表示循环。通常使用两种类型的循环图标:
带有条件的循环(Loop with Condition):这种循环表示在满足条件的情况下重复执行一系列操作。它的表示形式是一个小矩形框,框内部有条件语句,通常以方框与直线相连。
"condition" 表示循环的条件,"Actions" 表示循环内要执行的操作。如果条件为真,循环将继续执行。否则,循环结束。
简单循环(Simple Loop):这种循环表示简单地重复执行一系列操作一定的次数。它的表示形式是一个框内有一个 "Loop" 标签,通常以方框与直线相连。
"Loop" 表示循环的次数。这种循环通常用于表示固定的迭代次数。
在通信图中,可以使用箭头来表示循环。可以在箭头的路径上指定循环条件或表示循环的次数。
箭头表示从 A 到 B 的消息传递。如果需要循环执行该消息传递,可以将箭头连接回自身,以表示循环。你还可以在箭头的路径上添加循环条件或表示循环次数的注释。
注意,通信图通常用于显示消息的传递和顺序关系,而不会详细说明循环的逻辑或具体操作。因此,在通信图中表示循环时应尽量保持简洁清晰。
30.通信图并不是顺序图的一个特例
31.消息交互在面向对象语言中即方法调用
32.状态机图不是静态图
33.泳道技术是将一个活动图中的活动状态进行分组,每一组表示一个特定的类、人或部门,他们负责完成组内的活动
34.活动图和状态机图是对一个对象的生命周期进行建模,描述对象随时间变化的行为
35.对反应型对象进行建模一般使用状态机图