<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[whzzj_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/whzzj_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; whzzj_]]></copyright><item><title><![CDATA[规约的强弱]]></title><link>https://blog.youkuaiyun.com/whzzj_/article/details/125286074</link><guid>https://blog.youkuaiyun.com/whzzj_/article/details/125286074</guid><author>whzzj_</author><pubDate>Tue, 14 Jun 2022 21:03:34 +0800</pubDate><description><![CDATA[其实确实有很多可以细究的细节，我们先来看他的详细的过程——这里其实可以说，比较两个规约的步骤是这样的两步——第一步是比较两个规约的前置条件，至于如何比较就看他们的集合大小。第二步是比较两个规约的后置条件，重中之重是必须要注意到，如果S1的前置条件弱于S2，那么就应该在S2的前置条件的条件下比较后置条件！！这个小的细节说明了很多东西，因为规约的强弱实质上是为了判断一个实现能否在另一个实现的情境下完全的替代他，所以我们需要考虑那个弱的实现的情景，至于强的前置条件多出来的那一部分永远不会在弱的实现中出现，所以我们]]></description><category></category></item><item><title><![CDATA[浅入了解装饰器模式]]></title><link>https://blog.youkuaiyun.com/whzzj_/article/details/125119674</link><guid>https://blog.youkuaiyun.com/whzzj_/article/details/125119674</guid><author>whzzj_</author><pubDate>Sat, 04 Jun 2022 11:11:33 +0800</pubDate><description><![CDATA[装饰器模式的核心在于继承和委托结合的应用，如果我想要实现一个可以扩展功能的类A，我需要实现他的两个版本，一个是基础实现BasicA，另一个是装饰器ADecorator，他们共同实现了接口A(之前描述为类，此处描述为接口，也确实是有意而为之，体现出了一步抽象)。然后我们的包装器实现全部的接口方法都依靠委托，具体是association式的委托，为了清晰，结构如下——








然后重点在于，多样化的继承ADecorator，这里需要注意的式，装饰器的精髓在于将所要多样化的所有行为彻彻底底的划分为几个不同]]></description><category></category></item><item><title><![CDATA[Code Coverage代码覆盖度概念辨析]]></title><link>https://blog.youkuaiyun.com/whzzj_/article/details/124903466</link><guid>https://blog.youkuaiyun.com/whzzj_/article/details/124903466</guid><author>whzzj_</author><pubDate>Sat, 21 May 2022 21:39:20 +0800</pubDate><description><![CDATA[代码覆盖度也是测试程序的一个重要指标，因为是对于代码内部结构的测试，所以应当是属于白盒测试的范畴，这里主要是辨析代码覆盖度的几个重要的测试标准，他们很容易混淆。

函数覆盖度：这应该是最为粗糙的测试标准了，非常宽泛，意思就是说看有百分之多少个函数被调用过，例如——


public class Demo{
    public static void main(String[] args){
        f1();
    }
    public static void f1(){
        r]]></description><category></category></item><item><title><![CDATA[哈工大2022年大作业——程序人生]]></title><link>https://blog.youkuaiyun.com/whzzj_/article/details/124876095</link><guid>https://blog.youkuaiyun.com/whzzj_/article/details/124876095</guid><author>whzzj_</author><pubDate>Fri, 20 May 2022 08:28:50 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[contains方法，及重写equals&hashCode]]></title><link>https://blog.youkuaiyun.com/whzzj_/article/details/124789103</link><guid>https://blog.youkuaiyun.com/whzzj_/article/details/124789103</guid><author>whzzj_</author><pubDate>Sun, 15 May 2022 22:24:59 +0800</pubDate><description><![CDATA[一开始我以为，contains方法的比较是基于==的，也就是说，假设我有一个Set&lt;String&gt;，里面有一个"zzj"的String对象，如果我要判断"zzj"在不在这里面，实际上是做不到的，只能判断这个对象在不在这里面，但是后来无意中看到了他的规约，我发现他的等于是调用的equals方法，所以如果有如下代码——



实际上的输出是——



这个看似不经意的细节其实带来了很大的便捷，因为如果我们要设计一个ADT，且给出了自己设定的equals方法，那么对于此类contains方法的调用将会]]></description><category></category></item><item><title><![CDATA[软件构造学习记录，Git的使用方法]]></title><link>https://blog.youkuaiyun.com/whzzj_/article/details/124530945</link><guid>https://blog.youkuaiyun.com/whzzj_/article/details/124530945</guid><author>whzzj_</author><pubDate>Sun, 01 May 2022 19:18:22 +0800</pubDate><description><![CDATA[这里来总结一下上传项目时候的一般方法吧。

1.首先是初始化项目

推荐在桌面上新建一个文件夹，我起名为ForCommit。

然后进入这个文件夹，右键选择Git Bash here。

此步如果报错，说找不到应用程序，说明注册表里有问题，可以百度解决，很方便。

然后输入git init，就可以看到Initialize。。。

2.克隆项目

然后在github上进入你想要拷贝的项目，右键绿色的code，copy那个网址。

然后回到bash界面，输入git clone &lt;URL&gt;， 后面那个]]></description><category></category></item><item><title><![CDATA[软件构造V-model]]></title><link>https://blog.youkuaiyun.com/whzzj_/article/details/124425279</link><guid>https://blog.youkuaiyun.com/whzzj_/article/details/124425279</guid><author>whzzj_</author><pubDate>Tue, 26 Apr 2022 12:56:12 +0800</pubDate><description><![CDATA[传统的瀑布模型讲究的是一个线性的推进过程，从软件计划，需求分析，再进行软件设计，程序编码，及软件测试，最后发布运行维护，整个过程是十分理想的，如果实际开发真的能够得以如此实现，那么这其实是非常容易管理计划的一种模型，但实际过程中并没有那么的理想，需求在不断增加和变化，测试也只是一个写在纸面的过程，测试的顺序和内容根据团队会有很明显的差异，所以实际上瀑布模型是效率很低，实际开发难度很大的一种模型。

但是V-model给出了对于优化测试过程的思路——



可以看到，V-model给测试环节划分出了非常清..]]></description><category></category></item><item><title><![CDATA[java学习记录（一）泛型]]></title><link>https://blog.youkuaiyun.com/whzzj_/article/details/124328684</link><guid>https://blog.youkuaiyun.com/whzzj_/article/details/124328684</guid><author>whzzj_</author><pubDate>Thu, 21 Apr 2022 19:01:06 +0800</pubDate><description><![CDATA[学的比较慢，今天看到了泛型，然后有一点疑问

之前的时候，在枚举类型那里，看到过有这样一段代码——



先不论他为什么有这么多的警告，但是这段代码是确实运行出来了——



这个时候我还没学习泛型，我就一直以为Vector是可以容纳任意类型的，但是当我学习到了泛型以后，再看Vector的源代码，我看到——



这说明Vector的声明看起来是要一个类型参数的，但是我们明明没有传入类型参数就通过了编译，通过查阅资料，我发现如果泛型不传入类型参数，会默认传入Object，即一切类的根类，而我的Doubl..]]></description><category></category></item></channel></rss>