软构笔记-9-面向复用的软件构造技术
Posted blogstb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软构笔记-9-面向复用的软件构造技术相关的知识,希望对你有一定的参考价值。
软构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
参数类型:要相反的变化,要不变或越来越抽象
软件构造常用技术
软件构造常用技术:
1.软件复用
软件复用是指在构造新的软件系统的过程中,对已存在的软件产品(设计结构、源代码、文档等)重复使用的技术。
软件复用有三个层次:知识的复用、方法的复用和软件成分的复用,前两个属于知识工程的范畴,这里只讨论软件成分的复用。软件成分的复用包括
(1)代码的复用,可以采用源代码剪贴、源代码包含和继承来实现。
(2)设计结果的复用,是指复用某个软件系统的设计模型,适用于软件系统的移植。
(3)分析结果的复用,是指复用某个软件系统的分析模型,适用于用户需求未改变,而系统体系结构变化的场合。
软件复用的意义是降低软件开发和维护的成本,提高软件开发效率,提高软件的质量。
2.类的设计与使用
类是封装对象属性和行为的载体,在JAVA中对象的属性以成员变量的形式存在,对象的方法以成员方法的形式存在。类的设计与使用,另JAVA的编程更加简单,易于理解与操作。
3.抽象数据类型
抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型。
4.错误处理
设置了具体的异常类,可以更加清晰地看出程序所发生地错误。在程序中可以捕获异常,另程序正常退出或者忽略错误继续执行。
5.分布式程序构造
分布式应用程序利用多台机器的资源及许多进程的空间,把应用程序分成更易管理的任务组,这些任务组能在各种不同的结构下进行部署。把应用程序分成很多组有许多好处,最直接的就是可以重复使、扩充和管理。
(1)、两层应用程序(客户端/服务端)
先举例简单描述一下两层的客户端/服务器结构。典型的结构是一个客户端的用户PC机(前端)和一个包含数据库的网络服务器(后端),逻辑上根据两者的物理位置划分。通常客户端包含大部分业务逻辑,随着数据库及存储过程的发展,SQL语言允许业务逻辑在数据库服务器中存储并执行。
(2)、三层和N层应用程序
由于两层应用程序即客户端/服务器端结构的功能限制,分布式应用程序通常分为三层或者更多层。每层的组件都执行一个特定类型的处理,但目前最常用的是三层应用程序结构。在三层应用程序中,包含一个用户服务层(表现层),一个业务服务层和一个数据服务层。三层结构和传统的二层客户端/服务器结构的主要区别就是在三层体系内,业务逻辑层从用户界面和数据源中分离出来。把应用程序划分成独立的层或部分能减小整个应用程序的复杂性,并且使应用程序能够更好的扩展,跟得上企业发展的需要。
6.单元测试:
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
7.重构
程序员对已有程序在尽量不改变接口的前提下,进行重新编写代码的工作,一般有以下几方面:
(1). 去除已知bug。
(2). 提高程序运行效率。
(3). 增加新的功能。
通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
8.极限编程
极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
以上是关于软构笔记-9-面向复用的软件构造技术的主要内容,如果未能解决你的问题,请参考以下文章