软件构造课程整理_软件体系结构原理方法与实践pdf

软件构造课程整理_软件体系结构原理方法与实践pdf0-1:在高级语言程序设计的基础上,认识软件构造的质量标准与目标,学习软件构造的基本过程,从而具备面向质量目标的复杂软件构造方法与能力深入学习抽象数据类型ADT与面向对象编程OOP初步掌握面向关键质量目标(可理解性、可

软件构造课程整理_软件体系结构原理方法与实践pdf

0-1:
在高级语言程序设计的基础上,认识软件构造的质量标准与目标,学习软件构造的基本过程,从而具备面向质量目标的复杂软件构造方法与能力

深入学习抽象数据类型 ADT 与面向对象编程 OOP

初步掌握面向关键质量目标(可理解性、可维护性、可复用性、健壮性、时空性能)的软件构造基本技术

了解软件代码重构和面向更复杂软件系统的高级构造技术
1-1:

Build-time, moment, and code-level view:在逻辑上代码是如何通过基本程序块组织的
Build-time, period, and code-level view:从一个版本添加、修改或删除到另一个版本的文件的代码行
Build-time, moment, and component-level view:源代码被物理地组织成文件,这些文件进一步被目录组织起来;文件被封装成包、组件和子系统;可复用模块形成类库;
Build-time, period, and component-level view:软件系统中的所有文件/包/组件/库如何随时间而变化;软件配置项;版本

Run-time, moment, and code-level view:刻画内存中某时刻变量的状态
Run-time, period and code-level view:UML中的序列图:程序单元(对象)之间的交互
Run-time, moment, and component-level view:UML中的部署关系图
Run-time, period, and component-level view:事件日志
Three dimensions of describing a software system:
By phases: build- and run-time views
By dynamics: moment and period views
By levels: code and component views

Elements, relations, and models of each view

Software construction: transformation between views
∅ → Code
Code → Component
Build-time → Run-time
Moment → Period

1-2:
External 1:Correctness
External 2:Robustness
External 3:Extendibility
External 4:Reusablility
External 5:Compatibility
External 6:Efficiency
External 7:Portability
External 8:Ease of use
External 9:Functionality
External 10:Timeliness

3-3:
ADT的特性:不变量、表示泄露、抽象函数AF、表示不变量RI。
ADT是由操作定义的,与其内部如何实现无关。
Key of ADT:
①Abstraction(抽象):用更简单,更高层次的想法来省略或隐藏低级细节。
②Modularity(模块化) :将系统划分为组件或模块,每个组件或模块可以与系统的其余部分分开设计,实现,测试,推理和重用。
③Encapsulation(封装):围绕模块构建墙壁,以便模块只负责其自身的内部行为,并且系统其他部分中的错误不会损害其完整性。
④Information hiding(信息隐藏):从系统的其余部分隐藏模块实现的详细信息,以便稍后可以更改这些详细信息,而无需更改系统的其余部分。
⑤Separation of concerns(关注点分离):模块具有单独的责任,不要将一个责任分散在不同的模块中
可变数据类型:提供了可改变其内部数据的值的操作。
不变数据类型:其操作不改变内部值,而是构造新的对象。

Creator(构造器):创建该类型的新对象
Producers(生产器):从旧对象创建新对象(例如,String的concat()方法是一个producer:它接受两个字符串并生成一个表示它们连接的新字符串)。
Observers(观察器):获取抽象类型的对象并返回不同类型的对象。
Mutators(变值器):改变对象属性
测试creators, producers, and mutators:调用observers来观察这些
operations的结果是否满足spec;
测试observers:调用creators, producers, and mutators等方法产生或
改变对象,来看结果是否正确。

3-4:
Object:状态和行为。
Interface和Class: 定义和实现ADT
– 接口之间可以继承与扩展
– 一个类可以实现多个接口(从而具备了多个接口中的方法)
– 一个接口可以有多种实现类

父类型中的某个函数实现体为空,意味着其所有子类型都需要这个功能,但各有差异,没有共性,在每个子类中均需要重写。父类型的被重新函数体不为空,意味着对其大多数子类型来说,该方法是可以被直接复用的。

Overloading:多个方法具有同样的名字,但有不同的参数列表或返回值类型。

3-5:
等价关系:自反、对称、传递
==:引用等价性 equals():对象等价性

4-1:
将共同行为抽象出来,形成可复用的实体:父类,抽象类。

4-2
Liskov替换原则:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。
1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法;
2、子类中可以增加自己特有的方法。
Delegation:一个对象请求另一个对象的功能。

4-3
Structural patterns:
(1)Adapter:
将某个类/接口转换为client期望的其他形式。
(2)Decorator:
对某一个特性构造子类,通过委派机制增加到对象上。
(3) Facade
提供一个统一的接口来取代一系列小接口调用。

Behavioral patterns:
(1)Strategy:
为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例。
(2) Template Method:
共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现。
(3) Iterator:
迭代策略模式。

5-1
高内聚,低耦合。
评价模块性的五个标准:
Decomposability (可分解性)
Composability (可组合性)
Understandability (可理解性)
Continuity (可持续性)
Protection (出现异常之后的保护)

模块化设计的五大原则:
Direct Mapping (直接映射)
Few Interfaces (尽可能少的接口)
Small Interfaces (尽可能小的接口)
Explicit Interfaces (显式接口)
Information Hiding (信息隐藏)

Five classes design principles:
(SRP) The Single Responsibility Principle 单一责任原则
不应有多于1个的原因使得一个类发生变化。
一个类,一个责任。
(OCP) The Open-Closed Principle 开放-封闭原则
对扩展性的开放
对修改的封闭
关键的解决方案:抽象技术
(LSP) The Liskov Substitution Principle Liskov替换原则
子类型必须能够替换其基类型
(DIP) The Dependency Inversion Principle 依赖转置原则
抽象的模块不应依赖于具体的模块
具体应依赖于抽象
(ISP) The Interface Segregation Principle 接口聚合原则
客户端不应依赖于它们不需要的方法

5-2
Creational patterns:
(1)Factory Method pattern(工厂方法):
抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口由具体工厂来创建,它同具体工厂之间一一对应。

(2)Abstract Factory(抽象工厂)
提供接口以创建一组相关/相互依赖的对象,但不需要指明其具体类。

Structural patterns:
(1) Proxy(代理模式)
允许通过充当传递实体或占位符对象进行对象级访问控制。

Behavioral patterns:
(1) Observer
(2) Visitor
对特定类型的object的特定操作(visit),在运行时将两者动态绑定到一起。(本质上:将数据和作用于数据上的某种/些特定操作分离开来)

5-3
Concatenation 连接
x ::= y z x matches y followed by z x等于y后面跟z
Repetition 重复
x ::= y* x matches zero or more y 0,1,……
Union 选择
x ::= y | z x matches 相同 either y or z 或
Optional
x ::= y? an x is a y or is the empty string( 0 or 1)
1 or more occurrences
x ::= y+ an x is one or more y (equivalent to x ::= y y* )
A character class […]
x ::= [a-c] is equivalent to x ::= ‘a’ | ‘b’ | ‘c’
An inverted character class [^…]
x ::= [^a-c] is equivalent to x ::= ‘d’ | ‘e’ | ‘f’ | … (all other characters)

6-1
Robustness(健壮性):系统在不正常输入或不正常外部环境下仍能够正常表现的程度
Correctness(正确性):程序按照spec加以执行的能力,是最重要的质量指标。

6-2
– Declaring exceptions (throws) 声明“本方法可能会发生XX异常”
– Throwing an exception (throw) 抛出XX异常
– Catching an exception (try, catch, finally) 捕获并处理XX异常

6-3
assert condition;
assert condition : message;
assert在运行时将被屏蔽,不能将执行代码放在assert语句中。
assert主要用于检测程序内部bug

6-4
Process for debugging
– Reproduce the bug
– Diagnosing the bug
– Fix the bug
– Reflection

7-1
Thread:从Thread类派生子类
run():线程对象调用run方法不开启线程。仅是对象调用方法。
start():线程对象调用start开启线程,并让jvm调用run方法在开启的线程中执行。

从Runnable接口构造Thread对象
Runnable只是一个接口,它里面只有一个run()方 法,没有start()方法。

7-2
Four ways of threadsafe:
限制数据共享
共享不可变数据
共享线程安全的可变数据
通过锁的机制共享线程不安全的可变数据,变并行为串行。

7-3
在编写类的方法时,最方便的锁是对象实例本身,即this。

当synchronized作用于普通方法是,锁对象是this;
当synchronized作用于静态方法是,锁对象是当前类的Class对象;
当synchronized作用于代码块时,锁对象是synchronized(obj)中的这个obj。

今天的文章软件构造课程整理_软件体系结构原理方法与实践pdf分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/68337.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注