《UML面向对象设计基础》目录—导读

简介:


39c9a9b0b6aea509bead3712ffaefd6ebad6f85f

版权声明
UML面向对象设计基础
Authorized translation from the English language edition, entitled Fundamentals of Object-Oriented Design in UML, 1E, 9780201699463 by Meilir Page-Jones, published by Pearson Education, Inc, publishing as Addison-Wesley Professional, Copyright © 2000 by Addison-Wesley.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.

CHINESE SIMPLIFIED language edition published by PEARSON EDUCATION ASIA LTD., and POST & TELECOMMUNICATIONS PRESS Copyright © 2012.

本书中文简体字版由Addison-Wesley授权人民邮电出版社出版。未经出版者书面许可,对本书任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。

内容提要
UML面向对象设计基础
本书是关于面向对象软件设计的基本概念、符号表示、术语、准则以及原理的书籍。

本书第一部分(第1章和第2章)介绍了面向对象的基本概念以及面向对象的发展史。第二部分(第3章至 第7章)较全面地介绍了统一建模语言(Unified Modeling Language,UML),UML已成为描述面向对象设计符号的事实上的标准。第三部分(第8章至第14章)较深入地介绍面向对象设计的原理。本书最后一章(第15章)分析软件构件的特点,包括优点和缺点。

本书针对采用面向对象技术的程序员、设计人员、系统工程师或技术经理,无论您是面向对象技术的初学者,还是具有一定面向对象技术经验的高手,都将从本书中受益匪浅。

致谢
UML面向对象设计基础
如果专门致谢所有应该感谢的人,那么致谢词可能要延伸到94页。因此,我对多年来鼓励、帮助过我的众多同事一并感谢。但对于一些朋友,我要给予特别致谢:

对本书的第一版或第二版提出宝贵意见的专家有:Jim Beaver,Bob Binder,Ken Boyer,Tom Bragg,Tom Bruce,Martin Fowler,Alan Hecht,Mike Frankel,Cris Kobryn,Jim Odell,Tim Ottinger,Ben Sano,Mike Silves,Jess Thompson,Lynwood Wilson及Becky Winant。他们的建议非常有用,有些建议令人沉思,而有些建议则令人鼓舞。这些建议使我避免了更多的愚蠢错误并进行了许多重大改进。感谢他们的鼓励,使我不断地改进本书。

Kendall Scott对本书手稿所作的特别的工作。

Steve Weiss(与Walter Back一起)早在面向对象开始流行以前就劝说我转到面向对象领域。没有Steve,我不可能从事本书的工作。

Larry Constantine是实施软件设计原则的鼻祖。

健谈的、多才多艺的Stan Kelly-Bootle给予我很大的支持(不久我将回报你的支持)。

Bert Weedon,他惊人的音乐艺术天赋和在计算天体物理学中的科学天赋一样出色。

Ed Yourdon及Tim Lister长久以来的信任。

Bertrand Meyer 使我不断获得灵感的源泉。
Paul Becker多年的鼓励。

Roland Racko与我分享了其许多的观点。

我阅读过的有关面向对象的书的97位作者。

Miller Freeman 公司的《软件开发杂志》(Software Development magazine)”的Jolt Panel,他授予我在Dorset House出版的本书第一版1996年度产品奖。

Nuno Andrade,Michael Richter,Michael Lumelsky,David McClintock,Wendy Eakin及Dorset House Publishing出版公司的其他人员,这些高水平的专家们工作勤勉努力和掌握的最新技术。他们克服了相当大的困难,彻底消除了原稿中的具有二义性的模糊词语、以动名词开头难以理解的长句子、指代不清(比如this one)、牵强附会(甚至词不达意)、不一致的时态,以及那些华丽而无助于产生一个专业论著的辞藻。再次感谢朋友们的出色工作!

Cater Shanklin及Addison Wesley Longman的职员,由于他们的努力才将本书的这一版本推向市场。

与我一起分享他们的经验的遍及世界各地的咨询客户和研究会的学生们。

我的家人在此书撰写时的隐居式生活给予了极大的耐心。

最后,特别感谢下面两位业界资深人士:Sid Dijkstra教授对软件过程做出了不可估量的贡献;Kedney Dogstar,传奇的编程牛仔(Legendary Coding Cowboy),他是Extreme Debugging的发明者,他在Bramston Capra Consulting咨询公司时利用午间编写的程序比我们大多数人一生编写的程序还要多。

序言
UML面向对象设计基础
对象已成为当今软件中普遍存在的构件,面向对象也成为软件工程实践中普遍使用的技术。种种有关面向对象的书早已面市,但当本书的第一版What Every Programmer Should Know About Object-Oriented Design(《面向对象设计程序员必读》)出版时,该书立即被公认为出自一位当今软件开发中最明智的思想家和通俗作家之手的、新颖而有独创意义的著作。

在全新的重新修订并重新命名的第二版中,扩充了基础内容,增加了素材,修改了符号表示以符合最新的潮流。本书融入了面向对象开发的新思想,从对于继承使用的剖析,到如何针对对象类之间疑难数据关系建模。Page-Jones不愧为最新智慧的代表。

作为咨询专家和设计者,作者几十年来一直工作在第一线,本书的每一页倾注了作者的经验和教训。我曾与他在同一“战线”中工作,特别是最近在一个大型项目中一起合作,初始的用例(use-case)模型中的用例就超过340个。随着读者对本书的学习,您将看到作者还是一个实用主义者,对基础和细节的注重反映在他的分析和设计研究及其作品中。

事实上Meilir 还是一位有天赋的教师,他擅长澄清复杂、难以理解的概念,形成一个概念上的模式使其变得清晰。他可以列举一大堆问题并将其包揽在一个原形例子中,使得一切都变得十分明朗,让其他人无不为之感叹:为什么我们没想到。以面向对象的方法考虑农场牛奶问题,挤奶的时间到了你会做什么呢?给Cow对象发送一个消息让其挤奶还是给Milk发送一个消息让它自己脱离Cow?瞬间的反映及事件管理的需求使协调挤奶的过程变得十分清晰。他的许多阐述例证已成为面向对象中广为流传的一部分内容,例如来自会议讨论组记录的例子,以及“Person Owns Dog”的难题。

本书恰当地说明了如何从长远利益出发建立好的设计原则,这些原则已在实际中广泛使用,并在最先进的语言和挑战环境中开发面向对象系统被采纳。建立在这种基础上,本书基于实际经验解决复杂的实际问题,通过浓缩的例子所介绍的经验,为新老开发者设计更好的面向对象解决方案提供了指导。

Meilir作为一位咨询专家、一位教师或一位方法学家,在面向对象开发方面积累了丰富经验。他是Synthesis方法的创建者之一,这种方法是早期的面向对象分析和设计的语义方法之一,并且,在建立流行的Uniform Object Notation(统一对象符号表示法)中我们是合作者,这种方法可以在当今众多的面向对象方法和表示法中找到。我们的研究成果甚至得到了Unified Modeling Language (统一建模语言,UML)的认可,UML已经成为事实上的工业标准,本书采用该标准对样例进行说明。

在这里可以找到掌握面向对象设计基础需要的所有内容。不仅包括清晰易懂的设计和建立对象的基本技术,而且包括丰富的范例,详细地讨论一个好的面向对象系统应该怎样而不应该怎样。

Larry Constantine

1999年9月

Massachusetts,Rowley

前言
UML面向对象设计基础
人们评论本书时向我提出了几个问题,你可能也关心这些问题。下面我回答其中的一些问题。

我是一名程序员。为什么要关心设计?

每个人在编写代码的同时,也在设计(design)代码,不管是好是坏,还是有意或无意。我写本书的目标是鼓励OO专业人士(这类人士越来越多)有意识地在编程之前建立良好的面向对象设计。为此,我介绍符号表示法、面向对象的原则以及术语,使你及你的同事可以对设计的系统进行评估和讨论。

本书将教会我们OO的编程语言吗?
回答是否定的。尽管我偶尔会提到程序,但本书不是关于面向对象编程的。

我正在学习面向对象语言,本书会有帮助吗?

回答是肯定的。如果你目前还不了解一种面向对象语言,可以从第1章中获得面向对象的知识。了解面向对象的主要概念可以加快你对一种面向对象语言的学习,并且能增强你跨入陌生领域的信心。本书后面有关如何设计的章节也将有助于使你以前的程序运行得更好。

另一方面,如果你是一位有经验的面向对象程序员,可以通过本书的第二和第三部分提高设计水平,这点对于成为全面的、专业的软件设计者或编程者是至关重要的。

为什么不用C++编写本书的程序例子?
本书中的程序采用我自己发明的语言编写,该语言融合了4种流行的语言:C++,Eiffel,Java及Smalltalk。我这样做是因为有两类程序员:一类是熟悉C++的,一类是不熟悉C++的。如果你是C++ 的爱好者,会发现本书的程序可以很轻松地转成C++程序。如果你不熟悉C++,可能会厌烦其神秘的语法。有些例子是用Java写的,这是因为非Java程序员接受Java比非C++程序员接受C++要容易些。我希望无论你的编程语言是什么,本书都能适合你。

为什么本书不是针对窗口、图标及菜单设计的?
原因有两个:其一,我不认为面向对象只适用于图形用户界面的设计;其二,在市场上有许多专门针对面向对象窗口设计的书。我希望本书能包括一些其他面向对象的图书没有涉及到的内容。在第7章提供了窗口导航设计的内容。

本书是有关方法学的吗?
回答是否定的。我们知道,开发方法学的内容比设计要多得多。例如,方法学还包括需求分析、库管理等。而且,真正的方法学应该解释各种开发活动是如何有机地结合在一起。内容很多!

因此,我不打算将本书写成和其他许多有关面向对象的书一样内容松散,而集中于一个主题:面向对象设计。

你说了本书许多不涉及的内容,但本书涉及哪些内容呢?
本书主要涉及面向对象软件设计的基本概念、符号表示、术语、准则以及原理。面向对象软件是由对象以及其所属的类构成的软件。一个对象是一个软件构件,其操作(类似函数或过程)与一系列变量(类似数据)有关。类实现了一种类型,它定义属于该类的一组对象。

上述朴素的语句蕴藏着对于软件设计者和编程者非常有用的内涵,由此引出了继承、多态性及二次设计等的设计概念。但由于你问了一个特定的问题,所以我给你一个专门的回答。

本书第一部分(第1和第2章)介绍面向对象。第1章综述了主要概念,并揭开了“多态性”、“一般性”及其他所有OO行话的神秘面纱。第2章将面向对象置于以前的软件开发框架中。如果你已经熟悉面向对象(也许用面向对象语言编过程序),那么可以跳过第一部分。

第二部分(第3至第7章)介绍有关Unified Modeling Language(统一建模语言,UML)的内容,UML已成为描述面向对象设计符号的事实上的标准。此外,第二部分还说明了许多可以在面向对象系统中找到的结构。第3章介绍用UML描述类及其属性和操作。第4章介绍用UML表示关联、聚合、组合对象,以及子类和超类的层次。第5章说明如何用UML表示消息(顺序的和异步的),第6章介绍用UML描绘状态图。第7章总结UML用于系统结构和人机交互界面的窗口的内容。

第三部分(第8至第14章)较深入地介绍面向对象设计的原理。第8章讲述共生性的关键概念及2级封装。第9章探讨各种类所属的域并描述不同的类的内聚程度。第10、11章是第三部分的主要内容,将状态空间和行为的概念应用到既合理又可扩展的类层次结构。

第12章提供了一些轻松的调节剂,从现实世界中检验设计,既有精巧的设计也有可笑的设计(第12章确实列举了设计者有关继承和多态性的可笑设计)。第13章给出一些如何组织给定类操作的方法,并说明提高可重用性和可维护性设计的技术,如混合类和操作环。

第14章触及一个令人头痛的问题:“如何设计一个好的类?”为回答这个问题,第14章描述了从可怕的到美妙的各种类接口。具有典型接口的类易于进行抽象数据类型的实现。如果类的设计遵守前面几章介绍的基本原理,这样的类更具有健壮性、可靠性、可扩展性、可重用性和可维护性。

作为本书结束的第15章分析了软件构件的特点,包括优点和缺点。在商用应用软件的面向对象开发过程中,回顾了在前面几章中介绍的一些面向对象原理。

尽管我在主要的论述中增加了丰富的例子和习题,但必须承认第三部分中有些内容比较难。但不管怎样我不想弱化重要问题。面向对象设计的某些方面内容是比较难的,值得一提以免引起误解。

本书包括了面向对象设计的所有内容吗?
我对此深表怀疑。每天,我都能学到许多有关面向对象的内容,相信你也一样。实际上,一本书可以告诉我们面向对象的一切而不需要我们再学习,是十分荒谬的。本书中的内容一定有不当之处!在我写完几本书之后,随着年龄的增长和阅历的增加会改变我的一些观点。

因此,尽管我在本书中包括了许多重要的设计原理,如果你对面向对象十分重视,应尽可量广泛阅读并挑战你所学的知识。

你提供面向对象设计的课程吗?
是的。我所在的公司Wayland System提供一些面向对象专题的课程。我们的课程经常有变动,有关最新信息请查阅www.waysys.com 。

这本书适合我吗?
这是什么问题?你希望我说“不?”如果你已经是或是将要成为采用面向对象技术项目的程序员、设计者、系统工程师或技术经理,那么本书适合你。如果你是面向对象的初学者,将从本书的第一部分学到许多知识,然后做些面向对象编程的练习,再回到本书的第二和第三部分。

如果你是已经掌握了标准的结构化编程的大学生或职业程序员,希望进一步扩大知识范围,本书也适合你。

无论你属于何种角色,希望你能喜欢本书并从中受益。

祝好运!

Meilir Page-Jones

1999年9月

华盛顿Bellevue

meilir@waysys.com

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

目录
前言
第一部分 引言
第1章 面向对象的含义
1.1 封装
1.2 信息/实现隐藏
1.3 状态保持
1.4 对象标识
1.5 消息
1.6 类
1.7 继承
1.8 多态性
1.9 一般性
1.10 本章小结
1.11 习题
1.12 答案
第2章 面向对象简史
2.1 面向对象的起源
2.2 面向对象的成熟期
2.2 面向对象的成熟期
2.4 面向对象的益处
2.5 本章小结
2.6 习题
2.7 答案
第二部分 统一建模语言(UML)
第3章 类、属性和操作的基本表示法
第4章 类图
第5章 对象交互图
第6章 状态图
第7章 体系结构和接口图
第三部分 面向对象设计的原则
第8章 封装与共生性(connascence)
第9章 领域、依附集和内聚
第10章 状态空间和行为
第11章 类型一致性与闭合行为
第12章 继承与多态性的危险性
第13章 组织操作技术
第14章 类的聚合及其所支持 的状态和行为
第15章 设计软件构件
附录A 面向对象设计检查 (Walkthrough)列表 307
附录B 面向对象设计者手册 311
附录C 面向对象术语快速指南
词汇表
参考文献

欢迎来到异步社区!

相关文章