本书讲述了将Java与UML相结合协同开发高质量Java应用程序的技术。\r\n 书中介绍了UML和RUP的基础知识,并示范了如何使用这些标准的面向对象方法来开发健壮的Java应用程序,以满足用户的需求。书中采用RUP和一个大型应用实例说明了软件开发的过程,并示范了如何建立合理的项目规划、收集用户的需求、用UML建立成功的Java设计、用UML类图和序列图来实现Java代码。实例程序演示了最新的Java技术,包括JSP、servlet和EJB 2.0等。\r\n 本书适用于中高级Java开发人员,特别适用于开发过程中大量使用UML的开发人员。
第1章 项目的困境\r\n\r\n1.1 令人沮丧的现实\r\n1.2 项目的困境\r\n1.2.1 迭代与增量式软件开发\r\n1.2.2 基于风险机制的软件开发\r\n1.2.3 迭代式软件过程模型\r\n1.2.4 迭代与增量式开发的结合:多维视图\r\n1.3 协同过程\r\n1.4 统一过程\r\n1.5 其他过程:XP\r\n1.6 统一建模语言\r\n1.6.1 UML在软件过程中的地位\r\n1.6.2 建模的实质\r\n1.6.3 UML图\r\n1.7 回顾与前瞻\r\n\r\n第2章 Java、面向对象分析与设计、UML\r\n\r\n2.1 Java是工业级开发语言\r\n2.2 Java与面向对象程序设计\r\n2.2.1 Java和类\r\n2.2.2 Java与复杂类型(Java引用类型)\r\n2.2.3 Java与消息传递\r\n2.2.4 Java与封装\r\n2.2.5 Java与继承\r\n2.2.6 Java与多态\r\n2.3 为什么选用UML和Java\r\n2.3.1 类图\r\n2.3.2 序列图\r\n2.3.3 组件图\r\n2.3.4 部署图\r\n2.3.5 可视化建模工具的支持\r\n2.4 回顾与前瞻\r\n\r\n第3章 启动项目\r\n\r\n3.1 建立项目视界\r\n3.1.1 过程模型\r\n3.1.2 项目视界的工作模板\r\n3.1.3 参与者\r\n3.1.4 事件清单和事件表\r\n3.1.5 业务规则的识别和分类\r\n3.1.6 事件捕获格式\r\n3.1.7 项目视界\r\n3.2 回顾与前瞻\r\n\r\n第4章 用例\r\n\r\n4.1 示例项目\r\n4.2 过程模型\r\n4.3 在用例中找到路径\r\n4.3.1 用例模板:第一节\r\n4.3.2 用例模板:第二节\r\n4.3.3 用例模板:第三节\r\n4.3.4 用例模板:第四节\r\n4.3.5 找到主路径\r\n4.3.6 找到备用路径\r\n4.3.7 找到异常路径\r\n4.3.8 常见的用例缺陷\r\n4.4 影子用例\r\n4.5 主路径的详细描述\r\n4.6 完成后的处理订单用例模板\r\n4.7 制定初步体系结构\r\n4.8 项目规划:增量和对增量的评估\r\n4.8.1 增量\r\n4.8.2 评估:问题\r\n4.8.3 评估:过程\r\n4.9 回顾与前瞻\r\n\r\n第5章 类\r\n\r\n5.1 细化阶段\r\n5.2 描述路径的细节\r\n5.3 类的识别\r\n5.3.1 UML类图的作用\r\n5.3.2 怎样建立一个好的类\r\n5.3.3 应用筛选规则\r\n5.3.4 类的类型\r\n5.4 关系\r\n5.4.1 建立关联\r\n5.4.2 创建角色\r\n5.4.3 确定重数\r\n5.4.4 高级关联\r\n5.4.5 泛化\r\n5.5 创建类图\r\n5.6 识别属性和操作\r\n5.6.1 属性\r\n5.6.2 操作\r\n5.7 接口\r\n5.8 对象图\r\n5.9 完成:分析模型\r\n5.10 回顾与前瞻\r\n\r\n第6章 建立用户界面原型\r\n\r\n6.1 建立早期原型\r\n6.2 收集需求\r\n6.2.1 用户界面原型\r\n6.2.2 参与者和用例边界\r\n6.2.3 用户界面构成\r\n6.2.4 用例的耦合\r\n6.3 第一次迭代\r\n6.3.1 屏幕结构图\r\n6.3.2 创建原型\r\n6.3.3 窗口组件\r\n6.3.4 使用屏幕对话框来获取用户反馈信息\r\n6.3.5 通过原型获取信息\r\n6.4 回顾与前瞻\r\n\r\n第7章 应用程序的动态元素\r\n\r\n7.1 细化阶段的下一步\r\n7.2 动态建模\r\n7.3 序列图\r\n7.3.1 主路径的序列图\r\n7.3.2 用例模板\r\n7.3.3 类的耦合与内聚\r\n7.3.4 备用路径的序列图\r\n7.3.5 将相关知识转移到类图中\r\n7.3.6 序列图预演\r\n7.4 协作图\r\n7.5 状态图\r\n7.5.1 Remulak Order类的状态图建模\r\n7.5.2 状态图的另一种视角\r\n7.6 活动图\r\n7.7 选择正确的图\r\n7.8 设计中的非UML扩展:使用情况矩阵\r\n7.8.1 事件/频率矩阵\r\n7.8.2 对象/位置矩阵\r\n7.8.3 对象/容量矩阵\r\n7.9 回顾与前瞻\r\n\r\n第8章 技术层面的问题\r\n\r\n8.1 细化阶段的下一步\r\n8.2 分离服务\r\n8.3 逻辑层与物理层\r\n8.4 分层策略\r\n8.4.1 六层之间的通信\r\n8.4.2 进程间通信体系结构\r\n8.4.3 层间通信体系结构\r\n8.5 事务作用域的管理\r\n8.6 将Internet包容到解决方案之中\r\n8.7 有关Web接口的更多问题\r\n8.8 Remulak Productions的执行体系结构\r\n8.9 回顾与前瞻\r\n\r\n第9章 数据持久性:对象的存储\r\n\r\n9.1 细化阶段的下一步\r\n9.2 面向对象概念与向物理设计的转换\r\n9.3 将类映射到表\r\n9.3.1 简单关联的映射\r\n9.3.2 将继承映射到关系数据库\r\n9.3.3 将聚合和复合映射到关系数据库\r\n9.3.4 将自反关联映射到关系数据库\r\n9.4 码结构与规范化\r\n9.5 使用可视化建模工具来生成DDL\r\n9.6 存储过程和触发器与面向对象项目\r\n9.7 数据转换服务层与数据访问服务层\r\n9.7.1 Javabean和本地JDBC支持\r\n9.7.2 JavaBean与本地JDBC数据管理\r\n9.7.3 EJB与数据管理\r\n9.8 商业性持久化服务层\r\n9.9 回顾与前瞻\r\n\r\n第10章 基础设施与体系结构回顾\r\n\r\n10.1 细化阶段的下一步\r\n10.2 基础设施问题与层间通信\r\n10.2.1 表示服务层\r\n10.2.2 业务环境服务层\r\n10.2.3 业务规则服务层\r\n10.2.4 协作的类:边界类、控制类和实体类\r\n10.3 体系结构的部署视图\r\n10.4 回顾与前瞻\r\n\r\n第11章 构建解决方案:Servlet,JSP和JavaBean\r\n\r\n11.1 细化阶段的下一步\r\n11.2 建立体系结构原型:第一部分\r\n11.2.1 初始化环境\r\n11.2.2 环境的设置\r\n11.2.3 调用Servlet\r\n11.2.4 用于Remulak的Servlet:代理服务\r\n11.2.5 用于Remulak的Servlet:响应操作请求\r\n11.2.6 用于Remulak的JSP\r\n11.3 建立体系结构原型:第二部分\r\n11.3.1 Remulak控制器与初始操作\r\n11.3.2 Remulak事务管理:由程序员进行\r\n11.3.3 Remulak控制器与后续操作\r\n11.4 建立体系结构原型:第三部分\r\n11.4.1 实体组件\r\n11.4.2 数据访问对象\r\n11.4.3 各个组件之间的相似性\r\n11.5 回顾与前瞻\r\n\r\n第12章 构建解决方案:Servlet,JSP和EJB\r\n\r\n12.1 细化阶段的下一步\r\n12.2 建立体系结构原型:第一部分\r\n12.2.1 初始化环境\r\n12.2.2 可视化建模:在项目中的任务\r\n12.2.3 可视化建模:在程序代码生成中的任务\r\n12.2.4 回顾体系结构的构建\r\n12.2.5 修改代码生成参数\r\n12.2.6 最后一遍检查属性与操作\r\n12.2.7 将类转换为EJB\r\n12.3 生成代码\r\n12.4 建立体系结构原型:第二部分\r\n12.4.1 EJB入门\r\n12.4.2 EJB回调机制\r\n12.4.3 使用EJB进行工作\r\n12.4.4 EJB序列图\r\n12.4.5 EJB事务管理\r\n12.5 建立体系结构原型:第三部分\r\n12.5.1 向生成的代码添加逻辑\r\n12.5.2 标记的魔力\r\n12.5.3 编译EJB代码\r\n12.5.4 建立一个简单的客户端来测试组件\r\n12.6 CMP实现的增强\r\n12.6.1 添加更多的用例路径\r\n12.6.2 对JSP的修改\r\n12.6.3 添加表示地址的JSP页面\r\n12.6.4 对Servlet的修改\r\n12.6.5 对用例控制器的修改\r\n12.7 创建BMP实现\r\n12.8 必由之路\r\n12.8.1 技术选择\r\n12.8.2 项目的开发过程\r\n12.9 回顾与前瞻\r\n\r\n附录A 使用统一过程的项目规划\r\n\r\nA.1 计划\r\n\r\n附录B 使用协同过程的项目规划\r\n\r\n附录C 根据用例对项目进行评估\r\n\r\nC.1 对参与者赋予权重\r\nC.2 对用例赋予权重\r\nC.3 衡量技术因素的权重\r\nC.4 衡量项目参加者的权重\r\nC.5 用例点数\r\nC.6 项目评估\r\n\r\n附录D 示例项目的输出\r\n\r\nD.1 用例的定义\r\nD.1.1 处理订单用例\r\nD.1.2 维护订单用例\r\nD.1.3 维护商品目录用例\r\nD.1.4 产品配送用例\r\nD.1.5 开发票用例\r\nD.1.6 维护联系用例\r\nD.1.7 决策支持用例\r\nD.2 主路径的任务步骤\r\nD.2.1 处理订单的主路径\r\nD.2.2 维护订单的主路径\r\nD.2.3 维护商品目录的主路径\r\nD.2.4 货物配送的主路径\r\nD.2.5 开发票的主路径\r\nD.2.6 维护联系的主路径\r\nD.2.7 决策支持的主路径\r\nD.3 数据库支持\r\n\r\n附录E BEA WebLogic应用服务器\r\n\r\n参考书目
本书描述了当前用来建模并开发具有工业水准的Java应用程序的最强大方法:统一建模语言(Unified Modeling Language, UML), 它在1997年被对象管理组(Object Management Group, OMG)采纳为标准. 本书通过一个实例应用阐述了一种项目生命周期与软件过程模型(Rational的统一过程), 从需求收集. 用例的使用, 直到通过类图和序列图来创建Java代码实现应用程序. 该实例应用使用了两种不同的体系结构, 读者可以根据自己的特定需求进行选择. 第一种体系结构使用Java servlet. Java服务器页面(JavaServer Pages, JSP)和JavaBean, 这些都运行在可免费获得的Apache Tomcat服务器上. 第二种体系结构使用Javaservlet. Java服务器页面(JSP)和Enterprise JavaBeans 2. 0(EJB), 这些都运行在一种可通过商业途径获得的应用服务器上.
本书的写作动机
笔者花费了许多年, 才领会到编写程序只不过是一种可以通过学习而获得的战术技巧. 使用像Java这样的语言编程一个熟练工人即可胜任, 而以一种聪颖的方式捕获客户的需求. 组织必要的资源, 并使开发出的软件成为具有内聚结构的产品, 这些技术则需要具有战略眼光的能工巧匠完成.
大多数Java书籍都未从“大规模”的角度上考虑过Java, 其视角都是从小处入手, 涵盖的内容都是像JavaBean. servlet和JSP之类单一的Java扩展功能. 尽管这些视角也都是必要的, 但不幸的是, 几乎没有人涉及到项目规划. 软件过程和用于建立企业级Java应用的方法学. 这是一个难于探讨和讲解的主题, 因为关于软件过程的整个主题激起了大量深入的争论和意见. 在笔者许多同事和前一本书(Developing Applications with Visual Basic and UML)的读者的支持鼓励之下, 笔者对Java语言也进行了一个类似的项目.
本书所面向的读者
对于任何人来说, 只要希望成功地建立能够禁得起时间考验的Java应用程序, 本书都是适用的. 本书提供了精确的路线图, 可供任何人实现下列目标:
· 回顾两种过程:一种称作统一过程, 由Rational Software公司提出, 可通过商业途径获得, 另一种来自笔者本人的经验, 称作协同过程. 本书的重点放在统一过程方面.
·建立一个合理的项目规划(在附录A中深入介绍).
·以置信度来评估项目, 而不是使用经验法则.
·使用UML用例来理解并描述应用程序的需求.
·根据UML类图和序列图来建立合理的设计.
·可视化建模工具(如Rational Software的Rose), 不仅用来创建和跟踪UML图, 而且用来生成框架组件的代码. 尽管笔者认定, 自动化代码生成过程是致使项目成功的一个重要因素, 但这并不是绝对的.
·使用例如JSP和servlet等体系结构来建立服务器端的Java功能, 并用JavaBean或EJB
2. 0来管理业务规则.
· 以进化式的途径来产生项目的代码, 演示了各种不同的技术选择:(1)servlet. JSP和JavaBean, (2)servlet. JSP和由组件管理的持久性(bean—managed persistence, BMP), (3)servlet. JSP和容器管理的持久性(container—managed persistence, CMP).
·分别在开放源码产品如Apache Tomcat服务器和商业应用服务器产品如BEA WebLogic上部署Java应用程序, 并调查所带来的好处.
任何在当今建立Java应用程序的人都需要阅读本书.
使用本书需要的预备知识
我们从阅读本书不需要了解哪些知识开始, 也许这样做的效果是最好的. 首先, 您不需要了解任何有关UML的东西. 笔者会介绍UML方面的必要知识, 另外更重要的是它们与Java语言结构之间的关系. 尽管UML是通过九种独立的图表达的, 但能使您受益的, 主要是其中的一个核心特性集.
其次, 您不需要面向对象概念方面的正式背景(有这方面的背景知识当然更好). 在第2章中会讨论标准的对象结构.
第三, 您应该对Enterprise JavaBean有些基本的了解. 要彻底掌握EJB, 有许多详细讲述这方面内容的书籍, 您可以选择一本来阅读. 本人喜欢的一本书是Richard Monson—Haefel的Enterprise JavaBeans, 由O Reilly出版. 此外, 熟悉JSP也是有好处的. 对于这个主题, 本人喜欢的一本书是Hans Bergsten的Java Server Pages, 也是由O Reilly出版的.
本书假定您已经对Java有相当的了解, 能够使用该语言进行工作. 对于Java程序员, 无论经验多少, 阅读本书都可以受益. 笔者假定您已经了解了基础的Java语言结构, 因此在本书中并未涵盖这方面的内容. 在第2章中, 笔者确实简短回顾了Java对面向对象技术的一些支持, 但只是作为其他与UML有关主题的一个基础. 如果您没有接触过Java, 也可以买这本书, 在您对Java程序设计语言有了一定的认识之后, 即可阅读本书.
本书的内容集中在最主流的Java技术和产品上, 这些都是用来构建产品级应用程序的. 在笔者开始写作本书时, 曾计划涵盖所有种类的Java技术(即, 与servlet或JSP进行交互的applet. Java应用程序). 但笔者很快就明白这个计划有问题, 因为从体系结构角度看来, 笔者和同事的大多数客户几乎都是从一个模子中出来的, 其中包括了前端的一个轻量级客户浏览器(带有最低限度的JavaScript支持, 用于语法编辑), 后端包括截取浏览器请求的Web服务器. 装载了业务规则的某种容器产品, 以及作为业务规则代理的servlet和/或JSP. 这些业务规则是以JavaBean或EJB的形式实现的. 容器产品有很多可选的种类, 从类似Apache Tomcat的开放源码解决方案, 到商业产品.
· 笔者知道的两个最大的商业应用服务器厂商分别是BEA (产品是WebLogic)和IBM(产品是WebSphere), 这并非意味着没有其他好的商业性容器产品, 但这两个厂商已经占据了市场上最大的份额. 本书会利用轻量级的客户端技术(不使用applet或Java应用程序), 和一个运行servlet和JSP的Web服务器, 后者会向JavaBean (Tomcat)或商业应用服务器中的EJB(会话组件和实体组件)发送消息.
就Web服务器而论, 笔者决定使用BEA的WebLogic作为应用服务器. 如果您在使用另一个厂商的应用服务器, 的EJB标准解决了许多二义性问题, 使得组件真正做到了在各个厂商的实现上可移植. 因此无论您选择哪个EJB厂商, 都可以使用本书的代码.
如果说您在阅读本书之后能够了解有关EJB的所有技术, 这是不可能的. 如果您已经了解了EJB, 那么本书会帮助您将它们放置到一个合理可靠的体系结构设计中. 本书的重点是讨论使用Java语言启动. 开发和实现一个软件项目时, 所用的记号(UML)和过程(统一过程和协同过程). 您会由始至终地看到一个应用程序的开发过程, 从需求收集到实现, 这会使您受益匪浅, 也是本书的关键目标. 这就是笔者写作的重点所在.
本书的结构
下面对备章的内容进行概述.
第1章:项目的困境
第1章回顾了软件开发的当前状态, 笔者就软件开发的发展历程提出了自己的看法. 此外它还回顾了迭代和增量式软件开发的概念, 并概述了Rational Software的统一过程和笔者的协同过程方法学. 另外, 本章顺带讨论了UML的主要组成部分, 这方面的内容会在后面深入讨论.
第2章:Java. 面向对象分析与设计. UML
第2章讨论了Java对封装. 继承和多态的实现, 讲述了采用Java作为开发环境的好处, 然后将UML映射到各种Java语言结构. 重点包括UML图到Java类和接口的映射, 将用例的路径映射到Java类, 以及将组件图映射到Java类和Java包.
第3章:启动项目
第3章探讨了本书所用的项目实例:Remulak Productions. 这个虚构的公司专门销售音乐设备, 他们需要一种新的订单输入系统. 本章介绍了项目规划, 以及一种工具, 称作事件表, 它有助于快速确定应用程序的功能特性. 下一章将事件映射到了第一种UML模型, 用例.
第4章:用例
第4章讨论了用例, 它是主要的UML图之一, 其中包括了一种用来以文档形式编写用例的模板. 参与者及其角色都是在用例中定义的. 本章还讨论了用例路径的概念, 以及项目的初步实现体系结构.
此外还讨论了一种通过用例途径来评估项目的方法.
第5章:类
第5章探讨了类图, 它是各种UML图的中枢. 它提供了一些提示消息, 可以识别出所选的哪些类是好的, 并定义各种类型的关联. 它还涵盖了业务规则的分类, 以及如何将这些规则转换为类的属性和操作. 最后, 它讨论了可视化建模工具的使用, 这种工具可以作为一种手段, 来更好地管理所有的UML图.
第6章:建立用户界面原型
第6章讨论了各个用例对用户界面的需求. 它首先开发出用户界面的流程原型, 最后得到图形化的原型. 最后, 它将在设计原型期间了解到的信息映射到UML图.
第7章:应用程序的动态元素
第7章讨论了UML支持的动态模型, 深入探讨了两种关键的图, 即通常称为交互图的序列图和协作图. 然后, 这些图又直接联系到在用例中找到的路径. 所讨论的其他动态图包括状态图和活动图.
第8章:技术层面的问题
第8章讲述了按照模型来分隔逻辑服务的重要性. 它探讨了特定于Remulak Productions项目实例的技术解决方案, 包括分布式的解决方案和使用HTML表单. JSP. servlet的Internet解决方案. 还探讨了业务规则的容器, 讨论的内容包括JavaBean和EJB.
第9章:数据持久性:对象的存储
第9章探讨了将类图转换为关系设计的必要步骤, 要求这种设计能够被Microsoft SQL Server和Oracle数据库支持. 其中提供了一些经验法则, 用于处理类继承以及向RDBMS转换时可能的设计方案. 本书提供了各种解决方案, 从使用JavaBean和JDBC来自行实现持久性, 到利用EJB 2. o标准中由容器管理的持久性(CMP)功能, 后者排除了应用程序编写SQL或控制事务的所有需求. 本章介绍了值对象的概念, 它可以减少网络流量, 还有数据访问对象的概念, 它封装了SQL调用.
第1. 0章:基础设施与体系结构回顾
第10章完成了实现应用程序的各个层次所必需的设计. 它还介绍了层次之间的通信机制, 以及可能的备选方案. 各个类都委托给三种类型之一, 实体. 边界或控制. 这些类型用作设计实现的基础, 它们也可以作为解决方案, 来提供备选的部署策略.
第11章:构建解决方案:Servlet. JSP和JavaBean
第11章建立了用于Remulak的第一种体系结构原型, 它不依赖于EJB, 它以维护联系用例作为基础, 各种组件都是在此之上建立的. 体系结构原型的主要目的就是, 通过消除体系结构方面的未知点, 来及早降低项目的风险. 本章使用了Apache Tomcat服务器, 并介绍了用户界面和用例控制类的概念.
第12章:构建解决方案:Servlet. JSP和EJB
第12章开始使用Rational Rose来生成EJB组件. 其中提供了EJB方面的入门知识, 并彻底讨论了EJB环境中事务管理的选择. 会话组件用作用例控制器. 解决方案中既包括了由容器管理的持久性(CMP), 也包括由组件管理的持久性(BMP). 利用第11章创建的数据访问对象, 对于BMP实现的成功非常关键.
最新情况与各种信息
本人非常幸运, 能够与美国. 欧洲. 亚洲. 南美等地的顶级公司和组织一同工作. 在笔者的多次旅行中, 在如何使用和实施UML来建立更有弹性的应用程序方面, 总是会碰到许多富有创见性的思想, 而所用的语言则不仅仅是Java, 还包括C++. C#和Visual Basic.
请访问笔者的网站www.jacksonreed. com, 其中有笔者提供的培训和咨询服务的最新消息, 以及本书中的全部源代码. 读者可以通prreed@jacksonreed. com与笔者联系.