自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 软件构造感悟之面向正确性与健壮性的软件构造

健壮性是指软件能够正确地运行,而不是崩溃或产生不正确的结果。面向健壮性的编程我们应该处理未期望的行为和错误终止,并且即使终止执行,也要准确/无歧义的向用户展示全面的错误信息。这有助于debug为了考虑充足以满足健壮性,我们总是要假定用户包含恶意,想要破坏程序,假定我们的代码会失败。

2023-05-23 00:02:14 103

原创 软件构造感悟之面向可复用性和可维护性的设计模式

工厂方法模式的目的是定义一个用于创建对象的接口,让子类决定实例化哪一个类。例如,我们有一个日志记录器,它可以将日志记录到文件中,但是我们需要将日志记录到数据库中,我们可以使用适配器模式,将数据库适配成日志记录器。模板模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响到使用算法的客户。迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。模板模式利用继承与重写实现。

2023-05-23 00:01:32 96

原创 软件构造感悟之面向复用的软件构造技术

对于上面的例子,我们可以看到,子类S中的foo方法返回值类型是String,而父类T中的foo方法返回值类型是Object,这就是协变,子类的返回值类型是父类的子类型。复用是为了更高的开发效率,并不是说从头自己写下去就是最好的,因为他人的代码可能比自己实现的更安全,性能更好,所以由此产生一个问题,如何找到合适的代码来复用。而对于bar方法,子类S中的bar方法的参数类型是Object,而父类T中的bar方法的参数类型是String,这就是逆变,子类的参数类型是父类的父类型。简单来说,对于子类来说,需要有。

2023-05-22 23:55:18 99 1

原创 软件构造感悟之面向可维护性的构造技术

前者是一个交互式的学习网站,能帮助我们学习正则表达式的语法,并配有练习习题,两三个小时就能全部刷完,后者则是一个在线的正则表达式测试工具,可以选择不同编程语言中的正则表达式匹配,并会有每一步的解释,极为清晰。维护需要处理来自用户报告的故障/问题,并且在处理之后,还需要对这些修改进行测试,以确保修改后的软件仍然是可靠的。耦合指的是模块之间的依赖关系,耦合越低,模块之间的依赖关系越小,模块之间的独立性越高。内聚指的是模块内部的联系,内聚越高,模块内部的联系越紧密,模块的独立性越低。模块化编程的五项原则;

2023-05-22 23:53:35 96 1

原创 软件构造感悟之ADT与OOP中的等价性

方法,两个equals的object一定拥有相同的hashCode,除非我们保证ADT不会被放入到Hash类型的集合中,如:HashMap, HashSet等。对于可变类型来说,我们仅需实现行为等价性,即指向相同内存空间的objects才是相等的,因此我们不需要重写。实际上是Overload而不是Override,因为参数类型不再是Object,而是我们自定义的类。方法是比较引用等价,参数是Object,我们需要重写这个方法。方法,并进行混淆,我们可以使用。,而比较对象类型时,我们使用。

2023-05-22 23:53:15 52 1

原创 软件构造感悟之面向对象的编程

通过使用。

2023-05-22 23:52:43 71 1

原创 软件构造感悟之设计规约

规约的作用是对代码进行说明,比如对函数的功能进行说明,对类的作用进行说明等等。,相当于对开发者提出了更严格的要求,但是对客户端的要求更宽松。通常,我们在规约中记录函数的功能,参数,返回值等等。客户端无需阅读调用函数的代码,只需理解spec即可。我们的实现围绕着规约进行,即先写规约,再实现规约。规约在不同语言中有不同的写法,比如在。的后置条件,则可以用。

2023-05-22 23:52:36 73 1

原创 软件构造感悟之数据类型与类型检验

当使用可变数据类型时,会获得性能上的提升,但是需要程序员自己去跟踪变量的值,并且需要考虑性能问题,相对的,使用不可变数据类型会造成大量的拷贝,造成空间上的浪费和性能上的下降,但与此同时,带来了安全与其他质量指标的提升,在具体应用中,我们应当根据实际情况进行选择。作为面向对象最典型的语言,其数据类型也是面向对象的,即所有的数据类型都是类,所有的变量都是对象,所有的操作都是方法调用。对迭代器的使用要小心谨慎,因为对原对象执行删除操作会改变迭代器的引用,从而导致迭代器失效,这是一个很容易犯的错误。

2023-05-22 23:49:51 70 1

原创 软件构造感悟之抽象数据类型

程序员可以自由的定义自己的数据结构,这些数据结构可以是基本类型的扩展,也可以是基本类型的组合。这些数据结构的定义,就是用户定义类型(User Defined Type)。抽象类型则只强调”作用于数据上的操作“,程序员和client无需关心数据如何存储的,只需设计/使用操作即可。ADT开发者关注表示空间R,client关注抽象空间A,我们需要一个函数f来将R映射到A,这个函数就是抽象函数。如下图所示:RI则是R中的一个谓词,用来保证R中的元素都是合法的。

2023-05-22 23:49:21 33 1

原创 软件构造感悟之构造过程与项目配置

编程语言有很多种,众人熟知的有:C、C++、Java、Python、JavaScript、PHP等第三代编程语言,还有一些第四代编程语言,比如:SQL、HTML、CSS等。版本控制系统是一种记录文件内容变化的系统,它可以在文件内容发生变化后,将文件的新版本保存起来,可以在将来将文件恢复到旧的版本。是一个排行榜反映了当前最流行的编程语言,它的排名是根据搜索引擎的结果来进行排名的,所以其排名并不科学。在开发时,会有版本号的概念,比如:v1.0.1、v2.0.3等,这些版本号是由版本控制系统来管理的。

2023-05-22 23:48:51 46 1

原创 软件构造感悟之测试优先的编程

测试是一种从程序中发现错误的一种编程,根据这段话,很显而易见的一点就是测试的好坏衡量标准取决于其发现程序中bug的能力。针对这种能力还需要几个要求,第一个就是测试不能冗余,也就是说测试用例之间不能有重复的部分,第二个就是最佳特性,并且不能太复杂也不能太简单。测试的种类分为三种,分别是单元测试,集成测试和系统测试,单元测试是对程序中最小的可测试单元进行测试,集成测试是对程序中的模块进行测试,系统测试是对整个系统进行测试。

2023-05-22 23:48:15 110 1

原创 软件构造感悟之三维度八视图

一方面,外部质量因素是内部质量因素的体现,内部质量因素是外部质量因素的保证。另一方面,外部质量因素是内部质量因素的驱动力,内部质量因素是外部质量因素的目标。软件的质量目标是指软件开发过程中要达到的质量水平,它反映了软件的功能、性能、可靠性、可维护性等方面的要求。软件构造的三维度八视图是一种用于分析和设计软件系统的方法,它将软件系统的各个方面分解为三个维度和八个视图,以便更好地理解和管理软件的复杂性。软件的外部质量因素是指软件在运行时表现出来的质量特征,它直接影响了用户对软件的满意度和信赖度。

2023-05-22 23:47:23 340 1

空空如也

空空如也

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

TA关注的人

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