面向对象技术 - 南京大学计算机科学与技术系

Download Report

Transcript 面向对象技术 - 南京大学计算机科学与技术系

1
面向对象技术
Institute of Computer Software, Nanjing University
相关信息
2

教师:余萍
 Email:
[email protected]
 Office: 蒙民伟楼610A

助教

课程网页:http://cs.nju.edu.cn/yuping/
Institute of Computer Software
Nanjing University
2015/7/21
引言
摘要
4

课程简介
--“选不选这门课?”

背景概述
--“所学内容在专业知识结构中的位置?”
Institute of Computer Software
Nanjing University
2015/7/21
欢迎选修“面向对象技术”!
5

通过选修本课程,可以
 更深入地掌握面向对象的基本原理
 更广泛地了解面向对象的新兴技术
 更自信地面对实际开发的技术需求
 获取
3 个学分
Institute of Computer Software
Nanjing University
2015/7/21
课程性质
6

不是又一门语言/编程课
 虽然在C++/Java

之外还会提到别的语言,如Eiffel
不是一般意义上的软件工程课
 但讲授面向对象软件开发的实用技术

不属于理论计算机科学
 但会利用一些较成熟易用的理论工具
Institute of Computer Software
Nanjing University
2015/7/21
课程目标
7

用OOPL写代码 → OOP → OOSC

朴素的OOP → 系统化的OOP

传统OO技术 → 现代的OO技术

Beyond OO
Institute of Computer Software
Nanjing University
2015/7/21
课程内容
8
主要包括但不限于:
 面向对象的起源及其动机
 面向对象技术的核心概念和基本原理




面向对象技术的应用


Object, Class, Encapsulation, Polymorphism, ……
Abstract Data Type, Design by Contract, ……
Garbage Collection, Exception Handling, ……
Design Patterns, Application Frameworks
面向对象的发展



并发、分布对象计算、服务计算,……
面向对象分析/开发/测试
AOP
Institute of Computer Software
Nanjing University
2015/7/21
教材与参考资料
9


徐家福, 王志坚, 翟成祥 等,《对象式程序设计语
言》, 南京大学出版社,1993年2月。
Bertrand Meyer, Object-Oriented Software Construction,
Second Edition, Prentice Hall, 1997. 清华大学出版社影
印。

Jolt Award 1998
Institute of Computer Software
Nanjing University
2015/7/21
教材与参考资料
10




Richard Mitchell and Jim Mckim. Design by Contract, by
Example.
Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides,
Design Patterns: Elements of Reusable Object-Oriented software,
Addison-Wesley , 1994.
Craig Larman, Applying UML and Patterns, Prentice Hall PTR,
2nd edition. 2001.
Clemens Szyperski. Component Software: Beyond ObjectOriented Programming. Addison-Wesley, 2nd edition, 2002.
Institute of Computer Software
Nanjing University
2015/7/21
授课方式
11


Lecture
Seminar
Institute of Computer Software
Nanjing University
2015/7/21
考核方式
12

笔试 50%
 开卷

or 闭卷?
平时 50%
 其中
 书面作业
25% (态度第一)
 开发练习 25% (一个月后公布具体要求)

主动Presentation 约 20-30% (额外加分)
 理论探索,学习心得,实践经验
均可
Institute of Computer Software
Nanjing University
2015/7/21
有何建议
13




课程内容?
授课方式?
考核方式?
其他?
Institute of Computer Software
Nanjing University
2015/7/21
背景概述
摘要
15



从软件到软件工程
软件质量
前对象时代
 结构化程序设计

面向对象思想的兴起
 模块化
 软件复用
Institute of Computer Software
Nanjing University
2015/7/21
软件
16

概念
 一系列按照特定顺序组织的数据和指令的集合
 程序+文档
 程序:计算任务的处理对象和处理规则的描述
 文档:为了便于了解程序所需的阐明性资料

特点
 本质上是逻辑产品
 现实中受多方制约
Institute of Computer Software
Nanjing University
2015/7/21
软件:逻辑产品
17

基础:
 图灵机,1936
 冯·诺依曼结构,1945
Alan Turing: 抽象计
算模型(数学逻辑
机)
Institute of Computer Software
Nanjing University
2015/7/21
软件:逻辑产品
18

存储程序计算机在体系
结构上主要特点有:






以运算单元为中心
采用存储程序原理
存储器是按地址访
问、线性编址的空间
控制流由指令流产生
指令由操作码和地址
码组成
数据以二进制编码
Institute of Computer Software
Nanjing University
2015/7/21
软件:多方制约
19

作为一种“工程”
 目的性
 资源
 物理运行平台

工程问题
 质量、生产率
1969,NATO会议
软件危机
 根源:复杂性

软件工程:将系统化的、规范的、可度量的方法
应用于软件的开发、运行和维护的过程,即将工
程化应用于软件中。
Institute of Computer Software
Nanjing University
2015/7/21
软件
20

通常而言,“质量”与“生产率”是一对矛盾

我们首先来考虑“质量”。
 有趣的是,在软件领域,对“质量”的重视有时竟然
会带来“生产率”的提升!
 说明软件工程远未成熟,二者的“共同底线”还未达
到。
Institute of Computer Software
Nanjing University
2015/7/21
软件质量
21

何谓“质量”?
 产品或工作的“优劣程度”
 何为“优”?何为“劣”?

可从“外部” 和 “内部” 两个不同的侧面来考察软
件产品 (Meyer, McCall)
 外部质量因素:用户直接感觉到的
 内部质量因素:用户不能直接发觉,体现在软件
“文本”(源码、设计报告、分析报告等)中
 Being
modular; readable…
Institute of Computer Software
Nanjing University
2015/7/21
外部质量因素
22

Correctness 正确性


Robustness 鲁棒性



SPECIFICATION
非法访问或修改 合理反应
Extendibility 易扩展性

Reliability
异常情况 合理反应
Integrity 完整性


依据规约 完成任务
软件产品 应 规约改变 而 改变
Correctness
Robustness
Integrity
Reusability 易复用性

软件模块 用于构建多种不同应用
Institute of Computer Software, Nanjing University
2015/7/21
外部质量因素
23

Compatibility 兼容性


Efficiency 高效性


尽量少地使用硬件资源 处理器时间 内存 外存 网络带宽 等
Portability 易移植性


软件模块相互组合的难易
转换到不同的软硬件平台上
Ease of use 易用性

不同背景的用户学习使用软件产品解决问题的难易
Institute of Computer Software
Nanjing University
2015/7/21
外部质量因素
24

Functionality
 功能

Timeliness
 按时交付

Verifiability, Reparability, Economy
Institute of Computer Software
Nanjing University
2015/7/21
维护费用分类
25
70% of the cost of software is devoted to
maintenance!
[Lientz 1980]
Institute of Computer Software
Nanjing University
2015/7/21
Tradeoffs
26

鱼与熊掌不可得兼

权衡 折中

软件技术研究的常见主题:
以何种方式 鱼与熊掌可以得兼?
 在何种条件下 拿部分鱼换取更多熊掌?何时反
之?
 在何种条件下
Institute of Computer Software
Nanjing University
2015/7/21
Key Concerns
27

Reliability [correctness + robustness]:
 It
should be easier to build software that functions
properly, and easier to guarantee what it does.

Modularity [reusability + extendibility]:
 We
should build less software!
 Software should be easier to modify.
Institute of Computer Software, Nanjing University
2015/7/21
应对软件危机
28

开发的角度:分析、设计方法的研究
 前对象时代
 Structured

Programming, Design, Analysis
管理的角度:软件开发过程的工程化
 生命周期模型
 瀑布模型,快速原型法,螺旋模型,喷泉模型等
Institute of Computer Software
Nanjing University
2015/7/21
应对复杂性的基本途径
29

“元方法”
 Decomposition
 Abstraction
 Hierarchy
分而治之
抓本质,抓重点
应对大系统,纲举目张
复杂性是软件开发过程中所固有的特
质。[Booch94]
Institute of Computer Software
Nanjing University
2015/7/21
结构化开发方法
30

何谓“结构化”?
 结构化程序设计
 设计过程
程序组织 语句构造 结构化
 结构化分析设计
 数据流图

数据字典 模块结构图
结构化的好处
 科学化
可读性 模块化 信息隐蔽...
Institute of Computer Software
Nanjing University
2015/7/21
结构化开发方法
31

自顶向下(Top-down) 的功能设计
Topmost functional abstraction
自顶向下,逐步求精
A
Sequence
B
D
C
Conditional
Loop
C1
I
I1
C2
I2
Institute of Computer Software
Nanjing University
2015/7/21
软件生命周期模型
32
FEASIBILITY STUDY
瀑布型
REQUIREMENTS
ANALYSIS
SPECIFICATION
GLOBAL DESIGN
DETAILED DESIGN
•The activities are necessary.
(But: merging of middle activities.)
•The order is the right one.
PROJECT PROGRESS
IMPLEMENTATION
VALIDATION &
VERIFICATION
DISTRIBUTION
Institute of Computer Software, Nanjing University
2015/7/21
The waterfall model of the lifecycle
33
FEASIBILITY STUDY
REQUIREMENTS
ANALYSIS
DESIGN AND
IMPLEMENTATION
SPECIFICATION
GLOBAL DESIGN
DETAILED DESIGN
IMPLEMENTATION
VALIDATION &
VERIFICATION
PROJECT TIME
DISTRIBUTION
Institute of Computer Software, Nanjing University
2015/7/21
Problems with the waterfall
34






Late appearance of actual code.
Lack of support for requirements change — and more
generally for extendibility and reusability.
Lack of support for the maintenance activity (70% of software
costs).
Division of labor hampering Total Quality Management.
Impedance mismatches.
Highly synchronous model.
WARNING: The waterfall model is not the recommended
process model for O-O development
Institute of Computer Software, Nanjing University
2015/7/21
Quality Control?
35
Analysts
Designers
Implementers
Testers
Customers
Institute of Computer Software, Nanjing University
2015/7/21
Impedance mismatches
36
As Management requested it.
As Programming developed it.
As the Project Leader defined it.
As Operations installed it.
As Systems designed it.
What the user wanted.
软件模块化
37

概念





模块(module): “Self-Contained”; well-defined interfaces
模块化(modular): 软件构造为一组“模块”之有序组合,从而易
于装配、易于修补替换模块。
Extendibility 和 Reusability 的要求;
模块化是上述“元方法”的推论。
什么样的方法是“模块化”的?



目标(Five Criteria)
规则(Five Rules)
原则(Five Principles)
Institute of Computer Software
Nanjing University
2015/7/21
Five Criteria
38





Decomposability 易分解性
Composability 易组合性
Understandability 易理解性
Continuity 连续性
Protection 保护性
Institute of Computer Software
Nanjing University
2015/7/21
易分解性 Decomposability
39


Method helps decompose complex problems into
subproblems.
COROLLARY: Division of labor.

Counter-example: General initialization module.
Institute of Computer Software
Nanjing University
2015/7/21
易组合性 Composability
40

Method favors production of software elements that may be freely
combined with each other to produce new software.
Example: Unix shell conventions
Program1 | Program2 | Program3
Institute of Computer Software
Nanjing University
2015/7/21
易理解性 Understandability
41

模块应可单独理解
不能牵涉太广
 自描述


Counter example: sequential dependencies A|B|C
Institute of Computer Software
Nanjing University
2015/7/21
连续性 Continuity
42




Method ensures that small changes in specifications yield small
changes in architecture.
Design method: Specification  Architecture
Example: Principle of Uniform Access (see next)
Counter example: static arrays
Institute of Computer Software
Nanjing University
2015/7/21
The Principle of Uniform Access
43


Facilities managed by a module are accessible to its
clients in the same way whether implemented by
computation or by storage.
Definition: A client of a module is any module that
uses its facilities.
Institute of Computer Software
Nanjing University
2015/7/21
Uniform Access: An example
44
balance = list_of_deposits.total – list_of_withdrawals.total
list_of_deposits
(A1
)
list_of_withdrawals
balance
(A2
)
思考:C++和Java如何实
现?
list_of_deposits
list_of_withdrawals
Ada, Pascal, C/C++, Java, C#:
A1: a.balance
A2: balance (a)
a.balance()
Simula, Eiffel:
a.balance
Institute of Computer Software
Nanjing University
2015/7/21
模块保护 Protection
45

异常不扩散 扩散范围有限
 Example:
validating input at the source
 Counter example: undisciplined exceptions
Protection violation
Institute of Computer Software
Nanjing University
2015/7/21
Five Rules
46





Direct Mapping 直接映射
Few Interfaces 接口要少
Small Interfaces 接口要小
Explicit Interfaces 接口要明确
Information Hiding 信息隐蔽
降低耦合度
Institute of Computer Software
Nanjing University
2015/7/21
直接映射 Direct mapping
47

Method yields software systems whose modular structure
remains compatible with any modular structure devised in
the process of modeling the problem domain.
Structure of the problem
model
direct mapping
Structure of the solution
software
Institute of Computer Software
Nanjing University
2015/7/21
Few interfaces
48

Every module communicates with as few others as
possible.
(A)
(B)
(C)
n-1
n(n-1)/2
n-1
Institute of Computer Software
Nanjing University
2015/7/21
Small interfaces
49

If two modules communicate, they exchange as little
information as possible.
x, y
z
Institute of Computer Software
Nanjing University
2015/7/21
Explicit interfaces
50


Whenever two modules A and B communicate, this is
obvious from the text of A or B or both.
Counter example: data sharing
Module A
Module B
Modifies
Accesses
Data item
x
Institute of Computer Software
Nanjing University
2015/7/21
Information hiding
51

Underlying question: how does one “advertise” the
capabilities of a module?

Every module should be known to the outside world through an
official, “public” interface.

The rest of the module’s properties comprises its “secrets”.

It should be impossible to access the secrets from the outside.
Institute of Computer Software
Nanjing University
2015/7/21
Information Hiding
52

The designer of every module must select a subset of the module’s
properties as the official information about the module, to be made
available to authors of client modules.
Public part
Secret part
Institute of Computer Software
Nanjing University
2015/7/21
Information hiding
53

理由:
 模块连续性
 亦有助于
Decomposability,Composabilty,
Understandability等
 模块用户只需关注public的部分
Institute of Computer Software
Nanjing University
2015/7/21
模块
54


模块的根本特征是“相对独立,功能单一”。换言之,
一个好的模块必须具有高度的独立性和相对较强的功
能。
“耦合度”和“内聚度”



耦合度,是指模块之间相互依赖性大小的度量,耦合度越
小,模块的相对独立性越大。
内聚度,是指模块内各成份之间相互依赖性大小的度量,内
聚度越大,模块各成份之间联系越紧密,其功能越强。
在模块划分应当做到“耦合度尽量小,内聚度尽量
大”。
Institute of Computer Software
Nanjing University
2015/7/21
Five Principles
55





Linguistic Modular Units
Self-Documentation
Uniform Access
Open-Closed
Single-Choice
主要是程序设计语言的设计原则
Institute of Computer Software, Nanjing University
2015/7/21
软件复用
56



为什么要复用?
复用什么?
问题
 非技术
 技术

解决途径?
Institute of Computer Software
Nanjing University
2015/7/21
为什么要“复用”
57

“懒惰”

提高生产率

改善质量
Institute of Computer Software
Nanjing University
2015/7/21
复用什么
58





人
设计,规约
设计模式 体系结构 应用框架
源码级复用
封装模块 (抽象描述)
Institute of Computer Software
Nanjing University
2015/7/21
非技术障碍
59

心理
 不信任
 旧习惯



短期利益
构件检索
构件发布 与 商业模型
Institute of Computer Software
Nanjing University
2015/7/21
技术问题
60

复用的本质困难
 通常不能一成不变地拿来就用
 Reusability
 Extensibility
 软件的开放性要求和封闭性要求之间的冲突

对象技术比传统技术有明显改善
Institute of Computer Software
Nanjing University
2015/7/21
传统技术复用支持
61

过程 Routine
 成功应用:数值计算函数库
 问题明确
规约简单
 问题相互独立
 数据结构相对简单
 不足:对adaption的支持弱
则需好多参数
 一个routine支持一种variant则没有factoring out common
behaviors.
 若要一个routine支持多种variants
Institute of Computer Software
Nanjing University
2015/7/21
传统技术复用支持
62

包 package
 Linguistic
Modular Unit
 Features (变量 过程)
 信息隐蔽
 单独编译
Institute of Computer Software
Nanjing University
2015/7/21
Encapsulation languages (“Object-based”)
63



Ada, Modula-2, CLU...
Basic idea: gather a group of routines serving a related oopurpose, such as has, insert, remove etc., together with the
appropriate data structure descriptions.
Advantages:

For supplier author: Get everything under one roof. Simplifies configuration
management, change of implementation, addition of new primitives.

For client author: Find everything at one place. Simplifies search for existing
routines, requests for extensions.
Institute of Computer Software, Nanjing University
2015/7/21
传统技术复用支持
64

包 作为 复用单元的 不足
 类型、模块分离
 多类型支持?
 Factoring
out commonality?
Institute of Computer Software, Nanjing University
2015/7/21
小结
65



构建高质量的软件系统是我们的目标
随着软件的广泛应用及其规模的不断增长,软
件的易扩展性和易复用性愈发关键
在模块化和复用性两个方面
 传统技术存在不足
 面向对象模型提供了较好的解决方案
Institute of Computer Software
Nanjing University
2015/7/21
作业
66

1.发送邮件
 To:
[email protected]
 主题: 选修面向对象技术
 内容:
 姓名和学号
 需不需要这门课的学分
 对课程内容、授课方式、考试方式等的任何建议
Institute of Computer Software, Nanjing University
2015/7/21
作业
67
2.使用Wikipedia,查阅以下一些词条并翻译
1.
2.
3.
Programming paradigm
Structured Programming
Object-Oriented Programming
注意:
Wikipedia是一个重要的信息源。科技类词条的可靠性很高,虽然未
必详尽。但亦不可尽信,不可作为严谨学术研究的文献依据。
PS: 作业提交方式:纸面或电子邮件
Institute of Computer Software
Nanjing University
2015/7/21