软件设计师——下午软件设计科目知识点解析及总结

本文主要是介绍软件设计师——下午软件设计科目知识点解析及总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、必要了解

  • 软件设计师是过关性考试,45分万岁!!!
    • 要在有效的时间内,拿到我们应该拿到的分数。不要死扣一道题目不放。要学会放弃!!!
    • 正常情况先完成:必答题的前三道题(数据流图、数据库设计 和 UML建模) 和 选答题中Java部分题目。做的没有太大问题的情况下,就足以通过下午的软件设计师考试要求的分数。
    • 在时间还充足的情况下,在去做试题四(算法设计与C语言实现)部分的题目,这部分在下午软件设计师考试中,相对来说是最有难度的一题。
  • 本篇文章依据近些年软件设计师真题所作的总结性文章,并且补充了真题所涉及到的相关知识点!!!
  • 如对文章总结部分有不同的见解的话,可以在评论区指出来,我们一起讨论改正!!!
  • 希望看完本篇文章之后,能够对你备考软件设计师考试有所帮助!!!
  • 考试要求:
    在这里插入图片描述

二、试题解析

(一)、数据流图(DFD)

  1. 涉及知识点
    在这里插入图片描述


  2. 提问形式:

    (1)、从近年来的真题来看,试题一给出的图基本上都是两层流图:图1-1 上下文数据流图(图1-1 顶层图)、图1-2 0层数据流图

    (2)、提问形式相对固定:
    在这里插入图片描述
    总结:
      ① 问题1 ~ 问题3 的出题形式每一年都相对固定,问题4 则是变化的!

      ② 问题4 的出题形式,从近些年的真题来看,采用上述表格中 形式1 的出题方式已经 连续三年考查了 (要么是上半年考,下半年
       就不考了,而上半年没有考,下半年必考)


  3. 设计原则

    • 父图与子图间的平衡原则:图1-1上下文数据流图和图1-2 0层数据流图互为父图、子图关系,其输入、输出数据流的个数和名称不应该发生变化,应该保持平衡。
    • 数据守恒原则:对任何一个加工来说,其所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者说是通过该加工能产生的数据。
    • 守恒加工原则:对同一个加工来说,输入与输出的名字必须不相同,即使它们的组成成分相同。
    • 对于每一个加工而言必须既要有输入数据流,也要有输出数据流。
    • 外部实体与外部实体之间不存在数据流。
    • 外部实体与数据存储之间不存在数据流。
    • 数据存储与数据存储之间不存在数据流。
    • 数据流与加工有关且必须经过加工。

  4. 解题技巧 以2022年下半年软件设计师下午试题作为案例

    • 问题一:补充实体

      • 在这里插入图片描述

      • 提问形式:使用说明中的词语,给出图1-1中的实体E1~E4的名称。 (4分)

        • 上述问题的答案为:E1 计量装置E2 管理员E3 计量检测人员E4 第三方服务
      • 解题方法:这边提供一种我做题的方法 (仅供参考)。

        • 可以直观的看到、试题说明都是好多段的文字描述,怎么快速准确的找出答案,是我们必须要考虑的事情!!!

        • 我们不能上来就对着说明从头到尾的一字一句的找下来,这样做题的效率很低效!!!(自我认为)

          • 首先:我们带着 “实体代码E1~E4” 去图1-2中找与之相关联的加工的名称 (如上述图片所示)

          • 然后:就在说明中找对应加工名称的那段文字说明 (正常情况下说明中每一段文字的第一句话就是图1-2中对应的加工名称)

          • 其次:在对应加工名称字段中寻找实体,实体可能是:相关人员(管理员、客户、经理…)、组织机构(供应商、银行…)、外部系统(银行系统、工资系统…)


    • 问题二:补充数据存储

      • 在这里插入图片描述

      • 提问形式: 使用说明中的词语,给出图1-2中的数据存储D1~D5的名称。(5分)

        • 上述问题的答案为:
          D1 充电检测及计量数据文件D2 基础数据文件D3 计量装置心跳数据文件
          D4 充电误差信息文件D5 检定记录
      • 解题方法:这边提供一种我做题的方法 (仅供参考)。

        • 首先我们要在 图1-2 0层数据流图 中观察与某个数据存储相关联的加工是那个,然后在对应的一个或多个加工对应说明文字当中,找出数据存储名词作为答案(这种情况建立在:说明当中直接给出数据存储的名称

        • 如果文中说明没有直接给出数据存储的名称 我们就直接通过观察:图1-2 0层数据流图中观察数据存储D1~D5 对应的 输入数据流输出数据流 的文字说明来:自拟该数据存储的名称。(如上图所示)

        • 其次就是要注意的是数据存储名称的特征是:xx文件xx表. . . . . .


    • 问题三:补充数据流

      • 在这里插入图片描述

      • 提问形式:根据说明和图中术语,补充图1-2中缺失的数据流及其起点和终点。 (4分)

        • 上述问题的答案为:
          在这里插入图片描述
      • 解题方法:这边提供一种我做题的方法 (仅供参考)。

        • 首先就是 判断父图和子图是否数据平衡: 依据父图和子图间的数据平衡原则来 核对父图中的每个输入、输出数据流是否都能在子图中找到。(直接看图1-1中外部实体的输入、输出数据流的个数和名称 在子图中是否有对应存在、不存在就是你要找的缺失数据流)

        • 然后就是 判断子图内部是否数据平衡: 依据子图内数据平衡原则来 核对子图中的每个加工是否都有输入、输出数据流。 如存在只有输入数据流没有输出数据流 或 只有输出数据流没有输入数据流 其就是你要找的缺失数据流。

        • 其次就是 详细阅读题目说明中的描述、核对每句话是否在子图当中有所体现。 如发现有在图中没有体现的话术、其就是你要找的缺失数据流。( 这种情况居多

        • 注意点:补充的缺失数据流,不论起点还是终点,每一条数据流中,必须要有一个是加工。不然肯定是错的。


    • 问题四:情景问答

      • 在这里插入图片描述

      • 提问形式:根据说明,给出 “充电检测与计量数据” 数据流的组成。 (2分)

        • 上述问题的答案为:
          充电检测与计量数据 = 充电桩ID + 计量装置ID + 监测电压 + 监测电流 + 监测电能 + 计量电压 + 计量电流
                    +计量电能 + 时间

      • 解题方法:这边提供一种我做题的方法 (仅供参考)。

        • 首先问题四这部分的提问形式总是在改变。但是反反复复还是考查后续总结的这几种提问形式的题目,我们只需要去记忆和理解,足以应对该部分提问形式的变化。

        • 就本题出现的这种提问形式而言:首先的就是找出该条数据流在说明中的具体描述,然后详细的阅读、找出跟数据流相关的组成成分就好了!!! (所上图所示)

          • 答案书写的形式为:xxxx = xx + xx + xx + …

        • 特别讲解:就是从近些年的试题一中的问题四真题来看、连续三年考了下面这种提问形式!!!

          ① 提问形式:根据说明,采用结构化语言对 “xxxxx” 的加工逻辑进行描述。

          ② 必要了解:

          • 什么是结构化语言

            结构化语言是介于自然语言和形式语言之间的一种半形式语言,是在自然语言基础之上加了一些限度,使用有限的词汇和有限的语句来描述加工逻辑。

          • 结构化语言的基本结构

            结构化语言采用 顺序选择循环 3种基本结构。

          • 语法
            一般在题目当中出现的时候,基本上都是多分支,顺序结构、选择结构和循环结构三者彼此嵌套着使用!!! 在这里插入图片描述

          ③ 案例解析:(这边就拿2022年上半年软件设计师下午试题一中的问题四的真题来作为案例进行解析)

          在这里插入图片描述

          • 提问形式:根据说明,采用结构化语言对 “订单处理” 的加工逻辑进行描述。 (3分)

            上述问题答案为:
            在这里插入图片描述


            注意事项:
            ① 在此类问题中、结构化语言的基本结构都是以嵌套着的方式出现,例如:顺序结构 + 选择结构(里面在嵌套着:
             选择结构)、顺序结构 + 循环结构(里面在嵌套着:选择结构) 等等形式展现!

            ② 判断基本结构的时候,要特别注意是否为:循环结构。正常情况下文中说明可以很直观的判断出:顺序结构和
             选择结构,循环结构则需要一些分析、理解和常识来判断!


          • 解题方法:这边提供一种我做题的方法 (仅供参考)。

            ① 首先先看问题、看是对那个加工的逻辑进行描述,在题目说明中找到对应描述段落的语句。

            ② 其次判断该加工所在段落的描述:符合结构化语言基本结构中的那种或者说那几种结构嵌套的。

            ③ 然后需要特别注意的是说明描述中的一些关键字:否则 … 这些关键字往往对应基本机构中语法中的:
            IFELSE IFELSE

            ④ 最后就是在该加工说明描述语句中加上结构化语句的基本结构语法、注意加工逻辑的合理性书写下去即可。


          • 补充说明:试题一中问题四近几年其他出题形式的固定回答模式!!!

            • ①、如何保持数据流图平衡!

                答案: 既保持父图与子图间平衡:父图中某个加工的输入输出数据流必须与其子图的输入输出数据流在数量和名称上面相同。父图的一个输入/输出数据流对应着子图中几个输入/输出数据流,而子图中组成的这些数据流的数据项全体正好是父图中的一个数据流。

            • ②、"xxxx"可以分解为哪些子加工!

                解决方法: 加工是用于处理数据流的,如果要把某个加工分解成一些子加工,可以把该加工涉及到的数据流,在说明中标识出来。再在数据流名称所在的句子中找 "动词 + 名词 " 的结构(普遍情况下),分析是否可以作为要分解加工的子加工。

            • ③、分解子加工的时候需要注意哪些错误!

                答案:黑洞、奇迹、灰洞。
                黑洞:若一个加工只有输入数据流而无输出数据流,则称为黑洞。
                奇迹:若一个加工只有输出数据流而无输入数据流,则称为奇迹。
                灰洞:若一个加工的输入数据流无法通过加工产生输出数据流,则称为灰洞。
                一个数据流图中,不允许数据流同名。


  5. 总结

    • 试题一中的四个问题,在我看来问题三是四个问题中比较麻烦、比较消耗时间去做的一题!
    • 要想把试题一拿下的关键就是:读题!读题!读题!
    • 把试题一当做 阅读理解 来做,并且给出的答案一定要使用题目说明中的文字来回答!
    • 存在即合理 试题提供的说明在图中都是有相对应的关系,不要放掉每一句话,认真!仔细!耐心!
    • 综上所述的做下来,试题一拿到12~15分是没有什么问题的!!!

(二)、数据库设计

  1. 涉及知识点

    (1)、E-R图(实体-联系图)
    在这里插入图片描述
    实体又分为:弱实体,两者是从属关系,无联系类型。两者之间的图像联系的表示为:
    在这里插入图片描述

    联系两端 需要标注联系类型 、实体与实体之间的联系类型分为:一对一 (1:1)一对多 (1:N) 或 (1: *)多对多 (M:N) 或 ( * : * )
    在这里插入图片描述
    这边需要特别注意的就是:在E-R图中标注联系类型的时候,要根据题目说明中给出的联系类型来标注。
                要么使用:1:1、1:n、m:n 、 要么使用:1:1、1 : * 、* : * 。不可以混着使用、要统一!!!


    (2)、关系模式
       关系模式:在二维表中的行定义,即对关系的描述称为关系模式 ,以名称和属性名来表示一个关系。
            一般表示为:名称(属性1,属性2,… , 属性n)。


    (3)、主键和外键
       主键:唯一标识当前关系的属性,不能为空,是用来保证数据完整性。
       外键:是其他关系模式的主键或者为空,外键可以有多个,是用来和其他关系模式建立联系的。


  1. 出题形式
    根据近几年的真题来看、数据库设计一共三问:问题一和问题二比较固定、问题三不固定
    问题一:补充E-R图缺少的联系及联系类型。
    问题二:补充关系模式、主键、外键。
    问题三:情景问答

  1. 解题技巧 以2022年下半年软件设计师下午试题作为案例
    • 问题一:补充E-R图缺少的联系及联系类型。
      • 在这里插入图片描述

      • 提问形式:根据需求描述,图2-1实体联系图中缺少上联系。请在答题纸对应的实体联系图中补充三个联系及联系类型。注:联系名可用联系1、联系2、联系3,也可根据你对题意的理解取联系名。 (6分)

        上述问题答案为:
        在这里插入图片描述


      • 解题方法:

        这道题的关键主要就是:根据题目提供的描述,确认哪些实体之间存在联系 并且 联系类型是那一种,之后进行连线即可

        注意点1: 补充E-R图这是重中之重,E-R图如果弄错了,对后续做题都会有一定的影响。

        注意点2: 补充缺失的联系名和联系类型的时候,一定要使用题目所给的联系名和联系类型。整个E-R图中的所补充的联系
               名和联系类型一定要统一。归根到底就是要根据题目说明来答题就没有问题!!!


    • 问题二:补充关系模式、主键、外键。
      • 在这里插入图片描述

      • 提问形式:
        题目得分:(6分)
        (1) 将关系模式中的空___(a)___、 ___(b)___的属性补充完整,并填入答题纸对应的位置上。

        (2) 专卖店关系的主键_____(d)_____ 和外键____(e)______ 。职员关系的主键___(f)____ 和外键: ____ (g)____ 。


        上述问题的答案为:
        (1)、(a):店长、分公司编号; (b):专卖店号。

        (2)、(d):专卖店号; (e):店长、分公司编号; (f):职员号; (g):专卖店号。


      • 解题方法:

        本道题实际上考查的就是:将 E-R图转换为关系模式,补充缺失的属性。

        第一步:将问题中缺失属性对应的关系模式、带入到题目描述中进行比对,缺少那个属性补充上去就行了。(如上图所示)

        第二步:完成第一步还没有解决问题的话,就按照 E-R转换为关系模式的规则来补充缺失的属性。(规则如下)

        • E-R转换为关系模式的规则:

          首先每一个实体都要转换为一个关系模式。

          对于联系共分为三种情况来考虑

          ① 一对一:联系作为一个属性随便加入到那个实体中去。

          ② 一对多:联系可以单独转换为一个关系模式(一般不考查这种)
                或者 联系作为一个属性加入到N端中 并且 N端实体 应包含 1端的主键关注)。

          ③ 多对多:联系必须单独转换为一个关系模式、并且该关系模式 必须包含两端实体的主键。( 常考、重点关注

        • 注意事项:

          ① 转换之后、原来的两个实体之间的联系必须还存在。

          ② 填写某个实体的属性时,还要考虑到其 联系的属性 也要包含在其中

          ③ 还有一种情况是让你:标注主键和外键的完整性约束。
                 主键的话:在对应的主键属性下面画一条 实线
                 外键的话:在对应的主键属性下面画一条 虚线
            其中需要特别注意的是:同一个属性存在:即是主键又是外键的情况(一般出现在多对多联系中)
                       所以这种情况下,标注的时候就要在属性下面画两条线:一条实线、一条虚线。


    • 问题三:情景问答。
      • 在这里插入图片描述

      • 提问形式:
        题目得分:(3分)
        (1) 为了在紧急情况发生时,能及时联系到职员的家人,专卖店要求每位职员至少要填写位紧急联系人的姓名、与本人关系
           和联系电话。根据这种情况,在图2-1中还需要添加的实体是___(h)___,职员关系与该实体的联系类型为 __ (k) __ 。
        (2) 给出该实体的关系模式 。


        上述问题的答案为:

        (1)、(h):紧急联系人; (k):一对多

        (2)、紧急联系人(紧急联系人编号,职员号,紧急联系人的姓名,关系,联系电话)

        要是要求在E-R图中补充出来的话如下图所示:
        在这里插入图片描述


      • 解题方法:

        本道题本质上也是在考查:联系类型 和 E-R图转换为关系模式的。 运用上述问题一和问题二的解题方法即可!!!

        问题三出现的形式:给出一段文字描述,根据文字描述让你:添加新的实体、联系类型和关系模式。


  2. 总结
    • 本道题相比较问题一还是简单的。作为一位程序员、数据库相关的知识是必须掌握的,所以应尽可能的做到不失分。
    • 熟悉E-R图转换为关系模式的规则 以及 掌握E-R图相关的知识点。
    • 答题的时候一定要按照题目要求来,使用题目说明中给出的语句来填写。

(三)、UML建模

  1. 涉及知识点

    • UML(Unified Modeling Language,统一建模语言)是目前被业界普遍接受的一种面向对象的分析方法,但是其和程序设计语言并无关系。
    • UML的三个构成要素:UML的基本构造块支配这些构造块如何放置在一起的规则运用与整个语言的一些公共机制。
    • UML的基本构造块包含:事物(对模型中最具有代表性的成分的抽象)、关系(把事物结合在一起) 和 (聚集了相关的事物)。
      • 事物:
        UML中的事物又分为:结构事物、行为事物、分组事物和注释事物。

        ① 结构事物包括:类(Class)、接口(Interface)、协作(Collaboration)、用例(Use Case)、主动类(Active Class)、构件(Component)、制品(Artifact)和节点(Node)

        各种结构事物的图形化表示如下图所示。
        在这里插入图片描述

        ② 行为事物包括:交互(Interaction)、状态机(State Machine)和 活动(Activity)

        各种行为事物的图形化表示如下图所示。
        在这里插入图片描述

        ③ 分组事物包括:包(Package)
        在这里插入图片描述
        ④ 注释事物包括:注释(Note)
        在这里插入图片描述


      • 关系:
        UML中的关系又分为:依赖、关联、实现 和 泛化。 其中关联又细分为:聚合 和 组合

        ① 关系对应的图形表示如下图所示:
        在这里插入图片描述

        ② 几种关系的强弱顺序:
          泛化(继承)= 实现 > 组合 > 聚合 > 关联 > 依赖

        ③ 多重度(Multiformity)
          通常在关联、聚合、组合上标注。就是代表有多少个关联对象存在。使用 数字…星号(数字) 表示。
        在这里插入图片描述


      • 图:
        UML中的图又分为:用例图类图、对象图、包图、状态图、活动图、交互图、部署图、组件图。其中交互图又细
        分为:序列图和协作图。

        根据近些年的真题可以总结出来:UML建模部分的试题,都只考查 用例图 和 类图 这两种图了。

        所以下面对用例图和类图做详细的解析,至于其他图的解析这边不做过多的解析,如若想了解可以自行查阅资料。


        • 用例图

          ① 用例图展现了一组 用例参与者 以及 它们之间的关系,如所下图所示:

          在这里插入图片描述
          ② 其中的参与者是人、硬件或者其他系统可以扮演的角色;用例是参与者完成的一系列操作;它们之间的关系
            分为:扩展关系(<< extend >>)、 包含关系(<< include >>)和 泛化关系(<< generalization >>)

          关系的图形化表示:
          在这里插入图片描述


        • 类图

          ① 类图展现了一组 接口协作它们之间的关系,如下图所示:

          在这里插入图片描述
          ② 其中它们之间的关系分为:依赖关系泛化关系关联关系。其中关联又细分为:聚合和组合

          ③ 其中类的图形化表示及完整的内部组成如下图所示:
          在这里插入图片描述


  2. 出题形式:

    • 根据近几年的真题来看,UML建模一共三问:三个问题的提问形式都不太固定,但是正常情况下:问题一考查用例图相关知识点、问题二考查类图相关知识点、问题三考查不固定。一般来说会有以下几种题型
      • 补充用例图:

        主要会考察这几个部分:补充用例名称补充参与者名称补充或解释用例之间的关系

        • 补充用例名称 和 补充参与者名称 的这种提问形式,只需根据题目所给出的描述,都是可以很轻易得出答案。

        • 补充或解释用例之间的关系:重点在于理解并熟悉包含(<< include >>)、扩展(<< extend >>)、泛化的这三种关系的概念及图形化的表示。

        • 难点在于:判断其关系是包含还是扩展。两者的关键在于是不是必须操作! 包含是必须、扩展不是必须。

          举图书管理系统为例进行说明:

          • 如果我们要登记借书信息,就必须要先进行用户登录、进入到系统才可以。所有此时:登记借书信息用例 包含 用户登录用例。
          • 如果我们在查询图书信息的时候发现错误,我们就错误图书信息进行修改,反之没有发现错误自然就不需要修改。所有此时:查询图书信息用例 的扩展是 修改图书信息用例。其不是必须的操作。
      • 补充类图:

        主要会考察这几个部分:补充类名、补充类的属性名、补充类的方法名、补充类之间的关系、补充多重度。

        • 补充类名、属性名、方法名的这种提问形式,也是只需根据题目所给的描述,都是可以很轻易的得出答案。
        • 补充多重度这种提问形式:虽然在进五年的作为问题没有直接出现过,但是在类图当中还是有出现过的。所以我们必须要熟悉其概念,知道其标注在类图上面是什么意思,方便我们更好的看图、做题。
        • 补充类之间的关系这种提问形式:重点在于理解并熟悉依赖、关联、实现、聚合、组合、泛化的这几种关系的概念及对应的图形化表示。尤其是 组合、聚合 和 泛化的图形化表示必须要知道。
      • 识别设计模式:

        • 这部分主要就是要掌握经典设计模式的特点,并结合题目当中的描述来完成。
        • 在UML建模试题部分很少直接去考查设计模式,主要是在面向对象程序设计与实现中去考查。不过在UML建模中也出现过,例如18下半年的考试中:问你题目当中给出的类图是哪一种设计模式,说明该模式的意图及其适用场合。还有就是最近的22下半年的考试中:给你一段新的需求,让你对题目中的类图进行改造,要增加那种设计模式并解释选择该设计模式的原因。

  3. 解题技巧: 以2022年下半年软件设计师下午试题作为案例

    • 问题一:

      • 在这里插入图片描述

      • 提问形式:根据说明中的描述,给出图3-2中U1~U4所对应的用例名。(4分)

        上述问题的答案为:U1:显示温度 、U2:显示华氏度、U3:温度计显示、U4:单位换算。


      • 解题方法:

        • 首先需要了解何为包含关系?何为泛化关系?何为扩展关系?以及三种关系对应的图形化表示?
          • 包含:就可以按照字面意思去理解,一个用例包含着另外一个用例,箭头方向指向 被包含的用例
          • 泛化:可以理解为是一种 继承关系,箭头方向从 指向
          • 扩展:可以理解为从一个用例(被扩展用例)中、添加出来一个新的用例(扩展用例),箭头方向从 扩展用例 指向 被扩展用例
            • 难点: 这里面容易产生分歧就是如何区分 包含关系 和 扩展关系
              • 包含关系:就是在执行基用例(包含用例)的时候,被包含用例也 必须执行
              • 扩展关系:就是在执行被扩展用例的时候,扩展用例执行与否是 可选 的(扩展用例 是 被扩展用例的可选附加行为)。
        • 然后就是通过:用例图中已知的用例名 和 用例间的关系 结合试题说明描述来 反推 出用例图中 缺失的用例名、参与者名称 和 用例间的关系 (这里面有个小技巧: 就是大部分情况下(具体情况具体分析),试题说明描述中的每一段的头一句,对应着用例图中的一个用例)。
        • 解决此种类型的题目关键点在于: ① 理解用例图中三种关系是怎样的?
                          ② 知道三种关系对应的图形化表示!
                          ③ 对文字图形的阅读理解能力!
                          ④ 生活常识!

    • 问题二:

      • 在这里插入图片描述

      • 提问形式:根据说明中的描述,给出图3-3中C1~C8所对应的类名(类名使用图3-1中标注的词汇)。 (8分)

        上述问题的答案为:
        C1:TemperatureCovertorDialog
        C2~C4:FahrenheitEditBoxCelsiusEditBxTemperatureBar
        C5~C8:FahrenheitRaiseFahrenheitLowerCelsiusRaiseCelsiusLower


      • 解题方法:

        • 技巧: 当让我们补充类图中的类名时、重点关注试题说明中 英文部分 的描述(存在的前提下,大概率类名就在其中)。
        • 难点: 梳理清楚 聚合关系组合关系 两者的区别?
          • 聚合关系:是整体与部分的关系,部分 可以离开 整体而单独存在。空心菱形指向整体
          • 组合关系:是整体与部分的关系,部分 不能离开 整体而单独存在。实心菱形指向整体
        • 反推法: 根据类图中的已知条件(类名、类与类之间的关系)、结合试题说明中的文字描述来推理出类图中缺失的部分。
        • 前提条件: 必须理解类图中的多种关系的概念 及其 对应的图形化表示(具体说明在上述涉及知识点中有做详细介绍)

    • 问题三:

      • 在这里插入图片描述

      • 提问形式:现需将图3-1所示的界面改造为一个更通用的GUI应用,能够实现任意计量单位之间的换算,例如千克和确之间的模算、厘米和英寸之间的换算等等。为了实现这个新的需求,可以在图3-3所示的类图上增加那种设计模式?请解释选择该设计模式的原因(不超过50字)。 (3分)

        上述问题的答案为:

        • 增加:策略模式。
        • 原因:该模式是定义一系列的算法将其封装起来,并让其可以相互替换,从而让算法可以独立于使用它的用户而变化。
      • 解题方法:

        • 就是要掌握经典设计模式的特点。

  4. 总结

    • 从近五年的真题来看:一直在考查 用例图类图 组合起来的题目。
      • 用例图一般会考查:
        • 用例名称、参与者名称 、补充用例之间的关系、解释用例之间关系的含义…(顺序按照考查出现的次数)
      • 类图一般会考查:
        • 类名、给出某个类的主要属性和方法…(顺序按照考查出现的次数)
    • 重点关注说明文字中的英文部分描述,在一个就是填写类名的时候,最好写英文
    • 如何更好的完成UML建模部分的试题?
      • 必须熟练掌握UML中的图(主要就是图的各中关系及其对应的图形化表示)
      • 具备一定的文字阅读理解能力(其实试题一、二、三本质上都是可以当成阅读理解去做、答案都在说明描述中)
      • 生活常识(这些题目所涉及的也都是我们身边的东西。做题的时候带入一些生活常识,有利于我们更好的去理解试题)

(四)、算法设计与C语言实现

  1. 待补充
  2. 待补充
  3. 待补充

(五)、面向对象程序设计与实现

  1. 必要了解
    • 该部分共有两道试题分别是:试题五(采用C++语言) 和 试题六(采用Java语言)、选择其中一道试题进行答题即可。
    • 从难易程度上来看,这边 建议大家选择Java部分的试题来答题。更容易得分、更容易拿满分!
    • 下面就只针对Java部分的试题进行展开式的讲解(如需C++部分的试题讲解,可以自行百度哟)
      • 试题的构成:一段设计模式的说明 + 对应的类图 + Java代码
      • 提问的形式:阅读试题提供的说明和Java代码,将代码当中缺失的部分,补充完整。
      • 分值的构成:一般情况下试题六共有5空、每空3分,一共15分。
    • 在一个就是做试题五或者试题六的时候一定要在答题卡对应部分进行填涂。如下图所示:
      在这里插入图片描述

  2. 设计模式
    • 概念:Java的设计模式共分为三大类型、23种模式。

      • 创建型模式(5种模式):主要用于创建对象。

            抽象工厂(Abstract Factory)模式、工厂(Factory Method)模式、建造者(Builder )模式、

            原型(Prototype )模式、单例(Singleton )模式。

      • 结构型模式(7种模式):主要用于处理类或者对象组合。

            适配器(Adapter)模式、桥接(Bridge)模式、组合(Composite )模式、装饰(Decorator )模式、

            外观(Facade )模式、享元(Flyweight )模式、代理(Proxy )模式。

      • 行为型模式(11中模式): 主要用于描述类或者对象怎么样去交互、分配职责的。

            责任链(Chain of Responsibility)模式、命令(Command )模式、解释器(Interpreter )模式、

            迭代器(Iterator )模式、中介者(Mediator )模式、备忘录(Memento )模式、观察者(Observer )模式、

            状态(State )模式、策略(Strategy )模式、模板(Template )模式、访问者(Visitor )模式。

    • 历年来真题中试题六(Java)部分考查的设计模式如下:

      • 在这里插入图片描述
    • 归纳总结:

      • 从近17年、32道的真题来看,考查设计模式类型还是以行为型和结构型为主,创建型考查比较少。
      • 从上述表格直观的看出,2023年下半年很大概率还是会去考查: 行为型模式(11种设计模式)中的其中一种设计模式。

  3. Java的基本语法(真题代码当中经常出现的语法)
      • 定义类语法:

        class   类名{
           成员属性;
           成员方法;
        }

        • 成员属性(表示类的特征)的定义方式:[修饰符] 数据类型 属性名;
        • 成员方法(表示类的行为)的定义方式:
          在这里插入图片描述
        • 成员方法的分类:
          在这里插入图片描述
      • 创建对象:

        • 语法:类名 对象名 = new 类名();
      • 访问对象:

        • 访问对象的属性:对象名.属性名;
        • 访问对象的方法:对象名.方法名();
      • 补充知识点 - 修饰符

        • 概念:修饰符用来定义类、方法或者变量,通常放在语句的最前端。
        • 分类:修饰符主要是分为 访问修饰符 和 非访问修饰符。
          • 访问修饰符 (可以使用访问修饰符来保护对类、变量、方法和构造方法的访问)

            Java支持下列4种不同的访问权限:
            在这里插入图片描述
            访问的范围从大到小的顺序:public  >  protected >  default >  private

          • 非访问修饰符(为了实现一些其他功能)这边列举常见的几个非访问修饰符:
            在这里插入图片描述


    • 类中的方法(常会考到的)
      • 抽象方法:被 abstract 修饰的方法,称为抽象方法。
        • 特点:抽象方法只有声明,没有具体实现。既没有方法体,以分号结尾。

        • 代码示例:

          public abstract class  Animal {      // 抽象类的定义方式:public abstract class 类名{}
           
            public abstract  void run();    // 抽象方法的定义方式:public abstract 返回值类型 方法名();
           
          }

        • 注意点:
            定义抽象方法时,修饰符必须为 public 或者 protected(因为如果为 private,父类则不能被子类继承,子类便无法实现该方法) 一般情况下都采用:public


      • 构造方法:构造方法是类的一种特殊方法(也称为:构造函数 或 构造器)用于创建和初始化对象。
        • 特点:方法名 必须 和类名相同、没有返回值(也不能写作 void)。

        • 代码示例:

          public class  Puppy {
           
            private String name;
           
            public Puppy(){         // 无参构造方法。
            }
           
            public Puppy(String name){     // 有参构造方法。
              this.name = name;
            }
          }


    • 封装
      • 概念:将类的属性封装在类中,不允许在类的外部直接访问。从而起到保护数据的安全,使内容可控。只能通过被授权的方
           法才能对数据进行访问。

      • 实现封装步骤:

        • 第一步:将属性私有化(使用 private 修饰属性)
        • 第二步:提供对外访问的方法(用于赋值、取值)、使用 public 修饰方法
          • 取值方法(getter方法):如果属性只具有getter方法,则表示该属性是只读的,在外部只能读取。
          • 赋值方法(setter方法):如果属性只具有setter方法,则表示该属性是只写的,在外部只能修改。
      • 代码示例:

        public class Student {
           private   String  name;            // 第一步:将属性私有化。
         
           public   String   getName() {         // 第二步:提供对外访问的取值方法(getter方法)。
                return name;
           }
           public   void  setName(String name) {    // 第二步:提供对外访问的赋值方法(setter方法)。
                this.name = name;
           }
        }


    • 继承
      • 概念:通过 extends 关键字,让一个类和另一个类建立起父子关系。此时子类继承了父类中的属性和方法。

      • 语法:

        class   子类名  extends   父类名{
         
        }


    • 抽象类(abstract)
      • 语法:被 abstract 修饰的类,称为抽象类。

        abstract   class   类名{
         
        }


    • 接口(interface)
      • 概念:从本质上讲,接口是一种特殊的抽象类,只能包含 常量 和 抽象方法。

      • 语法:

        interface   接口名{
           常量;
           抽象方法;
        }

        • 常量:接口中的属性,默认被 public static final 修饰,既接口中只能有常量。
        • 抽象方法:接口中的方法,默认被 public abstract 修饰,既接口中只能有抽象方法。

      • 实现接口语法:实现接口的类,称为实现类。

        class   类名  implements   接口名{
         
        }


    • 关键字
      • super
        • 表示父类对象的引用,只能在子类中使用。
        • 可以使用 super() 访问父类的构造方法,必须位于第一行
        • 可以使用 super. 访问父类的属性和方法,解决父类和子类成员同名的问题。
      • this
        • 表示方法的调用者,既调用该方法的对象,只能在类的方法中使用。
        • 可以使用 this() 访问当前类中的构造方法,必须位于第一行
        • 可以使用 this. 访问当前类中的属性和方法,解决当前类中全局变量和局部变量同名问题。
        • 当局部变量和全局变量不同名的时候,可以省略不写 this.
      • static
        • 表示静态的,可以用来修饰变量和方法,分别称为静态变量和静态方法。
          • 静态变量
            • 使用 static 修饰的变量,称为静态变量 或 类变量(非static修饰的变量称为实例变量)
            • 静态变量为类中所有对象共有,属于整个类。
            • 访问方式:类名.属性名 (推荐)或者 对象名.属性名
          • 静态方法
            • 使用 static 修饰的方法,称为静态方法 或 类方法(非static修饰的方法称为实例方法)
            • 静态方法中只能访问静态变量 或 静态方法,不能访问实例变量 和 实例方法。
            • 静态方法中不能使用 this 关键字。
            • 访问方式:类名,方法名()(推荐)或者 对象名.方法名()

  4. 解题技巧
    • 题型分布
      • 结合多年的真题来看,Java部分的代码填空主要有以下几种类型:
        • 依据 抽象类继承抽象类的类 两者之间的各种关系,进行缺失代码的补全。
        • 依据 接口实现接口的类 两者之间的各种关系,进行缺失代码的补全。
        • 对实例化定义 缺失部分进行补全。
        • 对集合定义 缺失部分进行补全。
        • 对构造方法 缺失部分进行补全。
        • 对方法中的方法体 缺失部分进行补全。

    • 题型解析
      • 抽象类相关(一般情况下会从以下角度去考查)
        • 在抽象类的方法体中挖空,让你去补全抽象类中:缺失的抽象方法

          • 依据:子类继承抽象类后,必须 实现 或 重写 抽象类中所有的抽象方法。

          • 代码示例:(真题中的相关部分代码)
            在这里插入图片描述

          • 注意点:① 抽象类不能被实例化,既不能使用 new 创建一个对象,只能被继承。
                ② 抽象方法只有声明,没有具体实现,既没有方法体,以分号结尾。
                ③ 抽象类不一定有抽象方法,但含有抽象方法的类,一定是抽象类。


        • 补全抽象类中:定义属性缺失部分

          • 类型:① 补全属性缺失的:权限修饰符。(近些年不怎么考查
               ② 补全属性缺失的:数据类型。(重点关注
          • 依据:① 权限修饰符:public (公开的)default (默认)protected (受保护的)private (私有的)
               ② 数据类型:绝大多数是会考查:引用数据类型字符串类型接口类型、数组…)

      • 接口相关
        • 在接口的方法体中挖空,让你补全缺失的方法
          • 依据:从本质上讲,接口是一种特殊的抽象类,只能包含 常量 和 抽象方法。
               接口中的方法,默认被 public abstract 修饰,既接口中只能有抽象方法。
          • 代码示例:(真题中的相关部分代码)
            在这里插入图片描述

      • 待补充

  5. 总结
    • 待补充
    • 待补充
    • 待补充

三、整体总结

这篇关于软件设计师——下午软件设计科目知识点解析及总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832826

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

嵌入式软件工程师应聘知识点

嵌入式软件工程师应聘 修改浏览权限 | 删除 数据结构(C语言)部分常考的知识点: 1、局部变量能、全局变量和静态变量 2、堆和栈 3、Const、volatile、define、typedef的用途 4、链表(比如链表的插入、删除和排序) 5、排序(考查冒泡法的较多) 6、可重入函数 、malloc函数 7、指针(常考函数指针,函数指针,数组指针,指针数组和

解析 XML 和 INI

XML 1.TinyXML库 TinyXML是一个C++的XML解析库  使用介绍: https://www.cnblogs.com/mythou/archive/2011/11/27/2265169.html    使用的时候,只要把 tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

Java注解详细总结

什么是注解?         Java注解是代码中的特殊标记,比如@Override、@Test等,作用是:让其他程序根据注解信息决定怎么执行该程序。         注解不光可以用在方法上,还可以用在类上、变量上、构造器上等位置。 自定义注解  现在我们自定义一个MyTest注解 public @interface MyTest{String aaa();boolean bbb()

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

tensorboard-----summary用法总结

Tensorflow学习笔记——Summary用法         最近在研究tensorflow自带的例程speech_command,顺便学习tensorflow的一些基本用法。 其中tensorboard 作为一款可视化神器,可以说是学习tensorflow时模型训练以及参数可视化的法宝。 而在训练过程中,主要用到了tf.summary()的各类方法,能够保存训练过程以及参数分布图并在

电子盖章怎么做_电子盖章软件

使用e-章宝(易友EU3000智能盖章软件)进行电子盖章的步骤如下: 一、准备阶段 软件获取: 访问e-章宝(易友EU3000智能盖章软件)的官方网站或相关渠道,下载并安装软件。账户注册与登录: 首次使用需注册账户,并根据指引完成注册流程。注册完成后,使用用户名和密码登录软件。 二、电子盖章操作 文档导入: 在e-章宝软件中,点击“添加”按钮,导入待盖章的PDF文件。支持批量导入多个文件,