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

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:

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

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

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

相关文章

【LakeHouse】Apache Iceberg + Amoro 助力网易构建云原生湖仓

Apache Iceberg Amoro 助力网易构建云原生湖仓 1.云原生湖仓背景与挑战2.Apache Iceberg 、Amoro 与云原生2.1 Apache Iceberg2.2 Amoro 简介 3.Apache Iceberg Amoro 云原生实践3.1 云上湖仓案例一3.2 云上湖仓案例二3.3 云上湖仓案例三 4.Amoro 未来发展规划 出品社区&…

【代码随想录——回溯算法二周目】

1. 组合总和 var (path []intres [][]int )func combinationSum(candidates []int, target int) [][]int {path make([]int, 0)res make([][]int, 0)dfs(candidates,target,0,0)return res }func dfs(candidates []int, target int,tempTarget int,start int) {if tempTarg…

Django-auth组件

Django-auth组件 1 表结构 我们从python manage.py migrate为我们创建的auth组件内置的表开始看 auth_user&#xff1a;用户表存储用户信息&#xff08;登录admin后台&#xff09; 里面的字段分两类&#xff1a;用户基本信息&#xff08;用户名&#xff0c;邮箱&#xff0c;密…

华为OD机试【找出通过车辆最多颜色】(java)(100分)

1、题目描述 在一个狭小的路口&#xff0c;每秒只能通过一辆车&#xff0c;假设车辆的颜色只有 3 种&#xff0c;找出 N 秒内经过的最多颜色的车辆数量。 三种颜色编号为0 &#xff0c;1 &#xff0c;2。 2、输入描述 第一行输入的是通过的车辆颜色信息[0,1,1,2] &#xff0…

Three.js——二维平面、二维圆、自定义二维图形、立方体、球体、圆柱体、圆环、扭结、多面体、文字

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

RabbitMQ-默认读、写方式介绍

1、RabbitMQ简介 rabbitmq是一个开源的消息中间件&#xff0c;主要有以下用途&#xff0c;分别是&#xff1a; 应用解耦&#xff1a;通过使用RabbitMQ&#xff0c;不同的应用程序之间可以通过消息进行通信&#xff0c;从而降低应用程序之间的直接依赖性&#xff0c;提高系统的…

功率电感的设计步骤

文章目录 1&#xff1a;高导磁气隙&#xff08;铁氧体&#xff09;1.1设计原理1.2 设计步骤 2 铁粉芯2.1&#xff1a;设计原理2.2&#xff1a;设计步骤 TI电感设计 学习视频原链接 截图 1 截图1 截图1 截图 2 截图2 截图2 1&#xff1a;高导磁气隙&#xff08;铁氧体&#…

基于机器学习判断面部微表情发现哪些人更容易诊有帕金森病

1. 概述 帕金森病&#xff08;Parkinson’s disease&#xff0c;PD&#xff09;是一种慢性、进展性的神经退行性疾病&#xff0c;主要影响运动系统。该病症以大脑中黑质致密部多巴胺能神经元的逐渐丧失为特征&#xff0c;导致多巴胺&#xff08;一种重要的神经递质&#xff09…

【Qt】深入探索Qt窗口与对话框:从创建到管理:QDockWidget(浮动窗口)、QDialog(对话框)

文章目录 前言&#xff1a;1. 浮动窗口2. 对话框介绍2.1. 示例&#xff1a;主窗口中&#xff0c;通过点击按钮&#xff0c;弹出一个新的对话框。2.2. 创建自定义对话框2.2.1. 纯代码的方式2.2.2. 图形化界面的方式 3. 模态对话框 和 非模态对话框4. Qt 内置对话框4.1. 消息对话…

Hybrid Block Storage for Efficient Cloud Volume Service——论文泛读

TOS 2023 Paper 论文阅读笔记整理 问题 传统桌面和服务器应用程序向云的迁移给底层云存储带来了高性能、高可靠性和低成本的挑战。由于这些传统应用程序的I/O模式和一致性要求&#xff0c;与采用特定编程模型和范式&#xff08;如MapReduce[22]和RDD[52]&#xff09;的云原生…

香橙派AIpro(OrangePi AIPro)开发板初测评

开发板简介 最近&#xff0c;我拿到手一款Orange Pi AI Pro 开发板&#xff0c;它是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;最早发布于2023年12月&#xff0c;其搭载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB两…

基于jeecgboot-vue3的Flowable新建流程定义(一)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、vue3版本因为流程分类是动态的&#xff0c;不再固定了&#xff0c;所以新建的时候需要选择建立哪种流程类型的流程 代码如下&#xff1a; <!-- 选择模型的流程类型对话框 -->&…

数据结构(六)图

2024年5月26日一稿(王道P220) 6.1 图的基本概念 6.1.1 图的定义 6.2 图的存储及基本操作 6.2.1邻接矩阵法 6.2.2 邻接表

python web自动化(分布式测试Grid)

Grid介绍 Selenium Grid 是 Selenium 提供的⼀个⼯具&#xff0c;⽤于⽀持在多台计算机上并⾏运⾏测试。 它允许将测试分发到不同的机器和浏览器组合上&#xff0c;同时收集结果。 1.并⾏执⾏测试⽤例&#xff1a;在不同的机器上并⾏执⾏测试⽤例&#xff0c;从⽽加速整个测试过…

Vulhub——adminer

文章目录 一、CVE-2021-21311&#xff08;SSRF&#xff09;二、CVE-2021-43008&#xff08;远程文件读取&#xff09; 一、CVE-2021-21311&#xff08;SSRF&#xff09; Adminer是一个PHP编写的开源数据库管理工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL…

基于SpringBoot+Vue的人事管理系统

引言 目前,人事管理的系统大都是CS架构的大型系统,很少有面向机关,事业单位内部的基于BS架构的微型人事系统,因此.开发一个基于BS架构的人事信息管理系统是非常必要的.但是基于BS架构的人事系统对于安全是一个大的考验点.在人事信息系统中,功能需简单清晰,可操作性强,其次安全…

第六节:带你全面理解vue3 浅层响应式API: shallowRef, shallowReactive, shallowReadonly

前言 前面两章,给大家讲解了vue3中ref, reactive,readonly创建响应式数据的API, 以及常用的计算属性computed, 侦听器watch,watchEffect的使用 其中reactive, ref, readonly创建的响应式数据都是深层响应. 而本章主要给大家讲解以上三个API 对应的创建浅层响应式数据的 API,…

【STM32单片机】----实现LED灯闪烁实战

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【机器学习-23】关联规则(Apriori)算法:介绍、应用与实现

在现代数据分析中&#xff0c;经常需要从大规模数据集中挖掘有用的信息。关联规则挖掘是一种强大的技术&#xff0c;可以揭示数据中的隐藏关系和规律。本文将介绍如何使用Python进行关联规则挖掘&#xff0c;以帮助您发现数据中的有趣模式。 一、引言 1. 简要介绍关联规则学习…

动态路由实验—OSPF

动态路由协议实验-------OSPF 链路状态路由选择协议又被称为最短路径优先协议&#xff0c;它基SPF&#xff08;shortest path first &#xff09;算法 实验要求&#xff1a;各个PC之间能够互通 1.四台PC配置如下 PC1 PC2 PC3 PC4 2.配置各个交换机的口子的IP R1 <HUAWE…