第1章 绪论 面向对象程序设计(C++).

Slides:



Advertisements
Similar presentations
Which TV program is the video? 中国达人秀 China’s Got Talent 选秀节目 talent show talent n. 天资;天赋.
Advertisements

数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
系統分析與設計 楊子青 H-1 H 、物件導向技術 n 物件導向的基本概念 – 物件、類別 – 封裝、繼承 – 同名異式 ( 多型 ) 、超荷 ( 過載 ) n 物件導向分析與設計及塑模工具 n UML 塑模工具.
<<會計資訊系統課程講義>> 統一塑模語言(UML)語法精要 -- 物件導向概念、需求分析及系統分析
第一章 绪论.
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
Ch02物件導向程式設計 物件導向系統分析與設計.
第一章 面向对象程序设计.
Oracle数据库 Oracle 子程序.
第7单元 面向过程编程—— 继承与多态.
第9章 面向对象方法学引论 9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型
第14章 c++中的代码重用.
新世代計算機概論 第14章 程式語言.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
第九章 字符串.
Using C++ The Weird Way Something about c++11 & OOP tricks
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
H、物件導向技術 物件導向的基本概念 物件、類別 封裝、繼承 同名異式(多型) 、超荷(過載) 物件導向分析與設計及塑模工具 UML塑模工具.
Chap 18 類別與物件 夫有土者,有大物也。有大物者,不可以物。 物而不物,故能物物。 明乎物物者之非物也,豈獨治天下百姓而已哉!
(Exec1) GIS 空间分析-使用ArcGIS (Exec1)
第16章 VB.NET物件導向與.NET Framework
物件導向系統分析與設計與UML.
單元3:軟體設計 3-2 順序圖(Sequence Diagrams)
面向对象建模技术 软件工程系 林 琳.
创建型设计模式.
Object-Oriented Programming:
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Java软件设计基础 5. 继承与多态.
第9章 類別圖與物件圖 9-1 類別圖與物件圖的基礎 9-2 類別圖的符號 9-3 類別關係 9-4 物件圖 9-5 繪製類別圖與物件圖
第4章 物件導向分析與設計簡介 4-1 物件導向的軟體系統開發 4-2 物件導向分析與設計 4-3 UML的物件導向分析與設計
管理信息结构SMI.
辅导课程六.
Java
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第九單元 Classes and data abstraction I
What have we learned?.
第4章(1) 空间数据库 —数据库理论基础 北京建筑工程学院 王文宇.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
动态规划(Dynamic Programming)
Advanced Basic Key Terms Dependency Actor Generation association
两种不同类别的软件: 功能预定义软件;用户驱动的软件。他们对软件工程方法有不同的需求
第七章 操作符重载 胡昊 南京大学计算机系软件所.
Abstract Data Types 抽象数据类型 Institute of Computer Software 2019/2/24
Unit 11.Operating System 11.1 What’s OS 11.2 Related Courses
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
解决变化问题的自底向上 流程建模方法 严志民 徐玮.
计算机问题求解 – 论题1-7 - 不同的程序设计方法
C语言程序设计 主讲教师:陆幼利.
$9 泛型基础.
VisComposer 2019/4/17.
從 ER 到 Logical Schema ──兼談Schema Integration
Aspect Oriented Programming
Inheritance -II.
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++程序设计 吉林大学计算机科学与技术(软件)学院.
数据集的抽取式摘要 程龚, 徐丹云.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
辅导课程十五.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第一讲 面向对象方法学与信息系统建模.
第二节 C语言的特点.
怎樣把同一評估 給與在不同班級的學生 How to administer the Same assessment to students from Different classes and groups.
Arguments to the main Function and Final Project
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
大数据搜索挖掘实验室 第五章 子程序设计 张华平 副教授 博士 Website: 大数据搜索挖掘实验室
面向对象程序设计 C++教程 西安工业大学 于帆.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
Presentation transcript:

第1章 绪论 面向对象程序设计(C++)

《面向对象程序设计》 中国科技大学计算机系 马建辉 绪论 面向对象程序设计思想的由来 面向对象程序设计概述 《面向对象程序设计》 中国科技大学计算机系 马建辉

1. 面向对象程序设计的思想由来

Where are we? I 程序设计方法的发展历程 评价软件质量的因素 过程式程序设计的局限性 从过程式转变到面向对象 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.1 程序设计方法的发展历程(1) 早期:面向机器的语言,用于科学计算。 例1: X86 ASM 00401010 push ebp 00401011 mov ebp,esp 00401013 sub esp,40h 00401016 push ebx 00401017 push esi 00401018 push edi 00401019 lea edi,[ebp-40h] 0040101C mov ecx,10h 00401021 mov eax,0CCCCCCCCh 00401026 rep stos dword ptr [edi] 《面向对象程序设计》 中国科技大学计算机系 马建辉

00401028 push offset string "hello world" (0042501c) 0040102D mov ecx,offset cout (00428bc0) 00401032 call ostream::operator<< (0040b5a0) 00401037 xor eax,eax 00401039 pop edi 0040103A pop esi 0040103B pop ebx 0040103C add esp,40h 0040103F cmp ebp,esp 00401041 call __chkesp (00401060) 00401046 mov esp,ebp 00401048 pop ebp 00401049 ret

缺点: --- 极难掌握,软件规模小 --- 对非数字运算难以胜任

1.1 程序设计方法的发展历程(2) 例2: algol 60 60年代:面向过程的“技巧式”程序设计 ( 如:早期的fortran, Cobol, Algol 60) 例2: algol 60 BEGIN FILE F (KIND=REMOTE); EBCDIC ARRAY E [0:11]; REPLACE E BY "HELLO WORLD!"; WHILE TRUE DO WRITE (F, *, E); END; END. 《面向对象程序设计》 中国科技大学计算机系 马建辉

例3: COBOL IDENTIFICATION DIVISION.     PROGRAM-ID.     HELLO-WORLD.     ENVIRONMENT DIVISION.     DATA DIVISION.     PROCEDURE DIVISION.     DISPLAY "Hello, world!". STOP RUN.

缺点: -- 程序控制复杂, -- 过于依赖程序员的经验和技巧, -- 难读、难改、难移植

1.1 程序设计方法的发展历程(3) 70年代早期:结构化的过程式程序设计 (如:C,Pascal) 例4: C语言 #include <stdio.h> int max(int,int); // max模块 int main(void) {         int i; i=max(10,20); printf("Hello, world!\n"); return 0;  } 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.1 程序设计方法的发展历程(3续) -- 分解原则、模块独立原 则、编码结构化原则 -- 最大的软件:385万行 (美国导弹预警系统) -- 大型软件难以维护、难 以修改和移植。 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.1 程序设计方法的发展历程(4) 70年代中后期:软件工程 -- 有成套的管理方法 -- 强调模块性、抽象 性、易维护、可修 改、可移植 -- 软件工程原则:将软 件“做什么”和“怎么 做”分离 -- 最大的软件:4000万 行(美国航天飞机监 控系统) 《面向对象程序设计》 中国科技大学计算机系 马建辉

“需求分析”处于软件工程的核心地位。一旦需求发生变更,工作量是巨大的! 因此,描述需求的方法是关键!!

Why ??? 现实情况怎么样? 一方面,各种程序设计方法学被提出来  大得可怕,却并不好用!  看上去好像我们要花绝大多数的时间写文档, 以至于没有时间编写程序…… 另一方面,软件危机没有得到根本上的解决  超过50%的大型软件项目以失败告终! Why ??? 《面向对象程序设计》 中国科技大学计算机系 马建辉

Where are we? I I 程序设计方法的发展历程 如何评价软件的质量? 过程式程序设计的局限性 从过程式转变到面向对象 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.2.1 如何评价软件的质量? 软件的内部质量 —正确性 —健壮性 —可扩充性 —可复用性 —可读性 —可维护性 —其他(兼容性,效率,可移植性…)  事实上,这些方面正是结构化程序设计和软件工程追求的目标。 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.2.2 过程式程序设计本身的局限性 过程式程序设计是一种以功能为中心、基于功能分解的程序设计方法。 一个过程式程序由一些子程序构成,每个子程序对应一个子功能,它实现了功能抽象。子程序描述了一系列的操作,它是操作的封装体。 过程式程序的执行过程体现为一系列的子程序调用。在过程式程序中,数据处于附属地位,它独立于子程序,在子程序调用时作为参数传给子程序使用。 下面的经典公式刻划了过程式程序设计的本质特征: 程序 = 算法 + 数据结构 《面向对象程序设计》 中国科技大学计算机系 马建辉

例: 自我介绍, whoami 定义一个结构体PERSON,包含成员name;生成一个结构体变量,调用函数设置他的姓名;调用函数whoami打印他的姓名. struct Person{ char name[20]; …; }; void whoami(struct Person); void main(){ struct Person mike; strcpy(mike.name, “mike”); whoami(mike); } void whoami(struct Person p) { printf(“%s”, p.name); 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.2.2 过程式程序设计本身的局限性(续) 程序员只能按过程式程序设计的逻辑结构(而不是按问题本身的逻辑结构)去描述问题;因此,问题的求解实际上是一种过程的抽象。 也就是说,程序员必须在实际问题模型(问题空间)和机器模型(解空间)之间进行转换。 然而,这种转换并不是线性的。因此,当实际问题发生改变时,程序中各种成分也随之改变。其中: 功能:很容易变 过程执行顺序:很容易变 接口:极容易变 数据:极容易变 《面向对象程序设计》 中国科技大学计算机系 马建辉

Where are we? I 程序设计方法的发展 评价软件质量的因素 结构化程序设计的局限性 从过程式转变到面向对象 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.3 从过程式转变到面向对象 结构体+过程(易变)对象(稳定) 对象:把问题空间中的事物在解空间中的表示称为“对象”。 基于过程基于对象 按计算机的结构建模对问题本身建模 也就是说:    当我们读描述解决方案的代码时,也就是在读表达该问题的文字! OOP允许程序员用问题本身的术语来描述问题,而不是用(要运行解决方案的)计算机的术语来描述问题。 每个对象看上去就象一台小计算机,它有状态,有可以执行的运算。 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.3.1 例: 自我介绍, whoami OOP(C++): class PERSON{ 定义一个类PERSON,包含属性name和行为whoami;生成一个名为mike的对象(mike);mike调用自己的行为whoami说出他的名字. class PERSON{ public: char name[20]; void whoami(){cout<<name;}; …; // }; void main(){ PERSON mike(“mike”); mike.whoami(); } 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.3.2 面向对象程序设计的编程思想 对象式程序设计是一种以对象为中心、基于数据抽象的程序设计方法。 对象式程序设计通常称为面向对象程序设计。一个面向对象程序由一些对象构成,对象是由一些数据及可施于这些数据上的操作所构成的封装体。对象的特征由相应的类来描述,一个类可以从其它的类继承。 面向对象程序的执行过程体现为各个对象之间相互发送和处理消息.面向对象程序可简单地表示成下面的公式: 程序 = 对象/类 + 对象/类 + … 对象/类 = 数据 + 操作 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.3.3 对象技术(OT)的年代表 《面向对象程序设计》 中国科技大学计算机系 马建辉

1.4 对象技术(OT)的年代表(续) Simula: Smalltalk C++: 在兼容原有C语言的基础上,进一步加入支持面向对象技术的要素,如数据抽象、继承、多态等。 Java: UML: 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.面向对象程序设计概述

Where are we? 什么是对象 什么是类 OO的四个基本原理 多态性和泛化 I 《面向对象程序设计》 中国科技大学计算机系 马建辉

对象的定义 对象的标识 对象的状态 对象的操作 2.1 什么是对象? 对象的定义 对象的标识 对象的状态 对象的操作

2.1.1 对象的非正式定义 非正式地,一个对象用来描述一个实体(entity),这个实体可以使物理实体、概念上的实体或者是软件。 physical entity: 卡车 Conceptual entity :化学反应过程 Software entity : 链表 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.1.2 对象的一个更正式的定义 对象,是现实世界中某个实体在计算机逻辑中的映射和描述。 Attributes(属性) 2.1.2 对象的一个更正式的定义 对象,是现实世界中某个实体在计算机逻辑中的映射和描述。 对象具有标识(identity),在一个明确的边界(boundary)里封装了状态(state)和行为(behavior)。 State is represented by attributes and relationships. Behavior is represented by operations, methods, and state machines. Attributes(属性) Operations(操作) 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.1.3 对象的标识(Identity) 每一个对象都有一个唯一的标识,即使它的状态跟其他对象相同。 Professor “J Clark” teaches Biology Professor “J Clark” teaches Biology Identity: ProfJClark_f ProfJClark_m 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.1.4 对象的状态(state) 状态(state)描述的是对象在不同时刻所表现出来的一种状况(condition)或情形(situation): 例如,满足某种条件,在做某件事情或者等待某个事件的发生。 通常对象的状态随时间的变化而改变。 (终身职位) Discipline(学科): Finance(金融学) Professor Clark Maximum Course Load(最大课程负担): 3 classes 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.1.5 对象的行为(Behavior) 对象的行为确定了一个对象如何行动(acts),如何对事件进行响应(reacts)。 Professor Clark’s behavior Submit Final Grades Accept Course Offering Take Sabbatical(休假年) 《面向对象程序设计》 中国科技大学计算机系 马建辉

Where are we? 什么是对象? 什么是类 OO的四个基本原理 多态性和泛化 I 《面向对象程序设计》 中国科技大学计算机系 马建辉

类的定义 类的属性 类的操作 举例 类和对象的关系 2.2 什么是类? 类的定义 类的属性 类的操作 举例 类和对象的关系

2.2 类(Class) A class(类) is a description of a set of objects that share the same attributes(属性), operations(操作), relationships(关系), and semantics(语义). An object is an instance(实例) of a class. A class is an abstraction(抽象) in that it Emphasizes relevant characteristics. (强调相关的本质特征) Suppresses other characteristics. (舍去其他的无关特征) 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.2.1 类的属性(Attributes) An attribute is a named property of a class that describes the range of values that instances of the property may hold. A class may have any number of attributes or no attributes at all. 属性 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.2.2 类的操作(Operation) A service that can be requested from an object to effect behavior. An operation has a signature, which may restrict the actual parameters that are possible. (操作是可以被另一个对象请求执行而实现某种行为的服务。一个操作有一个签名,该签名可以对实际参数进行约束。) A class may have any number of operations or none at all. 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.2.3 类course (花名册) 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.2.4 类的UML表示 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.2.5 类的UML表示的组成部分 A class has three sections: The class name (类名) The structure (属性) The behavior (操作) 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.2.6 Objects 和Classes的关系 A class is an abstract definition of an object. (类是对象的抽象定义) It defines the structure and behavior of each object in the class. (定义类中每一个对象的结构和行为) It serves as a template for creating objects. (类是创建对象的模板) Classes are not collections of objects. 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.2.6 Objects 和Classes的关系(例) Professor Meijer Professor Allen 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.2.6.1 类和对象中的属性 《面向对象程序设计》 中国科技大学计算机系 马建辉

Where are we? 什么是对象? 什么是类? OO的四个基本原理 多态性和泛化 I 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.3 面向对象的四个基本原理 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.3.1 什么是抽象(Abstraction)

2.3.1 什么是抽象(Abstraction) The essential characteristics of an entity that distinguishes it from all other kinds of entities. (区别于其他实体的本质特征) Defines a boundary relative to the perspective of the viewer. (定义一个相对于观察者的角度的边界) Is not a concrete manifestation, denotes the ideal essence of something. (不是一种有形的表现,表示的是事物的本质) 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.3.1.1 例:抽象 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.3.2 什么是封装(Abstraction)

2.3.2 什么是封装(Encapsulation) Hides implementation from clients. (封装把具体实现隐藏起来,对客户使用者不可见。增加了实现的“弹性”--resiliency) Clients depend on interface(接口). clients 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.3.2.1 对象的接口(Interface) 对象的接口(Interface)规定我们能向特定的对象发出什么请求,而具体的实现(属性)则被隐藏起来了。 Class TV{ public: void turn_on(){ }; void turn_off(){ }; void volume_up(){ }; void volume_down(){ }; void change_channel(int n){ }; private: ……; // 不能使用 }; 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.3.2.2 封装的本质:隐藏实现 通过封装,使得程序员分为: -类创建者:专注于实现类 -客户程序员:使用类的用户,专注于使用类 优点: 2.3.2.2 封装的本质:隐藏实现 通过封装,使得程序员分为:  -类创建者:专注于实现类  -客户程序员:使用类的用户,专注于使用类 优点:  - 避免客户程序员插手他们不应当接触的部分。 (通过public, private,protected控制客户的访问) - 实现者可以随时修改被隐藏的内部工作方式,而不影响客户程序员(的代码)。 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.3.3 什么是模块性(Modularity)

2.3.3 什么是模块性(Modularity) Breaks up something complex into manageable pieces. (把一个复杂的事物分成易于处理的碎片) Helps people understand complex systems. (帮助人们理解复杂的系统) 《面向对象程序设计》 中国科技大学计算机系 马建辉

例:模块性—大问题分解成小问题 (缴费系统) (课程编目系统) (学生管理系统) (选课系统) 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.3.4 什么是层次(Hierarchy)

2.3.4 什么是层次(Hierarchy) 提高抽象程度 降低抽象程度 处在层次中同一层(level)的元素,也应该处在抽象的同一层。 (资产) (有价证券) (不动产) 降低抽象程度 (债券) 处在层次中同一层(level)的元素,也应该处在抽象的同一层。 《面向对象程序设计》 中国科技大学计算机系 马建辉

Where are we? 什么是对象? OO的四个基本原理 什么是类 多态性和泛化 I 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.4.1 多态性(Polymorphism) The ability to hide many different implementations behind a single interface. 多态性是能够把多种不同的实现隐藏在一个单一的接口后面的能力。 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.4.1.1 多态性:例1 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.4.1.2 多态性:例2 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.4.1.3 多态性的实现机制 晚绑定 vs 早绑定 Upcasting vs Downcasting 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.4.2 泛化(Generalization) A relationship among classes where one class shares the structure and/or behavior of one or more classes. (泛化是类与类之间的这样一种关系:其中一个类共享一个或多个其它类的结构和行为) Defines a hierarchy of abstractions in which a subclass inherits from one or more super classes. (定义了之类继承父类的抽象层次) Single inheritance.(单继承) Multiple inheritance. (多继承) Is an “is a kind of” relationship. (是一种“同一类”的关系) 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.4.3 继承:重用接口 通过继承,可以创建一个与已存在的类(基类)具有类似功能的类(派生类)。 --- 派生类包含了基类的所有成员; --- 派生类复制了基类的接口,因此派生类 与基类是相同类型的。 --- 可以对派生类加以扩充: 方法一:添加全新的函数 (is-like-a) 方法二:只改变基类中函数的行为,即“重载”函数。(is-a) 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.4.3.1 单继承:例1 基类Shape含有大小、颜色位置等属性及图示的方法。 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.4.3.2 单继承:例2 《面向对象程序设计》 中国科技大学计算机系 马建辉

Is-like-a vs is-a-kind-of 参见教材第 页 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.4.3.3 多继承(Multiple Inheritance) Use multiple inheritance only when needed and always with caution! 《面向对象程序设计》 中国科技大学计算机系 马建辉

2.4.3.4 继承的本质 A subclass inherits its parent’s attributes, operations, and relationships. A subclass may: Add additional attributes, operations,relationships. Redefine inherited operations. (Use caution!) Common attributes, operations, and/or relationships are shown at the highest applicable level in the hierarchy. Inheritance leverages the similarities among classes. 继承提高了类与类之间的相似性。 《面向对象程序设计》 中国科技大学计算机系 马建辉

3. 小结(Review) What is an object? What are the four principles of object orientation? Describe each. What is a class? How are classes and objects related? What is an attribute? An operation? Define polymorphism. Provide an example of polymorphism. What is generalization? 《面向对象程序设计》 中国科技大学计算机系 马建辉