需要有关正确课程设计的建议

时间:2010-10-17 01:33:23

标签: java oop io class-design

我应该写一个简单的电影预订系统,它允许客户预订电影。 电影院由不同的剧院组成,座位数量,价格和电影放映时间不同。 用户应该能够输入他的姓名和其他凭证,然后预订一个或多个电影和座位。 当他完成预订时,系统应该输出收据,列出他的名字,电影的放映时间和预订号码。

我试图遵循OOP原则,最好地遵循我目前的能力。

我设置的课程如下:

  • CinemaBooking - >入口程序
  • 房间 - >通过[row] [col]
  • 获得座位大小
  • 电影 - >有movietitle,shwotime,房间和价格。
  • 客户 - > shoud存储任何用户信息,如姓名,电子邮件和电话,并生成
                    预订号码

我有点不确定在这种情况下将user-i / o放在哪里:它应该保留在CinemaBooking中,还是应该生成一个只执行I / O的单独类? 或者我应该将整个I / O内容移动到另一个类(例如Customer Class)?

4 个答案:

答案 0 :(得分:6)

有许多建议,我只给予最重要的建议。

首先,OOP的主要思想是适应现实世界,所以最好让你的类尽可能接近真实对象。 创建类预订,它将等同于票证,而不是程序的入口点。即它将包含有关用户,剧院,座位和费用的信息。 创建类剧院,其中包含多个座位(不是行x列 - 可能会保留一些座位,有些可能会被打破,有些剧院也没有平方结构)。或者,由于一个剧院可以有几个房间,您可以创建课堂,其中将有“座位”属性,然后将房间添加到剧院。 还要创建类Movie。电影和剧院/房间将互相参考:电影将包含它所显示的剧院列表,剧院将包含它显示的电影列表。 然后创建课程Seance,其中包含时间和电影。 仅在以后您将与此客户合作并希望保存其属性(名称,预订历史记录等)时创建类Customer。否则再创建一个类是没有意义的。 这是您的模型。类可能有点,但如果你有核心想法,这不会是一个问题。

其次,创建类BookingSystem,它将总结所有以前类的功能。它将是Facade design pattern的实现,它确实简化了对预订子系统的访问。

第三,为I / O工作创建单独的类。 从不将I / O工作放到模型类中。想象一下,您的影院预订系统将成为另一个拥有自己I / O的系统的一部分 - 您需要重新设计所有代码以接收来自更高层的数据。因此,只需为用户的输入和程序输出单独创建类。 这将是您的视图

最后,创建主程序类。你可以给它同名的程序本身就是这样的。这个将只控制从视图到模型和返回的程序流。因此,此部分称为控制器,整体构思称为Model-View-Controller pattern

答案 1 :(得分:3)

每当我上课时,它都有以下内容: -

  1. 所有实例变量都设置为私有。

  2. 实施getter和setter。

  3. 实施toString()方法。

  4. 如果您正在使用Eclipse,那么它将帮助您自动实现这些方法。只需编写实例变量,右键单击编辑器 - >来源 - >生成getter和setter。

答案 2 :(得分:2)

在所有类上编写toString()方法。以后担心I / O.首先获得正确的关系。 I / O是您最不担心的。

答案 3 :(得分:2)

实际上,机票不包含有关用户影院座位或费用的信息。它将包含引用到其他对象:用户,剧院,席位成本。

你将需要o0ne“manager”类型类来保存程序的其余部分:具有main()的BookingApp可以是它。我同意现在不要太担心接口 - 但是不要从Domain类打印到终端。使用toString()来测试对象内容,但main()方法应该在其他类上调用getter并创建输出。 将域类直接写入UI的非常糟糕的想法和形式。 所以,你有戏剧,用户,席位,门票,价格。考虑依赖性。座椅与剧院相连,价格基于剧院和座位,我假设。 从事物开始,并在它们之间画线,以显示它们如何相互通信或互相参考。例如,给定一个用户,找到他们的所有门票 - 从票务查找座位和座位查找剧院。 然后添加属性(私有,如JavaGeek所说)。 从小处开始。也许只是剧院和座位。得到它,然后添加下一个类。以增量和迭代方式添加到您的设计中。不要一次尝试编写和编译整个事物。  我建议将Peter Coad的Java设计书(非常便宜且非常好)作为java设计的一个很好的介绍。