2008 面向对象分析与设计课程报告 指导老师:徐迎晓老师 学生助教:周尚晨 组长:罗璇(0461008) 组员:王力行(0371071),徐啸(0461051) 李欣(0461011),许彬(0461057
2008 面向对象分析与设计课程报告 指导老师:徐迎晓老师 学生助教:周尚晨 组长:罗璇(0461008) 组员:王力行(0371071), 徐啸(0461051) 李欣(0461011), 许彬(0461057)
January6208面向对象分析与设计课程报告 摘要: 在一个学期的面向对象分析和设计的课程中,徐老师以POS系统的分析和设计过 程为主线,形象地为我们讲述了面向对象分析和设计的理论知识,向我们介绍了面 向对象分析和设计的基本步骤和方法。通过一个学期的学习,我们已经对面向对象 分析和设计的理论体系有了比较深刻的理解,同时我们掌握了面向对象分析和设计 的基本方法和基本工具。同时,在一个学期的学习时间中,我们选取了一个基于面 向对象分析和设计的优秀的开源软件,将我们在课堂上学到的理论知识和工具与之 结合起来,分析这个开源软件的源代码中的面向对象分析和设计的思想,获取了大 量的第一手的经验。我们这个小组分析的是一个设计优秀的开源的网上论坛系统 Jive。在ive的分析和设计中,他大量地采用了面向对象的技术。有人曾经说过, 学习面向对象的分析和设计,jve论坛系统是不得不参考的一个作品。在这篇课程 报告中,我们将介绍详细Jve中面向对象分析和设计的思想,以及我们组的成员是 如何来分析这个系统,并且通过这样的分析,我们获得了哪些经验 软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 2 软件学院 04 级 摘要: 在一个学期的面向对象分析和设计的课程中,徐老师以 POS 系统的分析和设计过 程为主线,形象地为我们讲述了面向对象分析和设计的理论知识,向我们介绍了面 向对象分析和设计的基本步骤和方法。通过一个学期的学习,我们已经对面向对象 分析和设计的理论体系有了比较深刻的理解,同时我们掌握了面向对象分析和设计 的基本方法和基本工具。同时,在一个学期的学习时间中,我们选取了一个基于面 向对象分析和设计的优秀的开源软件,将我们在课堂上学到的理论知识和工具与之 结合起来,分析这个开源软件的源代码中的面向对象分析和设计的思想,获取了大 量的第一手的经验。我们这个小组分析的是一个设计优秀的开源的网上论坛系统 Jive。在 Jive 的分析和设计中,他大量地采用了面向对象的技术。有人曾经说过, 学习面向对象的分析和设计,Jive 论坛系统是不得不参考的一个作品。在这篇课程 报告中,我们将介绍详细 Jive 中面向对象分析和设计的思想,以及我们组的成员是 如何来分析这个系统,并且通过这样的分析,我们获得了哪些经验
January6208面向对象分析与设计课程报告 目录 1.前言 2.Jive论坛系统简介 3.Jive的源代码获取以及安装使用 31.源代码的获取… 32.Jive的安装和使用 321.jve的安装配置 32.2.Jⅳve的使用以疑难解答. 4.Jive源代码分析…… 7799 41.Jve的整体介绍 42.Jive功能需求分析 43.Jive中的缓存系统 4.31.使用缓存的动机 4.3.2.Jive中的缓存结构 4.3.3.Jve中的三层缓存结构 13 434.Jive缓存模块的小结… 44.Jive中的设计模式… 17 441.设计模式 44.2. ForumFactory与工厂模式 18 44.3.统一入口与 Single Ton模式 22 444.访问控制和 Proxy模式… 44.5.批量分页查询与迭代模式 5.结语 软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 3 软件学院 04 级 目录 1. 前言......................................................................................................................................... 4 2. Jive 论坛系统简介.................................................................................................................. 5 3. Jive 的源代码获取以及安装使用.......................................................................................... 6 3.1. 源代码的获取................................................................................................................. 6 3.2. Jive 的安装和使用.......................................................................................................... 7 3.2.1. Jive 的安装配置...................................................................................................... 7 3.2.2. Jive 的使用以疑难解答.......................................................................................... 7 4. Jive 源代码分析...................................................................................................................... 9 4.1. Jive 的整体介绍.............................................................................................................. 9 4.2. Jive 功能需求分析........................................................................................................ 10 4.3. Jive 中的缓存系统........................................................................................................ 12 4.3.1. 使用缓存的动机................................................................................................... 12 4.3.2. Jive 中的缓存结构................................................................................................ 12 4.3.3. Jive 中的三层缓存结构........................................................................................ 13 4.3.4. Jive 缓存模块的小结............................................................................................ 16 4.4. Jive 中的设计模式........................................................................................................ 17 4.4.1. 设计模式............................................................................................................... 17 4.4.2. ForumFactory 与工厂模式 ................................................................................... 18 4.4.3. 统一入口与 SingleTon 模式 ................................................................................. 22 4.4.4. 访问控制和 Proxy 模式........................................................................................ 25 4.4.5. 批量分页查询与迭代模式................................................................................... 30 5. 结语....................................................................................................................................... 39
January6208面向对象分析与设计课程报告 1.前言 徐老师这个学期为我们讲授了面向对象分析与设计的课程。这门课程采用的是 案例式的教学方法。整个课程以POS系统的开发和设计为主线,通过这样一个案 例,为我们深入浅出地讲述了面向对象分析和设计的理论体系 在这一个学期的时间中,在徐老师的指导下,以及在周尚晨助教的帮助下,我 们组对Jive开源论坛系统的源代码进行了分析。通过对源代码的认真分析,我们对 面向对象的分析和设计有了更加深刻的理解,并且理解了如何将面向对象分析和设 计的基本原则运用到具体实际中去。最终,我们小组完成了这篇课程报告,把我们 分析过程中的点点滴滴的心得和经验认真的记录下来 这篇课程报告的后续部分组织如下:首先,我们会对Jive论坛系统进行一个总 体的介绍;紧接着,我们将介绍如何安装使用Jve的论坛系统,以及如何才能获得 Jive论坛系统的源代码文件;我们还以设计模式如何在Jve论坛系统中广泛应用为 主,来介绍Jve论坛系统中面向对象分析和设计的精神;最后我们会对我们小组的 工作进行总结。 软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 4 软件学院 04 级 1. 前言 徐老师这个学期为我们讲授了面向对象分析与设计的课程。这门课程采用的是 案例式的教学方法。整个课程以 POS 系统的开发和设计为主线,通过这样一个案 例,为我们深入浅出地讲述了面向对象分析和设计的 理论体系。 在这一个学期的时间中,在徐老师的指导下,以及在周尚晨助教的帮助下,我 们组对 Jive 开源论坛系统的源代码进行了分析。通过对源代码的认真分析,我们对 面向对象的分析和设计有了更加深刻的理解,并且理解了如何将面向对象分析和设 计的基本原则运用到具体实际中去。最终,我们小组完成了这篇课程报告,把我们 分析过程中的点点滴滴的心得和经验认真的记录下来。 这篇课程报告的后续部分组织如下:首先,我们会对 Jive 论坛系统进行一个总 体的介绍;紧接着,我们将介绍如何安装使用 Jive 的论坛系统,以及如何才能获得 Jive 论坛系统的源代码文件;我们还以设计模式如何在 Jive 论坛系统中广泛应用为 主,来介绍 Jive 论坛系统中面向对象分析和设计的精神;最后我们会对我们小组的 工作进行总结
January6208面向对象分析与设计课程报告 2.jive论坛系统简介 Jive论坛系统是一个强大的、结构开放的、可定制化的社区开源产品。他支持 在论坛网站上进行动态的主题讨论。许多跨国企业中使用了ive的操作系统,用来 做产品支持社区、电子学习社区以及内部的协同环境。如著名的国际体育频道 ESPN、国际游戏公司电子艺界EA等公司都已经部署了jve论坛系统。如下图所示, 左图为ESPN体育频道网站上的NFL社区、右图为电子艺界公司的某款游戏的讨论 社区 Jive是一个开放的Java源代码项目。其目标是建设一个开放结构的,强壮的, 易于扩展的基于JsP的论坛。在其设计目标的指导下,其结构设计得非常得好,融 合了很多新的观念,比如 Design Pattern,可更换的skin,可插入Pug等等。Jve 允许在网站上进行线程化的讨论。它提供了性能优秀的用户定义的JsP文件(用 Jive的外壳)来完全改变论坛的外观、形象和功能。并提供了一个可植入的AP这 些AP提供诸如及时翻译、内容过滤或者几乎其它所有功能的先进特性。然而除此 之外还有很多的自由论坛,jve的独到之处是它的全部代码都用Java编写并且被 个专注的程序员群体热情的支持着。基本上,任何带有Java2的平台和其他任何带 有 Servlet21和JsP10的服务器都支持Jve 软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 5 软件学院 04 级 2. Jive 论坛系统简介 Jive 论坛系统是一个强大的、结构开放的、可定制化的社区开源产品。他支持 在论坛网站上进行动态的主题讨论。许多跨国企业中使用了 Jive 的操作系统,用来 做产品支持社区、电子学习社区以及内部的协同环境。如著名的国际体育频道 ESPN、国际游戏公司电子艺界 EA 等公司都已经部署了 Jive 论坛系统。如下图所示, 左图为 ESPN 体育频道网站上的 NFL 社区、右图为电子艺界公司的某款游戏的讨论 社区。 Jive 是一个开放的 Java 源代码项目。其目标是建设一个开放结构的,强壮的, 易于扩展的基于 JSP 的论坛。在其设计目标的指导下,其结构设计得非常得好,融 合了很多新的观念,比如 Design Pattern,可更换的 Skin,可插入 Plug 等等。Jive 允许在网站上进行线程化的讨论。它提供了性能优秀的用户定义的 JSP 文件(用 Jive 的外壳)来完全改变论坛的外观、形象和功能。并提供了一个可植入的 API,这 些 API 提供诸如及时翻译、内容过滤或者几乎其它所有功能的先进特性。然而除此 之外还有很多的自由论坛, Jive 的独到之处是它的全部代码都用 Java 编写并且被一 个专注的程序员群体热情的支持着。基本上,任何带有 Java2 的平台和其他任何带 有 Servlet2.1 和 JSP1.0 的服务器都支持 Jive
January6208面向对象分析与设计课程报告 3. Jive的源代码获取以及安装使用 31.源代码的获取 Jive是一款开放源代码的软件,因此你可以从jⅳe论坛的网站上获得他的源 代码。Jve论坛的网址是www.Jivesoftware.com。从Jive的网站上,我们可以 看到Jive论坛系统现在还被IBM、SUN、SAP、 ORACLE、 REDHAT这样的大型跨 国企业使用。从这一点我们可以看出jve确实是一款设计优秀的软件。 0·回函P如t色公,6·回队“目目 JIVE SOFTWARE learspace X clearspace he enterprise collaboration software people love to use Version 1.10 Released s jive forums Software News D O LISt hea◆SmrM fe tet at A redhat Zimbra 不过需要注意的一点是,从Jive5之后的版本,Jive开始了商业化的运营, 因此他不再开放最新的源代码。不过如果你对Jve最新的源代码感兴趣,你可 以下载到Jive的编译好的文件,并且反编译他。因为jve是用Java编写的,并 且代码没有经过混淆,所以反编译出来的代码具有很好的可读性。 软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 6 软件学院 04 级 3. Jive 的源代码获取以及安装使用 3.1. 源代码的获取 Jive 是一款开放源代码的软件,因此你可以从 Jive 论坛的网站上获得他的源 代码。Jive 论坛的网址是 www.JiveSoftware.com。从 Jive 的网站上,我们可以 看到 Jive 论坛系统现在还被 IBM、SUN、SAP、ORACLE、REDHAT 这样的大型跨 国企业使用。从这一点我们可以看出 Jive 确实是一款设计优秀的软件。 不过需要注意的一点是,从 Jive 5 之后的版本,Jive 开始了商业化的运营, 因此他不再开放最新的源代码。不过如果你对 Jive 最新的源代码感兴趣,你可 以下载到 Jive 的编译好的文件,并且反编译他。因为 Jive 是用 Java 编写的,并 且代码没有经过混淆,所以反编译出来的代码具有很好的可读性
January6208面向对象分析与设计课程报告 32.Jive的安装和使用 在课程报告的这一部分,我们将主要介绍Jve系统的安装配置过程以及使用 过程。 321Jive的安装配置 安装环境 windwos20005p3 omat503mysq32357并将 mysql, tomcat安装成功 二安装步骤 a)数据库安装, database目录中选择对应数据库如 jive mysql. sql 在你数据库服务器上建立数据库名Jdon方法: create database jdon; 导入 jive mysql.sq方法:修改 jive mysql.sq加入在第一行“ use Ive” 将 JIve msg.sql拷到bin下 b) Tomcat配置.用ib目录下的 mm. myst-2.0.14 bin. jar 作为」DBC驱动程序,将之拷贝到 tomcat/ common/ib下。重启Tom c)将 application目录下所有文件拷贝到你服务器 Tomcat应用目录下, 如 Tomcat/ webapps/ive下 d)编辑WEB-NF/ classes/jve_init. properties 将 jiveHome=C:\ VavasourcejivejiveHome改为你的jve的 jivHome 目录 e)进入http://localhost:8080/jive/admin/setup/设置 如果发现你缺少包,会提醒你。 f)设置数据库 g)"继续“到管理员账号设置 h)全部设置完成后,到管理登陆,这时你可以设置你的论坛了。 3.22jve的使用以疑难解答 7软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 7 软件学院 04 级 3.2. Jive 的安装和使用 在课程报告的这一部分,我们将主要介绍 Jive 系统的安装配置过程以及使用 过程。 3.2.1.Jive 的安装配置 一.安装环境 windwos2000Sp3,tomcat5.0.3,mysql3.23.57.并将 mysql,tomcat 安装成功. 二.安装步骤 a) 数据库安装,database 目录中选择对应数据库如 jive_mysql.sql 在你数据库服务器上建立数据库名 Jdon.方法:create database jdon; 导入 jive_mysql.sql 方法:修改 jive_mysql.sql,加入在第一行“use jive” 将 jive_mysql.sql 拷到 bin 下 b) Tomcat 配置. 用 lib 目录下的 mm.mysql‐2.0.14‐bin.jar 作为 JDBC 驱动程序,将之拷贝到 tomcat/common/lib 下。重启 Tom cat. c) 将 application 目录下所有文件拷贝到你服务器 Tomcat 应用目录下, 如 Tomcat/webapps/jive 下 d) 编辑 WEB‐INF/classes/jive_init.properties 将 jiveHome=C:\\javasource\\jive\\jiveHome 改为你的 jive 的 jivHome 目录 e) 进入 http://localhost:8080/jive/admin/setup/ 设置 如果发现你缺少包,会提醒你。 f) 设置数据库 g) ”继续“到 管理员账号设置 h) 全部设置完成后,到管理登陆,这时你可以设置你的论坛了。 3.2.2.Jive 的使用以疑难解答
January 6, 2 面向对象分析与设计课程报告] 在完成设置论坛后,我们就可以http://localhost:8080/jive/浏览论坛系 统了 时p 上图给出了一张Jive论坛系统的截图。可以看到Jve论坛的用户界面跟主 流的论坛系统基本类似,符合普通用户的使用习惯。Jive的使用方法也基本 上同普通的论坛系统类似。 如果新建一个论坛或则新发一张贴子会全部出现?????,方法 是修改\ Tomcat41 webapps Vive \ WEB- NFViveHome目录下的 jive config.x m文件,把 serverAl=dbc: mysql:/ localhost/Jive修改为“ serverAl=jdbc:m ysql:/ localhost//lve? useUnicode=true" character Encoding=gb2312”。如果管 理界面中区域设置是乱码(?)的话把 locale jsp中的lso88591改为gb2312 区域设置就不是乱码了。 软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 8 软件学院 04 级 在完成设置论坛后,我们就可以 http://localhost:8080/jive/浏览论坛系 统了。 上图给出了一张 Jive 论坛系统的截图。可以看到 Jive 论坛的用户界面跟主 流的论坛系统基本类似,符合普通用户的使用习惯。Jive 的使用方法也基本 上同普通的论坛系统类似。 如果新建一个论坛或则新发一张贴子会全部出现?????,方法 是修改 \Tomcat 4.1\webapps\jive\WEB‐INF\jiveHome 目录下的 jive_config.x ml 文件,把 serverURL=dbc:mysql://localhost/Jive 修改为“serverURL=jdbc:m ysql://localhost/Jive?useUnicode=true"characterEncoding=gb2312”。如果管 理界面中区域设置是乱码(??)的话,把 locale.jsp 中的 Iso8859‐1 改为 gb2312, 区域设置就不是乱码了
January6208面向对象分析与设计课程报告 4.jive源代码分析 Jive是一个开放的Java源代码项目。其目标是建设一个开放结构的,强壮的 易于扩展的基于JsP的论坛。在其设计目标的指导下,其结构设计得非常得好,融 合了很多新的观念,比如 Design Pattern,可更换的Skin,可插入 Plugin等等。在 报告的这一个部分,我们将对Jive的源代码进行分析。首先我们会介绍一下Jve的 整体结构;然后我们会介绍Jve论坛中的缓存系统是如何采用面向对象的分析与设 计方法的;最后我们将具体介绍设计模式是如何在Jve中得到淋漓尽致的运用的 41.jive的整体介绍 基于一个◎o的设计原则:面向接口编程,而不是针对实现编程。Jive在设 计的时候,把其大部分的基本对象都设计为接口或者抽象类。在Jve中,基本 的接口有Foum, ForumMessage, Forum thread, Group,User, Authorization 和 Query。我们可以很容易的从这些接口的名字来知道他们的功用,下面的类 图给出了这些类之间的一些静态关系 ≤ nterface≥ -relate 7 Authorization?????7 为什么会都是接口呢?这是基于扩展性考虑的。在Jve给出的实现中,所有 的这些接口, Forun, ForumMessage,User等等,都使用数据库来实现的, 条消息,或者一个用户对应于数据库中的一条消息Jive使用了 DbForum, DbForumMessage, DbUser等类来实现这些接口,通过」DBC来操作数据库,使 9软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 9 软件学院 04 级 4. Jive 源代码分析 Jive 是一个开放的 Java 源代码项目。其目标是建设一个开放结构的,强壮的, 易于扩展的基于 JSP 的论坛。在其设计目标的指导下,其结构设计得非常得好,融 合了很多新的观念,比如 Design Pattern,可更换的 Skin,可插入 Plugin 等等。在 报告的这一个部分,我们将对 Jive 的源代码进行分析。首先我们会介绍一下 Jive 的 整体结构;然后我们会介绍 Jive 论坛中的缓存系统是如何采用面向对象的分析与设 计方法的;最后我们将具体介绍设计模式是如何在 Jive 中得到淋漓尽致的运用的。 4.1. Jive 的整体介绍 基于一个 OO 的设计原则:面向接口编程,而不是针对实现编程。Jive 在设 计的时候,把其大部分的基本对象都设计为接口或者抽象类。在 Jive 中,基本 的接口有 Forum,ForumMessage,ForumThread,Group,User,Authorization 和 Query。我们可以很容易的从这些接口的名字来知道他们的功用,下面的类 图给出了这些类之间的一些静态关系: 为什么会都是接口呢?这是基于扩展性考虑的。在 Jive 给出的实现中,所有 的这些接口,Forum,ForumMessage,User 等等,都使用数据库来实现的,一 条消息,或者一个用户对应于数据库中的一条消息 Jive 使用了 DbForum, DbForumMessage,DbUser 等类来实现这些接口,通过 JDBC 来操作数据库,使
January6208面向对象分析与设计课程报告 之作为论坛的底层支撑。然而,有时候,或许我们并不想使用数据库,比如我 们想只是使用文件系统来作为论坛的底层支撑,这时候,我们需要做的只是编 码实现了 Forum等等接口的诸如 File froum, File ForumMessage等对象,然后嵌 入Jve中即可,原有的任何代码都可以不用改变!这就是面向接口编程的带来 的巨大的便利 4.2.Jive功能需求分析 Jive功能需求分析类似于一个新系统的需求分析。只有了解Jve系统实现了 哪些论坛功能,才能进一步研究和学习它是怎样巧妙、优雅地实现这些功能的。 山发贴 甘理咕子 当魏贴罕 用户管理 ive用例图 在Jve论坛系统中,用户角色和权限是紧密联系在一起的。主要分两大角色: 普通用户和管理员,具体的表现形式是通过权限组合来体现的。管理方面的权 限有: · SYSTEM ADMIN,系统管理员,可以管理整个系统 · FORUM_ADMN,论坛管理员,可以管理某个特定的论坛。 USER ADMIN和 GROUP ADM|N,用户和组管理员,可以管理一些特定用 户和用户组。 10软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 10 软件学院 04 级 之作为论坛的底层支撑。然而,有时候,或许我们并不想使用数据库,比如我 们想只是使用文件系统来作为论坛的底层支撑,这时候,我们需要做的只是编 码实现了 Forum 等等接口的诸如 FileFroum,FileForumMessage 等对象,然后嵌 入 Jive 中即可,原有的任何代码都可以不用改变!这就是面向接口编程的带来 的巨大的便利。 4.2. Jive 功能需求分析 Jive 功能需求分析类似于一个新系统的需求分析。只有了解 Jive 系统实现了 哪些论坛功能,才能进一步研究和学习它是怎样巧妙、优雅地实现这些功能的。 Jive 用例图 在 Jive 论坛系统中,用户角色和权限是紧密联系在一起的。主要分两大角色: 普通用户和管理员,具体的表现形式是通过权限组合来体现的。管理方面的权 限有: ·SYSTEM_ADMIN,系统管理员,可以管理整个系统。 ·FORUM_ADMIN,论坛管理员,可以管理某个特定的论坛。 ·USER_ADMIN 和 GROUP_ADMIN,用户和组管理员,可以管理一些特定用 户和用户组