首页 > 其他分享 >面向对象设计方法Review-01.课程概述

面向对象设计方法Review-01.课程概述

时间:2024-06-05 13:11:43浏览次数:27  
标签:01 对象 模块化 Review 复用 面向对象 OOP 模块 软件

课程简介

  • 能带来什么:1. 掌握OOP基本原理;2. 了解OOP新兴技术;3. 满足OOP技术需求;
  • 课程目标:1. OOPL写代码 → OOP → OOSC;2. 朴素OOP → 系统化OOP;3. 传统OO技术 → 现代化OO技术;
  • 课程内容:
    • OO的起源及动机;
    • OO的设计:1. 契约式设计;2. 设计原则;3. 设计模式;4. 应用框架;

背景概述

软件 & 软件工程

软件

  • 概念:
    • 一系列按照特定顺序组织的数据和指令的集合,是计算机中的非有形部分。
    • 软件 = 程序 + 文档
  • 特点:1. 本质上是逻辑产品;2. 现实中受多方制约;
  • 基础:1. 图灵机;2. 冯·诺伊曼结构;

软件工程

  • 来源:软件作为一种“工程”(目的,平台,资源),存在“工程问题”(质量、生产率、根源是复杂性)。
  • 概念:将系统化的、规范化的、可度量的方法应用到软件的开发、运行、维护过程中,即将工程化应用于软件中。
  • 复杂性是软件开发过程中固有的特质。
  • 软件工程发展的历史就是人们不断追求更高的抽象、封装和模块化的历史。

软件质量 & 评估因素

软件质量

  • 现状:
    • 一般而言,“质量”与“生产率”是一对矛盾。
    • 但在软件工程中,提升“质量”却能带来“生产率”的提升,说明软件工程远未成熟,二者的“共同底线”尚未达到。
  • 软件质量考察:
    • 外部质量因素:用户直接感受到的。
    • 内部质量因素:用户无法直接感受到的,体现在源代码、设计报告、分析报告中。(常见指标:模块化/易读性/鲁棒性/可拓展性/注释规范性、详细)

软件质量评估因素

  • 可靠性(Reliability):

    • 正确性(Correctness):依据规约,完成任务
    • 鲁棒性(Robustness):异常情况,合理反应
    • 完整性(Integrity):非法访问或修改合理反应
  • 易复用性(Reusability):软件模块用于构建多种不同应用

  • 易扩展性(Extendibility):规约改变,软件产品应易于改变

  • 兼容性(Compatibility):软件模块相互组合的难易

  • 易移植性(Portability):转换到不同的软硬件平台上

  • 高效性(Efficiency):尽量少地使用硬件资源、处理器时间、内存、外存、网络带宽等

  • 易用性(Ease of use):不同背景的用户学习使用软件产品解决问题的难易

  • 按时交付(Timeliness)

  • 可验证性(Verifiability),可修复性(Reparability),经济性(Economy)

Tradeoffs(权衡,折中):上述指标不可兼得。

软件模块化

  • 背景:应对软件复杂性的基本途径/元方法:
    • 分解(Decomposition):分而治之
    • 抽象(Abstraction):抓本质、抓重点
    • 层次化(Hierarchy):应对大系统,纲举目张
  • 概念:
    • 模块(module):"Self-Contained";well-defined interfaces;
      • 根本特征:相对独立,功能单一。即一个好的模块必须具有高度独立性和相对较强的功能。
      • 高内聚,低耦合。
        • 耦合度:指模块间相互依赖性大小的度量,耦合度越小,模块的相对独立性越大。
        • 内聚度:指模块内各成分之间相互依赖大小的度量,内聚度越大,模块各成分间联系越紧密,功能越强。
    • 模块化(modular):软件构造为一组“模块”之有序组合,从而易于装配、易于修补替换模块。是上述“元方法”的推论。
    • Extendibility 和 Reusability 的要求。
  • 五个标准(评判什么是“软件模块化”):
    1. 易分解性(Decomposability):复杂的问题分解为多个子问题。推论:分工。
    2. 易组合性(Composability):软件单元可以自由组合,进而生成新软件。
    3. 易理解性(Understandability):模块应能单独理解,不可牵涉太广,自解释。
    4. 连续性(Continuity):规约中的小变化也只能引起结构中的小变化。
    5. 保护性(Protection):异常不扩散,扩散范围有限。
  • 五个规则(后四个用于降低耦合度):
    • 直接映射(Direct Mapping)
    • 接口要少(Few Interfaces):模块间通信应尽可能少。
    • 接口要小(Small Interfaces):两模块间通信,应交换尽可能少的信息。
    • 接口要明确(Explicit Interfaces)
    • 信息隐蔽(Information Hiding):模块应通过public接口与外界交互,其余信息/属性私有,对外隐蔽。

软件复用性

  • 为什么要复用:1. “懒惰”;2. 提高生产效率;3. 改善质量;
  • 复用什么:人;设计/规约;设计模式/体系结构/应用框架;源码级复用;封装模块(抽象描述);
  • 障碍:
    • 非技术问题:心理;短期利益;构件检索;构件发布与商业模型;
    • 技术问题:通常不能一成不变进行复用;软件开放性要求和封闭性要求间的冲突;
  • 传统复用技术:
    1. 过程Routine(eg.函数库):抽象不足,可拓展性、可复用性差;
    2. 包Package:类型、模块分离,复用性不足;

面向对象方法

在软件模块化和复用性方面:

  • 传统技术存在不足。
  • 面向对象模型提供了较好的解决方案。
  • 基本思想:
    1. 任何事物都是对象,对象有属性和方法。复杂对象可由相对简单的对象以某种方式构成。
    2. 通过类比发现对象间的相似性,即对象间的共同属性,是构成对象类的依据。
    3. 对象间的相互联系是通过传递“消息”来完成的。通过对象之间的消息通信驱动对象执行一系列的操作从而完成某一任务。
  • 基本概念:
    • 对象:对象是运行期的基本实体。
    • 类:类是具有相同类型的对象的抽象。
    • 动态绑定;消息传递;
  • 特性:
    1. 封装性:将数据和方法捆绑到一起;
    2. 继承性:让某个类型的对象获得另一个类型的对象的特征;
    3. 多态性:不同内部结构的对象可以共享相同的外部接口;
  • 优势:模块化,信息隐藏与抽象;自然性;并发性;重用性;

标签:01,对象,模块化,Review,复用,面向对象,OOP,模块,软件
From: https://www.cnblogs.com/seed42-blog/p/18232785

相关文章

  • Wgpu图文详解(01)窗口与基本渲染
    写在前面如果对Rust与Wgpu比较关注的同学可能在网络上搜到过@sotrh国外大佬编写的《LearnWgpu》,以及国内大佬@jinleili的优秀翻译作品《学习Wgpu》。这些学习教程质量很高,在我学习Wgpu的过程中给了很大的帮助。那为什么还有我这个系列的文章呢?首先,大佬的系列目前winit使用0.29.......
  • P4003 [清华集训 2017] 无限之环 解题报告
    oj:https://gxyzoj.com/d/gxyznoi/p/P93它要判断什么时候不漏水,就是需要建一种图,使得原图的最大流是答案因为是网格图,考虑黑白染色,可以将\((i+j)\)对2取模的结果作为颜色,将所有颜色为1的点向源点连边,颜色为0的点向汇点连边接下来考虑如何判断是否漏水,因为有四个方向,考虑拆点将......
  • 构建之法阅读笔记01
    第一章概论软件=程序+软件工程  软件企业=软件+商业模式  一个复杂的软件不但要有合理的软件架构、软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数等等,这些都是软件构建的过程。软件开发的不同阶段:1.玩具阶段 2.业余爱好阶段 3.探索......
  • 数据治理 - [01] 关于数据质量的问题
    题记部分 一、如何保证数据质量问题在数据处理的每一个环节,根据业务要求,提前设置好告警规则。比如,(1)设置日增数据量的阈值以及对于计算结果、某些关键指标的阈值;(2)从数据源获取到数据之后的第一步,就可以根据这个制定的规则,先看数据量是否在阈值范围内,比如正常的情况下,应该......
  • (十五)统计学基础练习题九(选择题T401-450)
    本文整理了统计学基础知识相关的练习题,共50道,适用于想巩固统计学基础或备考的同学。来源:如荷学数据科学题库(技术专项-统计学三)。序号之前的题请看往期文章。401)402)403)404)405)406)407)408)409)410)411)412)413)414)415)416)417)418)419)420)421)422)......
  • 供应链安全论文阅读(一)Backstabber's Knife Collection: A Review of Open Source Soft
    引言该论文Backstabber'sKnifeCollection:AReviewofOpenSourceSoftwareSupplyChainAttacks发表在2020年的DIMVA上,作者为波恩大学的MarcOhm。本文是开源软件供应链安全领域较早期的一篇论文,主要针对软件供应链中恶意软件包的威胁进行了详细介绍。首先简单介绍一下软......
  • JAVA面向对象练习题
    题目要求:        定义图书类(Book),要求有属性name(书名),price(价格),author(作者),对Book类进行封装。在测试类里的主方法中创建3本图书对象,并赋值。创建一个长度为3的Book类数组,在数组里,存放这3个图书对象。题目分析:  图书类Book:    属性:   ......
  • P5663 [CSP-J2019] 加工零件
    原题链接题解请仔细读题!!!如果1号工人需要提供原材料,那么代表\(a_i\to1\)存在一条长度为\(L_i\)的路径(可以重复走)由于重复走不会改变路径长度的奇偶性,所以一定存在一条奇偶性相同,且长度小于\(L_i\)的路径,所以只要求从点1出发到各个点奇偶最短路即可code#include<bits/......
  • NCHU-软件学院-232019班-23201125-罗伊鑫-第二次Blog
    前言本次Blog总结三次题目集的7-1题目的知识点、题量、难度等情况,以及写完后的错误总结和自我思考。1.知识点三次题目集都对于类的设计的提前规划好有着必要的需求,还有就是对于继承与多态的合理的使用。接着就是对于正则表达式的使用的检测,然后就是要有清晰的逻辑编程表达。2.......
  • C++ Builder 2010 绘制坐标
     一、步骤:1.先确定Image的位置,大小(可以不写)          2.设置初始面板,绘制初始的x,y坐标轴          3.画x,y向的刻度线,标刻x,y轴刻度          4.获取数据(可以不写)          5.将数......