【问题标题】:Airline reservation System UML question - where do these methods belong? [closed]航空公司预订系统 UML 问题 - 这些方法属于哪里? [关闭]
【发布时间】:2021-05-01 22:06:05
【问题描述】:

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

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

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

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

【问题讨论】:

  • 让我说清楚,你问为什么互联网上的一些随机 UML 图是用这种方式而不是其他方式编写的?
  • @Selvin 不。我在问为什么大多数 UML 图(在书籍和互联网中)都有以这种方式定义的类/方法,以及按照我描述的方式这样做是否有任何问题, .
  • 问作者......你也写了所有的问题,现在大多数......好吧,随机也适合......所以现在我们有 我在问为什么随机 UML 图(在书籍和互联网中)有这样定义的类/方法 ...所以,我是对的
  • 老实说,做你认为最好的事情。那里有很多意见,如果您要在某个地方工作,那么最好首先说明您打算如何设计它。如果他们问,请准备好解释你为什么使用它。归根结底,没有一种方法可以制作程序。一切都有它的优点和缺点。在设计软件时,您的工作是考虑特定实现的优点和缺点。我认为在设计软件时了解这一点可能更重要。
  • 也许他们这样做是为了有更小的图表,把 Airport Class 想象成一个实体。然后您需要添加将导致存储库的服务类。我认为他们这样做是为了让事情变得更简单,但在实际实施中会有所不同。另外我认为这是一种学术观点,大多数专业和案例并不适用于现实生活场景。

标签: java uml class-diagram object-oriented-analysis ooad


【解决方案1】:

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

1。航班

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

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

这里唯一令人惊讶的是CustomeSchedule 和WeekSchedule 不是FlightSchedule 的特化。

2。机场

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

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

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

最少知识原则

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

它厌倦了遵守principle of the least knowledge,因此每个班级都必须知道尽可能少的班级。特别是,乘客了解机场和飞机。他们原则上不必知道时间表是如何工作的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-08
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    相关资源
    最近更新 更多