航空公司预订系统 UML 问题 - 这些方法属于哪里?

问题描述

我正在准备软件工程面试,并发现在面试中了解面向对象设计是件好事。在我查看的所有 UML 图示例中,我无法弄清楚这些方法所属的位置。例如,以下是航空公司预订系统面向对象设计课程中的 UML 图之一。

enter image description here

我对这张图的主要问题是:

  1. 包含 addFlightSchedule() 方法的航班类
  2. 包含 getFlights() 方法等的机场类

在这方面做了一些工作后,我总是有一个具有 addFlightSchedule() 方法的服务类(如 FlightScheduler 类),而 Flight 对象只是包含适用于航班的属性/方法的对象。那么,在面试时这样设计课程是否正确?为什么所有在线 UML 图都将服务(操作)方法作为类本身的一部分?

解决方法

这是一个域模型,它讲述了一些关于域逻辑的信息。这不是系统应该如何工作的实现模型:

1.飞行

在此模型中,战斗代表两个机场之间的航线。和飞行公司一样,火车公司喜欢规律性。因此,同一航线(航班)可以定期运行(这里是一周中的一天或几天。或者,它可以是仅在特定日期运营的包机,因此航班可以没有,一个或多个自定义日期。

因此在这样的模型中,在战斗中找到 addSchedule() 是合乎逻辑的,因为这样可以更详细地描述飞行。所以这绝对是预期飞行行为的一部分。如果任何其他类会这样做,您将创建一个依赖项和一个特定实现的耦合。

这里唯一令人惊讶的是,CustomeScheduleWeekSchedule 不是 FlightSchedule 的特化。

2.机场

了解哪些飞机应该到达和离开机场以及何时离开是机场的明确职责。在每个机场,我都可以查看预计到达和离开的列表,以及有关航班的一些信息。

这就是 getFilghts() 的意义所在:由机场将这些信息传递给只知道机场的其他班级。如果这个模型不提供这种机场方法,每个乘客就必须知道全世界所有的飞机,并找出从机场起飞的飞机。这会破坏封装,因为乘客将不得不了解关于世界的太多细节。

话虽如此,在现实世界中,您可能希望此方法将特定数据作为参数:同样,不能过滤航班并找到适合给定日期的航班。

最少知识原则

该模型旨在充分封装对象,使每个对象不必知道如何关联所有其他对象。

遵守 principle of the least knowledge 会很累,所以每个类都必须知道尽可能少的类。特别是,乘客了解机场和飞机。他们原则上不必了解日程安排的工作原理。

这个模型显然是一种简化,也是不完美的。例如,不清楚如何创建航班实例。但也许你的书在一个专门的章节中解决了这个问题和不同的选择;-)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...