微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决航空公司预订系统 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 会很累,所以每个类都必须知道尽可能少的类。特别是,乘客了解机场和飞机。他们原则上不必了解日程安排的工作原理。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?