<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Hey_BlingBling的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Hey_BlingBling</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Hey_BlingBling]]></copyright><item><title><![CDATA[并发与线程安全（哈工大软件构造）]]></title><link>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/107270747</link><guid>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/107270747</guid><author>Hey_BlingBling</author><pubDate>Fri, 10 Jul 2020 23:04:51 +0800</pubDate><description><![CDATA[  在在本学期第七章，也是最后一章的学习中，我们学习了关于并发编程以及并发编程下维护线程安全的内容。下面在此介绍一些学习过程中较难理解的概念。
并发
  首先我们需要了解什么是并发。
  并发意味着一个时间段中有多个程序都处于已启动运行到运行完毕之间，但在某个确定的时刻，有且仅有一个程序在处理器上运行。并发是效率不断提高的必然性，随着技术的发展，摩尔定律逐渐失效，只有通过并发才能更高一步地提高计算机的效率。
  并发中涉及到线程的概念，初学时有许多人会将线程和进程混淆，在此我们做出区分：

进程（Proce]]></description><category></category></item><item><title><![CDATA[面向正确性和健壮性的编程（哈工大软件构造）]]></title><link>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/107246519</link><guid>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/107246519</guid><author>Hey_BlingBling</author><pubDate>Fri, 10 Jul 2020 12:14:26 +0800</pubDate><description><![CDATA[  在第六章的学习中，我们重点讨论的软件的正确性和健壮性的问题，其中涉及到了错误与异常处理、断言与防御式编程、软件的调试、如何进行软件测试以及测试优先的编程原则。下面我就几个在学习过程中较为疑惑的知识点进行总结和介绍。
Java中的 Checked Exception 和 Unchecked Exception
  首先我们介绍异常 （Exception）的概念，异常即指程序执行过程中的非正常事件，导致程序无法按预想的流程执行。在程序遇到异常时，一般有两种处理方式：1. 将错误信息传递给上层调用者，并报告“]]></description><category></category></item><item><title><![CDATA[抽象数据类型及其表示不变量RI、抽象函数AF简介（哈工大软件构造）]]></title><link>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/107215806</link><guid>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/107215806</guid><author>Hey_BlingBling</author><pubDate>Wed, 08 Jul 2020 23:17:23 +0800</pubDate><description><![CDATA[  在软件构造课程学习的第三章中，我们学习了抽象数据类型（Abstract Date Type），其中有几个初学时较难理解的概念，在此做一总结。
ADT中的方法分类
  在一个ADT里设计的所有方法，大都可以分为以下四类：

构造器（Creators）：用于创建一个新的对象，主要表现为构造函数。典型的有Integer.valueOf()。
生产器（Producers）：通过接受同类型的对象以创建新的对象。典型的有String.contact()。
观察器（Observers）：获取ADT内部的某个信息，而不]]></description><category></category></item><item><title><![CDATA[面向对象设计的SOLID原则（哈工大软件构造）]]></title><link>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/106979478</link><guid>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/106979478</guid><author>Hey_BlingBling</author><pubDate>Sat, 27 Jun 2020 12:25:41 +0800</pubDate><description><![CDATA[  为了使软件有着较高的可维护性以及其他各方面的优质性能，在面向对象的编程过程中，我们需要有着良好的设计方案，在一些基本的编程原则下设计代码。在第五章的学习中，讲到了面向对象编程过程中的五大原则，简称为 SOLID 下面我们依次介绍。
单一责任原则（Single Responsibility Principle, SRP）
  SRP指明了，每一个类的职责要单一，即不能存在多个原因引起这个类的变化。通过职责与类的分离，降低系统的耦合度，提升系统内聚度，在维护过程中，尽可能小范围的修改代码。SRP的设计体现如]]></description><category></category></item><item><title><![CDATA[面向可维护性的设计模式（哈工大软件构造）]]></title><link>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/106979132</link><guid>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/106979132</guid><author>Hey_BlingBling</author><pubDate>Sat, 27 Jun 2020 10:05:09 +0800</pubDate><description><![CDATA[  在软件的发展周期中，随着时间的变化，软件的复杂度会得到很大的增长，我们需要对代码的维护付出很大的精力，以便其能适应各种变化，具有良好的可维护性，在之后的维护过程中以较小的成本对软件进行维护。
  在第五章，我们学习了如何使软件具有较高的可维护性，并介绍了几种面向可维护性的设计模式，在此进行总结和分享。
  首先介绍一种创造型模式（Creational Patterns）:
工厂方法模式（Factory Method Pattern）
  解决的问题：解决了接口选择的问题。
  解决方法：通过工厂父类定义]]></description><category></category></item><item><title><![CDATA[面向复用的设计模式（哈工大软件构造）]]></title><link>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/106753503</link><guid>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/106753503</guid><author>Hey_BlingBling</author><pubDate>Sun, 21 Jun 2020 09:35:20 +0800</pubDate><description><![CDATA[  在学习第四章的学习中，主要讲解了面向复用性的编程，其中介绍了许多面向复用编程的设计模式，需要我们多加注意，以及在实践中高效使用。

]]></description><category></category></item><item><title><![CDATA[Java泛型中的协变和逆变（哈工大软件构造）]]></title><link>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/106744639</link><guid>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/106744639</guid><author>Hey_BlingBling</author><pubDate>Sun, 14 Jun 2020 15:48:05 +0800</pubDate><description><![CDATA[  在软件构造课程的进行中，讲到复用性和LSP原则的时候，提到了一些协变和逆变的概念，以及在特定的数据结构，如 数组 、Collections 、 泛型 中的协变和逆变情况。但在课堂上并没有完全理解，通过在课后查询资料，有一点收获，在此分享。
协变和逆变？
  简而言之，协变和逆变是用来描述类型转换前后的继承关系的两个概念。以A 、B表示类型，f(⋅)表示类型转换（f（A）表示A转换后的类型），≤表示继承关系（比如，A≤B表示A是由B派生出来的子类），其定义可概括如下：
f(⋅)是协变（covariant）]]></description><category></category></item><item><title><![CDATA[Git入门安装以及简单操作（哈工大软件构造）]]></title><link>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/104884161</link><guid>https://blog.youkuaiyun.com/Hey_BlingBling/article/details/104884161</guid><author>Hey_BlingBling</author><pubDate>Mon, 16 Mar 2020 15:57:27 +0800</pubDate><description><![CDATA[随着大二下半学期学校开设的软件构造课程的进行，课程要求我们开始学着使用Git和GitHub管理自己的代码并进行实验作业的提交，但对于之前没有使用了解过Git和GitHub的同学来说，刚开始会有一点难度。其实在这次实验中使用Git和GitHub的相关内容并没有特别难，只需要了解一些较为基础的内容就可以先完成这次实验，至于更多高效的操作可以在以后的使用过程中慢慢解决，学习本身就是一个遇见问题，再解决问...]]></description><category></category></item></channel></rss>