《系统架构设计师教程(第2版)》第5章-软件工程基础知识-03-系统分析与设计(下)-面向对象方法

文章目录

  • 1. 面向对象分析(OOA)
    • 1.1 原则
      • 1)抽象
      • 2)封装
      • 3)继承
      • 4)分类
      • 5)聚合
      • 6)关联
      • 7)消息通信
      • 8)粒度控制
      • 9)行为分析
    • 1.2 基本步骤
      • 1)确定对象和类
      • 2)确定结构
      • 3)确定主题
      • 4)确定属性
      • 5)确定方法
  • 2. 面向对象设计(OOD)
    • 2.1 基本思想
    • 2.2 类
    • 2.3 三种类
      • 2.3.1 实体类
      • 2.3.2 控制类
      • 2.3.3 边界类
  • 3.面向对象编程(OOP)
    • 3.1 概述
    • 3.2 基本特点
      • 3.2.1 封装
      • 3.2.2 继承
      • 3.2.3 多态
  • 4.数据持久化与数据库
    • 4.1 持久化和持久层
    • 4.2 持久化技术框架
      • 1)Hibernate
      • 2)iBatis
      • 3)JDO

1. 面向对象分析(OOA)

  • 概述:
    • 面向对象的分析方法 (Object-Oriented Analysis)
  • OOA模型的组成
    • 5个层次:主题层、对象类层、结构层、属性层和服务层
    • 5个活动:标识对象类、标识结构、定义主题、定义属性和定义服务
  • 两种对象类之间的结构
    • 分类结构:一般与特殊的关系
    • 组装结构:反映了对象之间的整体与部分的关系

1.1 原则

1)抽象

  • 概述:抽象是从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征。
  • 抽象原则
    • 过程抽象
      • 指任何一个完成确定功能的操作序列,其使用者都可以把它看作一个单一的实体,尽管实际上它可能是由一系列更低级的操作完成的。
    • 数据抽象
      • 根据施加于数据之上的操作来定义数据类型,并限定数据的值只能由这些操作来修改和观察
      • 它强调把数据(属性)和操作结合为一个不可分的系统单位(即对象),对象的外部只需要知道它做什么,而不必知道它如何做。
      • 是OOA 的核心原则

2)封装

  • 概述:把对象的属性和服务结合为一个不可分的系统单位,并尽可能隐蔽对象的内部细节

3)继承

  • 概述:特殊类的对象拥有其对应的一般类的全部属性与服务,称作特殊类对一般类的继承
  • 优点:使系统模型简练、清晰

4)分类

  • 概述:分类就是把具有相同属性和服务的对象划分为一类,用类作为这些对象的抽象描述

分类原则实际上是抽象原则运用于对象描述时的一种表现形式。

5)聚合

  • 概述:把一个复杂的事物看成若干简单的事物的组装体,从而简化对复杂事物的描述。

6)关联

关联是人类思考问题时经常运用的思想方法:通过一个事物联想到另外的事物。能使人发生联想的原因是事物之间确实存在着某些联系。

7)消息通信

  • 概述:要求对象之间只能通过消息进行通信(而不允许在对象之外直接地存取对象内部的属性)
  • 由于封装原则而引起的。在OOA 中要求用消息连接表示出对象之间的动态联系。

8)粒度控制

  • 粒度控制原则:
    • 考虑全局时,暂时不考虑具体的细节
    • 考虑某部分的细节时,则暂时撇开其余的部分

9)行为分析

1.2 基本步骤

OOA大致上遵循如下5个基本步骤。

1)确定对象和类

  • 对象:是对数据及其处理方式的抽象
  • 类:是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。

2)确定结构

  • 结构:指问题域的复杂性和连接关系
    • 类成员结构:反映了泛化-特化关系
    • 整体-部分结构:反映整体和局部之间的关系

3)确定主题

主题是指事物的总体概貌和总体分析模型

4)确定属性

属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。

5)确定方法

概述:方法是在收到消息后必须进行的一些处理方法

2. 面向对象设计(OOD)

面向对象设计方法 (Object-Oriented Design,OOD)

2.1 基本思想

  • 抽象
  • 封装:类封装了信息和行为
  • 可扩展性:通过继承和多态来实现

2.2 类

  • 类:是具有相同属性、方法和关系的对象集合的总称
  • 职责:指类所担任的任务
  • 定义类:将类的职责分解为类的属性和方法
    • 属性用于封装数据
    • 方法用于封装行为

2.3 三种类

2.3.1 实体类

  • 概述:是需求中每个实体的映射,通常都是永久性的
    • 在用例模型向领域模型的转化中,一个参与者一般对应于实体类
    • 实体类一定有属性,但不一定有操作
  • 命名:名词,采用业务领域术语命名

通常可以从SRS 中的那些与数据库表(需要持久存储)对应的名词着手来找寻实体类。

2.3.2 控制类

  • 概述:用于控制用例工作的类
    • 控制类没有属性,但一定有方法
  • 命名:由动宾结构的短语
    • 如:用例“身份验证”的控制类“身份验证器”
  • 过程:
    • 定义:控制类将用例的特有行为进行封装
    • 产生对象:系统执行用例的时候,就产生了一个控制对象
    • 对象消亡:其对应的用例执行完毕后消亡

2.3.3 边界类

  • 概念:
    • 用于对系统外部环境与其内部运作之间的交互进行建模的类。
  • 寻找和定义边界类:
    • 检查用例模型,每个参与者和用例交互至少要有一个边界类,边界类使参与者能与系统交互
    • 如:窗口、通信协议、打印机接口、传感器、终端等,报表

3.面向对象编程(OOP)

3.1 概述

  • 概述
    • 面向对象程序设计 (Object Oriented Programming)
    • 对象为核心
    • 认为程序由一系列对象组成(即,对象是组成程序的基本模块)
    • 类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作
    • 对象是类的实例化
    • 对象间通过消息传递相互通信(以模拟现实世界中不同实体间的联系)
  • OOP 达到了软件工程的3个主要目标:重用性、灵活性和扩展性

3.2 基本特点

3.2.1 封装

  • 概述:将数据及相关的操作语言组装到一起,封装在一个类中
  • 封装的最基本单:对象
  • 基本目标:高内聚、低耦合

3.2.2 继承

  • 概述:继承是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续
  • 按继承源分类:
    • 单继承:一个对象仅仅从另外一个对象中继承其相应的特点
    • 多继承(一个对象可以同时从另外两个或者两个以上的对象中继承所需要的特点与能力,并且不会发生冲突等现象)
  • 继承包含的内容进行划分
    1. 取代继承

    一个对象在继承另一个对象的能力与特点之后将父对象进行取代

    1. 包含继承

    一个对象在将另一个对象的能力与特点进行完全的继承之后,又继承了其他对象所包含的相应内容,结果导致这个对象所具有的能力与特点大于等于父对象,实现了对于父对象的包含)

    1. 受限继承
    2. 特化继承。

3.2.3 多态

  • 宏观角度:当不同的多个对象同时接收到同一个完全相同的消息之后,所表现出来的动作是各不相同的,具有多种形态
  • 微观的角度:使用相同的调用方式来对相同的函数名进行调用,函数所执行的动作是不同的。

4.数据持久化与数据库

4.1 持久化和持久层

  • 对象的持久化 (Persistence):把内存中的对象保存到数据库或可永久保存的存储设备中
  • 持久层 (Persistence Layer):
    • 概述:将数据使用者和数据实体相关联
    • 作用:实现了业务逻辑和数据逻辑的解耦

4.2 持久化技术框架

1)Hibernate

  • 概述
    • 是一个全自动的 ORM框架

      可以自动生成SQL 语句,自动执行,使得 Java程序员可以随心所欲地使用对象编程思维来操纵数据库

    • 它对JDBC进行了非常轻量级的对象封装

      JDBC(Java Database Connectivity)是一个为数据库访问定义的 Java API ,它可以与任何数据库进行交互。

    • 它将POJO与数据库表建立映射关系

2)iBatis

  • 概述:
    • 提供 Java对象到 SQL的映射实现
    • 实际的数据库操作需要通过手动编写SQL实现
  • 与Hibernate相比:iBatis 小巧,上手较快
  • 使用环境:不需要太多复杂的功能

3)JDO

  • 概述:
    • Java Data Object,Java数据对象
    • 提供了透明的对象存储

      对开发人员来说,存储数据对象完全不需要额外的代码

  • 与JDBC 区别
    • JDBC只能应用于关系型数据库
    • JDO可以在任何数据底层上运行,更通用,提供包括关系型数据库、普通文件、 XML 文件和对象数据库等,使得应用的可移植性更强。

在这里插入图片描述

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

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

相关文章

【Docker】提交Docker镜像改变(自定义Redis镜像)

查看某个容器发生改变(操作日志) docker diff redis A: 添加文件或目录(ADD)D:文件或者目录删除(DELETE)C:文件或者目录更改(CHANGE) 对更改的容器进行保存 我们平时使用镜像,会做一些自定义,比如配置文件的修改,数据的增删改等等有很多&…

矩阵错题本

《1800》 1 逗号中间全是0啊 2 代入转置即可证明 3 只是凭借感觉 4 线性代数真的是细节狂魔 经过若干次初等变换,秩相等 5 P1的逆为啥是P1 6 越排后的矩阵变换越排前 对角线矩阵的逆矩阵,除了对角线元素,全换号 7 根据题设给出来的矩阵求…

Unity Text文本实现滚动跑马灯效果

在一些公告上我们经常会看到文字滚动跑马灯的效果。 那么在Unity上如何实现? 1、首先创建一个Text(或者TextMeshPro)组件,然后输入需要显示的文本内容,如图: 2、编写控制脚本TextRoll.cs: using System.Collections…

C打印内存16进制

下面是一段C代码打印16进制 void print_hex(const char *msg, void *addr, int len) {uint8_t *p (uint8_t *)addr;printf("%s ,stat:%0x8, len:%d\n", msg, addr, len);for (int i 0; i < len / 16; i) {printf("0x%08x: ", p i * 16);for (int j …

【WinCC“脚本”专题】不懂数据类型,又怎能用好C脚本?

WinCC的C脚本的编程语言符合ANSI-C标准&#xff0c;它的数据类型与ANSI-C的数据类型一致。要用好C脚本&#xff0c;当然要对各种数据类型了然于胸了。 一、ANSI-C数据类型 所谓"数据类型"是按照所定义的变量的性质、表示形式、所占据的存储空间等特点来划分的。在C…

Linux运维:在线/离线安装Telnet客户端和Telnet服务

Linux运维&#xff1a;在线/离线安装Telnet客户端和Telnet服务 前言1.1 在线安装Telnet1.2 离线安装Telnet1.3 Telnet服务有关的命令 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 前言 Telnet是一种用于远程登录到其他计算机的协议&…

Application

1.Application的生命周期 自定义Application package com.tiger.chapter06;import android.app.Application; import android.content.res.Configuration; import android.util.Log;import androidx.annotation.NonNull;public class MyApplication extends Application {//在…

OWASP Top 10 网络安全10大漏洞——A01:2021-访问控制中断

10大Web应用程序安全风险 2021年top10中有三个新类别、四个类别的命名和范围变化&#xff0c;以及一些合并。 A01&#xff1a;2021-访问控制中断 从第五位上升到top1&#xff0c;94%的应用程序都经过了某种形式的访问控制破坏测试&#xff0c;平均发生率为 3.81%且在贡献的…

《 前端 vs. 后端:挑战与机遇的对决》

前言 前端开发和后端开发是构建网站、应用程序和其他软件的两个主要方面。它们各自负责不同的任务和功能。 前端开发: 定义:前端开发是指构建用户直接与之交互的网站或应用程序的过程。前端开发主要关注于用户界面和用户体验。技术栈:前端开发通常涉及使用 HTML、CSS 和 Ja…

吴恩达深度学习笔记:深度学习引言1.1-1.6

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第一周&#xff1a;深度学习引言(Introduction to Deep Learning)1.1 欢迎(Welcome)1.2 什么是神经网络&#xff1f;(What is a Neural Network) 第一门课&#xff1a;神经网络和深度学习 (Ne…

数据结构学习(四)高级数据结构

高级数据结构 1. 概念 之所以称它们为高级的数据结构&#xff0c;是因为它们的实现要比那些常用的数据结构要复杂很多&#xff0c;能够让我们在处理复杂问题的过程中&#xff0c; 多拥有一把利器&#xff0c;同时掌握好它们的性质&#xff0c;以及所适应的场合&#xff0c;在…

android开发者工具,最新整理

一 Java相关 1.重载函数的签名(区别是否是重载函数) 答&#xff1a;方法名参数类型参数顺序(返回值不是) 2.finalize的工作原理 答&#xff1a;一旦垃圾收集器准备好释放对象占用的存储空间&#xff0c;它首先调用finalize()&#xff0c;而且只有在下一次垃圾收集过程中&#…

从零开始手写RPC框架(5)

继续上一节的内容&#xff0c;解析代码。 目录 编码器注册中心负载均衡策略动态代理屏蔽网络传输细节通过spring注解注册/消费服务 编码器 参考LengthFieldBasedFrameDecoder解码器的协议&#xff0c;在协议里规定传输哪些类型的数据&#xff0c; 以及每一种类型的数据应该占多…

CSS字体样式值,精通web前端开发

html 1&#xff0c;浏览器存储的方式有哪些 2&#xff0c;如何解决跨域的&#xff1f; 3&#xff0c;浏览器 cookie 和 session 的认识。 4&#xff0c;输入URL发生什么&#xff1f; 5&#xff0c;浏览器渲染的步骤 6&#xff0c;页面渲染优化 7&#xff0c;强制缓存和协商缓存…

Docker发布镜像(DockerHub,阿里云)

目录 1、发布到DockerHub上 2、发布到阿里云镜像服务上 小结 1、发布到DockerHub上 1.地址https://hub.docker.com/注册自己的账号 2.确定这个账号可以登录 3.在服务器上提交自己的镜像 [rootwq test]# docker login --helpUsage: docker login [OPTIONS] [SERVER]Log in…

Nvm下载安装和基本使用

下载与安装 github地址&#xff1a;Releases coreybutler/nvm-windows (github.com) 默认安装&#xff1a;安装nvm时候&#xff0c;全默认即可&#xff08;如果自定义目录&#xff0c;切记 nvm的安装路径 &#xff1a;不要有汉字&#xff0c;不要有空格&#xff0c;不然后面会…

单片机为什么需要时钟?2种时钟电路对比?

目录 一、晶体振荡器&#xff08;Crystal Oscillator&#xff09;的核心知识 二、单片机为什么需要时钟电路&#xff1f; 三、单片机的时钟电路方案 01、外部晶振方案 02、内部晶振方案 四、总结 单片机研发设计的项目中&#xff0c;它的最小电路系统包含 电源电路复位…

动态规划(算法竞赛、蓝桥杯)--状态压缩DP蒙德里安的梦想

1、B站视频链接&#xff1a;E31 状态压缩DP 蒙德里安的梦想_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N12,M1<<N; bool st[N];//st[i]存储合并列的状态i是否合法 long long f[N][M];//f[i][j]表示摆放第i列&#xff0c;状态为…

第四节 JDBC简单示例代码

本文章教程中将演示如何创建一个简单的JDBC应用程序的示例。 这将显示如何打开数据库连接&#xff0c;执行SQL查询并显示结果。 这个示例代码中涉及所有步骤&#xff0c;一些步骤将在本教程的后续章节中进行说明。 创建JDBC应用程序 构建JDBC应用程序涉及以下六个步骤 - 导…

Python 全栈系列232 再次搭建RabbitMQ

说明 最近想重新上RabbitMQ&#xff0c;主要目的还是为了分布式任务调度。在Kafka和RabbitMQ两者犹豫了一下&#xff0c;还是觉得RabbitMQ好一些。 在20年的时候有搞过一阵子的RabbitMQ,看了下当时的几篇文章&#xff0c;觉得其实想法一直没变过。 Python - 装机系列24 消息…