我正在为软件工程面试做准备,并为我的面试找到了一种面向对象的设计感。在我看过的UML图的所有示例中,我很难确定这些方法属于哪里。例如,以下是航空公司预订系统面向对象设计课程中的UML图之一。

我在这个图表中的主要问题是:
在这方面做了一些工作之后,我总是有一个服务类(像FlightScheduler类),它有addFlightSchedule()方法,而for对象只是包含适用于飞行的属性/方法的类。那么,在面试中用这种方式设计课程是正确的吗?为什么所有在线UML图都将服务(操作)方法作为类本身的一部分?
发布于 2021-01-28 08:15:05
这是一个域模型,它说明了一些关于域逻辑的内容。这不是系统应该如何工作的实现模型:
1.飞行
在这种模式下,战斗代表了两个机场之间的航线。而飞行公司喜欢火车公司喜欢规律。因此,同一条航线(航班)可以定期安排(一周中的一天或几天)。或者,它可以是只在特定日期运行的包机,因此该航班可以没有、一个或多个自定义日期。
因此,在这样的模型中,在战斗中找到addSchedule()是合乎逻辑的,因为这样可以更详细地描述飞行。因此,这无疑是预期飞行行为的一部分。如果任何其他类都会这样做,您将创建一个依赖项和一个特定实现的耦合。
这里唯一令人惊讶的是,CustomeSchedule和WeekSchedule不是FlightSchedule的专门化。
2. THe机场
一个机场的明确作用是知道哪些飞机应该抵达,什么时候从机场起飞。在每个机场,我都可以查阅预计到达和离开的名单,并提供一些有关航班的信息。
这就是getFilghts()的意义所在:这取决于援助港将这些信息传递给其他只知道机场的阶层。如果这个模型不能提供这种机场方法,每个乘客都必须了解世界上所有的飞机,并找到离开机场的飞机。这将打破封装,因为apassenger必须知道太多关于世界的细节。
THis说,在现实世界中,您会期望这种方法将特定的数据作为参数:同样,不需要过滤航班并找到适合某一特定日期的数据。
知识最少原则
该模型的目的是充分封装对象,使每个对象不必知道如何关联所有其他对象。
它很难遵守知识最少原则,所以每个类都必须知道尽可能少的类。在日常生活中,乘客了解机场和飞机。THey原则上不需要知道时间表是如何工作的。
这种模式显然是一种简化,也是不完善的。例如,还不清楚飞行实例是如何创建的。但是也许你的书在一个专门的章节中讨论了这个问题和不同的选择;-)
https://stackoverflow.com/questions/65929874
复制相似问题