📅  最后修改于: 2020-12-14 04:06:37             🧑  作者: Mango
对象模型根据对象可视化软件应用程序中的元素。在本章中,我们将研究面向对象系统的基本概念和术语。
对象和类的概念在本质上相互联系,并构成了面向对象范式的基础。
对象是面向对象的环境中的现实世界元素,可能具有物理或概念上的存在。每个对象都有-
将其与系统中其他对象区分开的标识。
决定对象的特性以及对象所拥有的属性值的状态。
表示对象根据其状态变化执行的外部可见活动的行为。
可以根据应用程序的需求对对象进行建模。对象可能具有物理存在,例如客户,汽车等。或无形的概念性存在,例如项目,过程等。
一个类表示具有相同特征的对象的集合,这些对象具有共同的行为。它给出了可以从中创建对象的蓝图或描述。创建作为类成员的对象称为实例化。因此,对象是类的实例。
一类的成分是-
从类实例化的对象的一组属性。通常,类的不同对象在属性值上有一些差异。属性通常称为类数据。
一组描述类对象行为的操作。操作也称为功能或方法。
例
让我们考虑一个简单的类Circle,它代表二维空间中的几何图形圆。此类的属性可以标识如下-
它的一些操作可以定义如下-
在实例化期间,为至少某些属性分配值。如果创建对象my_circle,则可以分配x-coord:2,y-coord:3和a:4之类的值来描述其状态。现在,如果在比例缩放因子2的my_circle上执行了scale()操作,则变量a的值将变为8。此操作将改变my_circle的状态,即对象表现出某些行为。
封装是将属性和方法绑定到一个类中的过程。通过封装,可以从外部隐藏类的内部细节。它允许仅通过类提供的接口从外部访问类的元素。
通常,设计一个类时,只能通过其类方法访问其数据(属性),并且避免直接外部访问。隔离对象数据的过程称为数据隐藏或信息隐藏。
例
在Circle类中,可以通过以下方式合并数据隐藏:使属性在类外部不可见,并向该类添加另外两种方法来访问类数据,即-
在这里,对象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,鼠标,键盘等组成。
概念上的包容性–例如,股东拥有股份。
既然我们已经了解了有关面向对象的核心概念,那么值得一提的是,该模型必须具备的优势。
使用对象模型的好处是-
它有助于更快地开发软件。
易于维护。假设某个模块出现错误,那么程序员可以修复该特定模块,而软件的其他部分仍可以正常运行。
它支持相对轻松的升级。
它支持对象,设计和功能的重用。
它降低了开发风险,尤其是在集成复杂系统时。