本书是介绍使用可重用商务模式建立web应用程序的综合性、权威性的指导书籍。本书重点介绍了商务模式和数据库模式的建模方法以及集成系统的程序实现。\r\n\r\n 本书可供数据库系统分析与设计人员阅读和参考。\r\n
\r\n
Foreword xi \r\n\r\n Preface xiii \r\n\r\n Acknowledgments xvii \r\n\r\n About the Author xix \r\n\r\n Part One An Object-Oriented View on Persistence 1 \r\n\r\n Chapter 1 A New Generation of Software 3 \r\n\r\n 1.1 From Data to Information 3 \r\n\r\n 1.2 Improving Software Quality 4 \r\n\r\n 1.3 Databases Everywhere 4 \r\n\r\n 1.4 To Have and to Hold 5 \r\n\r\n 1.5 Concentrating on the Essence 5 \r\n\r\n 1.6 The Importance of Scalability 6 \r\n\r\n 1.7 Application Program Interfaces 7 \r\n\r\n 1.8 The Road to Follow 7 \r\n\r\n Chapter 2 The Database Community Today 9 \r\n\r\n 2.1 Walking among Dinosaurs 9 \r\n\r\n 2.2 Database Usage 10 \r\n\r\n 23 Database Users 10 \r\n\r\n 2.4 Designing Database Applications 11 \r\n\r\n 2.5 Relational Databases 12 \r\n\r\n 2.6 Client/Server Systems 15 \r\n\r\n 2.7 Distributed Software 18 \r\n\r\n 2.8 Problems with Traditional Systems 19 \r\n\r\n 2.9 4GL: The Solution? 20 \r\n\r\n 2.10 Object-Oriented Databases 21 \r\n\r\n 2.11 Preserving Openness 23 \r\n\r\n 2.12 Summary 24 \r\n\r\n Chapter 3 An Object-Oriented View on Database \r\n\r\n Applications 25 \r\n\r\n 3.1 Data-Driven Software Design 25 \r\n\r\n 3.2 Supporting Multiple Applications 28 \r\n\r\n 3.3 Object-Oriented Software Design 29 \r\n\r\n 3.4 The Object Model 30 \r\n\r\n 3.5 Example: Student Administration 31 \r\n\r\n 3.6 Business Models and Supporting Multiple \r\n\r\n Applications 34 \r\n\r\n 3.7 C++, Java, or Smalltalk: The Ultimate Answer? 35 \r\n\r\n 3.8 Building Reusable Software 38 \r\n\r\n 3.9 Toward Open Client/Server Applications 40 \r\n\r\n 3.10 Object Orientation and Client/Server Design 40 \r\n\r\n 3.11 User Interfaces 40 \r\n\r\n 3.12 Analogy between User Interfaces and Databases 41 \r\n\r\n 3.13 Object-Oriented or Relational? 43 \r\n\r\n 3.14 Persistence from a Different Angle 44 \r\n\r\n 3.15 Persistence and Separation of Concerns 44 \r\n\r\n 3.16 Safety Issues 46 \r\n\r\n 3.17 Summary 46 \r\n\r\n Part Two An Architecture for Object Persistence 47 \r\n\r\n Chapter 4 Making Objects Persistent 49 \r\n\r\n 4.1 Introduction 49 \r\n\r\n 4.2 Basic Requirements of a Persistence Framework 50 \r\n\r\n 4.3 Obtaining Scalability 50 \r\n\r\n 4.4 Interfacing with a Relational World: Problems \r\n\r\n to Conquer 51 \r\n\r\n 4.5 Abstracting the Database 57 \r\n\r\n 4.6 An Architecture for Object Persistence 58 \r\n\r\n 4.7 Summary 60 \r\n\r\n Chapter 5 Abstracting the Database 61 \r\n\r\n 5.1 A Persistent Container Class 61 \r\n\r\n 5.2 Basic Functionality of PSet 61 \r\n\r\n 5.3 Implementing the Persistence Architecture 63 \r\n\r\n 5.4 Resolving the Impedance Mismatch 65 \r\n\r\n 5.5 Reading and Writing Objects 71 \r\n\r\n 5.6 Direct Instances of PSet 73 \r\n\r\n 5.7 Searching for Objects 75 \r\n\r\n 5.8 Supporting Multiple Technologies 79 \r\n\r\n 5.9 Summary 81 \r\n\r\n Chapter 6 Encapsuiating Data Access 83 \r\n\r\n 6.1 Deriving from PSet 83 \r\n\r\n 6.2 Example: Class City 87 \r\n\r\n 6.3 Using Class ~i ty 93 \r\n\r\n 6.4 Member Objects 93 \r\n\r\n 6.5 Derived IM Resolvers 94 \r\n\r\n 6.6 Class Extension 99 \r\n\r\n 6.7 Compile-Time Decoupling 100 \r\n\r\n 6.8 Reuse and Migration to Other \r\n\r\n Technologies 104 \r\n\r\n 6.9 Summary 104 \r\n\r\n Part Three Implementing Business Models 105 \r\n\r\n Chapter 7 Designing Business Objects 107 \r\n\r\n 7.1 Developing a Simple Invoicing System 107 \r\n\r\n 7.2 Searching Compound Objects 116 \r\n\r\n 7.3 Object ID versus Primary Key 118 \r\n\r\n 7.4 Developing Generic IM Resolvers 121 \r\n\r\n 7.5 An OID-Based Reference Class 126 \r\n\r\n 7.6 Supporting Existing Database Layouts 130 \r\n\r\n 7.7 Versioning 131 \r\n\r\n 7.8 Stability of Program Code against Schema \r\n\r\n Changes 134 \r\n\r\n 7.9 Storing Multimedia Objects 135 \r\n\r\n 7.10 Efficiency 139 \r\n\r\n 7.11 Summary 145 \r\n\r\n Chapter 8 Inheritance of Persistent Objects 147 \r\n\r\n 8.1 Specialization: Using Inheritance for Reuse 147 \r\n\r\n 8.2 Generalization: Using Inheritance for \r\n\r\n Polymorphism 152 \r\n\r\n 8.3 Using Generalizations as Member Objects 158 \r\n\r\n 8.4 Inheritance in Relational Database Systems 162 \r\n\r\n 8.5 Designing Reusable Software Components 170 \r\n\r\n 8.6 Summary 173 \r\n\r\n Chapter 9 Associations 175 \r\n\r\n 9.1 Many-to-One Relationships 175 \r\n\r\n 9.2 Attributes versus Associations 176 \r\n\r\n 9.3 Collections: One-to-Many Relationships 178 \r\n\r\n 9.4 Associations and Reuse 186 \r\n\r\n 9.5 Many-to-Many Relationships 188 \r\n\r\n 9.6 A Closer Look at Associations 189 \r\n\r\n 9.7 Associations as Independent Entities 191 \r\n\r\n 9.8 Referential Integrity 197 \r\n\r\n 9.9 Summary 202 \r\n\r\n Chapter 10 Transaction Management and Concurrency \r\n\r\n Control 203 \r\n\r\n 10.1 The Transaction 203 \r\n\r\n 10.2 The ACID Test 203 \r\n\r\n 10.3 Transaction Management Exceeds the Database \r\n\r\n Level 205 \r\n\r\n 10.4 Concurrency Control: Locking 206 \r\n\r\n 10.5 Example: A Transaction Class 211 \r\n\r\n 10.6 Transactions in Relational Database Systems 212 \r\n\r\n 10.7 Using Transactions 214 \r\n\r\n 10.8 Nested Transactions 215 \r\n\r\n 10.9 Distributed Database Systems 217 \r\n\r\n 10.10 Other Levels of Concurrency 219 \r\n\r\n 10.11 Lock Notification through Call-Back Functions 221 \r\n\r\n 10.12 Summary 222 \r\n\r\n Chapter 11 The Front End 223 \r\n\r\n 11.1 Analogy between User Interfaces and Databases 223 \r\n\r\n 11.2 Separating the User Interface from the Business \r\n\r\n Model 223 \r\n\r\n 11.3 What to Put Where 229 \r\n\r\n 11.4 Navigating through Persistent Sets 229 \r\n\r\n 11.5 Summary 234 \r\n\r\n Chapter 12 Case Study: An Electronic Telephone Directory 235 \r\n\r\n 12.1 Project Definition 235 \r\n\r\n 12.2 Comparing Development Approaches 236 \r\n\r\n 12.3 Designing the User Interface 237 \r\n\r\n 12.4 The Database Model 240 \r\n\r\n 12.5 Designing the Business Model 240 \r\n\r\n 12.6 Comparing the Business Model and the Database \r\n\r\n Model 243 \r\n\r\n 12.7 Implementing the Business Objects 244 \r\n\r\n 12.8 Making Classes Persistent 250 \r\n\r\n 12.9 Impedance Mismatch Examples 257 \r\n\r\n 12.10 Implementing the User Interface 263 \r\n\r\n 12.11 Summary 275 \r\n\r\n Chapter 13 Toward Open Applications 277 \r\n\r\n 13.1 Third-Party Access to Your Application's \r\n\r\n Data 278 \r\n\r\n 13.2 Standard Report Generators and Query \r\n\r\n Tools 278 \r\n\r\n 13.3 Informationbases 281 \r\n\r\n 13.4 Interoperability with Other Applications 282 \r\n\r\n 13.5 Implementing an Informationbase 285 \r\n\r\n 13.6 Architecture for Next-Generation Software 286 \r\n\r\n 13.7 Summary 289 \r\n\r\n Chapter 14 Conclusion 291 \r\n\r\n Appendix DBtools-Based Implementation of Scoop 293 \r\n\r\n PSet 293 \r\n\r\n DataSet 294 \r\n\r\n IM_Resolver 294 \r\n\r\n Resolving Impedance Mismatch 295 \r\n\r\n Building the Select Statement 296 \r\n\r\n References 297 \r\n\r\n Index 301 \r\n
\r\n
随着计算机硬件性能的迅速提高和价格的持续下降, 其应用范围也在不断扩大. 交给计算机解决的问题也越来越难, 越来越复杂. 这就使得计算机软件变得越来越复杂和庞大. 20世纪60年代的软件危机使人们清醒地认识到按照工程化的方法组织软件开发的必要性. 于是软件开发方法从60年代毫无工程性可言的手工作坊式开发, 过渡到70年代结构化的分析设计方法. 80年代初的实体关系开发方法, 直到面向对象的开发方法.
面向对象的软件开发方法是在结构化开发范型和实体关系开发范型的基础上发展而来的, 它运用分类. 封装. 继承. 消息等人类自然的思维机制, 允许软件开发者处理更为复杂的问题域和其支持技术, 在很大程度上缓解了软件危机. 面向对象技术发端于程序设计语言, 以后又向软件开发的早期阶段延伸, 形成了面向对象的分析和设计.
20世纪80年代末90年代初, 先后出现了几十种面向对象的分析设计方法. 其中, Booch, Coad/Yourdon. OMT和Jacobson等方法得到了面向对象软件开发界的广泛认可. 各种方法对许多面向对象的概念的理解不尽相同, 即便概念相同, 各自技术上的表示法也不同. 通过90年代不同方法流派之间的争论, 人们逐渐认识到不同的方法既有其容易解决的问题, 又有其不容易解决的问题, 彼此之间需要进行融合和借鉴, 并且各种方法的表示也有很大的差异, 不利于进一步的交流与协作. 在这种情况下, 统一建模语言(UML)于90年代中期应运而生.
UML的产生离不开三位面向对象的方法论专家G. Booch. J. Rumbaugh和I. Jacobson的通力合作. 他们从多种方法中吸收了大量有用的建模概念, 使UML的概念和表示法在规模上超过了以往任何一种方法, 并且提供了允许用户对语言做进一步扩展的机制. UML使不同厂商开发的系统模型能够基于共同的概念, 使用相同的表示法, 呈现彼此一致的模型风格. 1997年11月UML被OMG组织正式采纳为标准的建模语言, 并在随后的几年中迅速地发展为事实上的建模语言国际标准.
UML在语法和语义的定义方面也做了大量的工作. 以往各种关于面向对象方法的著作通常是以比较简单的方式定义其建模概念, 而以主要篇幅给出过程指导, 论述如何运用这些概念来进行开发. UML则以一种建模语言的姿态出现, 使用语言学中的一些技术来定义. 尽管真正从语言学的角度看它还有许多缺陷, 但它在这方面所做的努力却是以往的各种建模方法无法比拟的.
从UML的早期版本开始, 便受到了计算机产业界的重视, OMG的采纳和大公司的支持把它推上了实际上的工业标准的地位, 使它拥有越来越多的用户. 它被广泛地用于应用领域和多种类型的系统建模, 如管理信息系统. 通信与控制系统. 嵌入式实时系统. 分布式系统. 系统软件等. 近几年还被运用于软件再工程. 质量管理. 过程管理. 配置管理等方面. 而且它的应用不仅仅限于计算机软件, 还可用于非软件系统, 例如硬件设计. 业务处理流程. 企业或事业单位的结构与行为建模, 等等.
在UML陆续发布的几个版本中, 逐步修正了前一个版本中的缺陷和错误. 即将发布的UML2.0版本将是对UML的又一次重大的改进. 将来的UML将向着语言家族化. 可执行化. 精确化等理念迈进, 为软件产业的工程化提供更有力的支撑.
本丛书收录了与面向对象技术和UML有关的十几本书, 反映了面向对象技术最新的发展趋势以及UML的新的研究动态. 其中涉及对面向对象建模理论研究与实践的有这样几本书:《面向对象系统架构及设计》主要讨论了面向对象的基本概念. 静态设计. 永久对象. 动态设计. 设计模式以及体系结构等近几年来面向对象技术领域中的新的理论知识与方法, 《用UML进行用况对象建模》主要介绍了面向对象的需求阶段. 分析阶段. 设计阶段中用况模型的建立方法与技术, 《高级用况建模》介绍了在建立用况模型中需要注意的高级的问题与技术, 《UML面向对象设计基础》则侧重于经典的面向对象理论知识的阐述, 《UML参考手册》列出了UML的所有术语和标准元素, 从语义. 表示法和用途等方面详尽地介绍了UML的构成和概念.
涉及UML在特定领域的运用的有这样几本:《UML实时系统开发》讨论了进行实时系统开发时需要对UML进行扩展的技术, 《用UML构建Web应用程序》讨论了运用UML进行Web应用建模所应该注意的技术与方法, 《面向对象系统测试:模型. 视图与工具》介绍了将UML应用于面向对象的测试领域所应掌握的方法与工具, 《对象. 构件. 框架与UML应用》讨论了如何运用UML对面向对象的新技术——构件-框架技术建模的方法策略, 《UML与Visual Basic应用程序开发》主要讨论了从UML模型到Visual Basic程序的建模与映射方法, 《XML程序的UML建模》讲解了如何将XML与UML结合, 创建动态的Web应用程序, 实现最优的B2B应用集成, 《构建可扩展数据库应用程序》介绍了商务模式和数据库模式的建模方法以及集成系统的程序实现, 《UML与并行分布式实时应用程序设计》对UML在并行分布式实时系统开发中的应用作了全面而详细的介绍, 尤其对面向对象方法解决此类系统特有的问题作了有针对性的讲解, 《UML与J2EE企业应用程序开发》系统介绍了使用J2EE开发企业级软件工程时, 将UML建模技术应用到软件开发各个阶段的方法.
介绍面向对象编程技术的有两本书:《COM高手心经》和《ATL技术内幕》, 深入探讨了面向对象的编程新技术——COM和ATL技术的使用技巧与技术内幕.
还有一本《Executable UML技术内幕》, 这本书介绍了可执行UML的理念与其支持技术, 使得模型的验证与模拟以及代码的自动生成成为可能, 也代表着将来软件开发的一种新的模式.
总之, 这套书所涉及的内容包含了对软件生命周期的全过程建模的方法与技术, 同时也对近年来的热点领域建模技术. 新型编程技术作了深入的介绍, 有些内容已经涉及到了前沿领域. 可以说, 每一本都很经典.
有鉴于此, 特向软件领域中不同程度的读者推荐这套书, 供大家阅读. 学习和研究.
北京大学计算机系 蒋严冰 博士