object oriented software construction的作者是Eiffel的创造者Bertrand Meyer,这本书是当前关于向对象程序设计最全的,被称为OO设计圣经,可惜该书没有中文版,俺买了一本,花了一天看了一半,作了一些读书笔记,现在写在Blog上,有益于大家参照
面向对象程序构造
第一章 软件质量
1、 软件质量可以分为:外在质量和内在质量
外在质量主要是指用户如何看待和使用一个软件,包括易用性、效率等
内存质量则指软件的结构对于开发人员的感觉。
外在质量是一个软件的根本,它是一个软件是否有价值的根本衡量标准。
个人观点:
u 虽然外在质量是衡量一个软件价值的根本标准,但是对于一个中大型软件,没有内在的质量,根本就无法保证外在质量。对于小软件,可能内在质量不能决定外在质量,对中大型软件,必须先保证内在质量。
2、 软件外在质量的组成内容
² 正确性
没有正确性,表示软件不能完成用户所期望的事情,软件就没有存在的价值和必要性。因此正确性是第一位的。
“分层”是一个比较好的模式,可以通过它来保证软件的正确性,保证每一层和层之间逻辑关系的正确性,这样可以保证软件的正确性。就好像“操作系统—编译器--代码—类库”就是最基本的层结构,如果每一层都正确,则开发出来的软件就可以执行正确的功能。
个人观点:
u 分层容易模块化,是一种类似AOP的分析方法
u 容易定位和修改错误,因为每层负责的内容不一样,因此出现的错误也很容易定位
u 因为每一层的功能不一样,所以接口必须明确,对于通过规范明确描述的接口,很容易替换一个层。
² 容错性(鲁棒性)
当不在系统可以预测的错误发生时,系统必须保证正确性。
个人观点:
u 因为错误在软件使用中会发生,而且软件自身也一定存在BUG,个人觉得“宁愿崩溃,也不要继续执行,因为崩溃的系统不再继续运行,不会犯逻辑错误,错误数据比较容易恢复,但是如果犯错的系统犯了逻辑错误,数据就很难恢复”。
² 扩展性
传统软件设计时,认为在开始设计时能通过调研确定所有需求,所以在变化发生时难以应对。
两个原则
u 设计尽量简单一些
u 功能分解而非集中
个人观点:
u 设计的简单度如何控制。
² 复用性
个人观点:
u 用的人越多,潜在的问题被发现的机会就越大。
u 复用的粒度如何控制,业务级,模块级、代码级等。
² 兼容性
基本内容:
u 标准化文件格式
u 标准化数据结构
u 标准化用户接口
个人观点:
u XML是否可以完成以上三者的标准化。
² 效率
过早的优化可能会产生问题,事实上大部分时间不需要优化,可以参照下面的数据--《软件维护费用比例》。
个人观点:
u 先使系统模块化,容易进行模块化
u 只有在集成测试时发现效率问题,才进行优化工作。
² 易用性
你我都不是用户,不能从自己的角度出发来揣测。
个人观点:
u 如果自己没有把握做好内容的话,干脆模仿别人,如菜单风格,快捷键等,模仿一些类似的软件。
² 功能性
u 不能因为添加新功能,而影响了软件的一致性,特别是产品,无论在功能上有什么改变,也不应该引起用户在操作上的大幅改变。
u 决不能只关注新功能而忽略其它方面的质量。
² 最后期限
² 验证性
² 完整性
保证数据的安全和完整,不能被无关人员访问。
² 恢复性
个人观点:
u 软件一定会有问题,但问题的解决时间,数据恢复速度和完整性都表示了一个软件的质量。
² 文档
1. 外部文档----------à给用户
2. 内部文档----------à给开发者
3. 模块接口文档----à给开发者
个人观点:
u 2和3都是内部文档,3有可能公布给第三方。但2的目的是了解整个系统的结构及相关模块,而3是模块的详细信息。
3、 权衡(妥协TradeOff)
前面所提到的因素,在软件开发中相互影响,但鱼与熊掌无法兼得,所以开发人员必须做出权衡,将注意力集中在最几个因素,但“正确性”是不可以妥协的。
软件质量因素中最重要的四个:
u 正确性
u 容错性
u 扩展性
u 复用性
软件维护费用比例
1) 用户需求变更 41.8%
2) 数据格式变更 17.6%
3) 紧急修复 12.4%
4) 定期修复 9%
5) 硬件变更 6.2%
6) 文档 5.5%
7) 效率改善 4%
8) 其它 3.4%
个人观点:
u 1、2、5、7应该都归入“需求变更”
u 3、4应该归入“BUG修复或功能改善”
u 好的扩展性减少“需求变更”的代价
u 复用度高减少“BUG修复”成本。
4、 本章要点
软件工程的目的就是为了建立好的软件。
质量并非由一个因素决定,而是多个因素
评测软件外在质量和内在质量时必须分开,因为二者的评价者不一样,前者是用户,后者是开发人员
外在质量决定软件质量,但必须通过好的软件内在质量来通到好的外在质量
第二章 面向对象标准
一、方法与语言
1. 面向对象并非单独存在,它贯穿于软件开发周期,从分析到设计。
个人观点:
u 无论OOA还是OOD,OOP都表明一点,如果使用面向对象技术,面向对象就应该从头到尾
2. 断言
<fo>
分享到:
相关推荐
本资源摘要信息涵盖了C++面向对象程序设计的基本概念、数据存储、程序设计初步、函数、数组、指针、用户自定义数据类型、类和对象的程序设计等方面的知识点。 第一章 C++初步知识 * C++语言的历史背景和特点 * C++...
一种面向对象程序自动化方法的研究*全炳哲*金淳兆**玄顺姬*(吉林大学计算机系长春130023)**(吉林工业大学计算机系长春130025)摘要构造性类型理论可作为研究程序自动化的理论基础....
本资源摘要信息涵盖了六个C++编程题,涉及面向对象程序设计、数据类型、运算符、控制结构、函数和数组等多个知识点。 1. 判断三角形类型和计算面积: 在这个编程题中,我们学习了如何使用C++语言判断三角形的类型...
C++面向对象程序设计期中、期末试卷摘要 本摘要信息涵盖C++面向对象程序设计的多个知识点,包括变量声明、指针操作、函数调用、类和对象、继承、多态、运算符重载等。 1. 变量声明和初始化 变量声明可以使用关键字...
### Delphi下面向对象程序设计方法的实现 #### 摘要 Delphi作为一种全面支持面向对象编程的语言,在程序设计中引入了一系列核心概念,包括类、对象、封装、继承、多态性和抽象性。本文旨在深入探讨Delphi如何支持...
本资源摘要信息涵盖了C++面向对象程序设计的多个方面,包括虚函数、继承、多态性、类模板、运算符重载、静态成员变量、 Copy构造函数等重要概念。 1. 虚函数(Virtual Function):虚函数是C++中的一种特殊函数,...
本资源摘要信息涵盖了面向对象程序设计的基础知识点,包括类和对象、继承、多态、运算符重载、构造函数、析构函数、友元函数等。 一、类和对象 * 类是一种类型,它封装了数据和操作(问题4)。 * 对象是类的实例...
本资源摘要信息涵盖面向对象程序设计基础A的主要知识点,包括函数、变量、作用域、内联函数、虚函数、多态、this指针、类和对象等概念。 一、函数 * 函数名属于用户标记符,其起名规则与变量相同 * 形参只能是变量...
本资源摘要信息涵盖了面向对象程序设计的基本概念和技术,包括匿名对象、内联函数、静态成员、常量指针、动态内存分配、拷贝构造函数、运算符重载、友元函数、自动类型转换、继承与多态等。 匿名对象和内联函数 在...
本资源摘要信息将对 Java2 面向对象程序设计期末复习题进行详细解析,从选择题到填空题,涵盖了 Java 面向对象程序设计的多个方面。 一、选择题解析 1. 形参的说法中,正确的说法是可以没有形参。因此,选项 C 是...
面向对象设计是一种程序设计方法,强调使用对象、类、继承、封装、消息等基本概念来进行程序设计。它从现实世界中客观存在的事物出发,构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。 面向对象设计的...
本资源摘要信息涵盖了 JAVA 面向对象程序设计的基本概念、JAVA 语言基础、面向对象的概念和 JAVA 实现等方面的知识点。 在 JAVA 中,JDK 中的 Java 运行工具包括 javac、java、javam 等,其中 javac 是 Java 编译器...
本资源摘要信息涵盖了 Java 面向对象编程的基础知识点,包括类和对象之间的关系、类的声明、方法的声明和使用、构造方法、面向对象编程的基本概念等。 1. 类和对象之间的关系:类和对象之间存在抽象和具体的关系,...
本资源摘要信息涵盖了C++面向对象程序设计的多个方面,包括类、对象、继承、多态、运算符重载、访问权限、构造函数、析构函数、静态成员变量等。 1. 类和对象:类是对具有共同属性和行为的一类事物的抽象描述,共同...
C++面向对象试题是面向对象编程的重要组成部分,本资源摘要信息涵盖了四个试题,分别涉及到重载构造函数、析构函数、静态对象构造函数和对象指针的使用方法。 一、重载构造函数 在C++中,构造函数是特殊的成员函数...
本资源摘要信息涵盖了面向对象程序设计C++的多个方面,包括类和对象、继承、多态、重载、运算符重载、友元函数、静态成员、构造函数、析构函数、模板编程等。 一、类和对象 * 类是对象的蓝图,描述对象的状态和...
本资源摘要信息涵盖了面向对象程序设计的在线作业二,共20道题,涵盖了面向对象程序设计的基本概念、类和对象、构造函数和析构函数、成员函数、继承、运算符重载、文件输入/输出等方面的知识点。 第1题:构造函数和...
本资源摘要信息涵盖了 JAVA 语言程序设计的多个方面,包括面向对象程序设计的基本概念、Java 语言的基本语法、对象继承、多态性、封装性、抽象类和接口、异常处理、迭代器、线程等。 1. 在 Java 语言中,运算符重载...
本资源摘要信息涵盖了 C++ 面向对象程序设计的多个方面,包括类和对象、继承、多态性、运算符重载、构造函数、析构函数、友元函数等,能够帮助读者更好地理解和掌握 C++ 面向对象程序设计的知识点。