软件构造2

HIT - 软件构造

3章:

基本数据类型:int,long,boolean,double,char,short,byte,float

对象数据类型:classes,interface,arrays,enums,annotations

Java是一种静态类型的语言,所有变量的类型在编译是已知的,Java可以静态检查,在像python这样的动态类型语言中,这种检查被推迟到运行时。

静态检查的类型:语法错误,名字错误,参数个数错误,参数类型错误,返回错误

动态检查的类型:非法参数,非法返回值,数组越界,空指针引用

不变性:不变数据类型创建完后,值不可变(final)

一个final类不能被继承,一个final变量不能被改变,一个final方法不能被重写

String为不变类型,StringBuilder为可变类型

快照图:表示程序的内部状态,它的堆栈在运行时的方法和他们的局部变量及其堆,变量为单箭头,不变量为双箭头

行为等价:一个实现代替另一种实现

前提条件是客户的义务,这是调用方法的状态。后置条件是实现者的义务,如果前提条件被满足看则后置条件必须被满足,比如:返回适当的值,抛出指定的异常,修改或不修改对象等等。

前置条件写在@Param 后置条件写在@return @throws

规约的强度:如果S2的前提条件<=S1 ,S2的后置条件>=S1,对于满足S1前提条件的状态,则规约S2强于S1

ADT:抽象数据类型是软件工程中一般原则的一个实例,它有很多名称:抽象模块化,封装,信息隐藏。

数据抽象类型的特点是可以对其执行操作

ADT四种操作

creator 创作该类型的新对象,creator可以将对象作为参数,但不是正在构建类型的对象

producer 从该类型旧对象中产生新对象,String的Concat方法是一个producer

observers 采用ADT对象并返回不同类型 eg:List中的Size()

Mututors 改变对象 eg:List中的add()

表示独立性:ADT的使用与其表示形式无关,因此表示形式的变化对抽象类型本身之外的代码没有影响 eg:List的独立的不管是表现为Linked list或array

表示不变性和抽象函数

R:表示值空间,由实际实现的实体的值组成

A:抽象值空间,就是抽象想表示的值空间

AF:将表示值映射到它们表示的抽象值,R->A图中的弧显示抽象函数。

RI,AF 是doc形式

OOP:

oop应该把类作为中心概念

继承 extends

重写 override

多态性是操作可以应用于其他类型的值的类型。

分为 adhoc polymorphism,function overloading,parametric polymorphism,generic programming

(oop其他内容,请看java核心技术)

防御式拷贝:不把自己的引用传给别人,首先new一个新对象,把自己的信息传递给这个对象,然后给别人展示这个对象。

ADT和OOP的equality:用抽象函数     使用关系     使用观察

就ADT而言“观察”意味着调用对象的操作。所以当且仅当通过调用抽象数据类型的任何操作不能区分他们时,两个对象是相等的

==比较的是引用

equal()比较的是对象的信息

equals满足传递性,自反性,对称性

对于不可变类型:equals()应该比较抽象值。这与equals()应该提供行为平等相同,hashcode()应该将抽象值映射到一个整数。所以不可变类型必须覆盖equals()和hashcode()

对于可变类型 equals()应该比较引用,就像==一样。同样与equals应该提供行为平等一样。所以不应该重写equals()和hashcode()

原文地址:https://www.cnblogs.com/yry1160300116/p/9191436.html

时间: 2024-11-07 14:04:18

软件构造2的相关文章

【软件构造】第一章 软件构造基础(2)

二.软件构造的质量目标 1. 外部属性(主要):影响用户感受,如外观.速度等 (1)正确性:符合规格范围和计划目标 ·只保证各个层面的正确性(假设调用正确) ·检验与调试 ·防御性编程 ·形式化编程 (2)健壮性:响应规格范围外的异常情况 ·提示错误信息 ·正常退出或降级 (3)可扩展性:提供增加新功能的空间 ·固化需求以规避风险 ·设计简洁.离散化 (4)可复用性:使软件模块能够被其他程序使用 ·模式固化 (5)兼容性:跨平台.跨软件交互 ·使用标准文件格式.数据结构.接口,保持一致性 ·定义

麻省理工18年春软件构造课程阅读04“代码评审”

本文内容来自MIT_6.031_sp18: Software Construction课程的Readings部分,采用CC BY-SA 4.0协议. 由于我们学校(哈工大)大二软件构造课程的大部分素材取自此,也是推荐的阅读材料之一,于是打算做一些翻译工作,自己学习的同时也能帮到一些懒得看英文的朋友.另外,该课程的阅读资料中有许多练习题,但是没有标准答案,所给出的答案均为译者所写,有错误的地方还请指出. 译者:李秋豪 审校: V1.0 Thu Mar 8 22:58:41 CST 2018 本次课

【软件构造】第二章第二节 软件构造的过程、系统和工具

第二章第二节 软件构造的过程.系统和工具 Outline 广义的软件构造过程 编程 静态代码分析 动态代码分析 调试与测试 重构 狭义的软件构造过程 构造系统:经典BUILD场景 构造系统的组件 构造过程和构造描述 Java编译工具 子目标和结构变体 构造工具 Notes ## 广义的软件构造过程 [编程(Coding)] 开发语言:如Java.C.Python 使用IDE(集成开发工具)的优势(组成) 方便编写代码和管理文件(有代码编辑器,代码重构工具.文件和库(Library)管理工具) 能

【软件构造】第六章第一节 可维护性的度量与构造原则

第六章第一节 可维护性的度量与构造原则 本章面向另一个质量指标:可维护性--软件发生变化时,是否可以以很小的代价适应变化? 本节是宏观介绍:(1)什么是软件维护:(2)可维护性如何度量:(3)实现高可维护性的设计原则--很抽象. Outline 软件的维护和演化 可维护性的常见度量指标 聚合度与耦合度 面向对象五大原则SOLID 单一职责原则SRP(Single Responsibility Principle) 开放封闭原则OCP(Open-Close Principle) 里式替换原则LSP

软件构造

1-2章: 1. 软件构造的多维度视图 2.软件构造的阶段划分.各阶段的构造活动 3.内部/外部的质量指标 4.软件配置管理SCM与版本控制系统VCS 5. Git/GitHub 多维视图: Build-time :想法->需求->设计->代码->安装/可抽象的包 run-time:程序在目标机器内部运行时的外观如何,目标机器加载到内存中所有的磁盘文件是什么 Component-level :体系结构->源代码是如何由文件,目录包,库之间的依赖物理组织在一起 软件构造五大关键

【软件构造】第七章第一节 健壮性和正确性的区别

第七章第一节  健壮性和正确性的区别 第七章:进入软件构造最关键的质量特性 --健壮性和正确性. 本节在1-2节的基础上,重申了Robustness and Correctness的重要性,澄清了二者之 间的差异,并指明了在软件构造中处理二 者的典型技术(防御式编程.异常处理. 测试.调试等) Outline 健壮性(Robustness)和正确性(correctness) 如何测量健壮性和正确性 Notes ## 健壮性(Robustness)和正确性(correctness) [健壮性] 定

软件构造 第三章第三节 抽象数据型(ADT)

软件构造 第三章第三节 抽象数据型(ADT) Creators(构造器): 创建某个类型的新对象,?个创建者可能会接受?个对象作为参数,但是这个对象的类型不能是它创建对象对应的类型.可能实现为构造函数或静态函数.(通常称为工厂方法) t* ->  T 例子:Integer.valueOf( ) Producers(生产器): 通过接受同类型的对象创建新的对象. T+ , t* -> T 例子:String.concat( ) Observers(观察器): 获取抽象类型的对象然后返回一个不同类

软件构造 第一章第二节 软件开发的质量属性

?软件构造 第一章第二节 软件开发的质量属性 1.软件系统质量指标 External quality factors affect users 外部质量因素影响用户 Internal quality factors affect the software itself and its developers 内部质量因素影响软件本身和它的开发者 External quality results from internal quality 外部质量取决于内部质量 外部属性: 正确性:按照预先定义的"

软件构造 第二章 第一节 软件生命周期和版本控制

软件构造第二章 第一节 软件生命周期和版本控制 基本内容 Software Development Lifecycle (SDLC) Traditional software process models (waterfall, incremental, V- model, prototyping, spiral) Agile development and eXtreme Programming (XP) Collaborative software development Software