第2章 理解面向对象概念
《系统分析与设计》课程教学大纲

《系统分析与设计》课程教学大纲课程英文名称:System analysis and design课程代码:R0902635 学时数:56 学分数:3.5课程类型:专业基础课程适用学科专业:软件工程先修课程:《面向对象程序设计》,《软件工程基础》,《数据库原理及应用》执笔者:编写日期:审核人:一、课程简介《系统分析与设计》是软件工程专业的专业基础课程。
学生通过该课程的学习,可掌握面向对象软件系统分析与设计的基本原理、方法与技术,培养软件系统建模分析、系统分析与设计、软件模块设计、软件界面设计等专业能力。
Software system architecture design is a professional basic course of software engineering. Through the study of this course, students can master the basic principles, methods and technologies of object-oriented software system analysis and design, and cultivate the professional abilities of software system modeling analysis, software system architecture design, software module design, software interface design, etc.二、课程目标课程达成度评价指标点达成度评价三、教学计划(一)教学内容、要求及教学方法本课程共56学时,课堂讲授40学时,课内实验16学时。
教学内容由如下章节组成:第1章系统分析与设计概述(CM1) 4学时教学方法:课堂面授。
采用课堂知识点讲授的教学方法,让学生理解课程内容的概念、原理和相关技术。
面向对象的概念

1.面向对象的概念面向对象(Object-Oriented)=对象(Object)+类(Class)+ 继承(Inheritance)+通信(Communication)如果一个软件系统是使用这样4个概念设计和实现的,则将该软件系统称为面向对象的。
下面给出每个概念的具体定义。
1.1 对象从一般意义上讲,对象是现实世界中一个实际存在事物,它可以是有形的(比如一辆汽车),也可以是无形(比如一项计划)。
对象构成世界的一个独立单位,它具有自己的静态特征和动态特征。
静态特征即可用某种数据来描述的特征,动态特征即对象所表现的行为或对象所具有的功能。
现实世界中的任何事物都可以称作对象,它是大量的、无处不在的。
不过,人们在开发一个系统时,通常只是在一定的范围(问题域)内考虑和认识与系统目标有关的事物,并用系统中的对象抽象地表示它们。
所以面向对象方法在提到“对象”这个术语时,既可能泛指现实世界中的某些事物,也可能专指它们在系统中的抽象表示,即系统中的对象。
我们主要对后一种情况讨论对象的概念,其定义是:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。
一个对象由一组属性和对这组属性进行操作的一组服务构成。
属性和服务,是构成对象的两个主要因素,其定义是:属性是用来描述对象静态特征的一个数据项。
服务是用来描述对象动态特征(行为)的一个操作序列。
一个对象可以有多项属性和多项服务。
一个对象的属性和服务被结合成一个整体,对象的属性值只能由这个对象的服务存取。
在有些文献中把对象标识(OID)列为对象的另一要素。
对象标识也就是对象的名字,有“外部标识”和“内部标识”之分。
前者供对象的定义者或使用者用,后者为系统内部惟一的识别对象。
(怎么感觉这点跟android开发里面的id是一样的,在某个文件下有编程人员定义的所有属性的id,并且是唯一的,一般不允许更改,属于系统内部分配。
) 另外需要说明以下两点:第一点是,对象只描述客观事物本质的与系统目标有关的特征,而不考虑那些非本质的与系统目标无关的特征。
面向对象

面向对象面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。
面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。
如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
定义首先根据客户需求抽象出业务对象;然后对需求进行合理分层,构建相对独立的业务模块;之后设计业务逻辑,利用多态、继承、封装、抽象的编程思想,实现业务需求;最后通过整合各模块,达到高内聚、低耦合的效果,从而满足客户要求。
在Java中,面向对象可以看成面向抽象和面向接口编程。
浅谈面向对象谈到面向对象,这方面的文章非常多。
但是,明确地给出对象的定义或说明对象的定义的非常少——至少我现在还没有发现。
起初,“面向对象”是专指在程序设计中采用封装、继承、多态等设计方法。
可是,这个定义显然不能再适合现在情况。
面向对象的思想已经涉及到软件开发的各个方面。
如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)。
许多有关面向对象的文章都只是讲述在面向对象的开发中所需要注意的问题或所采用的比较好的设计方法。
看这些文章只有真正懂得什么是对象,什么是面向对象,才能最大程度地对自己有所裨益。
这一点,恐怕对初学者甚至是从事相关工作多年的人员也会对它们的概念模糊不清。
面向对象的分解根据抽象关键的问题域来分解系统。
面向对象的设计是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法把系统构造成“现实世界”的对象。
一、传统开发方法存在问题1.软件重用性差重用性是指同一事物不经修改或稍加修改就可多次重复使用的性质。
软件重用性是软件工程追求的目标之一。
2024年C++面向对象程序设计教案(含多款)

C++面向对象程序设计教案(含多款)C++面向对象程序设计教案一、教学目标1.理解面向对象程序设计的基本概念,包括类、对象、继承、多态等。
2.掌握C++面向对象程序设计的基本语法和编程技巧。
3.能够运用面向对象的思想进行程序设计,解决实际问题。
二、教学内容1.面向对象程序设计的基本概念(1)类与对象类是对具有相同属性和行为的一组对象的抽象描述。
对象是类的实例,具有类定义的属性和行为。
(2)继承继承是面向对象程序设计的一个重要特性,用于表示类之间的层次关系。
子类可以继承父类的属性和行为,并在此基础上添加新的属性和行为。
(3)多态多态是指同一个操作作用于不同的对象时,可以有不同的解释和行为。
多态分为编译时多态和运行时多态。
2.C++面向对象程序设计的基本语法(1)类的定义与实现类定义包括类名、属性(成员变量)和方法(成员函数)。
类实现包括成员函数的定义。
(2)构造函数与析构函数构造函数用于创建对象时初始化成员变量,析构函数用于对象销毁时释放资源。
(3)继承与派生继承使用关键字class和public、protected、private访问限定符。
派生类可以添加新的成员变量和方法,也可以重写父类的方法。
(4)多态的实现多态可以通过虚函数、抽象类和接口实现。
虚函数使用关键字virtual声明,抽象类包含至少一个纯虚函数,接口是一种特殊的抽象类,只包含纯虚函数。
3.面向对象程序设计实例(1)设计一个简单的银行账户管理系统,包括账户类、储蓄账户类和信用卡账户类。
(2)设计一个图形类库,包括点、线、矩形和圆形等基本图形类。
三、教学方法1.讲授法:讲解面向对象程序设计的基本概念、语法和编程技巧。
2.案例分析法:通过分析实际案例,让学生理解面向对象程序设计的应用。
3.实践法:让学生动手编写代码,加深对面向对象程序设计的理解。
4.讨论法:组织学生讨论面向对象程序设计在实际项目中的应用。
四、教学评价1.课后作业:布置课后作业,检查学生对课堂知识的掌握程度。
面向对象的基本思想

面向对象的基础思想1 类与对象(重点)1.1类与对象的基本关系类与对象是整个面向对象概念之中的最为重要的组成部分。
类:类是对整个现实世界的一种合理的抽象,是一种共性的产物,在类之中主要有两个组成部分:属性(变量)、行为(方法);对象:是一个具体的,可以使用的产物,是一种个性的表示。
实际上类中规定了一个对象的具体行为,而对象是一个类的具体表现。
类只有通过对象才可以使用,所以在开发之中一定要先有类之后再定义对象。
但是一个类产生之后就好比汽车的设计图纸那样,本身并不能直接使用,必须按照图纸生产出具体的汽车之后才可以开,所以需要对象,而对象定义格式如下:格式一:声明并实例化对象格式二:分步完成通过以上的格式可以发现,依然存在了关键字new,所以这一操作也一定表示要开辟堆内存空间,同时需要注意的是,当一个对象开辟空间之后可以按照如下的两个方式来操作类中的内容:·操作类中的属性:对象.属性;·操作类中的方法:对象.方法();范例:声明并实例化对象但是类本身属于引用数据类型,所以以上的程序依然要牵扯到内存的划分,同样使用两块内存:·堆内存:保存的是每一个对象所具备的属性;·栈内存:保存的是一块堆内存的使用地址,可以简单理解为对象名称。
1.2浅深入引用传递清楚了以上的内存关系之后,下面再来对另外一个类似的程序进行观察。
如果说现在同时产生了两个只要发现了关键字new,那么一定表示要开辟的是一块新的内存空间,每一块堆内存空间都有一个栈内存指向它。
范例:观察如下程序发现现在一个per对象没有进行实例化的操作,这个时候程序编译没有任何的语法错误,但是程序执行的时候出现了以下的错误提示:现在给出的是“NullPointerException”,表示空指向异常。
此异常肯定会伴随你的开发人生走完的那一刻,此异常只有在引用数据类型操作的时候才会出现。
NullPointerException更准确的讲法是指使用只声明而未开辟空间的引用类型所造成的问题,所以为了区分此概念,以后对于对象而言,在操作上就会给出两个不同的名词:·声明对象:只开辟了栈内存空间的对象,无法直接使用;·实例化对象:有了对应的堆内存空间指向,可以使用;以上的分析流程和数组是完全一样的,因为数组也属于引用数据类型,在数组学习的时候强调过,所谓的引用传递实际上指的就是一块堆内存空间可以同时被多个栈内存所指向的操作,那么对于类也是一样的,引用传递指的是一块堆内存同时被不同的对象(不同的栈)所指向。
面向对象的概念面向对象建模面向对象分析与模型化面向对象

打电话者拿起电话受话器 电话忙音开始 打电话者拨数字(8) 电话忙音结束 打电话者拨数字(2) ....... 打电话者拨数字(3) 接电话者的电话开始振铃 铃声在打电话者的电话上传出 接电话者回答 接电话者的电话停止振铃 铃声在打电话者的电话中消失 通电话 .........
状态图与事件追踪图的关系
揿下鼠标按钮(按钮、位置) 拿起电话受话器
数字拨号(数字)
事件追踪图
事件追踪图侧重于说明发生于系统 执行过程中的一个特定“场景”。
场景也叫做脚本,是完成系统某个 功能的一个事件序列。
场景通常起始于一个系统外部的输 入事件,结束于一个系统外部的输 出事件,它可以包括发生在这个期 间的系统所有的内部事件。
类是一组具有相同数据结构和相同 操作的对象的集合。
类的定义包括一组数据属性和在数 据上的一组合法操作。
类定义可以视为一个具有类似特性 与共同行为的对象的模板,可用来 产生对象。
在一个类中,每个对象都是类的实 例 (Instance),它们都可使用类中 提供的函数。
继承 (Inheritance)
面向对象方法学的要点(2)
对象彼此之间仅能通过传递消息互相联系 面向对象的方法学可以用下列方程来概括:
OO=objects+classes+inheritance+ communication with messages
如果一个软件系统是使用这样 4 个概念设计和实现的,则我们认 为这个软件系统是面向对象的。
这个新的子集合可以认为是既存类 的一个特殊化。
面向对象建模
所谓模型,就是为了理解事物而对事物作出 的一种抽象,是对事物的一种无歧义的书面 描述。
VB第二章公开课教案教学设计课件【一等奖】

典型例题
例3、下列关于属性、方法、事件概念的叙述中错误的是( ) A、一个属性总是与某一个对象相关 B、一个方法隶属于一个对象 C、一个事件总是与某一个对象相关 D、事件由对象触发,而方法是对事件的响应
作用: 在对象上输出信息 对象:窗体、图形框或打印机(Pinter) ,省略对象在窗体上输出。 Spc(n)函数:插入n个空格,允许重复使用。 Tab(n)函数:左端开始右移动n列,允许重复使用。 ;(分号):光标定位上一个显示的字符后。 ,(逗号):光标定位在下一个打印区的开始位置处。每个打印 区占14列。 无 ;,换行。
2.3 窗体的常用属性、方法和事件
窗体属性决定了窗体的外观与操作。 窗体外观 如下图
一. 属性
(一)基本属性 1. Name名称属性(任何对象都具有的)
创建的对象名称,有默认的名。在程序中,控件名是 作为对象的标识而引用,不会显示在窗体上。 2. Height、width、top和left属性
单位为twip:1 twip=1/20点=1/1440英寸=1/567cm
例如,将窗体Form1的背景色设置为红色,则可使用下 面三种情况:
Form1.BackColor = RGB(255, 0, 0) Form1.BackColor = &HFF&
(低字节到高字节分别表示红、绿、蓝的值)
Form1.BackColor = vbRed
(二)窗体的其它常用属性
1.MaxButton最大化按钮和MinButton最小化按钮: 当值为 Ture,有最大或最小化按钮,False则无。
第2章 面向对象技术与UML-郭

在结构化方法中,现实世界被映射为功能(函数)的集合。
结构化方法的特点: 结构化程序设计:程序 = 算法 + 数据结构 从算法的角度进行建模,大量精力都集中在控制流程和 算法的分解上(功能分解)。 缺点:需求变动、维护困难
2.1 面向对象技术概述
面向对象方 法的引入: 软件复杂性 的增长, 使软件开发 越来越困难。 面向对象的 方法按照人 类的自然思 维的方式, 面对客观世 界建立软件 模型。
对象的标识(名字)
每一个对象都有一个唯一的标识, 即使其状态有可 能与其它对象一样。
no1 no2 no3
对象的状态(数据属性)
一个对象的状态是它反映于现实世界的一系列 属性:
基本描述 载客人数 它与其它对象的关系 任一时刻的历史状态
飞机类型 飞机驾驶员 所属的航空公司
可能的状态: 停泊 班机 747 飞行 着陆
继承的描述
子类可以继承父类的全部属性与操作,并 可以添加或重新定义所继承的方法。 如果是重新定义,称为覆盖。
注意:覆盖和重载是不同的。
覆盖的例子
重载的例子
public class A{ String name; public String getValues(){ return “Name is”+name; } } public class B extends A{ String address; public String getValues(){ return “address is”+address; } }
6. 多态性
定义:同一操作作用于不同的对象,可以有 不同的解释,产生不同的执行结果。 例子: 动物叫
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 2 章 理解面向对象概念
第 2 章 理解面向对象概念
在本章中,你将学习面向对象技术中的基本概念,这些概念是系统建模的基础。你将具 体学习到下列面向对象技术中的概念: 抽象 继承 多态 封装 消息传递 关联 聚集
面向对象技术已经席卷了整个软件界,事实也确实如此。做为一种程序设计方法,面向 对象技术具有很多优点。基于构件的软件开发方法就是面向对象技术孕育出的产物。采用这 种方法建立一个系统时,首先构造一组类(构件),然后通过增加已有构件的功能或者添加 新的构件来逐步扩充系统,最后在建立其它新系统时,你还可以重用先前已经构造好的构件。 这样做可以大大削减系统开发时间。
使用 UML 可以建立起易于使用和易于理解的面向对象模型,以使程序员能够构造出这 些模型所对应的软件制品。因此,UML 对基于构件开发的全过程都有益处。
面向对象是一个思想库——它是依赖于几个核心基本原则的思想库。在这一章中,你将 学习到这些基本原则。你将搞清楚对象是什么,在分析和设计中如何利用对象。从下一章开 始介绍如何根据这些基本原则运用 UML。
式。
图 2.1 洗衣机类(最初的洗衣机模型)是创建洗衣机实例的模板。
还有其它一些要了解的内容。记住,面向对象技术的目标是开发出能够反映现实世界某 个特定片段的软件(或者说这样的软件是对现实世界“建模”)。你考虑到的属性和行为越多, 你所建立的模型就越符合实际。在洗衣机的例子中,如果你在洗衣机类中包括洗涤缸容量 (drum volume)、内部计时器(internal timer)、水阀 (trap)、马达(motor)和马 达转速(motor speed)等属性的话,洗衣机模型就更精确。同样,如果洗衣机类中多了加漂白剂(add bleach)、 设定浸泡时间(time the soak)、设定洗涤时间(time the wash)、设定淋洗时间(time the rinse) 和设定脱水时间(time the spin)等操作的话,也会增加洗衣机模型的的精确性(参见图 2.2)。
对看电视的人来说电 视机隐藏了它的内部 操作。
2.2.5 消息传递
图 2.6 对象封装了其内部信息。也就是说对外界 和其它对象来说,它隐藏了操作的细节。
前面曾经提过,在系统中对象是要相互协作的。对象之间的协作是通过相互发送消息。 一个对象发送一个操作消息给另一个对象,接收消息的对象就执行这个操作。
电视机和遥控器就是我们身边一个直观的例子。当你想看电视的时候,就得到处找电视 机的遥控器,坐在你最喜欢的坐椅上,按下遥控器的“开机”按钮。然后发生了什么呢?遥 控器对象向电视机对象发送了一个开机消息(实实在在的消息),通知电视机打开自己。当
“开机”消息
2.2.6
图 2.7 对象之间消息传递的一个例子。遥控器对象向电视机对象发送消息,通知
2.2.4 封装
在几年前流行有线电视的时候,两个人在一起谈论如何打电话省钱,如果在拨长途电话 号码之前先拨一个特殊的 7 位号码,那么收费就比正常的长途电话费用低。
其中的一个人怀疑地问:“这是什么原理?” 另一个回答说:“爆米花是怎么炸出来的?,关心这个干嘛?”。
第一部分 基础知识
第 2 章 理解面向对象概念
继承到这里还没完。例如家用电器类还可以是家用商品(household item)类的子类。 家具(furniture)类是家用商品类的另一个子类,如图 2.4 所示。当然家具类还有它的子类。
第一部分 基础知识
第 2 章 理解面向对象概念
2.2.3 多态
图 2.4 超类也可以继承其它超类,从而成为其它超类的子类。
2.2.1 抽象
简单地讲,抽象(abstraction)的意思就是过滤掉对象的一部分特性和操作直 到只剩下你所需要的属性和操作。那么“只剩下你所需要的”是什么含义呢?
不同类型的问题需要不同数量的信息,即使这些问题都同属于一个领域也是如此。和第 一次所设计出的洗衣机类相比,第二次所设计的洗衣机类中出现了更多的属性和操作。增加 的属性和操作物有所值吗?
在讨论封装这个主题的时候,还有另一个相关概念。对象对其它对象和外部世 界隐藏了自己的内部信息,因为这个原因封装也被称为信息隐藏(information hiding)。但是对象总要给外部世界提供一个“接口”,用来初始化对象的这些操作。例如, 电视机上一般都有一组按钮或者提供带有按钮的遥控器。洗衣机也提供了一组按键,让你能 够设置洗衣机的温度和水位。电视机的按钮和洗衣机的按键就是一种接口(interface)。
第一部分 基础知识
第 2 章 理解面向对象概念
你想换个电视频道的时候,只需按下遥控器上有关的调台按钮,遥控器对象就向电视机对象 发送不同的调台消息。遥控器还可以通过调音量消息、调音质消息等其它消息与电视机对象 通信。
再回过头来讨论接口。从椅子上起来,走到电视机前直接操纵电视机上自带的按钮也可 以做遥控器所能做到的大部分事情(有空的话你可以自己试试)。电视机提供给你的接口(一 组按钮)显然与提供给遥控器的接口(红外线接收仪)不同。图 2.7 示意了这个过程。
2.1 无处不在的对象
对象,不论是具体的还是抽象的,遍布于我们的周围。它们组成了整个世界。正如前一 章所指出的,典型的现代软件都要模拟现实世界(至少是模拟现实世界的一个片段),因此 程序也通常要模拟现实世界中的对象。如果体会了对象的实质,那么你就能够理解如何用软 件来表达对象。
首先的和最重要的,对象是一个类(种类)的实例。例如,你和我都是人这个 类的实例。对象具有自身的结构(structure)。也就是说,它具有属性(特性) 和行为。对象的行为包括它所能执行的操作。属性和操作合起来被称为特征(feature)。 你和我做为人这个类的对象,都具有一些共同的属性:身高、体重和年龄等(不难想象, 还有许多其它的属性)。我们都能执行一些共同的操作:吃饭、睡觉、读书、写字、说话、 工作等。如果要开发一个处理人事信息的系统(例如工资发放系统或者人力资源部门的信息 管理系统),那么在软件中很可能要包括上面提到的一些属性和操作。 在面向对象世界里,类除了起到分类的作用外,还有其它用途。类是用来创建对象的模 板。可以把类看成是加工小甜饼的机器,这个机器可以制造出新的小甜饼对象(有些人可能 认为这个机器起的作用仍然是分类,此处不做评论)。
在第 3 章“运用面向对象思想”中,你会看到诸如 washing machine 这样的
类 名 被 合 写 成 WashingMachine , 特 征 名 serial number 被 记 为 serialNumber。到本章为止,我们只是用一般语言(汉语、英语)来讨 论面向对象中的基本概念,所以在这里仍然坚持采用一般语言的表达方
如果你是一个开发小组的成员,你所在的开发小组的最终目标是要开发出能够模拟洗衣 机如何工作的计算机程序,那么第二次增加的属性和操作绝对有必要。像这样的计算机程序 (这样的程序对真正制造洗衣机的工程师很可能也会大有益处)必须容纳足够多的信息来准 确的预测当洗衣机刚出厂时、发挥全部功能时和洗衣服时将会发生什么。对这个计算机程序 来说,你可以过滤掉序列号这个属性,因为这个属性很可能没有什么用处。
有时不同的类具有相同名称的操作。例如,你可以打开一扇门、打开一扇窗、 打开一张报纸、打开一件礼物、甚至打开一段对话。每种情形中的“打开 (open)”都是一个不同的操作。用面向对象的术语来讲,每个类都能够自己“知道”如何 执行自己的打开操作。这就叫做多态(polymorphism)(参见图 2.5)。
另一方面,如果你准备编制软件来跟踪记录一个拥有许多洗衣机的洗衣店的交易业务, 那么第二次增加的属性可能就不太值得了。在这个程序中你可能不需要在前一节中所提到的 洗衣机类的许多操作和属性。但是你却需要序列号这个属性用来标识每个洗衣机对象。
你的洗衣机要包括什么,不包括什么,在作出这样的决策后所保留的部分就是对洗衣机 的抽象。
这就是封装(encapsulation)的实质:当一个对象执行自己的操作时,它对外 界隐藏了操作的细节(参见图 2.6)。当我们看电视时,通常大部分人都不关心 视机后面罩子里隐藏的复杂电子元器件,也不关心这些电子器件如何操作来产生电视画 面。电视机做了自己要做的事并且对我们隐藏了它的工作过程。大部分其它家用电器也都是 以这种方式工作的。 封装有什么作用呢?在软件世界中,封装有助于减少某些不利因素的影响。在一个由许 多对象所组成的系统中,对象之间以各种方式相互依赖。如果其中一个对象出现故障,软件 工程师不得不修改它的时候,对其它对象隐藏这个对象的操作意味着只需修改这个对象而不 需要改变其它对象。 再从软件世界转到现实世界,封装对于对象也同样重要。计算机的显示器对中央处理器 隐藏了自己的操作。当显示器发生故障的时候,只需修理它或者把它替换掉。不大可能因为 显示器的故障而修理中央处理器。
另一种可选的陈述是洗衣机、电冰箱、微波炉这些类都是家用电器类的子类 (subclass)。反过来,家用电器是这些类的超类(superclass)。图 2.3 示意了 这种超类-子类关系。
图 2.3 各种家用电器继承了家用电器类的属性和操作。每个具体的家用电器 类都是家用电器类的子类。家用电器类是各个具体家用电器类的超类。
第一部分 基础知识
第 2 章 理解面向对象概念
图 2.2 模型中的属性和操作越多,模型就越接近实际。
2.2 一些概念
面向对象概念并不只局限于对象的属性和行为建模,它还包含对象其它方面的概念。这 些 概 念 包 括 抽 象 ( abstraction )、 继 承 ( inheritance )、 多 态 ( polymorphism) 和 封 装 (encapsulation)。其它三种重要的面向对象概念是消息传递(message sending)、关联 (association)和聚集(aggregation)。下面让我们逐个学习这些概念。
2.2.2 继承
第一部分 基础知识
第 2 章 理解面向对象概念