首页 > 其他分享 >软构复习5

软构复习5

时间:2023-05-26 20:22:04浏览次数:45  
标签:复习 实现 子类 代码 软构 接口 工厂 客户端

可维护性的常见度量指标

可维护性:易于修改软件系统和组件来更正

可扩展性

灵活性

可适应性:交互式系统(自适应系统)的能力,它可以根据所获得的关于用户及其环境的信息来适应个人用户的行为

可管理性

支持性

高内聚,低耦合:要尽量避免其与其他类型的许多相互依赖而难以复用和维护的设计

圈复杂度

代码行数:重复代码的行数

继承的层次数

类之间的耦合度

单元测试的覆盖度

 

聚合度和耦合度

聚合:如果一个模块的所有元素都在朝着同一目标工作,那么它就具有高度的凝聚力

耦合:两个类之间的依赖程度;

主要取决于接口个数和接口的复杂程度

 

SOLID

单一职责原则(SRP):一个类应该只有一个职责,即一个类只负责一种行为或功能,从而提高代码的可读性、可维护性和可测试性。

OCP,开放-封闭原则:一个软件实体(类、模块等)应该对扩展开放,对修改关闭。即当需要添加新功能时,应该通过扩展已有代码来实现,而不是修改已有代码,从而避免对原有代码的影响。

LSP:子类应该能够替换其父类并且不影响系统的正确性。即在任何父类可以出现的地方,子类都可以出现。

ISP,接口聚合原则:一个类不应该强制实现它不需要的接口,即一个接口应该只包含客户端需要的方法。这样可以避免代码的冗余和臃肿。胖接口可分解为多个小的接口;不同的接口向不同的客户端提供服务;客户端只访问自己所需要的端口。

DIP,依赖置换原则:高层模块不应该依赖底层模块,它们应该依赖于抽象接口。即高层模块应该依赖于抽象,而不是具体的实现。这样可以提高系统的可扩展性和可维护性。

 

语法、正则表达式

在本课程里,只需要能够熟练掌握正则表达式regex这种“基本语法” ,并熟练使用JDK提供的 regex parser进行数据处理即可

Pattern是对regex正则表达式进行编译之后得到的结果

Matcher:利用Pattern对输入字符串进行解析

 

第十一章 设计模式

设计模式

工厂方法

工厂方法模式把具体产品的创建推迟到工厂类的子类(具体工厂)中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式在添加新产品的时候就不修改工厂类逻辑而是添加新的工厂子类,符合对修改封闭,对扩展开放

定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类

 

适配器模式 adaptor

通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。

 

 

装饰器模式 decorator

每个子类实现不同的特性,且需要有特性的任意组合

装饰器模式同时用到继承和委派

 

自己委派给自己

 

Decorator&继承

decorator是在运行的时候实现的

继承是在编译的时候实现的

decorator可以将多种特性组合起来,由多个对象组合在一起

继承生成一个单一、类型清晰的对象

 

Strategy模式

有多种不同的算法来实现同一个任务,但需要客户端根据需要动态切换算法,而不是写死在代码里

此时就可以为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例

 

由客户端来选择具体用哪种算法

 

模板模式 temple

做事情的步骤一样,但具体方法不同;共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现

 

Iterator模式

客户端希望遍历被放入容器/集合类的一组ADT对象,无需关心容器的具体类型

 

visitor模式

对特定类型的object的特定操作(visit),在运行时将二者动态绑定到一起,该操作可以灵活更改,无需更改被visit的类

本质上:将数据和作用于数据上的某种/些特定操作分离开来

为ADT预留一个将来可扩展功能的“接入点”,外部实现的功能代码可以在不改变ADT本身的情况下通过delegation接入ADT

 

Visitor & strategy

之前没有想到的临时要补充的方法,可以扩展到visitor子类型中

需要频繁更改之前实现的东西,又要兼顾OCP时,可以使用strategy设计模式

标签:复习,实现,子类,代码,软构,接口,工厂,客户端
From: https://www.cnblogs.com/777-Song/p/17435736.html

相关文章

  • 复习JavaDay07
    线程的5种状态新生状态:Threadthread=newThread();就绪状态:当调用start()方法,线程立即进入就绪状态,但并不以为着立即调度执行运行状态:进入运行状态,线程才真正执行线程体的代码块。阻塞状态:当调用sleep(),wait或者同步锁时,线程进入阻塞状态,就是代码不往下执行阻塞事件解......
  • 关于软件构造第二部分(PPT4-8)的总结复习
    一、基本数据类型、对象数据类型基本数据类型:int、long、boolean、double等,——有值,无ID,无法区分,不可变,在栈中分配内存,代价低;对象数据类型:String、Date等——有值,有ID,可为可变也可为不可变,在堆中分配内存,代价昂贵;可将基本数据类型包装为动态数据类型(首字母变大写)通常在定义集合......
  • 数据结构期末复习——图的遍历
    图的遍历:1.定义:从某个结点出发访问遍图中结点,且使每个结点仅被访问一次图的遍历具有复杂性,主要体现在以下几点1.遍历没有规定从哪个结点开始访问,因此从任意结点开始访问均可2.图的一个结点可以连接多个结点,因此无法确定访问此结点之后应该访问哪一个结点3.如果一个图中存在回......
  • 移动互联APP复习题
    一.判断题1.Android是一种操作系统但不是一种开发平台。(F)2.Intent是用于传递参数和页面的切换的组件。(T)3.Android的更新需要在主线程上执行。(T)4.无论Service是以启动方式还是绑定方式运行都要重写onBind方法(T)5.后台服务是运行在另外一个线程上的也就是所谓的子线程。(F......
  • C语言复习题
    写在前面:大家好,我是花狗Fdog,来自内蒙古的一个小城市,目前在泰州读书。很感谢能有这样一个平台让我能够在这里分享所学所感。我喜欢编程,喜欢代码,喜欢去做一个程序员。努力学习,争取多年后,给亲人更好的生活。文章目录一、选择题二、填空题三、编程题一、选择题1.源程序TEST.C经......
  • 我的软考复习笔记【中级软件设计师】
    目录内聚与耦合内聚耦合统一过程(UP)软件体系结构风格软件能力成熟度模型(CMM)集成测试策略软件测试方法黑盒测试白盒测试需求UML分类协作图的边界类控制类实体类怎么区别null用例图的关系泛化(Inheritance)扩展(extend):包含(include):快速辨认类图的符号1.关联2.泛化3.聚合组件图设......
  • 动态内存分配复习
    动态内存分配复习为什么要使用动态内存分配:在声明数组时,必须用一个编译常量指定数组长度,但是,数组的长度往往只有在运行的时候才能被确定,这是因为它所需要的内存空间取决于输入数据,但是容易浪费空间,又或者容易溢出malloc和free:malloc执行动态内存分配,free执行释放内存,当使用mal......
  • 软构复习3
    第四章数据类型与类型检验数据类型:基本数据类型:int,double,long,boolean,char;对象数据类型:String;区别: 静态类型检查:编译阶段报错,对类型的检查语法错误,类名/函数名错误,参数数目错误,参数类型错误,返回值类型错误动态类型检查:对值的报错非法的参数值,非法的返回值,越界,空指......
  • 关于软件构造第一部分(PPT0、1、3)的总结复习
     学而时习之,不亦说乎?在学习新知识的路上,我们应时时复习,总结所学知识,归纳吸收以建立自己的知识体系。故此,我现在对软件构造这门课的第一部分进行一些总结 一、软件构造的多维度视图:共有三个维度:1.按阶段划分:构造时/运行时视图,2.按动态性划分:时刻/阶段视图,3.按构造对象层次划分......
  • 复习C语言小问题
    1:强制类型转换的问题2:空间配置器的原理以及作用。3:复习C语言是支持隐式类型的转换的,但是这个转换的过程比较的“简陋”只用一个赋值运算符就完事了,但是有些类型转换是比较危险的,比如静态变量强制转换位非静态变量,因为静态变量存在寄存器中,编译器取的时候是寄存器中取得,如果用指......