自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 软件构造笔记 10.1 Concurrency and Thread-Safety

1.进程,线程进程:私有空间,彼此隔离。拥有整台计算机的资源,多进程间不共享内存,进程之间通过消息传递进行协作。一般来说,进程=程序=应用,但一个应用中可能包含多个进程。线程:程序内部的控制机制。可把进程理解为虚拟机,线程理解为虚拟cpu。程序共享、资源共享都隶属于进程;线程之间共享内存,但很难获取线程私有的内存空间,通过创建消息队列在线程之间进行消息传递。每个应用至少有一个线程,主线程可创建其他...

2018-06-24 00:06:16 248

原创 软件构造笔记 8.3 Code Tuning for Performance Optimization

1.代码调优过程和策略代码调优不是为了修复bug,而是对正确的代码进行修改以提高性能,通常是小规模的变化。调优不会减少代码行数;应有明确的优化目标;不要边写边调优;不是性能优化的第一选择。2.代码调整用于对象创建和重用单例模式:某些类在应用运行期间,只需要一个实例。强制客户只能创建一个Object实例,避免因为new操作带来的时空性能(尤其是GC)的损失,也便于复用。设置静态变量来存储单一实例对象...

2018-06-24 00:06:14 258

原创 软件构造 8.2 Dynamic Program Analysis Methods and Tools

1.动态程序分析动态程序分析:根据程序一次或多次执行的结果和结果,分析代码在时空性能方面所展现出的性质。静态分析使用抽象的输入值;动态分析使用具体的输入值。为使动态分析有效,目标程序必须执行足够多次,以观察到完整的、不同的执行行为;通过代码覆盖度,确认动态分析是否已经足够;要尽可能小的影响程序原本的执行,否则性能测量不准确。80-20规则:20%的程序负责80%的执行时间。2.分析方法分析方法有:...

2018-06-24 00:06:11 309

原创 软件构造笔记 8.1 Metrics, Principles, and Methods of Construction for Performance

1.内存管理系统和应用级别的内存管理本机内存是分配给一个进程的物理内存,由OS管理。cpu执行指令,从内存读/写数据,在虚拟内存空间给进程分配内存,并与物理内存建立映射表因为内存不足,所以要考虑高效率的内存管理问题,动态分配和回收内存,复用已回收的内存。对象在heap堆中分配内存,对象引用指向其他对象在堆中的起始地址;非基本数据类型的变量等价于对象引用;每个对象可包含一组变量,每个变量可指向其他对...

2018-06-24 00:06:09 188

原创 软件构造笔记 6.3 Maintainability-Oriented Construction Techniques

1.基于状态的构造技术使用有限状态机来定义程序的行为,使用状态来控制程序的执行。根据当前状态,决定下一步要执行什么操作、执行操作之后要转移到什么新的状态。基于自动机的编程:将程序看做一个有限状态自动机,侧重于对“转态”及“转态转换”的抽象和编程。程序的执行被分解为一组自动执行的步骤。各步骤的通讯通过“状态变量”进行。可使用枚举类型定义状态,二维数组定义状态转换表。状态模式:最好不要使用if/els...

2018-06-24 00:05:56 193

原创 软件构造笔记 6.2 Design Patterns for Maintainability

1.创造模式工厂方法模式:当客户端不知道要创建哪个具体类的实例,或者不想在客户端代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。常规情况下,client直接创建具体对象:Product p = new ProductTwo();在工厂方法模式下:Product p = new ConcreteTwo().make...

2018-06-24 00:05:51 226

原创 软件构造笔记 6.1 Metrics and Construction Principles for Maintainability

1.软件维护和变化软件维护:修复错误,改善性能。变化在软件生命周期内是不可避免的,因为在最初的设计中为充分考虑到未来的变化,应避免因为频繁变化导致软件复杂度的增加和质量的下滑。软件维护不仅仅是运维工程师的工作,而是从设计和开发阶段就开始了,在设计与开发阶段就要考虑将来的可维护性。2.可维护性的常见度量指标圈复杂度:度量代码的结构复杂度。代码行数:指示代码中的大致行数。HalsteadVolume:...

2018-06-24 00:05:48 199

原创 软件构造笔记 5.3 Design Patterns for Reuse

除了类本身,设计模式更强调多个类/对象之间的关系和交互过程——比接口/类复用的力度更大。1.创建型模式适配器模式(Adapter):将某个类/接口转换为客户端期望的其他形式。通过增加一个接口,将已存在的子类封装起来,客户端面向接口编程,从而隐藏了具体子类。装饰器模式(Decorator):为对象增加不同侧面的特性,通过对每一个特征构造子类,在用委派机制增加到对象上。外观模式(Facade):客户端...

2018-06-24 00:05:43 231

原创 软件构造笔记 5.2 Construction for Reuse

1.行为子类和Liskov替代原则(LSP)子类型多态:客户端可用统一的方式处理不同类型的对象。即在可以使用a的场景,都可以用c1和c2代替而不会有任何问题。相关规则:子类型可以增加方法,但不可删除;子类型需要实现抽象类型中所有为实现的方法;子类型中重写的方法必须有相同或子类型的返回值;子类型中重写的方法必须使用同样类型的参数;子类型中重写的方法不可抛出额外的异常。LSP:更强的不变量;更弱的前置...

2018-06-24 00:05:38 332

原创 软件构造笔记 5.1 Metrics, Morphology and External Observations of Reusability

1.可复用面向复用编程:开发出复用的软件。基于复用编程:利用已有的可复用软件搭建应用。复用的原因:降低成本和开发时间;经过充分测试,可靠、稳定;标准化,在不同应用中保持一致。开发可复用的软件成本高于一般软件的成本,因为需要足够高的适应性;性能也会差一些,因为针对更普遍的场景,缺少足够的针对性。使用可复用软件库可以对其进行有效的管理。衡量可复用性高可复用性应该满足:小、简单;与标准兼容;灵活可变;可...

2018-06-24 00:05:23 175

原创 软件构造笔记 4.1 Construction for Understandability

易理解性的度量代码的可读性很重要:相比于写新代码来说,程序员大部分时间都用来阅读和修改已有代码。难以理解的代码会难以维护,可能隐含更多的错误。为增强代码的易读性,应注意以下几点:代码长度,度量方式为所有标识符的平均长度;命名独特比例;代码复杂度;代码行数;注释的密度。经验:代码的可读性可理解性很多时候比效率性能更重要,不可读不可理解代码可能蕴含更多的错误。先写出可读易懂的代码,再去逐渐调优!注释代...

2018-06-23 16:30:02 250

原创 软件构造笔记 3.5 Equality in ADT and OOP

等价关系:自反、对称、传递f(a)=f(b).AF映射到同样的结果,也是等价的。站在外部观察者的角度,也能判断等价性。”==“和”equals()“”==“比较两个对象是否指向相同的储存,就快照图来说,两个对象指向相同的应用。”equals“比较的是对象的内容。在自定义ADT,需要重写equals()。所以对于基本类型,使用”==“判断相等,对对象类型,使用”equals“。当您重写equals(...

2018-06-23 16:22:22 194

原创 软件构造笔记 3.4 Object-Oriented Programming (OOP)

类变量和类方法与类相关联,并且每个类都会出现一次。使用它们不需要创建对象。实例方法和变量会在每个类的实例中出现一次。静态方法不与任何特定的类实例关联,而实例方法(不带static关键字声明)必须在特定对象上调用。1.接口(interface):Java的接口是一种用于设计和表达ADT的有用语言机制,其实现方式是实现该接口的类。接口之间可以继承,一个类也可以实现多个接口,一个接口也可以有多个实现。A...

2018-06-23 16:20:18 190

原创 软件构造笔记 3.3 Abstract Data Type (ADT)

抽象数据类型与表示独立性:如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示(即“表示泄露”),避免潜在bug——在客户端和实现间建立防火墙。1.抽象数据类型数据抽象:用一组操作所刻画的数据类型。强调“作用于数据上的操作”,程序员和用户无需关系数据如何具体储存的,只需设计/使用操作即可。ADT是有操作定义的,与其内部如何实现无关。2.数据和操作的分类可变类型:提供了可改变其内部数据...

2018-06-23 16:05:13 282

原创 软件构造笔记 3.2 Designing Specification

1.函数与方法参数类型和返回类型匹配在静态检查阶段完成。“方法”是程序的“积木”,可以被独立开发、测试、复用; 使用“方法”的客户端,无需了解方法内部具体如何工作——“抽象”。2.方法的规约需要规约的原因:很多bug来自于双方的误解;不写清楚规约,不同开发者的理解会不同;没有规约难以定位错误。规约的优点:精确的规划,有助于区分责任;客户端无需阅读调用函数的代码,只需阅读spec。规约可以隔离“变化...

2018-06-23 15:44:23 321

原创 软件构造笔记 3.1 Data Type and Type Checking

1.数据类型变量:用特定数据类型定义,可存储满足类型约束的值。基本数据类型(primitive type):如int、long、double对象数据类型(object type):如String、BIgInteger对象类型间会形成层次结构根节点是Object,所有类都有父节点,除了Object,省略extends语句,那么默认该类父类为Object。类是其所有超类的一个实例,即继承关系:从其超类...

2018-06-23 15:31:08 237

原创 软件构造笔记 2.2 Process, Systems, and Tools of Software Construction

1.软件构造过程(Design-> Programming -> Debug -> Testing-> Build -> Release)编码(Programing)从用途上划分Programminglanguages  编程语言(e.g., C, C++, Java,Python)Modelinglanguages 建模语言  (e.g., UML)Configur...

2018-06-23 14:54:17 183

原创 软件构造笔记 2.1 Software Lifecycle and Configuration Management

1.软件开发的基本过程SoftwareDevelopment Life Cycle (SDLC): From 0 to 1 从无到有。2.软件配置管理Software Configuration Management(SCM)软件配置管理追踪和控制软件的变化,包括修订控制和基线的建立。软件配置项(SCI):软件中发生变化的基本单元(例如:文件)基线:软件持续变化过程中的“稳定时刻”(例如:对外发布...

2018-06-23 14:50:44 265

原创 软件构造笔记 1.2 Quality Objectives of Software Construction

1.软件构造过程中应考虑的重要质量指标 分为外部质量因素和内部质量因素,其中外部质量影响用户,内部质量因素影响软件本身和开发者,且外部质量取决于内部质量。外部质量因素:正确性(Correctness):按照预先定义的“规约”执行,是至高无上的质量指标。实现方法有测试和调试;防御式编程;形式化方法。健壮性(Robustness ):针对异常情况的处理,确保出现异常时不会“崩溃”,异常情况指spec为...

2018-06-23 14:36:48 310

原创 软件构造笔记 1.1 Multi-Dimensional Views of Software Construction

1.从三个维度看软件系统的构成软件维度的视图:1)按阶段:build-time;run-time2)按动态:moment and period3)按级别:code and component 软件构造过程中视图间的转换:Build-time视图:构造阶段可看做:idea -> requirement->design->code->packageCode-level view...

2018-06-23 14:24:25 253

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除