📅  最后修改于: 2020-12-14 03:28:25             🧑  作者: Mango
面向对象(OO)范式是从一种新的编程方法的最初概念开始形成的,而对设计和分析方法的兴趣却要晚得多。 OO分析和设计范式是OO编程语言被广泛采用的逻辑结果。
第一种面向对象的语言是Simula (对真实系统的仿真),它是由挪威计算中心的研究人员于1960年开发的。
1970年,艾伦·凯( Alan Kay)和他在施乐PARC的研究小组创建了一台名为Dynabook的个人计算机,以及第一台用于面向Dynabook进行编程的纯面向对象编程语言(OOPL)-Smalltalk。
在1980年代, Grady Booch发表了一篇名为《面向对象设计》的论文,该论文主要介绍了编程语言Ada的设计。在随后的版本中,他将其思想扩展到了一种完整的面向对象的设计方法。
在1990年代, Coad将行为思想整合到面向对象的方法中。
其他重要的创新是James Rum Baugh的对象建模技术(OMT)和Ivar Jacobson的面向对象软件工程(OOSE)。
OO范例是开发任何软件的重要方法。可以使用此范式来实现大多数体系结构样式或模式,例如管道和过滤器,数据存储库以及基于组件的模式。
面向对象系统的基本概念和术语-
对象是面向对象的环境中的现实世界元素,可能具有物理或概念上的存在。每个对象都有-
将其与系统中其他对象区分开的标识。
决定对象的特性以及对象所拥有的属性值的状态。
表示对象根据其状态变化执行的外部可见活动的行为。
可以根据应用程序的需求对对象进行建模。对象可能具有物理存在,例如客户,汽车等。或无形的概念性存在,例如项目,过程等。
一个类表示具有相同特征的对象的集合,这些对象具有共同的行为。它提供了蓝图或可以从中创建的对象的描述。创建作为类成员的对象称为实例化。因此,对象是类的实例。
一类的成分是-
从类实例化的对象的一组属性。通常,类的不同对象在属性值上有一些差异。属性通常称为类数据。
一组描述类对象行为的操作。操作也称为功能或方法。
例
让我们考虑一个简单的类Circle,它代表二维空间中的几何图形圆。此类的属性可以标识如下-
它的一些操作可以定义如下-
封装是将属性和方法绑定到一个类中的过程。通过封装,可以从外部隐藏类的内部细节。它允许仅通过类提供的接口从外部访问类的元素。
多态性最初是希腊语,表示具有多种形式的能力。在面向对象的范例中,多态性意味着以不同的方式使用操作,具体取决于操作所基于的实例。多态性允许具有不同内部结构的对象具有相同的外部接口。多态在实现继承时特别有效。
例
让我们考虑两个类,Circle和Square,每个类都有一个findArea()方法。尽管类中方法的名称和目的是相同的,但每个类的内部实现(即,计算面积的过程)是不同的。当Circle类的对象调用其findArea()方法时,该操作将查找圆的区域,而与Square类的findArea()方法没有任何冲突。
人际关系
为了描述系统,必须同时提供系统的动态(行为)规范和静态(逻辑)规范。动态规范描述了对象之间的关系,例如消息传递。静态规范描述了类之间的关系,例如聚合,关联和继承。
任何应用程序都需要许多对象以和谐的方式进行交互。系统中的对象可以通过使用消息传递来相互通信。假设系统有两个对象-obj1和obj2。如果obj1希望obj2执行其方法之一,则对象obj1向对象obj2发送一条消息。
聚集或组合是类之间的关系,通过这种关系,一个类可以由其他类的对象的任何组合组成。它允许将对象直接放置在其他类的主体内。聚合被称为“一部分”或“具有”关系,具有从整体导航到其各个部分的能力。聚合对象是由一个或多个其他对象组成的对象。
关联是一组具有共同结构和共同行为的链接。关联描述一个或多个类的对象之间的关系。链接可以定义为关联的实例。关联度表示连接中涉及的类数。程度可以是一元,二元或三元。
它是一种机制,通过扩展和完善其功能,可以从现有的类中创建新的类。现有类称为基类/父类/超类,新类称为派生类/子类/子类。
子类可以继承或派生超类的属性和方法,只要超类允许。此外,子类可以添加自己的属性和方法,并且可以修改任何超类方法。继承定义了“是–一个”关系。
例
从哺乳动物类别中,可以得出许多类别,例如人,猫,狗,牛等。人,猫,狗和牛都具有哺乳动物的独特特征。此外,每个都有其自己的特定特征。可以说,牛是“哺乳动物”。
在软件开发的面向对象分析阶段,确定系统要求,确定类并确认类之间的关系。 OO分析的目的是了解应用领域和系统的特定要求。该阶段的结果是需求规格说明以及对逻辑结构和系统可行性的初步分析。
相互结合用于面向对象分析的三种分析技术是对象建模,动态建模和功能建模。
对象建模根据对象来开发软件系统的静态结构。它标识对象,可以将对象分组到的类以及对象之间的关系。它还标识了每个类的主要属性和操作。
对象建模的过程可以在以下步骤中可视化-
在分析了系统的静态行为之后,需要检查其关于时间和外部变化的行为。这是动态建模的目的。
动态建模可以定义为“一种描述单个对象如何响应事件的方法,这些事件是由其他对象触发的内部事件,还是由外界触发的外部事件。”
动态建模的过程可以在以下步骤中可视化-
功能建模是面向对象分析的最后组成部分。功能模型显示了对象内部执行的过程以及数据在方法之间移动时的变化方式。它指定了对象建模操作和动态建模操作的含义。功能模型对应于传统结构分析的数据流程图。
功能建模的过程可以在以下步骤中可视化-
在分析阶段之后,使用面向对象设计(OOD)将概念模型进一步开发为面向对象模型。在OOD中,将分析模型中与技术无关的概念映射到实现类上,确定约束并设计接口,从而形成解决方案领域的模型。 OO设计的主要目的是开发系统的结构架构。
面向对象设计的阶段可以标识为-
OO设计可以分为两个阶段-概念设计和详细设计。
概念设计
在此阶段,将识别出构建系统所需的所有类。此外,将具体职责分配给每个班级。类图用于阐明类之间的关系,而交互图用于显示事件的流程。它也被称为高级设计。
详细设计
在这个阶段,属性和操作基于它们的交互图被分配给每个类。开发状态机图以描述设计的更多细节。这也称为低级设计。
以下是主要的设计原则-
去耦原理
很难维护具有一组高度相互依赖的类的系统,因为对一个类进行修改可能会导致其他类的级联更新。在OO设计中,可以通过引入新的类或继承来消除紧密耦合。
确保凝聚力
内聚类执行一组紧密相关的功能。缺乏凝聚力的手段-一个类执行不相关的功能,尽管它不会影响整个系统的运行。它使软件的整个结构难以管理,扩展,维护和更改。
开闭原理
根据此原理,系统应能够扩展以满足新的要求。由于系统扩展,不应修改系统的现有实现和代码。另外,必须遵循以下准则以开放-封闭原则-
对于每个具体的类,必须维护单独的接口和实现。
在多线程环境中,请将属性设为私有。
尽量减少使用全局变量和类变量。