《面向对象技术与方法》教学大纲
课程名称:面向对象技术与方法
课程类别:学位课编号:YA-04学时:72学时(加36实验学时)编者姓名:李文军单位:中山大学计算机科学系职称:副教授
主审姓名:李师贤单位:中山大学计算机科学系职称:教授
授课对象:软件学院工程硕士研究生专业:软件工程年级:1年级(上学期)
编写日期:2002年6月最后更新:2002年11月24日
课程目的与教学基本要求
面向对象软件开发技术是当前软件产业的主流技术,几乎渗透到软件开发的每一角落。面向对象技术与方法以其封装、信息隐藏、数据抽象、继承、多态性、异常处理、断言机制等特性大大提高了软件产品的可靠性、可重用性和可扩展性。
本课程以Java语言及其开发环境为实例,向学生介绍面向对象技术与方法的基本概念和原理。此外,本
课程还将讲授对象持久性、图形用户界面(GUI)、多线程、网络通信、设计模式等高级课题。学生通过多个课程实验加深对面向对象技术与方法基本概念与高级课题的理解。
本课程要求学生:牢固掌握面向对象技术与方法的封装、信息隐藏、数据抽象、继承、多态性、异常处理等基本特性,并能主动将这些特性运用在实际软件开发中;熟练掌握Java语言及其开发环境(JDK或IDE),并能使用输入∕输出流、数据库连接、图形用户界面、多线程、网络通信等高级API构建复杂的应用程序;通过学习AWT和swing掌握事件驱动风格的软件设计技术;对Java工程化文档和多层(n-tier)设计的软件体系结构有初步了解。
先修课程与后继课程
本课程在软件工程硕士教学大纲中无先修课程,但要求学生至少已掌握一门支持结构化程序设计方法的高级语言(推荐C或Pascal语言,已基本掌握C++语言则更佳)并能用它解决实际应用问题,并要求对算法和数据结构、软件工程、数据库系统、编译原理等领域有基本了解。
本课程的后继课程是必修课“分布式计算技术”、“软件分析与设计”和选修课“Web服务”。
Bruce Eckel, Thinking in Java, 2nd Edition, Prentice Hall, 2000,
pp.1097
教学参考书
[1]James Gosling, Bill Joy, Guy Steele and Gilad Bracha, The Java Language
Specification, 2nd Edition, Addison-Wesley, 2000, PDF e-documents available
[2]Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design
Patterns : Elements of Reusable Object-Oriented Software, Addison-Wesley,
1995, ISBN 0-201-63361-2
[3]Bruce Eckel, Thinking in Patterns : Problem-Solving Techniques using Java (Draft), MindView
Inc., 2001, PDF and HTML e-documents available
[4]Ron LeMaster and David Leberknight , Object-Oriented Programming & Design, CSCI 4448,
University of Colorado, Spring 2002, PDF e-documents available
[5]  A C Norman, Programming in Java, Lent Term 2002, Tutorial on Foundations of Computer Scienc
e,
java网课推荐Cambridge University, PDF e-documents available
[6]Sun Educational Services SL-275, Java Programming Language, Sun Microsystems, 1999, PDF e-
documents available
[7]Scott Ambler, Mapping Objects To Relational Databases, Ronin International, 2000, PDF e-
documents available
本课程的主要教学内容可分为3部分:第一部分讲解关于面向对象程序设计语言与面向对象程序设计方法的理论基础;第二部分涉及面向对象编程与设计在实际应用中必须解决的一些高级课题;第三部分讨论正确使用面向对象编程与设计的典型设计模式。
学习第三部分的内容时若能主动结合第二部分内容参照学习,将可获得更好的学习效果。
第一部分理论基础(共32学时)
第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和缺省访问4类访问控制的规则;介绍访问控制的典型编程模式;解释利用访问控制实现信息隐藏的好处。
使用对象实例:利用两个例子程序介绍Java语言创建对象的用法;讨论多层设计思想的应用;详细讨论对象状态的概念,以及如何利用构造方法初始化对象状态;复习对象的参数传递方式。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。