软件设计师考点——面向对象技术

647 阅读8分钟

基本概念

类、对象

类所包含的方法和数据描述了一组对象的共同行为和属性。


在面向对象的系统中,对象是基本的运行实体,它包括数据(属性)和用于数据的操作(行为或方法),一个对象将属性和行为封装为一个整体。

一个对象通常由对象名属性操作(行为或方法)三部分组成。现实世界中的每个实体都可抽象为面向对象系统里的一个对象。

类是在对象之上的抽象,对象是类的具体化,是类的实例
。

消息

消息是要求某个对象执行类中定义的某个操作的规格说明,是一个对象与另一个对象的通信单元。一个消息通常包括接受对象名、调用的操作名和适当的参数(如有必要)。


在面向对象程序设计语言中,对象之间通过  ( 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)

泛化

【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性。

泛化是一般化和特殊化的关系,特殊元素(子元素)的对象可替换一般元素(父元素)的对象。用这种方法,子元素共享了父元素的结构和行为。


【箭头指向】:带三角箭头的实线,箭头指向父类

image-20200916145301597

实现

【实现关系】:是一种类与接口的关系, 表示类是接口所有特征和行为的实现.

【箭头指向】:带三角箭头的虚线,箭头指向接口

实现是类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。


image-20200916145358492

依赖

【依赖关系】:是一种使用的关系, 即一个类的实现需要另一个类的协助。

【代码表现】:类B作为参数被类A在某个method方法中使用

【箭头及指向】:带箭头的虚线,指向被使用者

image-20200916150311364

关联

【关联关系】:是一种拥有的关系, 它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子

关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

【箭头及指向】:带普通箭头的实心线,指向被拥有者

image-20200916150539236

组合

【组合关系】:是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门。 组合关系是关联关系的一种特例
。

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

image-20200916170309564

聚合

【聚合关系】:是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量

【箭头及指向】:带空心菱形的实心线,菱形指向整体

image.png

面向对象技术中,组合关系表示(  D   )。

A.包与其中模型元素的关系
B.用例之间的一种关系
C.类与其对象的关系
D.整体与其部分之间的一种关系

image-20201019141228765

UML中的各种图

image-20200916162148071

UML各种图总结-精华

用例图

用例图(use case diagram)展现了一组用例、参与者(Actor)以及它们之间的关系。


image-20200916163033149

类图


类图(clssdiagram)展现了一组对象、接口、协作和它们之间的关系。在面向对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图。包含主动类的类图给出了系统的静态进程视图。


image-20200916163316017

对象图


对象图(object diagram)展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照。对象图一般包括对象和链

image-20200916163511934

序列图


序列图(sequence diagram)是场景(scenario)的图形化表示,描述了以时间顺序组织的对象之间的交互活动。

image-20200916163812821

活动图


活动图(activity digram)是一种特殊的状态图,它展现了在系统内从一个活动到另一个
活动的流程


image-20200916164202253

状态图


状态图(state diagram)展现了一个状态机,它由状态、转换、事件和活动组成。状态图关注系统的动态视图,对于接口、类和协作的行为建模尤为重要,强调对象行为的事件顺序。


image-20200916164336812

构件图


构件图(component diagam)展现了一组构件之间的组织和依赖。构件图专注于系统的静态实现视图。它与类图相关,通常把构件映射为一个或多个类、接口或协作

image-20200916164717076

部署图


部署图(deployment diagram)是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。部署图对系统的静态部署视图进行建模,它与构件图相关。通常,一个结点是一个在运行时存在并代表一项计算资源的物理元素,至少拥有一些内容,常常具有处理能力,包含一个或多个构件。

image-20200916164542348

通信图

image-20201105150035997

设计模式

image-20200918112337965

img

image-20201019155924154

image-20201019151825129

image-20201019155824754

image-20201019161257670