【软件设计师】面向对象技术

1.面向对象基础

1.1 基本概念

方法重载是函数名字相同,参数列表不同

组成

        即组合,指整体与部分的关系,整体与部分生命周期相同

聚合

        关联关系的一个特例,是体现整体与部分,即使has-a的关系,此时整体与部分是可以分离的,具有不同的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。聚合对象是指一个对象包含其他对象。

特征:封装、继承、泛化

对象基本概念:

        +:public

        #:protected,同包或子类可以访问

        default,同包可以访问

        -:private,只有内部的方法可以访问

       

对象的特性:

        1,良好定义的行为

        2,清晰的边界       

        3,可拓展性

面向对象方法:Booch方法、Coad方法和OMT方法

        对象的状态包括这个对象的所有属性(通常是静态)以及每个属性当前的值(通常是动态的);对象的行为代表了其外部可见的活动;操作代表了一个类提供给它的对象的一种服务

封装:

        概念:封装是指将逻辑上相关的数据以及行为绑定在一起,使信息对使用者隐蔽的方法叫“封装”

        组成:对象名、属性、行为(方法)

        消息来自于外界,是通过 接口 与封装的对象 进行信息传递

        在面向对象软件开发中,封装是一种信息隐藏技术,其目的是使得对象的使用者和生产者分离。

类:组成:类名、数据成员、成员函数

类是具有相同属性和服务的一组对象的集合

类的分类:

        1.实体类(数据类):现实世界真实存在的实体,有大量属性;比如人

        2.接口类(功能类、边界类、interface):为用户提高系统合作交互的方式,有大量的方法;接口类分为人和系统两大类;其中人的接口可以是显示屏、窗口、web窗体、对话框、菜单、列表框、其他显示控制、条形码、二维码或者用户与系统交互的其他方法;系统接口涉及把数据发送到其他系统,或者从其他系统接收数据;

        3.控制类:描述业务逻辑,用来控制活动流,充当实体类和接口类之间的协调者

        父类又称超类、泛类

        子类是父类的特殊化,父类是子类的泛化

        java不支持二义性(子类不能拥有两个父亲,即使多重多态,使用多重多态容易造成子类中存在二义性的成员) 

        继承是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上进行,继承用于在已存在的类的基础上创建新类。

多态:        

        重写,父类与子类之间的不同表现(2个类),

        重载发生在一个类之间的不同表现(1个类)

        过载多态:一个名字在不同的上下文中所代表 的含义不一样,重载是属于这样的一种表现。

        多态:同一个操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。同一消息可以调用多种不同类的对象的方法,这些类有某个相同的超类。

        在面向对象方法中,多态指客户类无需知道所调用方法的特定子类的实现。在使用时,用户发送一个通用的消息,而实现的细节则有由于接受对象自行决定。

      在面向对象方法中,支持多态的是动态绑定。

        动态绑定:运行时;是指过程调用和响应调用所需执行的代码在运行时加以结合

        静态绑定:编译时;是过程调用和响应调用所需执行的代码在编译时加以结合

        动态绑定和多态:要有继承关系、要发生了重写、要有【父类引用】指向【子类对象】

       参数多态和包含多态称为通用多态,过载多态和强制多态称为特定多态

        参数多态:应用广泛、最纯的多态。采用参数化模板(函数模板或类模板),通过给定不同的类型参数,使得一个结构有多种类型。

        包含多态:同样的操作可用于一个类型及其子类型(不是子类)。包含多态一般需要进行运行时的类型检查

        过载多态:同一个名(操作符、函数名)在不同的上下文中所代表的含义不同

        强制多态:编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求

       

总结: 

对象:属性(数据)+方法(操作)+对象ID

        封装:隐藏对象的属性和实现细节,仅对外公开接口(信息隐藏技术)

类(实体类、控制类、边界类):

        接口:一种特殊的类,它只有方法定义没有实现

继承和泛化:复用机制(单重继承和多重继承)

        重置/覆盖:在子类中重重新定义已经定义的方法

        重载:一个类可以有多个同名而参数不同的方法

多态:不同对象收到同样的消息产生不同的结构

        过载多态:同一个名字在不同的上下文所代表的含义不同

1.2 面向对象设计7大原则 

24e97b02e6134702a78ddb20680b3402.png

b97e007d501c459d947c8f70fd4193bf.png

477bbb95a9514ac5a3c81ff548c38b47.png

2、UML

2.1 UML图的概念以及分类

        交互图:序列图、通讯图、交互图和定时图

5b7199b08c1c48569fa80871c98d7d83.png

f26a37e8c1d14eb88b75b67c8a3bfe37.png

        类图和对象图区别:最上面那行如果有冒号,就是对象图(对象图是”某一时刻一组对象以及他们之间的关系“)。

        序列图和通信图是站在代码的角度去看待的,活动图是站在业务逻辑的角度去看待

c9eb2512752b4ba7b1a0bdb1d8d34323.png

        组件,和系统的模块是一样的。

4a6c586bf4cd43ae9796c6b3c86152e8.png

         部属图是唯一一个跟硬件有关的

        在关联上可以标注重复度(表示一个类的实例能够与另一个类的多少个实例相关联)和角色。两个类之间可以有多个关联,但这些关联需要不同的角色进行标识

2.2 类图

类图中的关系:

3ffce78fc4a343faa63a86b360c944e5.png

代码实现举例:

        关联:getB(),getA()

        依赖:A{   xy(Bb){}    } 

        泛化:父子类;特殊/一般关系

        聚合:一对多的关系;整体和部分的生命周期不同

        组合:一对多的关系;整体和部分的生命周期相同 ;组合的关系比聚合紧密一点,比如汽车报废,车上的零件就全废了 ;B{list(A)}       

        实现:接口和类之间的关系。

2.3 用例图中的关系

        用例图之间的关系(之前考过文字概念):

c6ebdffb3c4e46af892fdbeab14e7950.png

5182c90a99524105a4ce262e1d4f85ba.png

        包含:<<include>>、拓展:<<extend>>、

6191f36f8a8647c8896a548c7153e661.png

4d585da8b46443c999d7db7ddd6a519e.png

2.4 各类图的学习

2.4.1 类图和对象图

f4d58c47367f4bd18a8b90f828868942.png

842da49e18f84bafa9fdb3055991a4ec.png

8cd65225c81c48719417290a1ba8d3db.png

        对象图跟类图很像,除名字那边,类图的名字是类名,对象图的名字的“类名  :  对象名“,所以要区分只要看名字就可以了。

2.4.2 用例图

        用例图描述一组用例、参与者以及他们之间的关系

        用例之间的关系:包含关系、拓展关系、泛化关系

        用例建模的流程:1.识别参与者(必须) 2.合并需求获得用例(必须) 3.细化用例描述(必须) 4.调整用例模型(可选)

ff0adea74b4a402e9bf4baf05482222c.png

91a152be82a54a2eb132ab9a4411bcba.png

2.4.3 协作图(通讯图)

        强调的是发送和接收信息的对象之间的组织结构,

组成元素有:

        1,对象

        矩形表示,前面为对象名后面为类名,表示类的一个实例

        2,链接

         两个对象间用单一线条表示,用来表示在通讯图中的关联,目的是让不同的消息在不同系统对象之间传递

        3,消息

        通讯图中对象之间通信的方式,

2.4.4 活动图

        组成:活动状态和动作状态、转换和对象

        活动图可以有开始、结束和一系列动作,可以表示分支(条件叫做【监护表达式】)、合并、分岔和会合

3、面向对象开发技术

        采用面向对象开发技术,对象是系统运行时基本实体。它包括数据(属性),也包括作用与数据的操作(行为)。一个对象通常由 对象名、属性和操作 三部分组成

        在面向技术中,不同的对象在收到同一消息时可以产生完全不同的结果,这一现象称之为多态,它通过继承机制来支持。在运行时,可以通过指向基类的指针来调用实现派生类中的方法。如果一个语言只支持类而不支持多态,只能说它是基于对象,但不是面向对象

4、面向对象程序设计(面向对象开发流程)

        (考的有点多,也有点偏)

        在采用面向对象开发系统时,主要步骤有:面向对象分析、面向对象设计、面向对象程序设计、面向对象测试

      面向对象分析主要强调问题是什么,描述软件要做什么,不关心解决方案。面向对象设计侧重问题的解决方案,并且要考试技术和方面的细节

        面向对象分析主要包括:认定对象(名词)、组织对象(抽象成类)、描述对象间的相互作用、定义对象的操作、定义对象的内部信息。目的是为了获得对应问题的理解,确定系统的性能功能要求。最重要的也是分析第一步是确定问题域

        面向对象设计是设计分析模型和实现相应的源代码。

        面向对象程序设计选择合适的面向对象设计语言,将程序组织为相互协作的对象集合,每个对象表示某个类的实例,类通过集成等关系进行组织,

        面向对象测试是尽可能早的进行系统测试,以发现系统中可能存在的错误并进行修复,进而保证系统质量

2af1a2081ed8477a83530b1eb283a7db.png

        xml:可扩展标记语言,是标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言

        HTML更适合处理静态网页、

        prolog是逻辑型程序设计语言

        LISP是一种函数式编程语言

        python是一种面向对象。解释型计算机程序设计语言     

        C++面向对象的编译型语言

5、设计模式

5.1 顺口溜

      设计模式有点多,顺口溜记得比较牢固一点,下面这段是别人编的顺口溜(原文链接:https://blog.csdn.net/HAN_789/article/details/131477285),要是记不住的话可以找下其他人的:

创建模式下: 工厂模式,原型模式,单例模式,建造者模式,抽象工厂模式

创公园,但见愁

结构模式:享元模式,外观模式,组合模式,适配器模式,代理模式,装饰模式,桥接模式

姐想外租,世代装桥

行为模式:状态模式,责任链模式 ,中介模式,模板方式模式,访问者模式,解释器模式,备忘录模式,观察者模式,策略模式,命令模式,迭代模式

行状折中模仿,戒备观测鸣笛

创公园,但见愁
姐想外租,世代装桥

行状折中模仿,戒备观测鸣笛
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。                    

5.2 三种类型的模式 

        创建型模式又分为对象创建型模式和类创建型模式。对象创建型模式处理对象的创建,类创建型模式处理类的创建。详细的说,对象创建型模式把对象创建的一不过推迟到另一个对象中,而类创建模式将它的对象的创建推迟到子类中

        结构型模式涉及如何组合类和对象以获得更大的结构,即通过多个类个对象来实现更复杂的结构

        行为型模式包括类行为模式和对象行为模式,用于描述程序在运行时复杂的流程控制,即描述多个类和对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象之间职责的分配

5.3 创建者模式

工厂方法Factory:

        定义一个用于创建对象的接口,让子类觉得将哪一个类进行实例化,使得一个类的实例化延迟到子类,

        适用:

        1.当一个类希望由它的子类来指定它所创建的对象时

        2,当一个类不知道它所必须创建的对象的类的时候

        3,当类将创建对象的职责托付给多个帮助子类中的某一个,并且希望将哪一个子类是代理者这一信息局部化

原型模式Prototype:

        用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象

        适用:

        1,当一个系统应该独立于它的产品创建、构成、表示时

        2,当要实例化的类是在运行时刻指定时,例如通过动装载

        3,为了避免创建一个与产品层次平行的工厂类层次时

        4,当一个类的实例只能有几个不同的状态组合中的一种,建立相应数目的原型并克隆他们可能比每次用合适的状态手工实例该类更加方便

    单例设计模式singleleton:

        保证一个类仅有一个实例,并提供访问这个唯一实例的全局访问点。

        适用:

        1,当类只能有一个实例而且客户从一个总所周知的访问点访问它时、        

        2,当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能拓展实例时

建造者Builder:

        将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

        适用:

        1,当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时

        2,当构造过程必须允许被构造的对象有不同的表示时

5.4 结构型模式

适配器模式:

        适用:想使用一个已经存在的类,而它的接口不符合要求描述的是适配器

代理模式

        通过提供与对象相同的接口来控制对这个对象的访问,以使得在确实需要这个对象时才能对他进行创建和初始化

装饰模式:

        适用:在不影响其他对象的情况下,以动态透明的方式给单个对象添加职责描述

桥接模式Bridge:

        判断:该设计模式将抽象部分与实现部分分离(抽线于实现部分的关系是——>),使他们都可以独立的变化

        适用:不希望再抽象与实现部分之间有一个固定的判定关系的是桥接模式

        基于类的最小设计原则,通过使用封装、聚合以及继承等行为让不同的类承担不同的职责。

5.5 行为性模式

状态模式state:

        允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。如自动售卖机,根基状态的不同可以又不同的行为    

责任链模式chain of responsibility:

        通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合,将接收对象链接起来,在链中传递请求,直到有一个对象处理这个请求

        适用:

        1.有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定

        2,想在不明确指定接收者的情况下向多个对象中的一个提交请求

        3,可处理一个请求的对象集合应该被动态指定

中介者模式Mediator:

        属于行为型对象模式 。用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示地相互调用,从而使其耦合松散,而且可以独立地改变他们之间的交互。       

        适用:

        1,一组对象以定义良好但以复杂的方式进行通讯,产生的相互依赖关系结构混乱且难以理解

        2,一组对象引用其他很多对象并且直接与这些对象通讯,导致难以复用该对象

        3,想定制一个分布在多个子类中的行为,但又不想生成太多的子类

访问者模式Vistor:

        一个对象结构包含很多类对象,而系统要求这些类对象实施一些依赖于某具体类的操作;适用于,需要对一个对象结构中的对象进行很多不同的并且不相干的操作,它允许在不改变各元素的类的前提下定义作用于这些元素的新操作。如shoppig-car购物车有不同物品item,结账方式有人工manual和自动auto,那么这个对象结构就包含很多item,依赖的具体类就是结账checkout,使用checkout中的结账方法结合不同的物品进行结账。       

解释器模式Interpreter:

        给定一种语言,定义它的文法表示,并定义一个解释器,该解释器根据文法来解释语言中的句子。

访问者模式Visitor:

        定义一对多的关系,当一个对象的状态发生改变的时候,所有依赖它的对象都收到通知并自动更新

策略模式Strategy:

        对于不同算法进行封装和切换,使得算法可以独立于使用他们的用户的变化而变化,但调用策略的对象只有一个

        适用:

命令模式Command:

        将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持撤销的操作

        适用:

迭代器模式Iterator:

        提供一个方法来顺序访问一个聚合对象中各个对象的各个元素,而不是直接暴露改对象的内部表示           

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式在芯片验证中的应用——模板方法

一、模板方法 模板方法(Template Method)设计模式是一种行为设计模式&#xff0c; 它在父类中定义了一个功能的框架&#xff0c; 允许子类在不修改结构的情况下重写功能的特定步骤。也就是模板方法定义了一组有序执行的操作&#xff0c;将一些步骤的实现留给子类&#xff0c;同…

6818 android 修改开机 logo, 编译脚本分析

问题&#xff1a; 客户需要去掉 android5.1 的开机logo. 说明&#xff1a; 对于Android5.1 来说&#xff0c;uboot 与kernel 的logo 是一个。 过程&#xff1a; 其实对于开机logo 的修改很简单&#xff0c;直接参考厂家手册就可以了。 这是 android4.4 的开机logo 的修改&…

Ps:消失点滤镜 - 导出 3D 信息

Ps菜单&#xff1a;滤镜/消失点 Filter/Vanishing Point 快捷键&#xff1a;Ctrl Alt V “消失点”滤镜的导出 Export功能允许用户将创建的 3D 信息&#xff08;包括平面、纹理和测量&#xff09;导出为兼容 CAD、建模、动画和特殊效果应用程序的格式。这使得 Photoshop 与其…

上位机图像处理和嵌入式模块部署(f103 mcu和Qt上位机联动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 之前我们写过一篇文章​​​​​​​&#xff0c;上面说的是如何利用串口对mcu进行控制&#xff0c;即如果利用串口实现mcu led灯的点亮和熄灭。输…

【开源】租房管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、系统介绍 租客屋主模块 房源信息模块 租客评价模块 房源订单模块 留言板模块 二、系统截图 三、核心代码 一、系统介绍 基于Vue.js和SpringBoot的租房管理系统&#xff0c;分为管理后台和用户网页端&#xff0c;可以给管理员、租客和屋主角色使用&#xff0c…

深入JVM元空间以及弹性伸缩机制

个人博客 深入JVM元空间以及弹性伸缩机制 | iwts’s blog JVM内存模型中元空间所在位置 即在JVM运行时的内存模型。总体上有这样的图&#xff1a; 元空间 上面的图其实有点不太准。方法区本质上只是JVM的一个标准&#xff0c;不同JVM在不同版本下都可能有不同的实现&#x…

民国漫画杂志《时代漫画》第25期.PDF

时代漫画25.PDF: https://url03.ctfile.com/f/1779803-1248635084-fd4794?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

2024年上半年软件系统架构师考试【回忆版】

文章目录 考试时间考试地点综合知识案例分析1、微服务架构的优点和缺点2、质量属性的6个要素3、分布式锁 Redis的缺点4、MongoDB 存储矢量图的优势 论文回忆版论文一、论单元测试的设计与应用论文二、论大数据模型的设计与应用论文三、论模型驱动的架构设计及应用论文四、论云原…

浅谈Docker容器的网络通信原理

文章目录 1、回顾容器概念2、容器网络3、容器与主机之间的网络连通4、交换机的虚拟实现---虚拟网桥&#xff08;Bridge&#xff09;5、Docker 守护进程daemon管理容器网络 1、回顾容器概念 我们知道容器允许我们在同一台宿主机&#xff08;电脑&#xff09;上运行多个服务&…

kali基本扫描工具(自带)

免责声明:本文仅做技术交流与学习...请勿非法破坏... 详细用法: 命令 -h/百度/翻译 fping 用法 hostlist 文件里面为ip fping -a -q -f hostlist -a 只看存活的 fping -g 202.100.1.1 202.100.1.255 -a -q > Ahost 输出到Ahost文件上 nping nping -c 1 201.100.2.155-244 …

ES 查询踩坑-全字段匹配

需求&#xff1a;name字段需要全匹配查询 name的映射 普通的must查询 GET power_engin/_search {"from": 0,"size": 10,"query": {"bool": {"must": [{"term": {"name": {"value": "尼…

数据结构--《二叉树》

二叉树 1、什么是二叉树 二叉树(Binar Tree)是n(n>0)个结点的优先集合&#xff0c;该集合或者为空集(称为空二叉树)&#xff0c;或者由一个根结点和两颗互不相交的、分别称为根结点的左子树和右子树的二叉树构成。 这里给张图&#xff0c;能更直观的感受二叉树&#xff1…

异步那些事01

首先我们肯定先说创建线程 1.继承Thread类 o定义一个类MyThread继承Thread类 o在MyThread类中重写run()方法 o创建MyThread类的对象 o启动线程 package Java.thread;public class first extends Thread{public void run(){for(int i0;i<50;i){System.out.println("我…

【MySQL】——并发控制

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

Vapor Mode:Vue.js 的速度与激情,代码界的闪电侠

大家好&#xff0c;我是宝哥。 在快速发展的网络开发世界中&#xff0c;创新的Vue.js团队给我们带来了Vapor Mode。这个新模式优化了Vue的核心渲染过程&#xff0c;帮助我们的应用程序像轻烟一样运行&#xff0c;开发者无需深入复杂的优化工作。 在这篇文章中&#xff0c;我们将…

贝叶斯算法:机器学习中的“黄金法则”与性能提升之道

&#x1f440;传送门&#x1f440; &#x1f50d;机器学习概述&#x1f340;贝叶斯算法原理&#x1f680;贝叶斯算法的应用✨文本分类✨医疗系统 &#x1f496;贝叶斯算法优化✨贝叶斯算法优化的主要步骤✨贝叶斯算法优化的优点✨贝叶斯算法优化的局限性 &#x1f697;贝叶斯算…

详细分析tcping的基本知识以及用法

目录 前言1. 安装配置2. 基本知识3. Demo 前言 针对ping的基本知识推荐阅读&#xff1a;详细分析ping的基本知识以及常见网络故障的诊断&#xff08;图文解析&#xff09; 1. 安装配置 针对Window的下载如下&#xff1a; 安装路径&#xff1a;tcping官网 下载tcping.exe&a…

【开源】大学生竞赛管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、系统介绍 学生管理模块 教师管理模块 竞赛信息模块 竞赛报名模块 二、系统截图 三、核心代码 一、系统介绍 基于Vue.js和SpringBoot的大学生竞赛管理系统&#xff0c;分为管理后台和用户网页端&#xff0c;可以给管理员、学生和教师角色使用&#xff0c;包括学…

STM32手写超频到128M函数

今天学习了野火的STM32教程学会了如何设置STM32的时钟频率&#xff0c;步骤比较详细&#xff0c;也很容易理解&#xff0c;就是视频教程不能跳着看&#xff0c;只能一节节的看&#xff0c;不然会知识不连贯&#xff0c;造成有些知识不理解&#xff0c;连续着看还是没有什么难度…

闲置商标转让出现这些状态时注意!

近日以前做转让的一个朋友的商标转让证明下来&#xff0c;正好是2个半月&#xff0c;普推知产老杨发现这个时间也太快&#xff0c;以前差不多四个月左右&#xff0c;有些朋友需要购买闲置商标&#xff0c;3个月内所有权就变成自己的。 在购买闲置商标时要注意有一些细节&#x…