Hello, world

所以其实这里应该放几句序言或者主题句吧大概 这是一篇测试文章,没有什么有营养的内容。

测试

长文本:面向葫芦娃编程(别看了别看了类图全是瞎画的(马上重画(咕咕咕(x

呃,不得不说,本次作业的要求有一点点令人费解,所以我们按照我们的想法完成了作业。 在我们看来,本次作业要求分别用Orchestration和Choreography的方式对葫芦娃进行排序。

参考这个网址中给出的解释,我们认为:前者指利用一个中心化的服务调度其他的服务,一起完成任务,即由葫芦娃们的爷爷来指挥葫芦娃们行动;后者指去中心化的各个服务互相协作完成任务,即葫芦娃相互协作,完成排队过程

Orchestration

Hulu.java

为了给葫芦娃排序,首先我们需要实现Hulu类,它代表一个葫芦娃。如果考虑有且仅有七个存在全序关系的Hulu对象,分别是老大到老七,排序成为一件很无聊的事情。所以我们稍稍改动了需求,认为七种葫芦娃的每一种都可以有若干个对象(不过为了偷懒我们没有写一个虚的葫芦娃基类然后派生出七个类来,仅仅用一个index的枚举变量作为区分),同种葫芦娃的序关系由这些对象的hashcode()方法的返回值确定。这样我们就可以不定数量的葫芦娃排序了。

HuluOrchestrationSorter.java

为了实现排序,我们让Hulu实现了接口Comparable<Hulu>,这样我们可以用compareTo()方法为两个Hulu的对象比较大小。基于此我们实现了HuluComparator,这样就可以调用存放Hulu的容器的sort函数,或者任何自己写好的排序算法完成排序,其中比较的工作可以直接调用HuluComparator.compare()来完成,排序算法不需要知道相关的任何细节。最终,我们用一个HuluOrchestrationSorter类表征中心化的排序服务,用一个ArrayList<Hulu>存储葫芦们,并且给出add()sort()print()方法供调用。

类图

OrchestrationClassDiagram

Choreography

Position.java

如果要实现去中心化的排序,那么首先我们需要有一个逻辑上的队伍的概念。我们为此实现了Position(实质上就是一个int)和对应的genNewPosition()方法,模拟一个新的Hulu来到操场上,为它分配位置的过程。

HuluWithPosition.java

去中心化的排序的困难在于,Hulu需要有能力得知自己的位置,得到其他位置上的Hulu的引用,还需要能修改自己和其他Hulu的位置。我们认为把这些全部写死在Hulu或者它的派生类里是一件很糟糕的事情,所以我们仅仅派生出了一个HuluWithPosition类,为Hulu加了一个新的Position成员。假定前述的功能都能实现,那么我们可以增加一个trySwap()方法,它会得到下一个位置的Hulu的引用,并且和自己进行比较,如果自己的序严格大于下一个位置的,那么就把这两个Hulu交换。队伍中的Hulu反复调用trySwap(),直到这种交换无法进行。这个算法的正确性是显然的。

IPositionToHuluMapper.java

剩下的几个需求,我们决定交给IPositionToHuluMapper接口来实现。它只有两个虚方法,一个是getHulu(),用来得到某个Position上对应的Hulu;一个是syncChange(),用来把逻辑上位置发生改变的Hulu的状态在物理上(存储Hulu的容器内)进行更新。

HuluChoreographySorter.java

最后,我们用一个TreeMap实现了IPositionToHuluMapper接口,用一个数组作为物理上的容器(并且出于简化问题考虑,我们不打算真的在数组里移动Hulu),这样我们就可以进行去中心化的排序了。

类图

ChoreographyClassDiagram

代码:hello.c

起手式。

#include <stdio.h>
int main() {
    printf("Hello, world\n");
    return 0;
}

想起了当年用Dev C++的日子了嘤。

图片:随拍

  • 柑橘类水果的香气和酸味~ tangerine

  • 某一天的落日西风残照 sunset

文件:吐槽时间

所以其实如果不自己整个服务器的话没法好好地加密文章对吧。

那我就打个压缩包放上来好了嘤(摊手。