求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
软件架构与设计教程
1.介绍
2.关键原则
3.架构建模
4.面向对象范式
5.数据流体系结构
6.以数据为中心的架构
7.分层架构
8.面向交互的架构
9.分布式架构
10.基于组件的架构
11.用户界面
12.架构设计
 
 
软件架构与设计-面向对象范式
来源: Tutorials Point     翻译:Alice(火龙果软件)

您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



290 次浏览
4次

面向对象 (OO) 范式的形成源于新编程方法的最初概念,而对设计和分析方法的兴趣则要晚得多。OO分析和设计范式是OO编程语言被广泛采用的逻辑结果。

  • 第一种面向对象的语言是 Simula(真实系统模拟),由挪威计算中心的研究人员于 1960 年开发。

  • 1970 年,Alan Kay 和他在 Xerox PARC 的研究小组创建了一台名为 Dynabook 的个人计算机和第一个纯面向对象的编程语言 (OOPL) - Smalltalk,用于对 Dynabook 进行编程。

  • 在 1980 年代,Grady Booch 发表了一篇题为《面向对象的设计》的论文,主要介绍了编程语言 Ada 的设计。在随后的版本中,他将自己的想法扩展到了完整的面向对象设计方法。

  • 在 1990 年代,Coad 将行为思想融入到面向对象的方法中。

其他重要的创新是 James Rum Baugh 的对象建模技术 (OMT) 和 Ivar Jacobson 的面向对象软件工程 (OOSE)。

OO 范式简介

面向对象范式是开发任何软件的重要方法。大多数体系结构样式或模式(如管道和筛选器、数据存储库和基于组件)都可以使用此范例来实现。

面向对象系统的基本概念和术语 -

对象

对象是面向对象环境中的真实世界元素,可能具有物理或概念存在。每个对象都有 -

  • 将其与系统中的其他对象区分开来的标识。

  • 确定对象的特征属性以及对象所包含的属性值的状态。

  • 表示对象在其状态变化方面执行的外部可见活动的行为。

可以根据应用程序的需要对对象进行建模。一个物体可能有物理存在,比如客户、汽车等;或无形的概念存在,如项目、过程等。

类表示具有相同特征属性的对象的集合,这些对象表现出共同的行为。它提供了蓝图或可从中创建的对象的描述。将对象创建为类的成员称为实例化。因此,对象是类的实例。

一个类的组成部分是 -

  • 要从类实例化的对象的一组属性。通常,类的不同对象在属性值上存在一些差异。属性通常称为类数据。

  • 描述类对象行为的一组操作。操作也称为函数或方法。

让我们考虑一个简单的类 Circle,它表示二维空间中的几何图形圆。此类的属性可以标识如下:

  • x–coord,表示中心的 x 坐标

  • y-coord,表示中心的 y 坐标

  • a,表示圆的半径

它的一些操作可以定义如下:

  • findArea(),一种计算面积的方法

  • findCircumference(),一种计算周长的方法

  • scale(),一种增加或减少半径的方法

封装

封装是在类中将属性和方法绑定在一起的过程。通过封装,可以从外部隐藏类的内部细节。它只允许通过类提供的接口从外部访问类的元素。

多态性

多态性最初是一个希腊词,意思是采取多种形式的能力。在面向对象范式中,多态性意味着以不同的方式使用操作,具体取决于它们所操作的实例。多态性允许具有不同内部结构的对象具有通用的外部接口。多态性在实现继承时特别有效。

让我们考虑两个类,Circle 和 Square,每个类都有一个方法 findArea()。尽管类中方法的名称和用途相同,但内部实现(即计算面积的过程)对于每个类都是不同的。当 Circle 类的对象调用其 findArea() 方法时,该操作会查找圆的面积,而不会与 Square 类的 findArea() 方法发生任何冲突。

关系

为了描述一个系统,必须提供系统的动态(行为)和静态(逻辑)规范。动态规范描述了对象之间的关系,例如消息传递。静态规范描述了类之间的关系,例如聚合、关联和继承。

消息传递

任何应用程序都需要许多对象以和谐的方式进行交互。系统中的对象可以使用消息传递相互通信。假设一个系统有两个对象 - obj1 和 obj2。如果 obj1 希望 obj2 执行其方法之一,则对象 obj1 向对象 obj2 发送消息。

组合或聚合

聚合或组合是类之间的一种关系,通过这种关系,一个类可以由其他类的对象的任意组合组成。它允许将对象直接放置在其他类的主体中。聚合被称为“部分”或“具有”关系,能够从整体导航到其部分。聚合对象是由一个或多个其他对象组成的对象。

协会

关联是一组具有共同结构和共同行为的链接。关联描述一个或多个类的对象之间的关系。链接可以定义为关联的实例。关联的程度表示连接中涉及的类数。学位可以是一元的、二元的或三元的。

  • 一元关系连接同一类的对象。

  • 二进制关系连接两个类的对象。

  • 三元关系连接三个或更多类的对象。

遗产

它是一种机制,允许通过扩展和完善其功能从现有类中创建新类。现有类称为基类/父类/超类,新类称为派生类/子类/子类。

子类可以继承或派生超类的属性和方法,前提是超类允许这样做。此外,子类可以添加自己的属性和方法,并可以修改任何超类方法。继承定义了“是-a”关系。

从哺乳动物类中,可以派生出许多类,例如人类、猫、狗、牛等。人类、猫、狗和牛都具有哺乳动物的独特特征。此外,每个都有其独特的特点。可以说,牛“是——一种”哺乳动物。

OO分析

在软件开发的面向对象分析阶段,确定系统需求,确定类,并确认类之间的关系。面向对象分析的目的是了解系统的应用领域和具体要求。此阶段的结果是需求规范和对逻辑结构和系统可行性的初步分析。

相互结合用于面向对象分析的三种分析技术是对象建模、动态建模和功能建模。

对象建模

对象建模根据对象来开发软件系统的静态结构。它标识对象、对象可以分组到的类以及对象之间的关系。它还标识了表征每个类的主要属性和操作。

对象建模的过程可以通过以下步骤进行可视化:

  • 识别对象并分组到类中

  • 确定类之间的关系

  • 创建用户对象模型关系图

  • 定义用户对象属性

  • 定义应对类执行的操作

动态建模

在分析了系统的静态行为之后,需要检查其与时间和外部变化有关的行为。这就是动态建模的目的。

动态建模可以定义为“一种描述单个对象如何响应事件的方式,这些事件可以是由其他对象触发的内部事件,也可以是由外部世界触发的外部事件。

动态建模的过程可以通过以下步骤进行可视化:

  • 识别每个对象的状态

  • 识别事件并分析操作的适用性

  • 构建动态模型图,由状态转换图组成

  • 根据对象属性表示每种状态

  • 验证绘制的状态转换图

功能建模

函数建模是面向对象分析的最后一个组成部分。函数模型显示对象中执行的过程,以及数据在方法之间移动时的变化方式。它指定对象建模操作的含义和动态建模的操作。功能模型对应于传统结构化分析的数据流图。

功能建模的过程可以通过以下步骤进行可视化:

  • 识别所有输入和输出

  • 构建显示功能依赖关系的数据流图

  • 说明每个函数的用途

  • 确定约束条件

  • 指定优化条件

面向对象设计

在分析阶段之后,使用面向对象设计 (OOD) 将概念模型进一步开发为面向对象的模型。在 OOD 中,分析模型中与技术无关的概念被映射到实现类上,识别约束,并设计接口,从而生成解决方案域的模型。面向对象设计的主要目的是开发系统的结构架构。

面向对象设计的阶段可以确定为:

  • 定义系统的上下文

  • 设计系统架构

  • 识别系统中的对象

  • 设计模型的构建

  • 对象接口规范

面向对象设计可以分为两个阶段——概念设计和详细设计。

概念设计

在此阶段,将确定构建系统所需的所有类。此外,还为每个班级分配了特定的职责。类图用于阐明类之间的关系,交互图用于显示事件的流程。它也被称为高级设计。

详细设计

在此阶段,属性和操作根据交互图分配给每个类。开发了状态机图来描述设计的更多细节。它也被称为低级设计。

设计原则

以下是主要的设计原则 -

解耦原理

维护具有一组高度相互依赖的类的系统是很困难的,因为对一个类的修改可能会导致其他类的级联更新。在面向对象设计中,可以通过引入新的类或继承来消除紧密耦合。

确保凝聚力

内聚类执行一组密切相关的功能。缺乏内聚意味着——一个类执行不相关的功能,尽管它不影响整个系统的运行。它使软件的整个结构难以管理、扩展、维护和更改。

开闭原理

根据这一原则,系统应该能够扩展以满足新的要求。不应因系统扩展而修改系统的现有实现和代码。此外,在开闭原则中必须遵循以下准则:

  • 对于每个具体类,必须维护单独的接口和实现。

  • 在多线程环境中,保持属性的私有性。

  • 尽量减少全局变量和类变量的使用。
290 次浏览
4次