软件工程复试——九、面向对象方法学引论

九、面向对象方法学引论

​ 面向对象方法学的出发点和原则是尽可能模拟人类思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,使描述空间的问题域与求解域在结构上保持一致。

面向对象方法的四个要点:

  • 认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。
  • 把所有对象都划分为类,每个对象都定义了一组数据和一组方法
  • 按照子类与父类的关系,把若干个对象组成一个层次结构的系统
  • 对象仅能通过传递消息互相联系

综上所述,面向对象方法学可由以下公式概括:

​ OO=objects+classes+inheritance+communication with messages
也就是说,面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。

优点:

  • 与人类思维方法一致

  • 稳定性好

  • 可重用性好

  • 较易开发大型软件产品

  • 可维护性好

    为啥可维护性好?

    • 面向对象软件的稳定性好
    • 面向对象的软件容易修改
    • 面向对象的软件容易理解
    • 易于测试和调试

面向对象的概念

对象

​ 面向对象方法学中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以作的操作表示它的动态行为。

特点:

  • 以数据为中心
  • 对象是主动的
  • 实现了数据封装
  • 本质上具有并行性
  • 模块独立性好

类是对具有相同属性和行为的一个或多个对象的描述。

实例

实例就是由某个指定类型所描述的一个具体对象。

消息

消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明,一般由下述三部分组成

  • 接受消息的对象
  • 消息选择符(消息名称)
  • 零个或多个变原

方法

方法就是对象所能执行的操作,也就是类中所定义的服务。

属性

属性就是类中所定义的属性,它是对客观世界实体所具有的性质的抽象。

封装

封装是把数据和实现操作的代码集中起来放在对象内部。封装也就是信息隐藏,通过封装对外界隐藏了对象的实现细节。

特点:

a.有一个清晰的边界
有一个清晰的边界。所有私有数据和实现操作的代码都被封装在这个边界内,从外面看不见更不能直接访问。
b.有确定的接口(即协议)
这些接口就是对象可以接受的消息,只能通过向对象发送消息来使用它。
c.受保护的内部实现
实现对象功能的细节(私有数据和代码)不能在定义该对象的类的范围外访问。

继承

在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。

特点:

a. 继承具有传递性;
b. 低层的性质将屏蔽高层的同名性质。

多态

多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。即在类等级的不同层次中可以共享一个方法的名字,不同层次中的每个类各自按自己的需要来实现这个行为。

重载

这里有两种重载。

a. 函数重载
在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。
b. 运算符重载
同一个运算符可以施加于不同类型的操作数上面。
当参数特征不同或被操作数的类型不同时,实现函数的算法或运算符的语义是不相同的。

重载提高了面向对象系统的灵活性和可读性。

面向对象建模

模型

模型是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。

作用:

① 模型是一种思考工具,利用这种工具可以把知识规范地表示出来。
② 模型可以帮助人们思考问题、定义术语、在选择术语时作出适当的假设,并且有助于保持定义和假设的一
致性。

模型分类:

(1)对象模型:
描述系统数据结构。
(2)动态模型:
描述系统控制结构。
(3)功能模型:
描述系统功能。

对象模型

​ 对象模型表示静态的、结构化的系统的数据性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。对象模型为建立动态模型和功能模型,提供了实质性的框架。

​ 通常使用UML提供的类图建立对象模型。

符号

(1)定义类
在这里插入图片描述

​ UML中类的图形符号为长方形,用两条横线把长方形分戒上、中、下3个区域,3个区域分别放类的名字、
属性和服务。

定义类名应该遵守以下准则:

a. 使用标准术语。应该使用在应用领域中人们习惯的标准术语作为类名,不要随意创造名字。
b. 使用具有确切含义的名词。尽量使用能表示类的含义的常用语作名字,不要使用空洞的或含义模糊的
词作名字。
c. 必要时用名词短语作名字。为使名字的含义更准确,必要时用形容词加名词或其他形式的名词短语作名
字。
注意:类名应该是富于描述的、简洁的而且无二义性的。

(2)定义属性

UML描述属性的语法格式如下:
可见性 属性名:类型名=初值{性质串}
①可见性

属性的可见性分为公有的(+)、私有的(-)和保护的(#),如果未声明可见性,则表示该属性的可见性尚
未定义。
注意:没有默认的可见性。
② 类型名
表示该属性的数据类型,它可以是基本数据类型或是是用户自定义的类型。属性名和类型名之间用冒号(:)
分隔。
③ 赋值
在创建类的实例时应给其属性赋值,如果给某个属性定义了初值,则该初值可作为创建实例时这个属性的默
认值。类型名和初值之间用(=)隔开。
④ 性质串
性质串明确地列出该属性所有可能的取值,不同值之间用逗号隔开。性质串用花括号({))括起来。

(3)定义服务
服务也就是操作,UML描述操作的语法格式如下:
可见性 操作名(参数表):返回值类型{性质串}
① 可见性
操作的可见性分为公有的(+)、私有的(-)和保护的(#),如果未声明可见性,则表示该操作的可见性尚未定义。
注意:没有默认的可见性。
② 参数表
用逗号分隔的形式参数的序列。描述一个参数的语法如下:
参数名:类型名=默认值
在类中也可以定义类作用域操作,在类图中表示带下划线的操作。这类操作只能存取本类的类作用域属性。

关系

类与类间通常有关联、泛华(继承)、依赖和细化四种关系。

1、关联

关联表示两个类的对象之间存在某种语义上的联系。

(1)普通关联

普通关联是最常见的关联关系,只要在类与类之间存在连接关系就可以用普通关联表示。

在这里插入图片描述

第一,普通关联的图示符号是连接两个类之间的直线。
第二,关联是双向的,可为关联起一个名字。在名字前面(或后面)加一个表示关联方向的黑三角。
第三,在表示关联的直线两端可以写上重数,它表示该类有多少个对象与对方的一个对象连接。未明确标出关联的重数,则默认重数是1。

如上图,一个作家可以使用一到多台计算机,一台计算机可以被0至多个作家使用。

(2)限定关联

限定关联通常用在一对多或多对多的关联关系中,可以把模型中的重数从一对多变成一对一,或从多对多简化成多对一。
在这里插入图片描述

在类图中把限定词放在关联关系末端的一个小方框内。如图9-7所示,利用限定词“文件名”表示了目录与
文件之间的关系,利用限定词把一对多关系简化成了一对一关系。
意义:限定提高了语义精确性,增强了査询能力。

(3)关联类

为了说明关联的性质,可能需要一些附加信息。关联类可以用来记录相关信息。

在这里插入图片描述

关联中的每个连接与关联类的一个对象相联系。关联类通过一条虚线与关联连接。

2、聚集

聚集(聚合)是关联的特例。表示类与类之间的关系是整体与部分的关系。在陈述需求时使用的“包含"、“组成"、“分为……部分”等字句,往往意味着存在聚集关系。除了一般聚集之外,还有两种特殊的聚集关系,分别是共享聚集和组合聚集。

(1)共享聚集

如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。

在这里插入图片描述

一般聚集和共享聚集的图示符号,都是在表示关联关系的直线末端紧挨着整体类的地方画一个空心菱形。

(2)组合聚集

如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失,则该聚集称为组合聚集
(组成)。
在这里插入图片描述

组成关系用实心菱形表示。

3、泛化

(1)普通泛化

​ 没有具体对象的类称为抽象类。抽象类通常都有抽象操作,作用来指定该类的所有子类应具有哪些行为。表示抽象类是在类名下方附加一个标记值(abstract),表示抽象操作是在操作标记后面跟随一个性
质串(abstract) 。

在这里插入图片描述

(2)受限泛化

定义
可以给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为受限泛化。
约束:
预定义的约束有4种:多重、不相交、完全和不完全。这些约束都是语意约束。
继承分类
第一,多重继承
一个子类可以同时多次继承同一个上层基类。

第二,不相交继承
一个子类不能多次继承同一个基类。一般的继承都是不相交继承。
第三,完全继承
父类的所有子类都已在类图中穷举出来了。
第四,不完全继承
父类的子类并没有都穷举出来,随着对问题理解的深入,可不断补充和维护。是默认的继承关系。

4、依赖和细化

(1)依赖

​ 依赖关系描述两个模型元素之间的语义连接关系:其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。

在这里插入图片描述

​ 上图表示了一个友元依赖关系。

​ 在UML类图中用带箭头的虚线连接有依赖关系的两个类,箭头指向独立的类。在虚线上可以带一个版类标签,具体说明依赖的种类。

(2) 细化

​ 对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。

在这里插入图片描述

​ 细化的图示符号为由元素B指向元素A的一端为空心三角形的虚线。

动态模型

1、概念
动态模型表示瞬时的、行为化的系统的控制性质,它规定了对象模型中的对象的合法变化序列。

2、建模
用UML提供的状态图来描绘对象的状态、触发状态转换的事件以及对象的行为。每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型,即动态模型是基于事件享
而互相关联的一组状态图的集合。(第三章状态转换图)

功能模型

​ 功能模型表示变化的系统的功能性质,它指明了系统应该做什么,因此更直接地反映了用户对目标系统的需求。在面向对象方法学中,我们一般使用UML提供的用例图进行需求分析和建立功能模型。

在这里插入图片描述
① 系统
a. 定义
系统被看作是一个提供用例的黑盒子,内部如何工作、用例如何实现,这些对于建立用例模型来说都是不重要的。
b. 表示
系统用方框表示,其边线表示系统的边界,用于划定系统的功能范围,定义了系统所具有的功能。描述该系统功能的用例置于方框内,代表外部实体的行为者置于方框外。
② 用例
a.定义
一个用例是可以被行为者感受到的、系统的一个完整的功能。在UML中把用例定义成系统完成的一系列动作。
b. 表示
在UML中,椭圆代表用例。用例通过关联与行为者连接,关联指出一个用例与哪些行为者交互,这种交互是双向的。
c. 特征
第一,用例代表某些用户可见的功能,实现一个具体的用户目标。
第二,用例总是被行为者启动的,并向行为者提供可识别的值。
第三,用例必须是完整的。
注意:用例是一个类,它代表一类功能而不是使用该功能的某个具体实例。用例的实例是系统的一种实际使用方法,通常把用例的实例称为脚本。脚本是系统的一次具体执行过程。

③行为者
a. 定义
行为者是指与系统交互的人或其他系统,它代表外部实体。使用用例并且与系统交互的任何人或物都是行为者。行为者代表一种角色,而不是某个具体的人或物。
b. 表示
在UML中,线条人代表行为者。在用例图中用直线连接行为者和用例,表示两者之间交换信息,称为通信联系。行为者触发用例,并与用例交换信息。单个行为者可与多个用例联系,一个用例也可与多个行为者联系。

④用例间的关系
UML用例之间主要有扩展和使用两种关系,它们是泛化关系的两种不同形式。

扩展关系

a.扩展关系
向一个用例中添加一些动作后构成了另一个用例,这两个用例之间的关系就是扩展关系,后者继承前者的一
些行为,通常把后者称为扩展用例。用例之间的扩展关系图示为带版类《扩展》的泛化关系。
在这里插入图片描述

b. 使用关系
一个用例使用另一个用例时,这两个用例之间就构成了使用关系。如用例之间的使用关系用
带版类《使用》的泛化关系表示。
c. 两种关系的异同
第一,都是从几个用例中抽取那些公共的行为并放入一个单独的用例中,而这个用例被其他用例使用或扩展。
第二,使用和扩展的目的是不同的。在描述一般行为的变化时采用扩展关系。
第三,在两个或多个用例中出现重复描述又想避免这种重复时,釆用使用关系。

3种模型之间的关系

  1. 三种模型
    (1) 三种模型相互补充、相互配合,使得人们对系统的认识更加全面。
    (2) 对象模型是最基本最重要的,它为其他两种模型奠定了基础。
  2. 关系
    (1) 针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。
    (2) 状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时
    与类图中的服务相对应。
    (3) 功能模型中的处理对应于对象模型中的类所提供的服务。
    (4) 数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。
    (5) 数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。
    (6) 用例图中的行为者,可能是对象模型中的对象。
    (7) 功能模型中的处理可能产生动态模型中的事件。
    (8) 对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。

课后题

1、

答:(1)面向对象方法学是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决
问题的方法与过程,使描述问题的问题空间与实现解法的解空间在结构上尽可能一致的方法学科。
(2)面向对象方法学优点:
① 与人类习惯的思维方法一致。
② 面向对象软件稳定性好。
③ 面向对象软件可重用性好。
④ 较易开发大型软件产品。
⑤ 可维护性好。

2、

答:(1)对象是对问题域中某个实体的抽象。
(2)相对于传统数据结构的静态被处理,对象既有静态的属性,也有动态的行为,是进行处理的主体。

3、
答:类是对具有相同数据结构和相同操作的一组组相似对象的定义,即类是对具有相同属性和行为的一个或
多个对象的描述,包括对怎样创建该类的新对象的说明。

4、

答:继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子
类自动地共享基类中定义的数据和方法的机制。

5、

答:

(1)模型是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。模型由一组图
示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。模型是一种思考工具,利用这种工具可以把知识规范地表示出来。
(2)由于建模忽略了事物的非本质属性,因此模型比原始事物更容易操作。对于那些因过分复杂而不能直
接理解的系统,特别需要建立模型,模型通过吧系统的重要部分分解成人的头脑一次能处理的若干个子部分,从而减少了系统的复杂程度。

6、

答:(1)对象模型表示静态的、结构化的系统的数据性质。它是对模拟客观世界实体的对象以及对象彼此间
的关系的映射,描述了系统的静态结构。
(2) 通常使用UML提供的类图来建立对象模型。
(3) 在UML中“类”的实际含义是。一个类以及属于该类的对象。

7、

答:

(1)动态模型表示瞬时的、行为化的系统的控制性质,它规定了对象模型中对象的合法变化序列。
(2) 在UML中,使用状态图和事件追踪图来建立动态模型。
(3) 其符号的含义为:
① 状态图表示需要考察的对象的动态行为。
② 事件追踪图表示其运行规律和行为规则。

8、

答:

(1)功能模型表示软件系统的功能性质,它指明了系统应该“做什么",因此更直接地反映了用户对目
标系统的需求。
(2)在UML中主要使用用例图来建立功能模型,一幅用例图包括的模型元素有系统、行为者、用例以及
从而减少了系统的复杂程度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65652.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吉林大学的法硕非法学和武汉大学的法硕非法学哪个更难?

从分数上来说 武汉大学20年法硕(非法学)录取最高分为419吉林大学20年法硕(非法学)录取最高分为396比较直观的可以看到武汉大学的法硕(非法学)竞争的人选大神偏多,基本上是高分打架,…

2.1 法学的历史(一):西方法学的历史

2.1 法学的历史(一):西方法学的历史 西方法学的四个阶段 起源:古希腊 奠基:古罗马 接续:中世纪后期 鼎盛:近代 第一次重大的契机 古希腊历史上引发法(理)学思考的…

AI Chat 设计模式:4. 建造者模式

本文是该系列的第四篇,采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的旁白与思考。 问题列表 Q.1 说说建造者模式A.1Q.2 “将一个复杂对象的构建过程和其表示分离”,这里不是很清…

九龙证券|利好政策密集发布,机构扎堆看好的高增长公司曝光

新能源轿车销量和保有量快速增长,带来了充电桩商场的微弱需求。 日前,商务部部长王文涛表明,本年将在落实好方针的一起,活跃出台新方针办法,比方辅导当地展开新能源轿车下乡活动,优化充电等使用环境&#x…

用post man 上传图片到微信

用post man 上传图片到微信 记录一下 我目前完成的小程序后端开发过程 这里用post man 做测试上传客服群的qrcode 有在网路上搜寻了一下发现都没有相关的教学可能是太简单了 但我相信还是会有人用的到的 不多说直接来吧 1.参考文档 https://developers.weixin.qq.com/minipro…

75岁母亲被6个子女遗弃身亡,“凶手”一句话惹怒全网:当你老了,真相比想象中更残忍

看到一个让人唏嘘的新闻。 江西上饶,一名老人被发现在竹林中去世。 没人能想到,导致老人死亡的“凶手”,会是她的亲生儿女。 老人陈阿婆一生有过三次婚姻,共育有6个子女。 第二次婚姻结束后,她带着9岁的儿子黄某改嫁&a…

教育孩儿子要懂的心理学

ISBN : 978-7-5472-5944-3 作者 : 万莹 页数 : 243页 阅读时间 : 2021-09-01 推荐指数 : ★★★★☆ "孩子的世界,与成人的截然不同,倘不先行理解,一味蛮做,便大碍于孩子的发达."-&a…

《亲爱的小孩》里三位母亲的靠谱与不靠谱

平时看电视剧不多,这些天难得有些空闲,听说有部电视剧在贩卖焦虑,这勾起了我的好奇心,一查这剧竟然汇集了我喜爱的好几位实力派演员,于是就追起了这部《亲爱的小孩》。 看了几集,没有感觉到电视剧故意在贩卖…

为年迈母亲打造的“亲情关怀”视频聊天软件

写在前面 母亲的眼神越来越不好了,长期干农活的手也愈加粗糙,智能手机本是一个平常之物,她确无缘使用,现在仍在不断更换着“翻盖手机”。为了能让她绕开微信视频聊天那些繁琐而容易点错的功能,程序员的我“开发”下面…

情感脑机接口与跨被试情感模型问题研究

情感脑机接口与跨被试情感模型问题研究 基于最大分类器差异域对抗方法的跨被试脑电情绪识别研究引言部分关键要点提取MCD_DA 模型解读数据集创建以及处理模型训练步骤实验结果 Multisource Transfer Learning for Cross-Subject EEG Emotion RecognitionRELATED WORKMETHODSSou…

妈妈的情绪,决定孩儿子的未来

ISBN:978-7-5472-5951-1 页数:247页 作者:融智 阅读时间:2021-08-08 推荐指数:★★★★☆ 妈妈可能不是天才,但是可以成为天才的母亲。 过度慈爱会败子,过度严厉也会毁子。 父母真正的爱就是越…

2步就能完成的情感分析模型

ABSA(Aspect Based Sentiment Analysis)是一种在给定的语料库中同时提取(co-extracting )表达意见和(事物)属性/方面术语(意见目标)以及它们之间的关系的任务。 方面级情感分类是情…

家庭教育中有近一半是由母亲负责孩子学习,占49%,父亲负责仅占10%

近年来,随着国家经济的高速发展,国民对教育的需求越来越大,特别是对家庭教育的重视程度越来越高。家庭是人生的第一所学校,家长是孩子的第一任老师,要给孩子讲好“人生第一课”,帮助扣好人生第一粒扣子。 …

案例研究 | 运用设计冲刺,解决俄罗斯家庭暴力问题

问题 家庭暴力是一个困扰全球的问题,运用设计冲刺能帮我们解决它吗? 在俄罗斯,每5名妇女就有1名遭受到丈夫或伴侣的虐待,而这种情况在2017年国家将家庭虐待定为非刑事罪后更是急剧恶化。 于是,俄罗斯的一个律师和新闻…

母亲节营销案例大盘点,真的有被狠狠共情住

⼀直以来,节⽇营销都是品牌借势和消费者建⽴情感链接的好时机。尤其是在母亲节这个温情的⽇⼦⾥,借助催泪、温情的⼴告歌颂母爱的无私与伟⼤来打动消费,也成为品牌母亲节营销的标配。 随之⽽来的,越来越多的品牌也⾯临困局&#x…

酒店评论情感分析,亲妈级教程

酒店评论情感分析,采集与分词篇 开篇吐槽一下下。 类似携程这种生活类网站,还有电商类网站,不是驻守被爬的城墙内就是在反爬的道路上行走。不断的更新加密,批量化的采集不断破解并升级程式,并在网络之上布施教程&…

用孕妇的思维和孕妇对话——《用孩子的思维和孩子对话》

看惯了某鱼上经典的卖货话术,“不懂事怀孕了,遂出”。没想到我居然也快要当爸爸了。这几个月准爸爸的生活让我切身的体会到了孕妇的不容易以及陪伴孕妇的辛苦。本文不打算歌颂母亲或者替准爸爸们倒苦水,单纯总结思考一下孕期夫妻如何沟通。加…

(含完整代码)简易Android计算器的实现

文章结构 1、项目要求2、实现思路3、代码实现主文件子文件 4、效果预览 1、项目要求 其实老师的要求就是做一个简易的计算器,有两个文本框,一个按钮,然后实现加法即可。 但是我还是想做一个比较好康的计算器(如下)&am…

Android——在线计算器完整代码

实现效果 一、xml布局文件 这里采用线性布局&#xff0c;关于计算器的布局&#xff0c;可以查看之前的文章。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"and…

Qt简易计算器的代码实现

大二用qt写的简易计算机&#xff0c;已经修改完bug,请放心食用 输入的时候一定用按钮&#xff0c;不要直接在文本框中输入 在qt中新建这几个文件&#xff0c;运行就OK了 main.cpp #include "calculator.h" #include <QApplication>int main(int argc, char *…