- 博客(22)
- 问答 (1)
- 收藏
- 关注
原创 软件构造系列复习笔记————第10章
第10章内存共享模式、消息传递模式 进程和线程 线程的创建和启动,runnable 时间分片、交错执行、竞争条件 线程的休眠、中断 线程安全threadsafe的四种策略 Strategy 1: Confinement限制数据共享Strat...
2018-06-19 11:37:35 597 1
原创 软件构造系列复习笔记————第8章
第8章内存管理模型:堆、栈 GC,root、reachable、unreachable、live、dead在静态内存分配模式下,无需进行内存回收:所有都是已确定的。 在栈上进行内存空间回收:按block(某个方法)整体进行。 在heap上进行内存空间回收,最复杂——无法提前预知某个object是否已经变得...
2018-06-18 12:55:03 972 5
原创 软件构造系列复习笔记(4)————第6-7章
第6-7章可维护性的常见度量指标 聚合度和耦合度 OO Design Principles: SOLID 设计模式factory method、abstract factory、builder、bridge、proxy、composite、observer/observable、visitor、s...
2018-06-17 09:52:47 833
原创 软件构造系列复习笔记(3)————第4-5章
第4-5章代码可理解性/可读性 编码规范 选择何种编码风格是程序员个人的自由,但要做到: (1) 在所有地方保持一致的风格; (2) 遵从团队的统一编码风格。 ...
2018-06-15 21:29:21 657
原创 软件构造系列复习笔记(2)————第3章
第3章基本数据类型、对象数据类型一些操作被重载,因为同样的操作名可用于不同的数据类型。静态类型检查、动态类型检查静态类型检查:可在编译阶段发现错误,避免了将错误带入到运行阶段,可提高程序正确性/健壮性。 静态检查:关于“类型”的检查,不考虑值。 动态检查:关于“值”的检查。Mutable/Immutable所以,尽量使用fin...
2018-06-13 14:52:45 727
原创 软件构造系列复习笔记(1)————第1-2章
第1-2章重点软件构造的多维度视图软件构造的阶段划分、各阶段的构造活动内部/外部的质量指标软件配置管理SCM与版本控制系统VCSGit的结构、工作原理、基本指令Github软件构造的多维视图#内部/外部的质量指标外部质量指标 测试和调试:发现不正确、消除不正确 防御式编程:在写程序的时候就确保...
2018-06-11 16:51:06 1533 1
原创 软件构造系列学习笔记(6.3)————可维修性的构造技术
可维修性的构造技术学了这么多OO设计模式,不外乎都是 delegation + subtying,万变不离其宗。除了OO,还有什么其他能够提升软件可维护性的构造技术?——本节从委派+子类型跳出来,学习以下三个方面: (1) 基于状态的构造技术 (2) 表驱动的构造技术 (3) 基于语法的构造技术目录基于状态的构造技术表驱动的构造技术基于语法的构造技术基于状态的构造技术...
2018-05-06 21:02:13 513
原创 软件构造系列学习笔记(6.2)————可维护性设计模式
可维护性设计模式目录创造性模式结构化模式行为化模式创造性模式创造性模式(Creational patterns)一共分为三种模式,分别是:工厂方法模式:创建对象,而不指定要创建的确切类。 抽象工厂模式:将具有共同主题的对象工厂分组。 Builder模式:通过分离构造和表示来构造复杂的对象。下面对这三种模式一一进行描述工厂方法模式(Factory ...
2018-05-05 21:42:18 657
原创 软件构造系列学习笔记(6.1)————可维护性的度量和构造原则
可维护性的度量和构造原则本章面向另一个质量指标:可维护性——软件发生变化时,是否可以以很小的代价适应变化? 本节是宏观介绍:(1)什么是软件维护;(2)可维护性如何度量;(3)实现高可维护性的设计原则——很抽象。目录软件维护和演变可维护性度量模块化设计和模块化原则OO设计原则:SOLIDOO设计原则:GRASP软件维护和演变软件工程中的软件维护是交付后修改...
2018-04-16 13:56:23 978
原创 软件构造系列学习笔记(5.3)————可复用性的设计模式
可复用性的设计模式除了Framework,5-2节所讨论的其他技术都过于“基础”和“细小”,有没有办法做更大规模的复用设计? 本节:几种典型的“面向复用”的设计模式。目录适配器模式(Adapter)装饰器模式(Decorator )外观模式(Facade)策略模式(Strategy)模板方法模式(Template method)迭代器模式( Iterator)...
2018-04-11 16:17:02 1042
原创 软件构造系列学习笔记(5.2)————设计可复用软件
设计可复用软件5-1节学习了可复用的层次、形态、表现;本节从类、API、框架三个层面学习如何设计可复用软件实体的具体技术。目录设计可复用的类设计可复用库与框架设计可复用类上节复用类和接口介绍了继承与重写,重载,参数多态与泛型编程等方法。行为子类型与Liskov替换原则子类型多态:客户端可用统一的方式处理不同类型的对象 。来看下面这个例子Anim...
2018-04-11 14:55:28 695
原创 软件构造系列学习笔记(5.1)————可复用性的度量,形态和外部观察
可复用性的度量,形态和外部观察第3章介绍了软件构造的核心理论(ADT)与技术(OOP),其核心是保证代码质量、提高代码适应性和复用性。本章面向一个重要的外部质量指标:可复用性——如何构造出可在不同应用中重复使用的软件模块/API?5-1节探讨可复用软件的形态与特征,下一节学习“如何构造”。目录什么是软件复用如何度量复用性可复用组件的级别和形态对可复用性的外部观察...
2018-04-09 11:25:36 696
原创 软件构造系列学习笔记(4.1)————面向可理解性的构造
面向可理解性的构造第1章:构造的多视图与质量目标 ; 第2章:构造的过程 ; 第3章:用ADT和OOP构造软件; 本章:关注internal quality的一种——可理解性。目录可理解性的度量在源代码中记录编程之前的伪代码编码规范可理解性的度量代码的可理解性可以理解为代码的可读性。具体来说,可从以下几个方面来看:是否遵循特定的命名规范? 是否足够...
2018-04-02 15:12:13 495
原创 软件构造系列学习笔记(3.5)—————ADT和OOP中的等价性
ADT和OOP中的等价性在很多场景下,需要判定两个对象是否 “相等”,例如:判断某个Collection 中是否包含特定元素。 ==和equals()有和区别?如何为自定义 ADT正确实现equals()?目录什么是等价性和为什么需要等价性三种判断等价性的方法== vs. equals() 不可变类型的等价性对象合约可变类型的等价性自动装箱和等价性什么是等价性和为...
2018-04-01 21:07:47 585
原创 软件构造系列学习笔记(3.4)————面向对象编程(OOP)
面向对象编程(OOP)3-3节学习了ADT理论;本节学习ADT的具体实现技术:OOP。目录:面向对象的标准OOP 的基本概念 OOP的独特功能Java中一些重要的Object方法设计好的classOOP的历史总结面向对象的标准面向对象的编程方法/语言应该以类的概念作为中心概念。同时还有如下标准:静态类型(Static typing):一个定义良好的类型...
2018-03-31 21:01:15 444
原创 软件构造系列学习笔记(3.3)————抽象数据类型 (ADT)
抽象数据类型 (ADT)3-1节研究了“数据类型”及其特性 。 3-2节研究了方法和操作的“规约”及其特性。 本节:将数据和操作复合起来,构成ADT,学习 ADT的核心特征,以及如何设计“好的”ADT。目录:抽象和用户定义的类型ADT中的操作分类抽象数据类型示例ADT的设计原则表示独立性(Representation Independence)在Java中实现ADT...
2018-03-30 16:11:00 1061
原创 软件构造系列学习笔记(3.2)————设计规约
设计规约上一节关注了编程语言中的“数据类型”、 “变量”、“值”,尤其是mutable和 immutable的类型/值/引用。本节转向“方法/函数/操作”如何定义—— 编程中的“动词”、规约。目录:Function / method in programming languageSpecification: Programming for communication Desi...
2018-03-30 10:20:32 626
原创 软件构造系列学习笔记(3.1)—————数据类型和类型检查
数据类型和类型检查前两章回答了:什么是“高质量的软件”、 如何从不同维度刻画软件、软件构造的基本过程和步骤。 本章主要内容是软件构造的理论基础——ADT(抽象数据类型) 和软件构造的技术基础——OOP(面向对象编程)。目录Data type in programming languages Static vs. dynamic data types Type checkin...
2018-03-29 15:48:29 704
原创 软件构造系列学习笔记(2.2)————软件构建的过程,系统和工具
软件构建的过程,系统和工具上一章讲了软件开发(0->1->…->n)遵循什么过程,本章讲述软件构造遵循什么“子过程。目录广义的软件构造过程 狭义的软件构造:build广义的软件构造过程广义的软件构造过程大致分为以下几个过程: Design=>Programming /refactoring=>Debugging=>Testing=>...
2018-03-28 21:28:05 1726
原创 软件构造系列学习笔记(2.1)————软件生命周期和配置管理
软件生命周期和配置管理目录软件开发生命周期传统的软件过程模型敏捷开发和极限编程软件配置管理Git(SCM tool)本章开始关心:软件开发(0->1->…->n)遵循什么过程。软件开发生命周期(SDLC)From 0 to 1 从无到有Planning->Analysis->Design->Implementation-...
2018-03-28 18:41:42 521
原创 软件构造系列学习笔记(1.2)————软件构造的质量目标
软件构造的质量目标软件系统的质量属性软件构造的五个关键质量目标软件系统的质量属性软件系统的质量属性又分为两部分,外部质量因素(External quality factors)以及内部质量因素(Internal quality factors),外部质量因素例如软件的运行速度或者易用性,在使用过程中都会被用户察觉到,因此外部质量因素影响用户。而内部质量因素例如模块化或者可读性则影响软件...
2018-03-12 22:55:32 802
原创 软件构造系列学习笔记(1.1)——— 软件构造的多维视图
软件构建的多维视图前记构成软件系统的三个维度软件构造的八个多维视图视图之间的转变总结前记这篇博客是软件构造系列学习笔记的第一篇,也是我博客的第一篇。开通博客主要也是因为教授软件构造课程(使用语言为Java)老师的要求,用来记录学习MIT的这门课我觉得也是很不错的方法。由于笔者不太善于表达同时能力水平有限,故博客难免有错误之处,敬请指正,但我会尽我所能地记录下学习这门...
2018-03-06 22:57:42 1031 3
空空如也
关于Android中,双声道音频文件转换成单声道的问题
2018-04-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人