第五章.良好的设计

聚合(aggregation):聚合是关联的一种特殊形式,表示一件事物是由另一件事物(部分地)组成。

在Java中的称呼:抽象类(abstract class),关系(relationship),继承(inheritance),聚合(aggregation)

在UML中的称呼:抽象类(abstract class),关联(association),泛化(generalization),聚合(aggregation)

OO原则:

1.将变化之物封装起来

2.对接口编码,而不是对实现

3.应用程序中的每一个类只有一个改变的理由

灵活性(flexible),复原力(resilient),耦合度(coupling),内聚力(cohesion)

大多数的好设计都是通过分析坏设计而来的。

不要害怕犯错和改变。

这一章内容庞大,还未消化,明天等我整理一下思路,在写出详细的思路。这一章很重要,学会思路,而不是学会敲代码!

时间: 07-17

第五章.良好的设计的相关文章

【软件构造】第五章第二节 设计可复用的软件

第五章第二节  设计可复用的软件 5-1节学习了可复用的层次.形态.表现:本节从类.API.框架三个层面学习如何设计可复用软件实体的具体技术. Outline 设计可复用的类--LSP 行为子结构 Liskov替换原则(LSP) 各种应用中的LSP 数组是协变的 泛型中的LSP 为了解决类型擦除的问题-----Wildcards(通配符) 设计可复用的类--委派与组合 设计可复用库与框架 Notes ## 设计可复用的类--LSP 在OOP之中设计可复用的类 封装和信息隐藏 继承和重写 多态.子

第五章 面向对象编程设计与开发——续3

5.9--封装 如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) #其实这仅仅是一种变形操作 #类中所有双下划线开头的名称如_x都会自动形成:_类名_x的形式: class A: _N=0#类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如_N,会变形为_A_N def _init_(self): self._x=10#变形为self._A_X def _foo(self):#变形为_A_foo print('form A') def bar(s

FPGA Prototyping By Verilog Examples第五章 状态机FSM设计

上升沿检测电路之Moore型FSM // Listing 5.3module edge_detect_moore ( input wire clk, reset, input wire level, output reg tick ); // symbolic state declaration localparam [1:0] zero = 2'b00, edg = 2'b01, one = 2'b10; // signal declaration reg [1:0] state_reg, s

第五章 面向对象编程设计与开发——续

5.1   类.实例.属性.方法详解 类的语法 上面的代码其实有问题,属性名字和年龄都写死了,想传名字传不进去. class Person(object): def __init__(self, name, age): self.name = name self.age = age p = Person("Alex", 22) print(p.name, p.age) 为什么有__init__? 为什么有self? 此时的你一脸蒙逼,相信不画个图,你的智商是理解不了的! 画图之前, 你

第五章 面向对象编程设计与开发——续2

5.4--小结 从代码级别看面向对象 1.在没有学习类这个概念时,数据和功能是分离的 def exc1(host,port,db,charset): conn=connect(host,port,db,charset) conn.execute(sql) return xxx def exc2(host,port,db,charset,proc_name) conn=connect(host,port,db,charset) conn.call_proc(sql) return xxx #每次调

软件设计(第五章)

1.软件系统 2.分解为子系统或包 识别出所有的子系统,包括:确定如何把系统分为主要的子系统,并清楚定义子系统如何使用其他子系统. 子系统之间的交互:一个子系统去调用另外一个子系统的子程序:一个子系统包含另一个子系统中的类:一个子系统继承自另外一个子系统中的类: 常用的子系统:业务规则,用户界面,数据库访问,对系统的依赖性 3.分解为类 识别出系统中所有的类 定义这些类与系统的其余部分打交道的细节 4.分解为子程序 把每个类细分为子程序,将第3步中定义的类接口,细化为类的私用子程序 5.子程序内

《linux内核设计与实现》第五章

第五章 系统调用 一.与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层.作用: 为用户空间提供了一种硬件的抽象接口. 系统调用保证了系统的稳定和安全. 每个进程都运行在虚拟系统中,而在用户空间和系统的其余部分提供这样一层公共接口,也是出于这种考虑. 在Linux中,系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核唯一的合法入口. 二.API.POSIX和C库 一般情况下,应用程序通过在用户空间实现的应用编程接口(API)而不是直接通过系统调用来编程. 一个API定

《Linux内核设计与实现》读书笔记 第五章 系统调用

第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种硬件的抽象接口:保证了系统的稳定和安全,避免应用程序不正确使用硬件,窃取其他进程的资源,或做出危害系统的行为:为了实现多任务和虚拟内存. Linux提供的系统调用比大部分操作系统少得多. 5.2 API.POSIX.和C库 一个API定义了一组应用程序使用的编程接口.(API和系统调用不是一一对应)

《Linux内核设计与实现》第五章学习笔记

第五章 系统调用 操作系统中,内核提供了用户进程与内核进行交互的一组接口.这些接口让应用程序受限的访问硬件设备,提供了新进程与已有进程进行通信的机制,也提供了申请操作系统其他资源的能力.提供接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行. 课堂知识点回顾 1. 系统调用:需要int 0x80模拟中断让硬件触发.同步.主动地进入系统空间. 2. 硬中断:异步.被动地进入系统空间.CPU运行时发生错误则中断,中断后没有进程调度. 3. 软中断:中断后还执行其他进程调度. 4. 系统调用过程: