首页 > 其他分享 >软构笔记-9-面向复用的软件构造技术

软构笔记-9-面向复用的软件构造技术

时间:2023-05-20 11:56:16浏览次数:46  
标签:方法 软构 复用 笔记 LSP 类型 源代码 级别

目录

软构9 面向复用的软件构造技术

本章大纲:

  • 软件复用的优缺点
  • 为复用而construct
  • 通用可复用组件的特征
  • 开发便携式应用系统的方法
  • 可复用组件的级别和形态
    • 源代码级别的复用
    • 模块级别的复用:类/抽象类/接口
    • 库级别的复用:API/包
    • 系统级别的复用:框架

源代码复用

类型:

  • 白盒复用:源代码可见,可修改和扩展
    • 复制已有代码到正在开发的系统,进行修改
    • PRO:可定制化程度高
    • 其修改增加了软件的复杂度,且需要对其内部充分的了解
  • 黑盒复用:源代码不可见,不能修改
    • 只能通过API接口来使用,无法修改代码
    • Pro:简单,清晰
    • 适应性差些

模块级别的复用 class/interface

class 的复用

两种方式:

  • inheritance 继承
  • delegation 委派
    delegation是当一个对象依赖另一个对象来实现其功能的某些子集时

在OOP中设计复用类

方法:

  • 子类型多态
  • LSP原则

子类型多态

在JAVA中:

  • 子类型可以增加方法,但不可删
  • 子类型需要实现抽象类型中的所有未实现方法
  • 子类型中重写的方法必须有相同类型的返回值或者符合co-variancel的返回值
  • 子类型中重写的方法必须使用同样类型的参数或者符合contra-variancel的参数
  • 子类型中重写的方法不能抛出额外的异常,抛出相同或者符合co-variance的异常

对方法来说意味着:

  • 更强的不变量
  • 更弱的前置条件
  • 更强的后置条件

LSP原则

LSP is a particular definition of a subtyping relation,called (strong) behavioral subtyping强行为子类型化
在编程语言中,LSP依赖以下限制:

  • 前置条件不能强化
  • 后置条件不能弱化
  • 不变量要保持
  • 子类型方法参数:逆变
  • 子类型方法的返回值:协变
  • 异常类型:协变
协变

父类型→子类型:越来越具体specific
返回值类型:不变或变得更具体
异常的类型:也是如此。

反协变、逆变

父类型>子类型:越来越具体specific
参数类型:要相反的变化,要不变或越来越抽象

标签:方法,软构,复用,笔记,LSP,类型,源代码,级别
From: https://www.cnblogs.com/blogstb/p/17417005.html

相关文章

  • HTML基础知识笔记
    HTML指的是超文本标记语言(HyperTextMarkupLanguage)<!DOCTYPEhtml><html><head><title>HelloWorld</title></head><body><p>hellohtml</p></body></html>参考教程:https://www.w3schools.......
  • [基础数论]同余方程笔记
    前言在学习本节内容前,请确保已完成了二元不定方程的学习。同余方程有无解的判别对于一个方程形如:\[ax\equivb\pmodm\]其中\[a,b\in\mathbbZ,m\in\mathbbZ^+\]并令\[d=(a,m)\]若\(d\nmidb\),则方程\(ax\equivb\pmodm\)无解。若\(d\midb\),......
  • [基础数论]不定方程笔记
    前言在学习本节内容前,最好先学习同余的基本性质以加深理解。一堆定理定理1:若\[a,b,m,n\in\mathbbZ,c\mida,c\midb\]则\[c\mid(ma+nb)\]证明:令\(a=ce,b=cf\),代入\(ma+nb\)再提公因式即可。定理2:若\[a,b,c\in\mathbbZ\]则\[(a+cb,b)=(a,b)\]证......
  • 软件测试的笔记 黑马程序员
     我想学会软件测试的课程。认真学呗。全部学了过一遍。认真学,自己想学。 ......
  • 学习笔记
    2023.4.17CF1820CTheButcher思路口胡:最后答案显然要么长跟最大的一样,或者宽跟最大的一样。先考虑长跟最大的一样。然后考虑贪心,每次删除长一样或宽一样的宽或长即可,只要能递归到中任意长货款为。trick:这是一道边界删除问题。跟前面有道题类似,就递归下去。trick:有时候合并题可......
  • 线段树学习笔记
    让我们来一步一步理解! 1.向上更新voidpush_up(intrt){//向上更新sum[rt]=sum[rt<<1]+sum[rt<<1|1];} 2.向下更新voidpush_down(intrt,intm){if(add[rt]){//若有标记,则将标记向下移动一层add[rt<<1]+=add[rt];add[rt......
  • Redis笔记(三):事务
    什么是Redis事务Redis事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、排他性的执行一个......
  • es笔记六之聚合操作之指标聚合
    本文首发于公众号:Hunter后端原文链接:es笔记六之聚合操作之指标聚合聚合操作,在es中的聚合可以分为大概四种聚合:bucketing(桶聚合)mertic(指标聚合)matrix(矩阵聚合)pipeline(管道聚合)bucket类似于分类分组,按照某个key将符合条件的数据都放到该类别的组中mertic计......
  • kubebuilder笔记
    一、kubebuilder作用提供脚手架工具初始化CRDs工程,自动生成boilerplate代码和配置提供代码库封装底层的K8sgo-client二、kubebuilder整体流程用户自定义crd,将自定义的crd注册到scheme中,这样通过GVK能找到对应的go的struct,也能通过go的struct找对对应的GVKCache监听S......
  • 人月神话 读书笔记 03
    第9章削足适履9.1程序有多大?除了运行时间以外,它所占据的空间也是主要开销。当系统设计者认为对用户而言,常驻程序内存的形式比加法器、磁盘等更加有用时,他会将硬件实现中的一部分移到内存上。相反的,其他的做法是非常不负责任的。由于规模是软件系统产品用户成本中如此大的一个......