基本概念
类、对象
类所包含的方法和数据描述了一组对象的共同行为和属性。
在面向对象的系统中,对象是基本的运行实体,它包括数据(属性)和用于数据的操作(行为或方法),一个对象将属性和行为封装为一个整体。
一个对象通常由对象名、属性和操作(行为或方法)三部分组成。现实世界中的每个实体都可抽象为面向对象系统里的一个对象。
类是在对象之上的抽象,对象是类的具体化,是类的实例 。
消息
消息是要求某个对象执行类中定义的某个操作的规格说明,是一个对象与另一个对象的通信单元。一个消息通常包括接受对象名、调用的操作名和适当的参数(如有必要)。
在面向对象程序设计语言中,对象之间通过 ( A ) 方式进行通信
A.消息传递 B.继承 C.引用 D.多态
多态
用最简单的一句话就是:父类型的引用指向子类型的对象。用一句比较通俗的话:同一操作作用于不同的对象,可以产生不同的效果。这就是多态。
多态有四种形式∶参数多态、包含多态、过载多态和强制多态。
-
参数多态和包含多态称为通用多态,
-
过载多态和强制多态称为特定多态。
参数多态 采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型 ( 函数模板和类模板 )
包含多态 包含多态最常见的例子就是子类型化,同样的操作可用于一个类型及其子类型。(注意是子类型,不是子类。) 例子 : virtual 类
过载多态 即(重载多态)。 同一个名(操作符、函数名)在不同的上下文中有不同的类型,程序设计语言中基本类型的大多数操作符都是过载多态的。 **例如:**函数重载和运算符重载
强制多态 :编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。程序设计语言中基本类型的大多数操作符,在发生不同类型的数据进行混合运算时,编译程序一般都会进行强制多态。程序员也可以显示地进行强制多态的操作(Casting)。举个例子,比如,int+double,编译系统一般会把int转换为double,然后执行double+double运算,这个int --> double的转换,就实现了强制多态,即可是隐式的,也可显式转换。
//1.参数多态
//包括函数模板和类模板
//2.包含多态 virtual
class A{
virtual void foo() { printf("A virtual void foo()"); }
};
class B : public A {
void foo() { printf("B void foo()"); }
};
void test() {
A *a = new B();
a->foo(); // B void foo()
}
//3.重载多态
//重载多态是指函数名相同,但函数的参数个数或者类型不同的函数构成多态
void foo(int);
void foo(int, int);
//4.强制多态
//强制类型转换
题目
一个类可以具有多个同名而参数类型列表不同的方法,被称为方法( A )
A.重载
B.调用
C.重置
D.标记
多态分为参数多态、包含多态÷过载多态和强制多态四种不同形式,其中(B)多态在许多语言中都存在,最常见的例子就是子类型化。
A . 参数
B . 包含
C . 过载
D . 强制
重置、重载
- 重置(Overiding)是指在子类中改变父类的既有函数行为的操作。其基本思想是通过一种动态绑定机制的支持,使得子类在继承父类界面定义的前提下,用适合于自己要求的实现去置换父类中的相应实现。
- 重载(Overloading)是指在子类中保留既有父类的函数名,但使用不同类型的参数,即在面向对象编成语言中,允许同名、具有不同类型参数的函数共同存在。
UML
UML六种依赖关系
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Composition), 依赖(Dependency)
泛化
【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性。
泛化是一般化和特殊化的关系,特殊元素(子元素)的对象可替换一般元素(父元素)的对象。用这种方法,子元素共享了父元素的结构和行为。
【箭头指向】:带三角箭头的实线,箭头指向父类
实现
【实现关系】:是一种类与接口的关系, 表示类是接口所有特征和行为的实现.
【箭头指向】:带三角箭头的虚线,箭头指向接口
实现是类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。
依赖
【依赖关系】:是一种使用的关系, 即一个类的实现需要另一个类的协助。
【代码表现】:类B作为参数被类A在某个method方法中使用
【箭头及指向】:带箭头的虚线,指向被使用者
关联
【关联关系】:是一种拥有的关系, 它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子
关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者
组合
【组合关系】:是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门。 组合关系是关联关系的一种特例 。
【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
聚合
【聚合关系】:是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体
面向对象技术中,组合关系表示( D )。
A.包与其中模型元素的关系
B.用例之间的一种关系
C.类与其对象的关系
D.整体与其部分之间的一种关系
UML中的各种图
用例图
用例图(use case diagram)展现了一组用例、参与者(Actor)以及它们之间的关系。
类图
类图(clssdiagram)展现了一组对象、接口、协作和它们之间的关系。在面向对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图。包含主动类的类图给出了系统的静态进程视图。
对象图
对象图(object diagram)展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照。对象图一般包括对象和链
序列图
序列图(sequence diagram)是场景(scenario)的图形化表示,描述了以时间顺序组织的对象之间的交互活动。
活动图
活动图(activity digram)是一种特殊的状态图,它展现了在系统内从一个活动到另一个 活动的流程
状态图
状态图(state diagram)展现了一个状态机,它由状态、转换、事件和活动组成。状态图关注系统的动态视图,对于接口、类和协作的行为建模尤为重要,强调对象行为的事件顺序。
构件图
构件图(component diagam)展现了一组构件之间的组织和依赖。构件图专注于系统的静态实现视图。它与类图相关,通常把构件映射为一个或多个类、接口或协作
部署图
部署图(deployment diagram)是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。部署图对系统的静态部署视图进行建模,它与构件图相关。通常,一个结点是一个在运行时存在并代表一项计算资源的物理元素,至少拥有一些内容,常常具有处理能力,包含一个或多个构件。
通信图