文档库 最新最全的文档下载
当前位置:文档库 › 面向对象技术与方法教学大纲

面向对象技术与方法教学大纲

面向对象技术与方法教学大纲
面向对象技术与方法教学大纲

《面向对象技术与方法》教学大纲

课程名称:面向对象技术与方法

课程类别:学位课编号:A-03学时:72学时(课外36实验学时)编者姓名:李文军单位:中山大学计算机科学系职称:博士、教授

主审姓名:李师贤单位:中山大学计算机科学系职称:教授

授课对象:软件学院工程硕士研究生专业:软件工程年级:1年级(上学期)

编写日期:2002年6月最后更新:2006年9月24日

课程目的与教学基本要求

面向对象软件开发方法是当前软件产业的主流技术,几乎渗透到软件开发的每一角落,有效地掌握面向对象技术与方法是软件产业对每一位软件从业人员的基本要求。面向对象软件开发方法以其封装、信息隐藏、数据抽象、继承、多态性、异常处理、断言机制等特性大大提高了软件产品的可靠性、可重用性和可扩展性。

本课程以Java语言及其开发环境为实例,向学生介绍面向对象软件开发方法的基本概念和原理。此外,本课程还将讲授对象持久性(输入∕输出流实现的轻量级持久性和通过数据库连接实现的重量级持久性)、图形用户界面(GUI)、多线程应用、网络通信等应用技术,并探讨面向对象设计原则与设计模式、面向Aspect程序设计(AOP)等高级课题。学生通过多个课程实验加深对面向对象软件开发方法基本概念、应用技术与高级课题的理解。

本课程要求学生:牢固掌握面向对象软件开发方法的封装、信息隐藏、数据抽象、继承、多态性、异常处理等基本特性,并能主动将这些特性运用在实际软件开发中;熟练掌握Java语言及其开发环境(JDK或IDE),并能使用输入∕输出流、数据库连接、图形用户界面、多线程、网络通信等高级API构建复杂应用程序;通过学习AWT和Swing掌握事件驱动风格的软件体系结构和基于应用框架的软件复用途径;对Java工程化文档、3层(3-tier)或多层(n-tier)设计思想、面向对象设计原则与设计模式、、面向Aspect程序设计(AOP)有初步了解。

先导课程与后继课程

本课程在软件工程硕士教学大纲中无先导课程,但要求学生在本科学习阶段或通过工作经验至少已掌握一门支持结构化程序设计方法的高级语言(推荐C或Pascal语言,已基本掌握C++语言则更佳)并能用它解决实际应用问题,并要求对算法和数据结构、软件工程、数据库系统、编译原理等领域有基本了解。

本课程的后继课程是基础课“面向对象分析与设计”和“分布式计算”。

Thinking in Java, 3nd Edition

Prentice Hall PTR, December 2002

ISBN 0131002872, pp.1119

PDF and HTML e-documents available

机械工业出版社影印版(第3版),2004

价格:66 元

ISBN:7-111-13165-7

页码:1119

材第2版,建议学生没有必要再购买第3版。新版修订的内容

可参阅该教材的电子书籍。

价格:69 元

ISBN:7-111-09286-4

页码:1164

[1]James Gosling, Bill Joy, Guy Steele and Gilad Bracha

The Java Language Specification, 2nd Edition

Addison-Wesley, 2000

ISBN 020*******

PDF e-documents available

[2]Bertrand Meyer

Object-Oriented Software Construction, 2nd Edition

Prentice Hall, 1997

ISBN 0136291554

PDF e-documents available

[3]Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides

Design Patterns: Elements of Reusable Object-Oriented Software Addison-Wesley, 1995

ISBN 020*******

HTML e-documents available

[4]Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad et al.

Pattern-Oriented Software Architecture: A System of Patterns John Wiley & Sons, 1996

ISBN 0471958697

[5]Alan Shalloway and James Trott

Design Patterns Explained: A New Perspective on Object-Oriented Design Addison-Wesley, 2001

ISBN 020*******

[6]Joshua Bloch

Effective Java – Programming Language Guide

Addison-Wesley, 2001

ISBN 020*******

PDF e-documents available

[7]Ron LeMaster and David Leberknight

Object-Oriented Programming & Design

CSCI 4448, University of Colorado, Spring 2002

PDF e-documents available

[8]周晓聪、李文军、李师贤

面向对象程序设计与Java语言

北京:机械工业出版社,2004

ISBN 7-111-13833-3,pp.415

[9]Sun Educational Services

SL-275: Java Programming Language

Sun Microsystems, 1999

PDF e-documents available

[10]Scott Ambler

Mapping Objects To Relational Databases

Ronin International, 2000

PDF e-documents available

教学内容

本课程的主要教学内容分为3部分:第一部分讲解关于面向对象程序设计语言与面向对象程序设计方法的理论基础;第二部分涉及面向对象编程与设计在实际应用中必须解决的一些高级课题;第三部分讨论正确使用面向对象编程与设计的设计原则与设计模式。

学习第3部分的内容时若能主动结合第2部分内容参照学习,将可获得更好的学习效果。

第一部分理论基础(共34学时)

第1章导论:程序、程序设计与程序设计语言(2学时)

本章概述面向对象软件开发方法的基本思想与主要特征,使学生树立“面向对象程序构造是一个建模过程”的核心思想;其次,对程序设计语言的形式化研究途径(特别是形式语义学领域)作扼要介绍,以开拓学生的研究与开发视野;最后,让学生对本课程的全部教学内容有一个总体印象。

对程序本质的认识:讨论对程序本质认识的发展历程,例如算法、算法+数据结构=程序、实体、Actor/Agent、...。

程序设计方法与程序设计语言:讨论两者之间的关系,简述其发展历程(早期的、结构化的、面向对象的以及其他风范的程序设计方法与程序设计语言)。

程序设计语言的形式化途径:讨论程序设计语言涉及的三方参与者:使用者、实现者与设计者,从而引出对语言的三方面(语法、语义、语用)的形式化研究工作。

面向对象程序的构造过程:讨论类与对象的基本概念,例如什么是对象、对象从哪里来;介绍类的属性、行为与约束等特性;区别类型(类)与实例(对象);强调面向对象程序设计是一个建模过程。

面向对象程序设计的主要特征:介绍封装、信息隐藏、数据抽象、继承、多态性等面向对象方法的主要特征,概述抽象与抽象层次、接口与实现分离、同一接口的多种实现、软件重用、结构化异常处理、内存自动管理等软件工程化基本原则。

本课程主要内容概述:介绍本课程的教学内容安排并简单概述各项内容,包括:面向对象设计的各种基础知识,诸如对象持久性、图形用户界面、多线程应用、网络通信等高级课题,以及当前软件产业的热点之一设计模式等。解释为什么不在本课程中安排面向对象分析与设计、分布式对象计算这两部分关键技术。

第2章 Java语言基础(2学时)

本章概述Java语言与环境的基础知识,让学生对利用Java语言实现面向对象程序构造的建模有总体认识,并掌握一个Java程序的上机过程。

认识Java程序:利用两个例子程序介绍Java程序的基本结构,包括两种典型的组织方式;讲解Java语言提供的语言机制如何为现实世界建模(实体概念→ 类与接口、属性→ 数据、行为→ 方法、约束→ 隐式地表达、实体个体→ 对象实例等)。

Java程序的运行与调试:概述Java语言及其运行方式,讨论编译∕解释混合型运行模式在分布式环境中的优势,区别Java的开发环境(JDK或SDK)与运行环境(JRE);通过一个实际例子讲解利用JDK开发一个Java程序的完整上机过程,包括编辑、编译、运行、调试等步骤;介绍几种流行的Java程序的集成化开发环境(IDE),如WebGain VisualCafé、Borland JBuilder、IBM VisualAge、Sun Java Workshop、Microsoft Visual

J++等;简单介绍性能优化的原则,并提及如何利用JVM提供的简单Profiler分析性能瓶颈。

Java程序中的单词:复习编译高级语言源程序的词法分析过程;分别介绍Java程序中的各类单词(token),包括关键字、标识符、文字量、运算符、分界符等;介绍空白(空格、制表符、回车、换行以及注释)在源程序中的作用,讲解如何编写可读性良好的Java程序,包括命名风格、注释风格、布局风格等;概要介绍软件企业应有的编程指南及其为维护一种统一的、良好的编程风格所起的作用。

Java程序的文档化注释:介绍如何利用javadoc工具实现注释的文档化;介绍文档化注释的主要注释条目的用法;提示javadoc缺乏定制注释条目的功能(只是一种入门级工具),启示软件企业应沿javadoc的思路开发适合自己特色的文档化工具。

阅读JDK源程序:介绍如何通过阅读JDK提供的Java预定义类库源程序代码以提高自己的程序设计水平,并学习养成良好的程序设计风格。

Java语言的特点:介绍Java语言的Application/Applet、平台无关性(可移植性)、内存垃圾回收、代码安全性、简单性等特点。

#课外完成实验1,一周后交实验报告。

第3章 Java语言的类型系统(2学时)

本章介绍如何在Java程序中表达实体的简单属性。首先复习类型的概念及其在程序设计中的重要作用,然后从数据的表示方式、取值范围和可用操作三个角度介绍Java语言的各种简单数据类型。

数据类型概述:强调类型在程序中的重要作用,即确定数据的表示方式、取值范围和可用操作;讲解由此给程序员和编译器带来的好处;解释是什么是强类型和弱类型语言;介绍变量的4个基本要素,包括名字、类型、关联和值,并解释什么是变量的左值和右值;说明当前流行的程序设计语言如何确定数据(常量与变量)所属的类型。

Java语言的基本数据类型:从表示方式、取值范围和可用操作角度介绍Java语言的8种基本数据类型,包括布尔类型、字符类型(解释Unicode)、整数类型(解释与C++语言的差异)、浮点数类型(介绍IEEE 754标准)、字符串类型(解释该类型不是原始类型)等;快速浏览每一类型的常量写法与变量声明;介绍变量的初始化问题;列举每一基本数据类型的包装类(int→Integer、float→Float、char→Character、...)。

符号常量:解释常量在整个软件生存期中的可变性;介绍符号常量的用法及其典型的编程模式;区别“初始化”与“赋值”两个概念。

运算符与表达式:强调表达式的三个作用,包括求值、副作用和指派变量;从这三方面介绍赋值运算、算术运算、关系运算、逻辑运算、位运算、移位运算、条件运算、字符串运算等表达式;强调运算符优先级与结合性质在表达式求值过程中的作用。

类型转换:介绍隐式类型转换和强制类型转换;解释类型转换的内部工作过程(如有时间还可介绍编译器翻译模式的设计);介绍Java语言执行类型转换的5种上下文;介绍Java语言执行的7类转换方式;总结隐式与显式类型转换的规则,以及涉及布尔类型转换的特殊性。

简单的输入/输出:介绍在Java语言中如何利用I/O流实现最简单的命令行交互形式。

第4章结构化控制结构(2学时)

本章介绍如何在Java程序中表达实体的行为。首先介绍结构化程序设计方法(SP)的基本思想、主要技术与采用的控制结构,然后介绍在Java程序中如何利用各种语句实现结构化的程序控制流。本章与下一章均属结构化程序设计方法的精华。

基本语句:介绍组成语句的最基本成分,包括空语句、表达式语句和块语句。

结构化程序设计方法和工具:复习结构化程序设计方法的基本思想;概述设计控制结构的图形与文本工具,包括盒图、PAD、伪码等。

分支结构:概述Java语言的if语句,解释编译器实现中的短路求值并强调垂悬else问题;概述Java语言的switch语句,强调其表达能力不足,仅相当于一种约束性很强的goto语句。

重复结构:概述Java语言的while语句;概述Java语言的do-while语句,介绍其主要用途以及如何以while语句表达do-while语句;概述Java语言的for语句,解释该语句的优点是对while语句三个主要要素的抽象,以及如何以while语句表达for语句。

“结构化”的跳转结构:概述Java语言的break和continue语句,给出这两种语句的典型用法;介绍这两种语句结合标号的用法。

循环不变式:介绍循环不变式的概念及其作用;举例说明如何确定一个循环的不变式;介绍如何通过循环不变式构造一个循环语句。

第5章方法(2学时)

本章介绍如何在Java程序中实现一个实体行为的抽象。首先复习结构化程序设计方法的分而治之思想和自顶向下、逐步求精技术,然后讲解Java语言中方法的声明和调用;讲解标识符的作用域规则及相差注意事项;最后还介绍了递归程序设计。

子程序与结构化程序设计:概述“分而治之”的思想,以及子程序(或曰:例程、过程、函数、方法)在结构化程序设计的“自顶向下、逐步求精”技术中的作用。

Java方法的声明与调用:讨论方法的接口与实现分离问题,解释方法的规格说明不断完善过程也反映了软件技术进步的历程(操作名→参数表和返回值→异常→上下文);介绍在Java程序中如何声明方法;介绍Java 程序中的方法调用是一个表达式,从而讨论其求值与副作用。

参数传递:介绍方法参数设计的常见问题,讨论方法规格说明(即方法的接口)的设计原则,提倡表示层与业务逻辑层分离的设计思想;介绍不同参数传递方式的影响,以及Java语言支持的参数传递方式;区别基本数据类型与引用类型的参数传递效果。

标识符的作用域:讨论作用域的作用;解释Java语言的主要作用域规则与注意事项;介绍嵌套作用域中的名字冲突问题与注意事项。

递归程序设计:讨论递归程序的特点(问题建模、死循环、效率等),并用三个经典例子讲解如何用Java 语言实现递归程序(计算阶乘、求Fibonacci数列、求解Hanoi塔问题)。

使用Java API:介绍一类可重用构件的用法,即所有成员均为静态成员(即类变量或类方法)的单实例类;

讲解Java API中Math类的用法。

#课外完成实验2,两周后交实验报告。

第6章类与对象(6学时)

本章介绍如何在Java程序中描述一个完整的实体。首先讨论数据抽象的问题,然后介绍Java语言中类的声明和对象的创建与撤销,特别强调对象的生存期以及对象状态的概念。

类与对象概述:介绍类的两个作用:一是作为模块封装机制,二是作为类型定义机制;讨论抽象数据类型(ADT)、类、对象之间的抽象层次关系。

类的声明:利用两个例子程序介绍Java语言类声明的写法;复习类作用域规则。

类成员的访问控制:介绍public、protected、private和缺省访问(package)4类访问控制规则(简称4P);介绍访问控制的典型编程模式;解释利用访问控制实现信息隐藏的好处。

使用对象实例:利用两个例子程序介绍Java语言创建对象的用法;讨论3层或多层设计思想的运用;详细

讨论对象状态的概念,以及如何利用构造方法初始化对象状态;复习对象的参数传递方式。

静态成员:介绍普通成员与静态成员(类成员)的区别;讲解静态成员与静态方法的用法;介绍在典型的单实例类(singleton)设计模式中如何利用私有构造方法阻止创建额外的对象实例。

类也是一个对象;讨论如何将类本身也看作一种特殊的对象;简介Java语言的反射(reflection)机制及其应用(类似CORBA的动态调用接口DII),并简述反射机制的作用(例如用于对象串行化、JavaBeans、RMI 等机制);介绍类对象及其子对象的动态创建。

完整的类声明:小结完整的编译单元和类的语法形式;小结类的访问控制规则;解释抽象类、最终类、严格浮点类等概念;解释类成员中的静态数据、常量数据、瞬时数据、易变数据等概念;解释类成员中的静态方法、最终方法、抽象方法、本地方法、同步方法等概念。

Java语言的对象模型:介绍Java语言对象模型的特点(对象=对象引用);解释引用与指针的异同;提醒字符串常量对象的注意事项。

变量的生存期:引入变量生存期的概念,例如创建、初始化、服务、收尾、释放空间等;介绍Java语言七类变量的生存期,包括类变量、实例变量、数组成分、方法参数、构造方法参数、异常处理参数、局部变量等;介绍变量的初始值;介绍final变量的用法及其注意事项。

JVM存储空间组织:从逻辑上介绍JVM用于存储数据的空间划分,包括寄存器、堆栈、堆、静态存储区、常量存储区以及非RAM存储区等。

对象实例的初始化:介绍对象状态的初始化方法,包括自动的默认初始化、初始化表达式、初始化块、以及构造方法等;提醒类变量与实例变量的初始化区别;小结各种初始化手段的执行次序。

对象实例的收尾;介绍对象撤销的有关事宜;解释finalize()方法的作用及其特点;讲解收尾工作的典型编程模式以及finalize()方法的其他用法。

Java语言的垃圾收集:首先介绍垃圾收集必须解决的问题;然后讨论垃圾收集的几种常见策略,包括引用计数、标记∕清除、停止∕复制等算法;介绍强制垃圾收集的做法;提示如何避免内存不足现象以提高程序的健壮性。

引用与对象:复习Java语言的对象模型,强调对象引用与对象实例的区别与联系。

对象复制的深与浅:首先讨论对象复制的上下文,即在哪些地方需要使用对象复制;用一个具体的例子解释深复制与浅复制的效果,并讨论深复制可能存在的问题(递归复合对象、多余复制等)及相应解决办法。 对象复制的实现技术:介绍浅复制的编程模式,包括解释Cloneable接口与Object类的clone()方法的用法,再举例加以说明;介绍深复制的编程模式,再举例加以说明;讨论以重定义clone()方法实现深复制策略的不足之处,介绍对象串行化的原理和借用串行化机制实现对象深复制的编程模式;对比C++语言中对象复制的实现途径。

对象的深比较与浅比较:举例说明对象深比较与浅比较的概念;介绍如何通过重定义Object类的equals()方法实现对象的深比较并给出常见的编程模式;讨论对象比较与对象复制之间的关系;复习字符串对象的比较。

#课外完成实验3,一周后交实验报告。

第7章继承与多态性(6学时)

继承机制表达了实体与实体之间的is-a关系(在建模时又称泛化,generalization),它是面向对象设计的重要特性,而多态性则是该特性所带来的程序设计技术精华。本章介绍继承机制以及以此为基础的程序多态性。

软件复用及其途径:讨论影响程序质量的主要要素、软件复用的内容、影响软件复用的技术与非技术因素;

介绍实现代码复用的两条主要途径(基于part-of关系的合成与基于is-a关系的继承),讨论其UML表示方式以及主要优点与不足。

继承── 泛化的实现:讨论在概述层、规格说明层与实现层三个不同层次的概念与术语;讨论对泛化关系(即is-a关系)的理解以及分类在现实世界中的应用,特别是生物学家对物种的分类;介绍如何利用Java 语言的继承机制实现泛化关系,并详细讨论与继承相关的访问控制、子类型、类型兼容与类型转换等问题,以及Java语言特有的阻止继承方式;介绍重定义与扩展两种经典的继承模式以及设计类层次的有关问题。 继承中的对象初始化与收尾:介绍子对象的概念;强调构造方法并不是类成员,故未被子类继承;介绍对象与子对象的初始化次序,讨论如何将参数传递给父类的构造方法;举例说明对象收尾次序应与初始化次序刚好相反,顺便讨论软件设计中时间有序与空间有序的对称审美观(参考ACM/IEEE-CS的CC1991提出的12个重复出现的概念)。

多继承与重复继承:讨论程序设计对多继承的需求,简介两个经典的多继承例子;讨论多继承带来的名字冲突问题,以及C++与Eiffel语言的不同处理方式;介绍因多继承而可能导致的重复继承,讨论重复继承中的语义冲突问题,简介不同语言对共享继承与复制继承两种不同设计需求的处理方式。

Object类:介绍单根类层次的优点(可顺便介绍CORBA中以CORBA::Object为根的单根层次,以及C++语言无单根带来的问题),强调Object类描述了所有对象共同具有的语义。

多态性:讲解什么是多态性;从表示独立性角度讨论为什么要在程序中引入多态性;讨论计算机学科的核心概念之一──绑定(binding,参考ACM/IEEE-CS的CC1991提出的12个重复出现的概念),解释动态绑定与静态绑定的区别与优缺点,简介如何Java与C++程序中选用绑定的方式;讲解由类型兼容性而派生的动态类型与静态类型的概念;对程序中的多态性进行分类。

编译时多态性:简介三类编译时多态性(方法重载、运算符重载与类属机制)。介绍重载的概念,以及编译程序如何区别重载的方法或运算符,强调返回类型并不是方法基调的组成部分;强调面向对象程序的构造方法是对方法重载的一个重要需求源泉,以及如何在构造方法中显式地调用重载的其他构造方法;介绍Java 语言匹配方法基调时采用的“最精确方法”策略。讨论系统预定义运算符重载与用户自定义运算符重载(尽管Java语言不支持后一种重载方式)的概念;讲解如何将运算符理解为一个普通方法的两种不同观点;简介C++语言提供的运算符重载机制。介绍类属机制的基本概念(将类型作为参数);简介C++与Eiffel语言实现类属的不同方式,以及Java语言对未提供类属机制的补偿。

运行时多态性:详细讨论重定义与动态绑定的问题,包括调用被重定义的父类方法、重定义与重载的重要区别、重定义与隐藏的区别、重定义与重命名的关系等;总结重定义的注意事项,并讨论仅限于语法层面的重定义约束的不足之处。

单点选择原则:以Bertrand Meyer的单点选择原则(single choice principle)作为指导在实际应用中主动运用多态性的设计模式;介绍单点选择原则的基本概念以及典型应用例子;介绍在软件开发实践过程中对单点选择原则运用的理解与亲身体会。

第8章大型程序设计(6学时)

本章重点突出接口与实现分离的思想以及大型程序设计的模块化,主要内容包括抽象类、接口两种抽象机制以及程序包、嵌套类两种组织层次化名字空间的途径。

类的封装与信息隐藏:强调Java程序包是以类为基本单位的封装与信息隐藏机制;讨论程序的逻辑结构与物理结构两个不同抽象层次;介绍不同于C++程序组织方式的Java程序包的特点,包括缺省程序包用法;

介绍大型应用程序开发中程序包的组织惯例,以及程序打包工具jar的用法;解释部署库文件.jar时JVM装载类的查找方法,并复习环境变量CLASSPATH作用。

抽象类机制:介绍抽象方法与抽象类的基本概念,讨论在面向对象程序中显式表达设计时引入抽象类机制的必要性;以Java API中的抽象类为例子介绍抽象类的典型用法。

接口机制:介绍接口与抽象类、具体类三个不同抽象层次的区别;复习接口与实现分离的软件工程思想,例如“一个接口、多个实现”或“一个实现、多个接口”;介绍Java语言中定义接口的注意事项;以Java API

中的接口为例子介绍接口的典型用法;讨论接口与接口之间的多继承关系,以及类与接口之间的多实现关系,并分析为何Java语言设计者拒绝类的多继承而允许接口的多继承;讲解接口与抽象类之间的主要区别,讨论在软件设计中选择接口或抽象类的决策依据;汇总接口、抽象类以及继承、实现关系的UML表示技术。

单点选择原则(续):讨论在单点选择原则中单点的形态(接口、抽象类或具体类);讨论实际软件开发中对单点选择原则运用的亲身体会。

嵌套类概述:介绍顶层类(top level class)和嵌套类(nested class)的概念与作用,强调程序包与嵌套类都为类名字提供了层次化的名字空间;给出嵌套类的分类,解释成员类、静态成员类、内部类(inner class)、局部类、匿名类等概念;讲解编译嵌套类生成的字节码文件名。

成员类:解释静态类与内部类的本质区别,特别是外围对象的概念,讨论这两种成员类的各自优点与不足;

给出静态类的一个典型用法──支持方法返回多个不同类型的数据;以具体例子解释内部类的外围对象实例的概念,给出内部类的一个典型用法──更好地隐藏接口的内部实现,并给出其经典实际应用──迭代器(iterator)设计模式;简要讨论内部类的继承、重定义、深层嵌套以及实现多继承等问题。

局部类:介绍局部类的特点及其作用域定义;给出局部类的一个典型用法──将一个接口的内部实现隐藏在一个方法中,并与成员类的用法作对比。

匿名类:介绍匿名类的特点及其初始化问题;将局部类的应用例子改写为匿名类并作对比。

回调机制:介绍回调(callback)机制的应用背景以及在过程式程序中的实现方式;介绍面向对象程序中的回调设计模式,简介基于应用框架的软件复用途径,并给出一个具体例子程序;讨论以内部类实现回调机制的优点。

#课外完成实验4,两周后交实验报告。

第9章持有对象(4学时)

本章介绍如何在程序中持有对象,从而表达实体的复杂属性。本章将数组作为一种对象容器看待,而不只是一种普通的数据类型。

对象容器概述:概述对象容器的作用以及Java语言提供的对象容器;讨论对象容器的安全性与性能的折衷、安全性与灵活性的折衷问题。

一维数组及其应用:利用程序片段介绍一维数组的声明与初始化,包括初始化表达式、枚举列表、枚举创建匿名数组对象等不同初始化形式,以及数组分量的默认初始值;介绍一维数组的典型用法(赋值、输入、输出、参数传递、返回值等),特别是利用a.length属性提供代码的可扩展性;介绍Java语言提供的一维数组操纵工具类Arrays的用法,包括元素填充、元素排序、二分查找,同时介绍实现元素比较的Comparable接口与Comparator接口;介绍数组的复制(默认为浅复制)与比较(默认为深比较);讨论由工具类Arrays启发应用程序员如何设计自己的工具类;回顾main()方法的调用,例如谁负责调用main()、参数如何传递等;以一个学生成绩管理程序结束本小节。

多维数组及其应用:简介多维数组的声明与初始化;利用一个例子程序介绍二维数组的典型用法;启示程序控制结构与数据结构之间的对应关系,以及由此孕育的数据驱动软件开发方法(例如JSP方法)。

一个综合应用例子:以一个桥牌的洗牌、发牌和理牌程序为例子,总结数组作为对象容器的典型用法。

容器的多态性:介绍容器对多态性的需求;讨论动态类型检查与静态类型检查的特点;介绍使用Java对象容器时所需的向上类型转换(upcasting)与向下类型转换(downcasting);简介用于动态检测对象实例类型的instanceof运算符的用法,并复习Java程序实现运行时识别类型(RTTI)的基本原理;讨论Java语言的类属机制的需求(比较与现有多态性的优缺点),以及使用现有多态性容器的典型用法(在注释中声明容器的基类型);简介JDK 1.5版本正式引入的Java语言类属机制。

Java类库的容器类:概述Java类集框架提供的对象容器的分类与总体结构;强调接口与实现的分离,突出接口在软件设计阶段的重要性(允许在编码阶段才考虑容器的实现)。

迭代器设计模式:介绍迭代器设计模式的主要目的,以及迭代器对象的基本概念与工作原理;简介Java语言的类集通用迭代器与列表专用迭代器的接口;给出迭代器的两个典型用法(遍历、过滤)。

列表容器:给出列表容器的接口(List)与不同实现(ArrayList、LinkedList、Vector、Stack),简介不同实现的各自特点;以一个例子程序简介其典型用法。

集合容器:给出集合容器的接口(Set)与不同实现(HashSet、TreeSet),简介不同实现的各自特点;

以一个例子程序介绍其典型用法,特别强调如何达到“同一接口、不同实现”的目标;概要介绍集合的代数操作(并、交、差、子集等代数运算)的实现。

映射容器:给出映射容器的接口(Map)与不同实现(Hashtable、HashMap、TreeMap),简介不同实现的各自特点;以同一个银行帐户管理例子程序的三种不同实现介绍其典型用法,特别强调如何达到“同一接口、不同实现”的目标。

其他容器:简介WeakHashMap、BitSet、Properties等容器的作用;简介Java 1的对象容器在Java 2中的改进(Iterator代替Enumeration、ArrayList代替Vector),以简短例子解释Vector的用法。

容器操纵工具:简介类似Arrays的容器操纵工具类Collections;解释为什么要提供同步的包装类,以及这些包装类的典型同步遍历模式;简介什么是不可修改的包装类;简介Collections提供的其他工具方法。

#课外完成实验5,两周后交实验报告。

第10章异常处理与断言(2学时)

本章介绍如何利用Java语言提供的结构化异常处理机制处理程序中的错误。

结构化异常处理模式:区别异常(exception)与错误(error)两个概念;讨论传统处理异常方式的缺点;

介绍结构化异常处理的基本思想(检测异常与处理异常相分离、异常的结构化传播、分离正常处理代码与异常处理代码等);介绍异常处理的两种理想模式。

Java语言的异常处理:介绍Java语言对异常的分类(标准异常类层次)以及每类异常的特点;讨论在方法接口中显式表达异常带来的好处,并介绍哪类异常需要显式表达、哪类异常不需要;讲解Java语言的try-catch-finally异常处理结构,并介绍在些控制结构中异常对象的产生、捕获、处理与传播;解释Java程序在捕获多类异常时如何解决匹配问题;讨论在重定义一个方法或存在(接口)多继承时,异常规格说明必须遵循的约束;简介异常不能作为重载方法的区别;简介异常处理的典型模式。

断言与基于合约的设计:简介程序正确性概念及Bertrand Meyer的基于合约设计思想,并讨论在程序中使用断言的作用以及断言的各种形式;简介断言与继承的关系,讨论断言给重定义带来的好处(使得重定义不仅有原来的语法约束,还可引入一定的语义约束);简介程序中断言的检测以及对程序调试的作用。

JDK 1.4的断言(assertion)机制:介绍JDK 1.4新引入的断言机制的用法(表达形式、编译命令、开关控制);通过例子程序给出在Java程序中如何借鉴Eiffel语言尽量地运用断言机制。

第二部分应用技术(共30学时)

第11章输入∕输出流(6学时)

对象持久性(persistence)是指允许对象状态穿越时、空。本章与第12章“数据库编程”的最主要目的是用于实现对象的持久性,使应用程序中的对象状态既可保存在关系数据库或文件系统中,也可通过网络传输到另一

进程。本章讲解Java语言的输入∕输出流系统的设计思想与使用方法,它可支持以文件系统或网络传输实现持久对象,同时也是第15章“网络通信”的基础。

流是一种抽象:解释流的抽象概念以及这种抽象带来的好处;简单讨论输入∕输出与异常处理、安全管理、多国语言之间的关系。

Java语言流系统概述:明确学习Java语言流系统的目的;概述Java语言基于字节的流与基于字符的流两大类层次,并详细讲解InputStream、OutputStream、Reader和Writer接口;然后从功能划分概述不同类的主要作用。

文件流:介绍对本地文件系统中的文件与目录的抽象── File类;用例子程序讲解如何利用File类对文件或目录进行读写操作;在例子程序中强调以接口实现回调以及嵌套类、匿名内部类的用法。

过滤器流:介绍Java流系统中最常见的使用方法──通过流的多层包装(wrapping)实现多种功能的动态组合;介绍类FilterInputStream和FilterOutputStream的接口;以一个例子程序介绍一种过滤器流──数据转换流DataInputStream和DataOutputStream的用法;再以一个例子程序介绍另一种过滤器流──带行号的输入流LineNumberInputStream和LineNumberReader的用法,同时演示在处理中文时基于字节的流与基于字符的流的不同效果;最后利用一个例子程序讲解如何编写程序员自己的过滤器流,并让这些过滤器流融合到Java的流系统应用框架中。

连接流:用一个例子程序讲解连接流SequenceInputStream的用法;顺便简介接口Enumeration的用法。

管道流:复习管道的基本原理,并以一个例子程序讲解管道流PipedReader和PipedWriter、PipedInputStream和PipedOutputStream的用法;同时让学生对多线程程序有一个初步的认识。

随机访问文件:复习随机访问文件的原理、用法以及文件指针的概念;用一个例子程序讲解如何利用随机访问文件类RandomAccessFile的以随机访问方式操纵文件;讨论如何设计程序员自己的过滤器流,使其既支持顺序访问方式,也支持随机访问方式。

预定义I/O流:回顾System类定义的in、out和err三个预定义流,介绍其类型及用法(也是将数据成员定义为公有的鲜有典型例子);复习命令行交互方式中输入编程模式中涉及的流。

实现持久对象:复习对象串行化的原理与作用,包括实现轻量级持久对象以及在网络中传递对象状态;以一个例子程序讲解如何利用ObjectInputStream和ObjectOutputStream读写对象的状态;讲解如何设计程序员自己的、可串行化的对象类,讨论static数据成员与transient数据成员的特殊性,并介绍读写对象状态的默认串行化行为;介绍如何定制程序员自己所需的串行化行为,包括部分定制和完全定制两种形式;最后讨论与对象串行化有关的安全性问题。

Java流系统中的设计模式:由流的多层包装谈到设计模式问题;介绍装饰模式(decorator pattern)的定义及其在Java流系统中的大量使用,特别强调其强大在于支持嵌套的装饰;最后以一个读写Zip格式文件的例子结束本章。

#课外完成实验6,两周后交实验报告。

第12章数据库编程(6学时)

本章介绍如何利用JDBC提供的API实现Java程序与数据库的连接,并通过对象∕关系映射(O/R mapping)利用关系数据库实现Java对象的持久性。

多层体系结构:回顾分布式计算的发展历程,讲述三层或多层结构与传统两层结构的区别;解释JDBC是一种数据库中间件,以及JDBC是两层或三层体系结构中的用法。

JDBC结构与原理:介绍JDBC的体系结构与原理,例如什么是JDBC驱动程序、什么是驱动程序管理器等;

讲解如何建立应用环境以及创建数据源。

JDBC应用入门:详细解释如何建立数据库连接、如何发送SQL语句以及处理SQL语句执行结果;分别描述简单SQL语句、预编译SQL语句以及调用存储过程等3种形式的特点其及典型用法;介绍可访问哪些数据库或结果集的元信息;利用一个完整的例子程序演示上述用法。

数据类型映射:讲解SQL类型到Java语言类型的映射规则(用于从结果集中读出某一列的值)以及Java 语言类型到SQL类型的映射规则(用于为预编译SQL语句或存储过程设置IN类型参数);简介如何处理数据库中的空值(NULL);解释如何利用流处理数据库中的大块数据(通常用于存储声音、图像等多媒体信息),包括大块数据的读写以及SQL-99的新类型BLOB和CLOB。

使用SQL转义语法:简要介绍如何使用SQL的语法,包括解除转义、函数调用、日期与时间、调用存储过程、使用外部连接等。

使用可滚动结果集:讲解如何获取3种不同形式的结果集(forward-only、scroll-insensitive和scroll-sensitive)以及如何设置结果集的特性以优化数据库访问性能(指定读写种类以及预读行数);

以例子片段演示如何操纵可滚动结果集,包括更新、插入、删除等;以例子片段演示可滚动结果集的游标前后控制方式。

事务处理:介绍事务的4大特性(ACID);简述JDBC中显式控制事务提交与回卷的用法;解释什么脏读(dirty read)、不可重复读(non-repeatable read)和幻读(phantom read),以及JDBC控制数据一致性程度的5种不同事务隔离层次(NONE、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE);以EJB为例,启示组件模型中组件容器对事务自动处理的模式。

其他数据库特性:介绍什么是数据库连接池,解释为什么连接池可提高数据库访问性能;介绍如何使用批量更新功能,包括简单SQL语句与预编译SQL语句的批量更新用法。

设计自己的JDBC工具类:启示如何设计自己的JDBC工具类;以此为实例,介绍设计模式的概念以及其中的Facade模式。

对象∕关系映射:综述对象范式与关系范式“阻抗不匹配问题”;介绍对象标识设计的注意事项(不仅需要满足唯一性,而且需要保持不变性)以及对象标识的实现方法;简述对象∕关系映射的基本规则,解释多个类映射到单张表或单个类映射到多张表的情况;以实际例子详细解释继承关系的映射规则,例如整个类层次使用一张表、每个叶结点类使用一张表、每个类使用一张表等规则,并比较不同映射策略的优劣;解释关联与聚集关系的映射规则,特别是多对多关系使用一张新表记录对应关系;最后对持久性应用框架进行综述以启发学生的研究思路,包括ODMG和JDO等规范、JavaBlend和TopLink、JBoss的自由软件Hibernate 等产品,以及其他学者的研究思路等。

#课外完成实验7,一周后交实验报告。

第13章 GUI与事件驱动编程(8学时)

本章基于并强调多层(n-tier)设计体系结构的表示层与业务逻辑层分离思想,主要学习掌握应用程序的表示层技术,包括学习如何利用AWT和JFC/Swing为Java应用程序开发图形用户界面(GUI),并熟练掌握事件驱动的程序设计风格。由于GUI应用框架(application framework)中含有大量设计模式,本章将以AWT和Swing 为实例开始初步介绍设计模式知识单元的部分基础知识。

用户界面设计原则:讨论重新认识用户界面在应用程序中的重要性以及认识上的误区;给出若干用户界面设计的启发性原则,例如最少的用户记忆量、简便的操作方式、友好的反馈信息、健壮的异常处理、一致的交互风格等;最后讨论应用程序用户界面设计中通常必须确定哪些要素,以及个性化用户界面的设计与实现的相关技术问题。

Java程序的用户界面:简介Java应用程序的几类用户界面形式,包括控制台(文本)界面、图形用户界面(GUI)、浏览器界面(J2EE/JSP/Servlet)、Applet界面等;介绍一个GUI系统的基本组成,初步介绍控件、容器、布局、事件处理等GUI基本概念;简介Java图形用户界面的发展过程以及AWT与Swing的主要特

点与区别。

Swing组件概述:首先对Swing组件进行分类,包括顶层容器、中间容器以及原子组件共3类,介绍3类组件的主要作用,并以两个实际例子解释这3类Swing组件;介绍Swing组件的绘制原理,包括一个容器中组件的绘制次序、双缓冲区机制、不透明组件等概念;鉴于JComponent类在Swing中的重要作用(类似于Object类在Java对象模型中的作用),详细介绍JComponent类的GUI特性以及该类自己定义或继承得到的方法。

Swing顶层容器:介绍顶层容器的基本概念,包括包容层次、内容窗格、菜单条等以及定制内容窗格的用法;以实际例子程序片段详细介绍画框、对话框两类顶层容器的用法。

Swing中间容器:概述Swing中的两类中间容器:通用容器与专用容器;通过实际例子程序片段详细介绍面板、滚动窗格、分割窗格、带标签窗格、工具条等通用容器的用法;通过实际例子程序片段详细介绍内部画框、分层窗格、根窗格、等专用容器的用法。

简单的Swing基本控件:以实际例子程序片段详细介绍标签、按钮、检查框、广播按钮、组合框、列表、文本组件、微调、滑杆、边框等Swing原子组件的用法。

复杂的Swing基本控件:以实际例子程序片段详细介绍下拉式菜单、弹出式菜单、表格、树、文件选择器、颜色选择器、进度条和进度监视器等Swing原子组件的用法。

使用布局管理器:讨论为什么在GUI设计中需要使用布局管理器;介绍布局管理器的基本概念;解释如何建立布局管理器与容器组件之间的关联;以实际例子程序片段详细介绍各种布局管理器的用法,包括BorderLayout、FlowLayout、GridLayout、GridBagLayout、BoxLayout、CardLayout等布局管理器以及不使用布局管理器时的绝对定位方法。

事件驱动编程:介绍事件的基本概念、事件的语义(java.util.EventObject)、底层事件与语义事件、事件分类等;以两个例子程序片段介绍Swing事件模型中的3个要素:事件+事件源+监听器,并简介事件处理的线程以及对事件处理程序设计的影响;详细讨论事件处理程序的实现技术,包括使用适配器、使用内部类、使用匿名类等技术;详细讨论各种不同类型的事件监听器的用法。

高级GUI编程技术:讨论在分离业务逻辑与表示层后,再引入中间件“界面管理层”的设计;介绍如何为Java应用程序(动态地)选择不同观感风格;简介如何在Swing组件中使用HTML;简介如何使用系统的裁剪板。

JavaBeans组件模型与可视化编程:以一个简单例子程序介绍JavaBeans组件模型的基本概念;介绍如何利用专门的Introspector类提取组件的详细信息;简介JavaBeans组件与可视化编程工具之间的关系。

编写Applet:介绍Applet的特点及其优、缺点;介绍Applet的应用框架,即其生存期回调方法;简介Applet 的打包与部署。

GUI类库中的设计模式:首先介绍典型的MVC设计模式,包括模型、视图与控制的分离以及这种分离带来的好处;再讨论Swing改造的MVC设计模式(M-UI设计模式)以及如此改造的理由;最后介绍在Swing 中应用的典型设计模式,包括复合、桥接、刻面等对象结构模式以及策略、责任链等对象行为模式。

#课外完成实验8,两周后交实验报告。

第14章多线程(6学时)

本章学习线程的基本概念以及如何编写多线程的Java应用程序,并对多线程应用程序涉及的通信与同步、死锁、公平、饥饿等特性有充分认识,能利用Java线程机制解决生产者∕消费者问题、读数器∕写数器问题、哲学家就餐问题等经典并发问题,并对线程池和资源池机制、服务端线程体系结构等高级技术有初步了解。

线程基础:给出线程的标准定义,并讨论使用线程带来好处以及付出的代价;介绍线程的基本概念,包括线程与进程的异同、内核层线程与用户层线程、线程调度模型、线程实现机制等;概要介绍Java语言提供

的线程机制。

Java语言的线程:以具体例子介绍Java程序中创建线程的两种途径(实现Runnable接口或继承Thread 类);讨论应用程序主线程的特点与用法。

Java线程的生存期:详细介绍Java线程的生存期,包括其中的每一状态以及导致状态转换的原因;讲解yield()方法的作用,并以例子程序演示贪婪线程与礼貌线程的区别。

锁与线程同步:利用一个实际例子引出资源共享存在的同步问题;复习并行计算中的基本概念,例如竞态状态、临界区、信号量、管程等;介绍Java线程机制中的锁的作用与原理;从字节码一级看对象实例的锁的实现;讨论线程同步设计的一些基本原则。

线程阻塞:介绍线程切换为阻塞状态的几种方式,包括sleep()方法、wait()/notify()方法、join()方法、I/O操作等,并简介stop()、suspend()、resume()等已不主张使用的方法;对每一种方法通过例子程序详细讲解阻塞与解除阻塞的原理与过程,特别强调wait()/notify()方法的特点与作用。

优先级与线程调度:简介Java线程调度程序采用的策略:固定优先级调度算法;介绍线程优先级的概念以及如何设置或访问线程的优先级,并简介优先级设置对线程调度的影响(强调其不可靠性);用一个例子程序演示相同优先级线程的效果,用一个例子程序演示高优先级线程的抢占(pre-empt);简介守护线程(daemon thread)的特点与用法。

使用线程组:介绍线程组的概念和作用,讲解线程分组的树层次结构;简介线程组提供的操作,包括集合管理方法、组操作方法、组中所有线程的操作方法等。

使用定时器:介绍定时器的概念与工作原理;以两个例子程序演示如何利用定时器执行与时间有关的任务;

以一个例子程序演示在Swing中如何使用定时器。

经典同步问题:概要介绍如何以Petri网为建模工具为并发程序建立模型,给出几个典型的例子,例如机加工车间的工件加工、操作系统中的作业处理、流水线上的工件装配等;讲解互斥问题并给出其Petri网模型,实现一种比Java锁机制更完善的互斥锁,并简要讨论条件变量的用法;给出生产者∕消费者问题的背景及其Petri网模型,给出解决该问题的Java程序;介绍读数器∕写数器问题的应用背景及其Petri网模型,给出解决该问题的Java程序;讲解哲学家就餐问题的背景及其Petri网模型,程序留作练习。

多线程应用设计:讨论多线程应用程序设计中的其他问题,例如死锁问题、性能考虑、volatile变量、线程转储、线程设计模型、服务端线程体系结构等。

线程池与资源池:讨论线程池和资源池这两种机制的实现机制,并给出一个简单的线程池应用程序,引导学生对应用程序(特别是服务端应用程序)的可伸缩性的重视。

#课外完成实验9,两周后交实验报告。

第15章网络通信(4学时)

本章学习如何应用Java语言进行网络编程,特别强调将Java语言内建的多线程机制、完善的异常处理机制以及统一的输入∕输出流风格结合在网络通信应用程序中。本章要求学生熟练掌握网络通信的基本概念,而且可基于TCP、UDP、HTTP、HTTPS以及其他应用层协议编写基于因特网的应用程序。

网络通信的基本概念:复习ISO/OSI参考模型、TCP/IP协议集等内容;讨论TCP与UDP协议的区别;解释通信端口的用法,强调这是一个程序设计的逻辑概念而不是一个物理概念;概述Java对网络编程的支持。 基于HTTP的通信(使用URL):复习统一资源定位器(URL)的概念,区别URL地址与URL对象;讨论如何创建一个URL对象,以及如何解析URL对象中的内容(例如协议、主机、端口、文件名等);以一个例子程序演示如何直接读取URL的数据,顺便介绍如何为Java网络应用程序设置代理服务器(既可在命令行设置,也可在应用程序中设置);以两个例子程序分别演示如何通过URL连接读、写URL,特别是写URL相当于以HTML表单向服务端提交数据。

基于TCP的通信(使用socket):简介如何以InetAddress类标识主机;详细讨论socket的概念,以及Java

类库提供的Socket和ServerSocket两个类的用法;以一对个功能简单(类似于Echo服务)的C/S例子程序演示基于TCP的网络通信编程;分析上述例子程序的不足,将服务程序改进为多线程程序,并讨论进一步改进的可能,例如设置最大连接数目、采用线程池机制等;简要介绍如何设置socket的选项,例如SO_TIMEOUT、SO_LINGER、TCP_NODELAY、TCP_KEEPALIVE等。

因特网应用:以几个简化实现的应用层协议例子程序演示因特网的典型应用,让学生对特定应用的协议实现有初步认识。这些例子程序包括:一个扫描指定主机端口的程序、一个简单的HTTP服务程序、一个简单的Telnet客户程序、一个简单的电子邮件(SMTP)客户程序。

基于UDP的通信(使用数据报):复习UDP通信的主要特点;以一对例子程序演示如何通过UDP实现数据的单点传送;讨论多点传送的特点,将上述例子程序改为以多点传送方式实现。

基于HTTPS的通信(使用SSL socket):介绍JSSE(Java Secure Socket Extension)的基本内容;以一个例子程序演示如何通过HTTPS更安全地下载文档。

更新、更高:讨论网络编程领域中的一些新内容,例如使用IPv6、使用未连接的socket;简介网络编程的发展方向── 分布式对象技术,作为相应的后续课程的引子。

#课外完成实验10,两周后交实验报告。

第三部分设计模式(共8学时)

第16章设计模式(8学时)

许多专家都认同,要学习并真正掌握设计模式不能只通过阅读书本、资料或堂上讲授,而必须采取分组讨论结合个案研究的学习方法。故本章仅仅是对设计模式领域的一个导论,学生必须通过相应的课程设计安排深入学习并体验各种不同的设计模式,尤其是这些设计模式的有机组合运用。

设计模式导论:由广东人的老火例汤引出现实生活中的模式,例如好莱坞电影模式、中国象棋开局、围棋开局、古代行军布阵、建筑、服装、交通、社会、文化等诸多模式;讨论模式的定义,包括Christopher Alexander、Richard Gabriel、Dirk Riehle与Heinz Züllighoven等人对模式的定义以及定义中的要素,解释什么是模式中的力与力分解;介绍典型的模式模板中包含什么内容;讨论设计模式与模式、设计原则、应用框架、软件体系结构、习惯用法等相关概念之间的异同。

设计原则:介绍Robert Martin总结的10种面向对象设计原则,包括:指导类设计的开放-封闭原则、Liskov 置换原则、依赖倒置原则、接口隔离原则;指导程序包内聚设计的版本复用等价原则、公共闭包原则、公共利用原则;指导程序包耦合设计的无环依赖原则、稳定依赖原则、稳定抽象原则。在介绍Bertrand Meyer 提出的开放-封闭原则时,顺便介绍他提出的其他面向对象设计原则,包括语言模块单位原则、自成文档原则、统一访问原则、单点选择原则等。

GoF的设计模式:介绍Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides等四人(GoF)对设计模式的分类,即创建模式、结构模式与行为模式三类;概述GoF提出的23种设计模式;简介这些设计模式之间的关系。

GoV的设计模式:介绍德国西门子公司Frank Buschmann、Regine Meunier、Hans Rohnert、Peter Sommerlad 和Michael Stal等五人(GoV或Go5)对设计模式的分类;简介他们提出的体系结构模式、设计模式、习惯用法等三个不同抽象层次的模式;简介Dirk Riehle和Heinz Züllighoven从对设计模式的另一角度分类,即根据软件生存期将模式划分为概念模式、设计模式和编程模式三类。

反模式:简介William Brown和Martin Fowler等人倡导的反模式(Anti Pattern),包括反模式的概念、如何运用重分解(refactoring)求解问题、模式与反模式的区别、反模式的分类等;以两个例子加深对反模式的直观理解,例如熔岩流(Lava Flow)反模式、瑞士军刀(Swiss Army Knife)反模式等。

学习GoF设计模式:推荐设计模式学习的最佳途径=分组讨论+个案研究,并结合本课程的特点在Java应用技术中寻找设计模式的应用实例;简介Joshua Kerievsky提出的学习GoF设计模式的次序;强调设计模式的精华是多种设计模式有机地组合在一起使用,例如迭代器模式和访问器模式通常配合复合模式使用、观察器模式与中介模式是经典组合运用、单元素模式通常伴随着抽象工厂等;强调在应用设计模式(甚至创造新设计模式)时,“抽象”是其精髓。

GoF设计模式导航:按以下次序简介GoF的创建模式、结构模式和行为模式,即工厂方法、策略、装饰、复合、迭代器、模板方法、抽象工厂、生成器、单元素、代理、适配器、桥接、中介、观察器、责任链、回忆、命令、原型、状态、访问器、轻量、解释器、刻面等模式;对每一种设计模式给出其意图及结构,并简介该设计模式的应用实例;为每一设计模式设计一些供学习课外分组讨论的问题,既可以是以设计模式求解实际问题,也可以是对设计模式本身进行深入探讨。

#课外完成实验11,期末交实验报告。

复习与考试(占两周时间)

复习、答疑、提交实验报告、期末考试。

【注】为避免与后续课程内容重复,本课程教学内容不会大量涉及:

1、面向对象分析与设计

2、分布式对象技术

诸如RMI、EJB、UML等技术均在后续课程中更系统、更深入地学习。

课程实验

本课程课外实验共36实验学时。

1 实验目的

通过实验加深对面向对象技术与方法的基本思想与开发方法的理解。

通过实验熟练掌握利用Java开发环境(JDK或IDE)开发复杂的、大规模的Java应用程序。

在实践中提高学生利用面向对象技术与方法解决实际问题的能力。

2 实验形式

学生独立完成所有课程实验,不采用分组实验方式。

3 实验环境

本课程实验采用以下环境之一作为Java程序开发工具:

Java Developer's Kit (JDK) 1.3.1或1.4.1

WebGain VisualCafé 4.5.1 Expert/Enterprise Edition

Borland JBuilder 7/8 SE

此外,本课程实验还采用以下关系数据库管理系统之一存储数据:

Microsoft Access 97或2000

Microsoft SQL Server 7.0或2000

Oracle 8i

4 实验内容与要求

学生必须完成指定的所有10个实验题目,按任课教师指定时间提交每一实验的实验报告。

完成实验后必须提交一份实验报告,实验报告应遵循标准书写格式。

任课教师可根据实际情况调整以下实验题目。

5 实验题目

实验1、Java程序上机过程

将任课教师提供的一个未经排版的、由两个类组成的Java程序排版并加注释后完成其上机过程,并利用JDK提供的性能分析工具分析程序中哪一部分是性能优化的关键。

实验2、控制结构与方法

编写以下两个程序:

(1) 正读和反读都相同的数称为回文数。编写一个程序,该程序输入一个整数max,输出从0到max中用二进制表示和十进制表示都是回文数的整数。例如整数313就是该程序输出的一个数,因为它的二进制表示为100111001。

(2) 我国税法规定:公民每月工资、薪金收入总额超过800元者应缴纳个人所得税。收入总额减去800元基数后

剩余部分称为应纳税所得额,应纳税所得额按下表规定的超额累进税率计算应缴纳的个人所得税(实际上个人所得税税率表共分9级,最高税率为45%,本实验简化为5级)。

级别应纳税所得额税率%

1不超过500元的5

2超过500元至2000元的部分10

3超过2000元至5000元的部分15

4超过5000元至20000元的部分20

5超过20000元部分25

例如张三某月工资薪金总收入为3500元,则应纳税所得额为2700元。超过2000部分为2700 – 2000 = 700元,按15%税率计算应纳税105元;而500元至2000元的部分为1500元,按10%税率计算应纳税150元;不超过500元的部分为500元,按5%税率计算应纳税25元。所以该月张三应缴纳的个人所得税金额为105 + 150 + 25 = 280元。试编写一个Java程序,输入职工收入总额后,计算并输出该职工应缴纳的个人所得税。

实验3、类与对象

利用类与对象、以类为基类型的数组、冒汇排序算法、伪随机数发生器等知识,编写一个自动洗牌和发牌程序。该程序将去除王牌后的52张牌随机洗匀后,平均发给4个玩家。用命令行用户界面显示各张牌。

实验4、继承、多态性与大型程序设计

某温室控制系统以温度传感器与湿度传感器为输入设备,以温度调节器和湿度调节器作为输出设备,从而监控温室的温度与湿度指标。设计一控制系统,以伪随机数发生器模拟由传感器采集的温度与湿度数据,如果超出规定指标则给出警告信息并启动相应的调节器,对设备的控制指令以屏幕输出信息模拟。

实验5、持有对象(多态容器)

试编写一个测试程序,比较Hashtable和Vector两种多态容器类添加、删除、更新、查找数据时的性能,并测试和分析这两种容器存放不同类型的数据时对性能的影响。

实验6、流文件

位于世界贸易大厦底层的成本部管理着食品、日用等仓库,并将仓库中的商品调拨给超级市场、西餐厅、酒吧等部门。商品采购入库时,验收单上登记了货品的数量、单价和金额;各部门领料时,出库单只登记货品的数量。试为成本部开发一个库存应用程序,该程序不仅要及时、准确掌握每一种商品的存货量,而且还可根据领料数量自动计算出库金额,即该商品的销售成本。该程序必须用流文件实现对象的持久性。

实验7、数据库连接

续实验5,将上述程序中对象持久性改为由JDBC连接关系数据库实现。检验你的应用程序的持久性设计是否能很容易地由流文件移植到关系数据库。

实验8、图形用户界面

续实验6,将上述程序的用户界面改进为图形用户界面。要求尽可能多地运用AWT和Swing提供的各种图形容器和图形控件。

实验9、多线程程序

多线程的一个重要应用领域是用户界面或动画。试创建一个新线程以动画方式显示Hanoi塔问题的移动过程,在主程序中允许用户以滚动条调整搬动盘的速度,并允许以按钮终止程序。

实验10、网络通信

编写一个服务程序,该程序验证密码后打开指定的文件并通过网络连接发送文件;编写该服务程序的客户程序,该程序接受用户提供的密码和文件名,然后通过服务程序获取并保存文件。

实验11、设计模式

续实验9,利用已知的经典设计模式开发一个更完善的远程文件浏览与下载工具。该工具具有图形用户界面,并允许用户浏览服务程序发布的文件目录,从目录选择一个文件后下载。

面向对象的设计方法与C++编程

北京邮电大学200X-200X学年第一学期 《面向对象的设计方法与C++编程》期末考试试卷+扩展+复习题 试题一:填空题(没空一分,共20分) 请在括号内填入你认为正确的内容。 1.软件工程是指导(计算机软件)开发和维护的(工程学科)。 2.应用软件工程方法开发软件系统的根本目的是为了改善下述四项软件品质因素: 提高所开发的软件系统的(效率); 降低所开发的软件系统的(成本); 改善所开发的软件系统的(质量); 缩短所开发的软件系统的(开发周期)。 3.抽象的对象模型由(属性)和(方法)两个部分构成。 4.一个消息必须具备的两个要素是(接受消息的对象标识)和(接受消息的对象的方 法标识)。 5.一个对象拥有另一个对象的(部分)或(全部)的属性和方法的关系则称为(继 承)关系。 6.失去(创建具体对象实例的(制造对象))能力的类成为抽象类。 7.一个类的属性不能出现对象拷贝则被称为(类属性)。 8.面向对象技术的三大特征是(封装)、(继承)和(多态)。 9.共生包容关系中的被包容类对象与包容类对象是(同时连带)生成的。 10.同时出现在两个具有关联关系的对象内的相同属性被称为(连接属性)。 课程复习--补充题: 1.软件的生存周期是一个软件产品从(定义)、(开发)、(使用)到(废弃)的时 间的总合。 2.C++语言中的静态成员函数是(类方法)的具体实现。 3.连接属性是(关联/链接)关系的两个对象内的属性。 4.边界类与(actor(角色))对呈一一对应关系。 5.复合聚合关系中的(聚合)类对象极其依赖(被聚合)类对象,在实现上往往具有 被同时(构造)的特征,因而具有极高的(耦合度)。 试题二:是非判断题(每题1分,共20分) 请在题后的括号内填入√(你认为正确时)或×(你认为错误时)。 1.消息必须含有返回信息。(错) 2.一个类必然具有生成对象的能力。(错)(抽象类不具备) 3.在包容关系中的被包容类也具有封装性。(对) 4.关联关系只是一个动作的抽象。(错) (表示两个类之间的联系,通过这种联系,一个类可以访问到另外一个类的属性和方法。) 5.一个类也可以接收消息。(对) 6.关联关系中的作用名标识了该关联关系的终点对象的恰当地位。(对)

java面向对象知识点总结

j a v a面向对象知识点总 结 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

1 类和对象 类: 类是用来描述一类事物的共性内容的, 类是抽象的; 创建类,如何描述 属性功能 用变量来描述属性 用方法来描述功能 对象: 就是现实中具体的事物,对象是具体的; 创建对象 类名对象名 = new 类名(); 如何通过对象访问类中属性和方法呢 对象名.变量名 对象名.方法名(); 只要是new的对象,就是新创建的,就会在内存中开辟一段单独的空间匿名对象 创建的对象没有赋值给具体的变量; 所以给匿名对象的属性赋值是没有任何意义的; 匿名对象使用场景

1 调用方法 2 作为参数传递 3 添加进容器中 This 关键字 This. 类中的普通方法访问到的成员前边都有this.这个关键字This. 就代表当前对象, 普通方法, 创建对象调方法, 谁调用就代表谁 This(); 可以用来在构造函数中调用本类与之相对应的构造函数使用注意事项: 1 this() 只能是构造函数的第一条执行语句 2 this() 不能在构造函数之间相互调用 3 this() 不能调用自己 构造函数(方法) 构造函数的作用 用来给对象进行初始话的(初始化就是指给对象的各个属性赋值) 构造函数何时执行 对象一创建就会调用与之相对应的构造函数

构造函数语法 修饰符没有返回值类型类名(参数列表){ 具体执行的代码 } 构造函数自动添加 当一个类中我们没有明确指定构造函数的话,jvm会自动帮我们添加一个空参数的构造, 如果我们指定了,就不添加了 构造函数和普通函数的区别 执行时机不同 对象一创建就会调用与之相对应的构造函数 普通函数只有被调用才会执行 return 1 就是用来在方法中返回具体结果(结果类型必须和方法的返回值类型一致) 2 即便方法的返回值类型是void,方法中也可以出现 return; 3 构造函数中也可以有return关键字 成员变量和局部变量 1 作用范围不同, 成员变量是定义在类中的,在整个类中都起作用 局部变量是定义在方法中的,在所在代码块起作用

面向对象的软件开发方法简介

1面向对象的软件开发方法简介 面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法具有以下优点。 ●把软件系统看成是各种对象的集合,这更接近人类的思维方式。 ●软件需求的变动往往是功能的变动,而功能的执行者——对象一般不会有大的变 换。这使得按照对象设计出来的系统结构比较稳定。 ●对象包括属性(数据)和行为(方法),对象把数据和方法的具体实现方式一起封 装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立性, 从而提高了软件的可维护性。 ●支持封装,抽象,继承和多态,提高了软件的可重用性,可维护性和可扩展性。 1.1 对象模型 在面向对象的分析和设计阶段,致力于建立模拟问题领域的对象模型。建立对象模型既包括自底向上的抽象过程,也包括自顶向下的分解过程。 1.自底向上的抽象 建立对象模型的第一步是从问题领域的陈述入手。分析需求的过程与对象模型的形成过程一致,开发人员与用户交谈是从用户熟悉的问题领域中的事物(具体实例)开始的,这就使用户和开发人员之间有了共同语言,使得开发人员能够彻底搞清用户需求,然后再建立正确的对象模型。开发人员需要进行以下自底向上的抽象思维。 ●把问题领域中的事物抽象为具有特定属性和行为的对象。 ●把具有相同属性和行为的对象抽象为类。 ●若多个类之间存在一些共性(具有相同属性和行为),把这些共性抽象到父类中。 再自底向上的抽象过程中,为了使子类能更好的继承父类的属性和行为,可能需要自顶向下的修改,从而使整个类体系更加合理。由于这类体系的构造是从具体到抽象,再从抽象到具体,符合人们的思维规律,因此能够更快,更方便的完成任务。 2.自顶向下的分解 再建立对象模型的过程中,也包括自顶向下的分解。例如对于计算机系统,首先识别出主机对象,显示器对象,键盘对象和打印机对象等。接着对这些对象再进一步分解,例如主机对象有处理器对象,内存对象,硬盘对象和主板对象组成。系统的进一步分解因有具体的对象为依据,所以分解过程比较明确,而且也相对容易。因此面向对象建模也具有自顶向下开发方法的优点,既能有效的控制系统的复杂性,又能同时避免结构化开发方法中功能分解的困难和不确定性。 1.1.2UML:可视化建模语言 面向对象的分析与设计方法,在20世纪80年代末至90年代中发展到一个高潮。但是,诸多流派在思想和术语上有很多不同的提法,对术语和概念的运用也各不相同,统一是继续发展的必然趋势。需要有一种统一的符号来描述在软件分析和设计阶段勾画出来的对象模型,UML(Unified Modeling Language,统一建模语言)应运而生。UML是一种定义良好,易于表达,功能强大且普遍适用的可视化建模语言。而采用UML语言的可视化建模工具是Rational 公司开发的Rational Rose。 1.2 面向对象开发中的核心思想和概念 在面向对象的软件开发过程中,开发者的主要任务就是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型,如何用程序代码来实现对象模型,并且保证软件系统的可重用性,可扩展性和可维护性呢?本节节主要阐述面向对象开发的核心思想和概念,这些核心思想为从事面向对象的软件开发实践提供理论武器。

常用的开发方法:结构化方法、原型法、面向对象方法

常用的开发方法:结构化方法、原型法、面向对象方法 常用的开发方法有:结构化方法、原型法、面向对象方法。 结构化方法:结构化方法是应用最为广泛的一种开发方法。按照信息系统生命周期,应用结构化系统开发方法,把整个系统的开发过程分为若干阶段,然后一步一步她依次进行,前一阶段是后一阶段的工作依据;每个阶段又划分详细的工作步骤,顺序作业。每个阶段和主要步骤都有明确详尽的文档编制要求,各个阶段和各个步骤的向下转移都是通过建立各自的软件文档和对关键阶段、步骤进行审核和控制实现的。它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。 以数据流图,数据字典,结构化语言,判定表,判定树等图形表达为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。 结构化方法方法具有如下特点。 (l)遵循用户至上原则。 (2)严格区分工作阶段,每个阶段有明确的任务和取

得的成果。 (3)强调系统开发过程的整体性和全局性。 (4)系统开发过程工程化,文档资料标准化。 该方法的优点是:理论基础严密,它的指导思想是用户需求在系统建立之前就能被充分了解和理解。由此可见,结构化方法注重开发过程的整体性和全局性。 该方法的缺点是:开发周期长;文档、设计说明繁琐,工作效率低;要求在开发之初全面认识系统的信息需求,充分预料各种可能发生的变化,但这并不十分现实;若用户参与系统开发的积极性没有充分调动,造成系统交接过程不平稳,系统运行与维护管理难度加大。 原型法:原型法的基本思想与结构化方法不同,原型法认为在很难一下子全面准确地提出用户需求的情况下,首先不要求一定要对系统做全面、详细的调查、分析,而是本着开发人员对用户需求的初步理解,先快速开发一个原型系统,然后通过反复修改来实现用户的最终系统需求。 是在投入大量的人力,物力之前,在限定的时间内,用最经济的方法开发出一个可实际运行的系统模型,用户在运行使用整个原型的基础上,通过对其评价,提出改进意见,对原型进行修改,统一使用,评价过程反复进行,使原型逐步完善,直到完全满足用户的需求为止。 适用范围:处理过程明确、简单系统;涉及面窄的小型系统

软件工程 第八章 面向对象的设计方法

第八章面向对象的设计方法 本章采用基于UML的面向对象设计方法的将分析模型转换为设计模型。如第五章所述,面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成;设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。为完成这一转换过程,设计人员必须处理以下任务: (1)针对分析模型中的用例,设计实现方案。实现方案用 UML交互图表示。 (2)设计技术支撑设施。在大型软件项目中,往往需要一些技术支撑设施来帮助业务需求层面的类或子系统完成其功能。这些设施本身并非业务需求的一部分,但却为多种业务需求的实现提供公共服务。例如,数据的持久存储服务、安全控制服务和远程访问服务等。在面向对象设计中,需要研究这些技术支撑设施的实现方式以及它们与业务需求层面的类及子系统之间的关系。 (3)设计用户界面。 (4)针对分析模型中的领域概念模型以及第(2)、(3)两个步骤引进的新类,完整、精确地确定每个类的属性和操作,并完整地标示类之间的关系。此外,为了实现软件重用和强内聚、松耦合等软件设计原则,还可以对前面形成的类图进行各种微调,最终形成足以构成面向对象程序

设计的基础和依据的详尽类图。 面向对象的软件设计过程如图8-1-1所示。 图 8-1-1 面向对象的软件设计过程 第一节设计用例实现方案 UML 的交互图(顺序图、协作图)适于用例实现方案的表示。因此,本节首先介绍交互图的语言机制,然后探讨用例实现方案的设计方法。该设计方法包含如下3个步骤: (1)提取边界类、实体类和控制类; (2)构造交互图; (3)根据交互图精华类图。 一、顺序图 顺序图用来描述对象之间动态的交互关系,着重表现对象间消息传递的时间顺序。在顺序图中,参与交互的对象位于顶端的水平轴上,垂直轴表示时间,时间推移的方向是自上而下的。顺序图中的对象一般以“对象

面向对象的建模方法

面向对象的建模方法 [摘要]评述面向对象的几种建模方法并作一比较,阐述统一建模语言的优越性,并对其组成、特征、建模过程进行描述。 [关键词]软件工程建模面向对象 一、引言 面向对象方法学也称为面向对象的开发方法,它属于软件工程的范畴。面向对象方法学的出发点和基本原则是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程接近人类认识世界解决问题的方法与过程。也就是说,面向对象方法是一种崭新的思维方法,它是把程序看作是相互协作而又彼此独立的对象的集合。由于对象的独立封装,模块的可构造性、可扩充性、可重用性也大大加强,从而面向对象的软件工程能够胜任当今大规模复杂、易变软件系统开发应用的要求。 面向对象的软件工程要求首先对系统建立模型是对现实的简化,它提供了系统的蓝图。一个好的模型只需抓住影响事物发展的主要矛盾,而忽略那些次要矛盾。每个系统可以从不同方面用不同的模型来描述。因而每个模型都是在语义上闭合的系统抽象。通过建模可以按照实际情况对系统进行可视化模型详细地说明了系统结构或行为,指导我们构造系统模板 二、面向对象建模方法 建模是构造软件系统最基本的步骤,在软件工程学科中提供了多种多样的建模方法和高效的工具,其目的是为了在软件开发过程的早期就发现设计中可能隐含的缺陷和错误,对于今日的大型软件系统,采用一种合适的建模方法,建立一个良好的模型是成功的关键。在市场上已有一些公司,如Rationa1,Cayenne,Platinum等开始提供商品化的建模工具,即通常所谓的CASE工具,使得建模过程实现了一定的自动化的标准化,并逐步走向实用,而这些工具的后面,便是具有不同特色的建模方法。 下面分析比较Booch,OMT,OOSE,UML等几种主要的面向对象的建模方法: (一)Booch方法 Booch方法是由Grady Booch提出的,是一种主要面向设计的方法,它通过二维图形来建立面向对象的分析和设计模型,强调设计过程的不断反复知道满足要求为止。Booch 方法特别注重对系统内对象之间相互行为的描述,注重可交流性和图示表达。但在方法学上并不注重严格的过程,既不推荐软件设计人员该做什么,只是指出了其可做的工作。Booch 方法把几类不同的图表有机地结合起来,以反映系统的各个方面是如何可相互联系而又相互影响的。这些图贯穿于逻辑设计到物理实现的开发过程中,包括类图、状态图、对象图、交互图、模块图和进程图。 (二)OMT方法 OMT(Object Modeling Technology对象建模技术)是由JamesRumbaugh 等人提出的。OMT方法包含了一整套的面向对象的概念和独立于语言的图示符号。它可用于分析问题需求,设计问题的解法以及用程序设计语言或数据库来实现这个解法。OMT方法用一致的概念和图示贯穿于软件开发的全过程,这样软件开发人员不必在每一开发阶段便换新的表示方法。 OMT方法从对象模型、动态模型、功能模型3个不同但又相关的角度来进行系统建模。这3个角度各自用不同的观点抓住了系统的实质,全面地反映了系统的需求。其中,对象模型表示了静态的、结构化的系统数据性质,动态模型表示了瞬时的、行为化的系统的控制性质,功能模型则表示了变化的系统的功能性质。在软件开发的周期中,这3种模型都在逐渐发展:在分析阶段,构造出不考虑最终设计的应用域模型;在设计阶段,求解域的结构被

比较四种典型面向对象方法的异同

普 通 本 科 毕 业 小 论 文 题目:比较四种典型面向对象方法的异同 学院软件与通信工程学院 学生姓名张伟聪学号 0123992 专业软件工程届别 125 指导教师廖汉成 二O一四年九月二十七日

一、引言 随着计算机科学的发展和应用领域的不断扩大,对计算机技术的要求越来越高。特别是当计算机硬件有了飞速发展之后,各种应用领域对软件提出了更高的要求。结构化程序设计语言和结构化分析与设计已无法满足用户需求的变化。发展软件质量,缩短软件开发周期,发展软件可靠性、可扩充性和可重用性迫使软件界人士不断研究新方法、新技术,探索新途径。 面向对象的方法是一种分析方法、设计方法和思维方法。面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。其基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。面向对象程序设计方法起源于六十年代末期的语言SIMULA’67,到了七十年代末期,软件行业正受到软件危机的困扰,结构化的开发方法不能够很好地解决软件危机。面向对象语言Smalltalk的出现,进一步发展和完善了面向对象的程序设计语言,从此面向对象也和开发方法开始结合,出现了面向对象的开发方法。 自80年代后期以来,相继出现了多种面向对象开发方法,现将其中四种典型的方法作一个简介和比较。面向对象方法都支持三种基本的活动:识别对象和类,描述对象和类之间的关系,以及通过描述每个类的功能定义对象的行为。 一.Booch方法 Booch是面向对象方法最早的倡导者之一,他提出了面向对象软件工程的概念。1991年,他将以前面向Ada的工作扩展到整个面向对象设计领域。Booch方法的开发模型包括静态模型和动态模型,静态模型分为逻辑模型和物理模型,描述了系统的构成和结构,动态模型分为状态图和时序图。该方法对每一步都作了详细的描述,描述手段丰富、灵活。不仅建立了开发方法,还提出了设计人员的技术要求,不同开发阶段的资源人力配制。OOD[3](Object Oriented Design)方法是Grady Booch从1983年开始研究,1991年后走向成熟的一种方法。OOD主要包括下述概念:类(class)、对象(object)、使用(uses)、实例化(instantiates)、继承(inherits)、元类(meta class)、类范畴(class category)、消息(message)、域(field)、操作(operation)、机制(mechanism)、模块(module)、子系统(subsystem)、过程(process)等。其中,使用及实例化是类间的静态关系,而动态对象之间仅有消息传递的连接。元类是类的类。类范畴是一组类,它们在一定抽象意义上是类同的。物理的一组类用模块来表达。机制是完成一个需求任务的一组类构成的结构。 Booch方法的过程包括以下步骤: (1)在给定的抽象层次上识别类和对象; (2)识别这些对象和类的语义; (3)识别这些类和对象之间的关系; (4)实现类和对象;

面向对象分析设计小结

?1、面向对象方法的基本观点: ?Coad-Y ourdon认为:面向对象=对象+类+继承+通信。 ?2、面向对象方法的特点包括: ?(1)、符合人们对客观世界的认识规律; ?(2)、对需求变化具有很强的适应性; ?(3)、支持软件复用; ?(4)、可维护性好。 ?3、对象、类、封装、继承、消息、多态性的基本概念。 对象是客观世界中具有可区分性的、能够唯一标识的逻辑单元,是现实世界中的一个事物(站在计算机技术角度,即对事物的模拟)。 类是一组具有相同属性和相同操作的对象的集合。 封装是把对象的属性和操作结合在一起,组成一个独立的单元。 继承是指子类(派生类、特化类)自动拥有其父类(基类、泛化类、超类)的全部属性和操作,即一个类可以定义为另一个更一般的类的特殊情况。 消息是对象之间采用消息传递来发生相互作用—互相联系、互发消息、响应消息、协同工作,进而实现系统的各项服务功能。 多态性是一种方法,使在多个类中可以定义同一个操作或属性名,并在每一个类中有不同的实现。 ?4、面向对象系统开发过程。 ?5、运用名词词组法来定义类(对象): ?例:音像商店出租/出售业务信息系统中的类的确定。 ?总目标:?A.提供及时培训。?B.实施的系统必须友好,易学易用。?C.实施的系统必须考虑安全问题。

?具体目标: ?1.1.1 提供一个自动系统协助顾客出售/出租结帐。 ?2.1.1 提供和维护一个自动的会员数据库。?a. 按要求提供最新会员信息。? b. 有添加、改变、删除会员信息的能力。 2.1.2 提供会员信息报表(但不限于)?a. 最少光顾的会员。?b. 最经常光顾的会员。?c. 有问题会员(欠钱,出租过期)? 4.1.1 提供、维护出售和出租项的库存数据库。?a. 按要求提供最新库存信息?b. 有添加、改变、删除库存信息(出售和出租)的能力 4.1.2 提供库存信息报表(但不限于)?a. 最不受欢迎的出租项?b. 最受欢迎的出租项?c. 过期的出租项?d. 出售和出租项的“订购”产品(采购报表) 5.1.1 提供出售报表(但不限于)?a. 用产品码表示的一段时间(天、星期、月)内销售情况?b. 用产品码表示的一段时间(天、星期、月)内出租情况相应的侯选对象清单为:安全问题、自动系统、顾客出售/出租结帐、会员数据库、会员信息、会员信息报表、库存数据库、出售和出租项、库存信息、库存信息报表、采购报表、出售报表。 ?6、对多值属性的处理方法:用部分-整体方法。 例:发票/发票行 第2章统一建模语言UML 1、UML描述的软件基本模型:用例视图、逻辑视图、构件视图、进程视图、 部署视图 2、UML的基本符号。 3、RUP项目开发过程的特征:用例驱动的系统、以体系结构为中心、螺旋 上升式的开发过程、以质量控制和风险管理为保障措施。

《面向对象技术》课程教学大纲

《面向对象技术》课程教学大纲 课程编号:20411101 总学时数:48 总学分数:3 课程性质:必修课程 适用专业:计算机科学与技术 一、课程的任务和基本要求 该课程是计算机科学与技术专业的专业基础课程。本课程的基本要求是掌握面向对象程序设计的基本原理、概念和方法;掌握C++语言的基本知识,包括类的定义、继承,对象的创建、使用、销毁等;掌握基本的面向对象程序设计过程和技巧,具备一定的面向对象程序设计能力,为后继课程打下基础。 二、基本内容和要求 1、面向对象技术概要 教学内容:概括地面向对象技术,介绍C++语言和C语言的差异。 基本要求: (1)了解面向对象技术特点 (2)掌握C++ 语言的输入、输出 (3)掌握C++ 语言的空间申请和释放 (4)了解C++ 语言的对象引用的含义 2、类的定义 教学内容:介绍C++语言中最基本的类定义,数据成员和函数成员,三种权限区域。 基本要求: (1)理解类和对象的概念 (2)掌握类构造函数和析构函数的定义方法和作用 (3)掌握对象的定义及初始化方法 (4)掌握类成员函数和内联函数的定义方法 (5)掌握函数重载的方法 (6)熟悉运算符的重载方法 3、类的派生与继承 教学内容:介绍类与类之间的派生关系,派生类的成员继承和存取权限,函数多态基本要求: (1)了解派生类的定义方法 (2)掌握派生类中继承成员的存取关系 (3)掌握派生类构造函数的定义与执行顺序 (4)了解虚函数和抽象类的作用 (5)了解编译多态和运行多态 4、类的友元和聚合 教学内容:不同类间引用的权限,封装与效率的关系,静态数据成员 基本要求:

(1)熟悉类的友元及应用 (2)了解类的封装和聚合 (3)熟悉类静态数据成员的作用与应用 5、面向对象的程序设计 教学内容:面向对象设计的思想、对象的生存期、对象的永久化和对象的传输。 基本要求: (1)熟悉面向对象程序设计的思想 (2)了解对象的创建过程和销毁过程 (3)掌握对象的永久化的操作方法 (4)熟悉对象传输的含义和实现方式 6、模板 教学内容:介绍函数模板和模板函数,类模板和模板类,STL的使用 基本要求: (1)熟悉函数模板 (2)熟悉类模板 (3)了解利用模板的使用方法 (4)熟悉STL的应用 7、异常处理 教学内容:异常处理的内容。 基本要求: (1)了解异常处理的目的 (2)熟悉异常处理的的基本形式 (3)了解异常处理的几种应用方式 三、实践环节和要求 通过由浅入深、循序渐进地练习,使学生通过上机来验证课堂教学的理论,全面了解面向对象技术的基本方法和编程技巧,学会设计一些简单的应用程序。 实验环节类型:上机 实验环节学时:16 1、含有类的C++程序设计(2学时) 上机内容:类的定义与应用。 2、类的继承与派生(2学时) 上机内容:派生类的定义与应用。 3、抽象类与重载(2学时) 上机内容:抽象类与重载。 4、友元与静态数据的应用(2学时) 上机内容:友元与静态数据的应用。 5、面向对象程序设计(4学时) 上机内容:使用面向对象技术设计应用程序。 6、模板的应用(4学时) 上机内容:类模板和类函数的应用。 四、教学时数分配 理论: 32 实验:上机:16 其它:

面向对象的逻辑思维方法

面向对象的逻辑思维方法 什么是面向对象的设计思想?也许有不少初学者对这个概念还有许多不明白的地方,特别是这个处于新旧思想交替的时代,许多人刚刚学完现在看来是快要淘汰的只是面向过程的语言。他们的脑子还没有脱离面向过程思想的束缚,抬头却发现,“面向对象”早已经流行开来,这个陌生的词漫天飞舞。随便拿起一本流行计算机技术书籍,那里会没有“面向对象”的字眼!于是心中便惶惑了:什么叫“面向对象”?不感兴趣者,一带而过;有志于在这方面发展的,匆忙找到一本有关书籍来啃究竟什么是“面向对象”。然而,要突破思想的束缚,说难也不难,说到要深刻认识却也不容易。笔者在做了一些轻量级的工作后,颇以为有点心得,不怕贻笑大方,写出已供广大同行批评指正。 “对象(Object)”一词,早在十九世纪就有现象学大师胡塞尔提出并定义。对象是世界中的物体在人脑中的映象,是人的意识之所以为意识的反映,是做为一种概念而存在的先念的东西,它还包括了人的意愿。举例说明吧。当我们认识到一种新的物体,它叫树,于是在我们的意识当中就形成了树的概念。这个概念会一直存在于我们的思维当中,并不会因为这棵树被砍掉而消失。这个概念就是现实世界当中的物体在我们意识当中的映象。我们对它还可以有我们自己的意愿,虽然我们并不需要付诸实现——只要在你的脑中想着把这棵树砍掉做成桌子、凳子等——我们就把它叫做意向。于是,对象就是客观世界中物体在人脑中的映象及人的意向。只要这个对象存在我们的思维意识当中,我们就可以籍此判断同类的东西。譬如,当我们看到另外一棵树是,并不会因为所见的第一棵树不在了失去了供参照的模板而不认识这棵树了。当我们接触某些新事物时,我们的意识就会为这些事物确立一个对象。当然这个过程是怎么形成的,那就不是我们所能讨论的问题了。上面所说的对象研究的是一般意义上的问题,因而它可以外推到一切事物。我们经常所说的“对象”,一班指的是解决信息领域内所遇到问题的方法。特别是应用软件技术来决问题的方法。如我们经常碰到的面向对象的编程(Object-Oriented Programming)、面向对象的分析(Object-Oriented Analysis)、面向对象的设计 (Object-Oriented Design)等。应用前面所介绍的关于对象的概念,可以对这些问题做进一步的分析。在面对较复杂的系统,我们可以将它作为一个对象来进行分析。一个系统(解决某个问题的全套解决方案)作为一个对象,可以由多个部分组成。同样,这个对象也可以由多个对象组成。对于同类的事物,可以由一个对象来表示。这样做的益处是显而易见的,它灵活而高效,可以大大减轻设计人员的工作量,简化实际的模型。举一个例子。在关系型数据库的设计当中,我们可以把一个元组当作对象,给它定义一组操作方法。这些方法将适用于所有元组,从而我们不必在更大的范围内去细致的考虑不同的元组(如判断一个元素是否合法):因为它们有一组公共的面向本身的方法,它们“自己”可以“解决”自己的问题。更上一层的对象可以是一个表、视图等。表对象在元组对象的基础上又有它们自己的方法,如增加、删除等。从这个层面上讲,它也只需要做“自己”的事情,

面向对象软件工程—课后作业

面向对象软件工程 第八章 8.1.什么是面向对象方法学,它有哪些优点? 答:面向对象方法学是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程,使描述问题的问题空间与实现揭发的解空间在结构上尽可能一致的方法学科。优点:1、与人类的习惯的思维方法一致;2、稳定性好;3、可重用性好;4、适合用于大型软件产品;5、所开发的软件有较好的可维护性;6、面向对象的软件比较容易修改;7、面向对象软件比较容易理解;8、易于测试和调式。 8.2.什么是对象,它与传统的数据有何异同? 答:对象是对问题域中某个实体的抽象。相对于传统数据的静态被处理,对象既有静态的属性,又有动态的行为,是进行处理的主体。 8.3.什么是类? 答:类是对具有相同数据和相同操作的一组相似对象的定义。

8.4.什么是继承? 答:继承是指能够直接获得已有事物的性质和特征,而不必重复定义他们。 8.5.什么是模型,开发软件为何要建模? 答:所谓模型就是为了理解事物而对该事物做出的一种抽象,是对事物的一种无歧视定义的书面描述。由于模型忽略了事物的非本质东西,因此模型比原始事物更容易操作。对于那些因过分复杂而不能直接理解的系统,特别需要建立模型,建模的目的主要是为了降低复杂性。人的头脑每次只能出来少量信息,模型通过把系统的重要部分分解成人的头脑一次能处理的若干个子部分,从而减少了系统的复杂程度。 8.6.什么是对象模型,建立对象模型时主要使用哪些图形符号,这些符号的含义是什么? 答:对象模型表示静态的、结构化的系统性质,是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。在UML中,用类图来建立对象模型,表示一个类及属于该类的对象。 8.7.什么是动态模型,建立动态模型时主要使用哪些图形符号,这些符号的含义是什么? 答:动态模型时描述系统控制结构,即行为化的一种模型。在UML

三种面向对象方法

三个著名的面向对象开发方法

摘要 主要介绍了3种典型的面向对象开发方法,并对它们进行了比较。面向对象的方法是一种分析方法、设计方法和思维方法。面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。 关键字:面向对象;开发方法;OMT;BOOCH;JACOBSON; 1.引言 面向对象的方法是一种分析方法、设计方法和思维方法。面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。其基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。 面向对象程序设计方法起源于六十年代末期的simnia语言.Smalltalk语言的出现,进一步发展和完善了面向对象的程序设计语言,从此面向对象与开发方法开始结合,出现 了面向对象的开发方法.自80年代后期以来,相继出现了多种面向对象开发方法,现将其中几种典型的方法作一比较分析. 2.三种典型的面向对象开发方法 2.1 OMT/Rumbaugh OMT(Object Modeling Technique)方法提出于1987年,曾扩展应用于关系数据库设计.1991年Jim Rumbaugh正式把OMT应用于面向对象的分析和设计.这种方法是在 实体关系模型上扩展了类、继承和行为而得到的.OMT覆盖了分析、设计和实现3个阶段,包括一组相互关联的类(class )、对象(object)、一般化(generalization)、继承(inheritance)、链(link)、链属性(link attribute)、聚合(aggregation)、操作(operation)、事件(event)、场景(scene)、属性(attribute)、子系统(subsystem)、模块(module)等概念. OMT方法把分析时收集的信息构造在3种模型中,这些模型贯穿于每个步骤,在每个步骤中被不断地精化和扩充.对象模型用ER图描述问题域中的列象及其相互关系,用类和关系来刻画系统的静态结构,包括系统中的对象、对象之间的关系、类的属性和操作等特征.动态模型用事件和对象状态来刻画系统的动态特性,包括系统对象的事件序列、状态和操作.功能模型按照对象的操作来描述如何从输入给出输出的结果,描述动态模型的动作所定义对象操作的意义。 OMT方法包含分析、系统设计、对象设计和实现4个步骤,它定义了3种模型,这些模型贯穿于每个步骤,在每个步骤中被不断地精化和扩充。这3种模型是:对象模型,用类和关系来刻画系统的静态结构;动态膜型,用事件和对象状态来刻画系统的动态特性;功能模型,按照对象的操作来描述如何从输人给出输出结果。分析的目的是建立可理解的现实世界模型。系统设计确定高层次的开发策略。对象设计的目的是确定对象的细节,包括定义对象的界面、算法和操作。实现对象则在良好的面向对象编程风格的编码原则指导下进行。 开发的四个阶段如下: (1)分析。基于问题和用户需求的描述,建立现实世界的模型。分析阶段的产物有: ●问题描述 ●对象模型=对象图+数据词典 ●动态模型=状态图+全局事件流图 ●功能模型=数据流图+约束 (2)系统设计。结合问题域的知识和目标系统的系统结构(求解域),将目标系统

面向对象方法学概述资料

9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型 9.6 功能模型 9.7 3种模型之间的关系 传统的软件工程方法学曾经给软件产业带来巨大进步,部分地缓解了软件危机,使用这种方法学开发的许多中、小规模软件项目都获得了成功。但是,人们也注意到当把这种方法学应用于大型软件产品的开发时,似乎很少取得成功。 在20世纪60年代后期出现的面向对象编程语言Simula-67中首次引入了类和对象的概念,自20世纪80年代中期起,人们开始注重面向对象分析和设计的研究,逐步形成了面向对象方法学。到了20世纪90年代,面向对象方法学已经成为人们在开发软件时首选的范型。面向对象技术已成为当前最好的软件开发技术。 9.1 面向对象方法学概述 9.1.1 面向对象方法学的要点 面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。 面向对象方法学所提供的“对象”概念,是让软件开发者自己定义或选取解空间对象,然后把软件系统作为一系列离散的解空间对象的集合。应该使这些解空间对象与问题空间对象尽可能一致。这些解空间对象彼此间通过发送消息而相互作用,从而得出问题的解。也就是说,面向对象方法是一种新的思维方法,它是把程序看作是相互协作而又彼此独立的对象的集合。

概括地说,面向对象方法具有下述4个要点: (1) 认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。按照这种观点,可以认为整个世界就是一个最复杂的对象。因此,面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。 由此可见,面向对象方法用对象分解取代了传统方法的功能分解。 (2) 把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。因此,每当建立该对象类的一个新实例时,就按照类中对数据的定义为这个新对象生成一组专用的数据,以便描述该对象独特的属性值。 (3) 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承(inheritance)。 (4) 对象彼此之间仅能通过传递消息互相联系。对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须发消息请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。 重点:如果仅使用对象和消息,则这种方法可以称为基于对象的(object-based)方法,而不能称为面向对象的方法;如果进一步要求把所有对象都划分为类,则这种方法可称为基于类的(class-based)方法,但仍然不是面向对象的方法。只有同时使用对象、类、继承和消息的方法,才是真正面向对象的方法。 9.1.2 面向对象方法学的优点 1. 与人类习惯的思维方法一致 2. 稳定性好 3. 可重用性好(重点) 用已有的零部件装配新的产品,是典型的重用技术,例如,可以用已有的预制件建筑一幢结构和外形都不同于从前的新大楼。重用是提高生产率的最主要的方法。

面向对象方法与结构化方法的比较

结构化方法和面向对象方法的比较结构化方法是结构化分析,结构化设计和结构化编程的总称,是最早最传统的软件开发方法,也是迄今为止信息系统中应用最普遍、最成熟的一种,它引入了工程思想和结构化思想,使大型软件的开发和编程都得到了极大的改善。 面向对象方法它不仅仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行问题求解,以及如何进行软件系统构造的软件方法学。人们普遍认为面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息和多态性等概念和原则来构造系统的软件开发方法。 结构化方法和面向对象方法二者的比较如下。 一、基本思想的比较 结构化方法的基本思想主要体现在三个方面。一、自顶向下,逐步求精:把程序看成是一个逐步演化的过程。把一个系统与程序看成是一层一层的。例如:户籍管理系统可以划分为:户籍迁入迁出,人员迁入迁出,户籍注销,人员注销等几个子系统,而每个子系统又划分为接收用户信息,实施处理,提供返回信息等等部分。二、模块化:即将几个系统分成几个模块,每个模块实现特定的功能,最终整个系统由这些模块组成。模块跟模块之间通过接口传递信息,模块最重要的特点就是独立性,模块之间还有上下层的关系,上层模块调用下层模块来实现一些功能。三、语句结构化:顺序结构、分支结构、循环结构,都是常用的语句结构。 面向对象方法的基本思想主要有:一、客观世界中的事物都是对象,对象之间存在一定的关系,并且复杂对象由简单对象构成。二、具有相同属性和操作的对象属于一个类,对象是类的一个实例。三、类之间可以有层次结构,即类可以有子类,其中,子类继承父类的全部属性和操作,而且子类有自己的属性和操作。四、类具有封装性,把类内部的属性和一些操作隐藏起来,只有公共的操作对外是可见的,对象只可通过消息来请求其他对象的操作或自己的操作。五、强调充分运用人在日常逻辑思维中经常采用的思想方法与原则。例如:抽象,分类,继承,聚合,封装,关联等。 二、基本原则的比较 结构化方法遵循基本原则有:一、抽象原则:是一切系统科学方法都必须遵循的基本原则,它注重把握系统的本质内容,而忽略与系统当前目标无关的内容,它是一种基本的认知过程和思维方式。二、分解原则:是结构化方法中最基本的原则,它是一种先总体后局部的思想原则,在构造信息系统模型时,它采用自顶向下、分层解决的方法。三、模块化原则:结构化方法最基本的分解原则的具体应用,它主要出现在结构化设计阶段中,其目标是将系统分解成具有特定功能的若干模块,从而完成系统指定的各项功能。 面向对象方法遵循基本原则有:一、抽象:是处理现实世界复杂性的最基本方式,在OO方法中它强调一个对象和其他对象相区别的本质特性,对于一个给定的域确定合理的抽象集是面向对象建模的关键问题之一。二、封装:是对抽象元素的划分过程抽象,由结构和行为组成,封装用来分离抽象的原始接口和它的执行。封装也称为信息隐藏,它将一个对象的外部特征和内部的执行细节分割开来,并将后者对其他对象隐藏起来。三、模块化:是已经被分为一系列聚集的和耦合的模块的系统特性,对于一个给定的问题,确定正确的模块集几乎与确定正确的抽象集一样困难,通常每个模块应该足够简单以便能够被完整地理解。(高内聚低耦合)四、层次:抽象集通常形成一个层次,层次是对抽象的归类和排序,在复杂

结构化方法与面向对象方法的比较分析

结构化方法与面向对象方法的比较分析 吴松娇 (凯里学院信息工程学院,09本(1)班,2009406012) 摘要:剖析了结构化方法和面向对象方法这两种软件开发方法具体的分析设计过程,讨论 了各自在不同软件开发中的应用及局限性,提出了在选用面向对象方法开发大型软件系统的同时可结合结构化方法.通过对具体实例的剖析,揭示DFD 与UML 之间的对应关系,从而提 出结构化软件分析方法与面向对象软件分析方法存在的对应关系,在软件需求分析方法上实现了二者的相互转换,这种对应与转换关系对现有结构化软件的维护及再工程具有指导意义。 关键词:软件开发; 结构化方法; 面向对象方法; 问题域 20 世纪60 年代以来,软件的发展一直受到开发综合症“软件危机”的影响. 为了提高软件质量,软件开发方法不断推陈出新,其中结构化方法[1 ,2 ]经过30 多年的研究及应用,最为成熟且影响最大,直到现在仍有许多系统是用它开发的. 而面向对象方法[1 ,3 ]是在结构化方法、信息建模方法等基础上发展起来的,近10 年来发展较快,现已呈现出取代结构化方法的趋势. 本文具体分析两者在软件开发中的差别以及面向对象方法的优越性. 1 结构化方法 结构化方法基于功能分解设计系统结构,通过不断把复杂的处理逐层分解来简化问题,它 从内部功能上模拟客观世界. 用结构化开发的软件运行效率较高, 且能够增加软件系统的 可 靠性. 1. 1 结构化分析 它是面向数据流进行需求分析的方法,在该阶段力求寻找功能及功能之间的说明. 它主要 采用的工具是数据流图DFD(Data Flow Diagram) ,利用DFD 描述边界和数据处理过程的关系. 1. 2 结构化设计 结构化设计是将数据流图表示的信息转换成程序结构的设计描述,在该阶段力求寻找功 能的实现方法,采用系统结构图表示系统所具有的功能和功能之间的关系. 设计过程分两步完成,第一步以需求分析的结果作为出发点,构造出一个具体的系统设计方案,决定系统的模块结构(包括决定模块的划分、模块间的数据传递及调用关系) . 第二步详细设计即过程设计,在总体设计的基础上,确定每个模块的内部结构和算法,最终产生每个模块的程序流程图. 因此,结构化方法比较适合于像操作系统、实时处理系统等这样的以功能为主的系统. 1. 3 结构化方法的局限 (1) 结构化方法在需求分析中对问题域的认识和描述不是以问题域中固有的事物作为基本 单位,而是打破了各项事物之间的界限,在全局范围内以数据流为中心进行分析,所以分析 结果不能直接反映问题域. 同时,当系统较复杂时,很难检验分析的正确性. 因此,结构化分析 方法容易隐蔽一些对问题域的理解偏差,与后续开发阶段的衔接也比较困难; (2) 结构化方法 中设计文档很难与分析文档对应,因为二者的表示体系不一致. 结构化方法的结果2数据流 图

相关文档
相关文档 最新文档