CS349 Assignment 2,3总结
偷懒把两个作业的总结写到一起了,呵呵。 不过也不仅仅是偷懒的问题,这两次作业都是在Java环境下通过swing库来编写图形界面程序。并且要使用MVC结构。对于熟悉JAVA的同学来说,这次作业的难度其实并不在与写JAVA,而是满足MVC结构。如何才算是满足呢? 简单地说,满足MVC的程序,将.java文件放在两个package里面,一个是model,另一个是view和controller,那么model里面的任何文件都不应该导入另外一个package。为什么不是3个packages? 因为虽然叫MVC但其实并没有必要刻意把View和Controller分开,毕竟两个合起来称作User Interface,甚至没有必要把view和controller放在不同的文件中。而且,各个不同的view也应该是相互独立的,换句话说,如果每一个view都是一个包含了自己所需要的controller的package的话,那么这些package之间也不应该相互导入,当然除了主窗口要导入所有的view和model之外。。。 正确的方法是,在model里面应该有一个public interface,每一个view都应该继承这个interface并通过model提供的函数向model注册自己。而model在内部数据发生任何变化的时候,都应该调用interface里面的函数来通知所有已经注册的view。这也是model唯一可能向view发出数据的地方。model必须提供完整的函数来满足各种view所需的数据并接收view发来的用户操作,而view也要在收到model通知的时候主动从model获取需要的数据并更新自己。而在用户进行任何操作的时候,view要尽量通知model并将变化的内容更新到model上。需要注意的是,自始至终应该只有一个model的实例在运行,这样是为了保证整个程序的数据是统一稳定的。 对于不熟悉JAVA的同学来说,Java Reference是非常好的学习资料。对于很多component和layout,reference里面都提供了一些tutorial来帮助理解。Component大都位于javax.swing下,而layout大多位于java.awt,还有一小部分位于javax.swing。事件和监听的类位于java.awt.event和javax.swing.event下。Eclipse是推荐的开发环境,它会帮助导入没有导入的包。对于一些需要大量数据的component,比如JTable, JList和JTree,他们都提供了model的interface,并有设置model的函数。可以通过implements这些model来实现对component数据的变化,也可以通过直接继承default model来只重载我们需要的部分。比如JTable有interface TableModel和class DefaultTableModel。 对于熟悉JAVA的同学来说,这两次作业一个星期就绰绰有余了。毕竟JAVA的debug简单,而且也不会有内存访问错误。对于不熟悉JAVA的同学来说,建议早点开始,这样有时间去看看reference,慢慢适应JAVA的图形开发。