📜  OOAD-对象模型

📅  最后修改于: 2020-12-14 04:06:37             🧑  作者: Mango


对象模型根据对象可视化软件应用程序中的元素。在本章中,我们将研究面向对象系统的基本概念和术语。

对象和类

对象和类的概念在本质上相互联系,并构成了面向对象范式的基础。

目的

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

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

  • 决定对象的特性以及对象所拥有的属性值的状态。

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

可以根据应用程序的需求对对象进行建模。对象可能具有物理存在,例如客户,汽车等。或无形的概念性存在,例如项目,过程等。

一个类表示具有相同特征的对象的集合,这些对象具有共同的行为。它给出了可以从中创建对象的蓝图或描述。创建作为类成员的对象称为实例化。因此,对象是类的实例。

一类的成分是-

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

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

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

  • x坐标,表示中心的x坐标
  • y坐标,表示中心的y坐标
  • a,表示圆的半径

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

  • findArea(),计算面积的方法
  • findCircumference(),计算周长的方法
  • scale(),增加或减少半径的方法

在实例化期间,为至少某些属性分配值。如果创建对象my_circle,则可以分配x-coord:2,y-coord:3和a:4之类的值来描述其状态。现在,如果在比例缩放因子2的my_circle上执行了scale()操作,则变量a的值将变为8。此操作将改变my_circle的状态,即对象表现出某些行为。

封装和数据隐藏

封装形式

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

资料隐藏

通常,设计一个类时,只能通过其类方法访问其数据(属性),并且避免直接外部访问。隔离对象数据的过程称为数据隐藏或信息隐藏。

在Circle类中,可以通过以下方式合并数据隐藏:使属性在类外部不可见,并向该类添加另外两种方法来访问类数据,即-

  • setValues(),为x坐标,y坐标和a赋值的方法
  • getValues(),用于检索x坐标,y坐标和a值的方法

在这里,对象my_circle的私有数据无法通过未封装在Circle类中的任何方法直接访问。相反,应通过setValues()和getValues()方法进行访问。

讯息传递

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

消息传递的特点是-

  • 在两个对象之间传递的消息通常是单向的。
  • 消息传递使对象之间的所有交互成为可能。
  • 消息传递本质上涉及调用类方法。
  • 消息传递中可能涉及不同进程中的对象。

遗产

继承是一种机制,通过扩展和完善其功能,可以从现有类中创建新类。现有类称为基类/父类/超类,新类称为派生类/子类/子类。子类可以继承或派生超类的属性和方法,只要超类允许。此外,子类可以添加自己的属性和方法,并且可以修改任何超类方法。继承定义了“是–一个”关系。

从哺乳动物类别中,可以得出许多类别,例如人,猫,狗,牛等。人,猫,狗和牛都具有哺乳动物的独特特征。此外,每个都有其自己的特定特征。可以说,牛是“哺乳动物”。

继承类型

  • 单一继承-子类派生自单个超类。

  • 多重继承-一个子类派生自多个父类。

  • 多级继承-子类从超类派生,而超类又从另一个类派生,依此类推。

  • 层次继承-一个类具有多个子类,每个子类可能具有后续的子类,并连续多个级别,从而形成树结构。

  • 混合继承-多层次继承和多层继承的组合,以形成晶格结构。

下图描述了不同类型的继承的示例。

遗产

多态性

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

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

泛化与专业化

泛化和专业化表示类之间关系的层次结构,其中子类继承自超类。

概括

在泛化过程中,类的共同特征被组合以形成更高层次结构的类,即子类被组合以形成广义的超类。它代表一种“是–一种–某种”关系。例如,“汽车是一种陆地车辆”,或“船是一种水上车辆”。

专业化

专业化是广义化的逆过程。在这里,对象组的区别特征用于从现有类中形成专门类。可以说,子类是超类的专门版本。

下图显示了泛化和专业化的示例。

专业化

链接与关联

链接

链接表示一个对象通过它与其他对象进行协作的连接。伦博将其定义为“物体之间的物理或概念联系”。通过链接,一个对象可以调用方法或浏览另一个对象。链接描述了两个或更多对象之间的关系。

协会

关联是一组具有共同结构和共同行为的链接。关联描述一个或多个类的对象之间的关系。链接可以定义为关联的实例。

协会学位

关联度表示连接中涉及的类的数量。度可以是一元,二进制或三元。

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

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

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

关联基数比

二进制关联的基数表示参与关联的实例数。基数比率有三种类型,即-

  • 一对一-类A的单个对象与类B的单个对象相关联。

  • 一对多-A类的单个对象与B类的许多对象相关联。

  • 多对多-A类的对象可能与B类的许多对象关联,反之,B类的对象可能与A类的许多对象关联。

聚集或组成

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

在这种关系中,“汽车具有-电动机”,汽车是整个对象或集合体,电动机是汽车的“一部分”。聚合可以表示-

  • 物理隔离-例如,计算机由监视器,CPU,鼠标,键盘等组成。

  • 概念上的包容性–例如,股东拥有股份。

对象模型的好处

既然我们已经了解了有关面向对象的核心概念,那么值得一提的是,该模型必须具备的优势。

使用对象模型的好处是-

  • 它有助于更快地开发软件。

  • 易于维护。假设某个模块出现错误,那么程序员可以修复该特定模块,而软件的其他部分仍可以正常运行。

  • 它支持相对轻松的升级。

  • 它支持对象,设计和功能的重用。

  • 它降低了开发风险,尤其是在集成复杂系统时。