迟来的博客

导航

公告

统计

2010年8月20日 #

安装Windows2008后,IIS中网站遇到的问题及解决方法

摘要: 安装Windows2008后,IIS7中网站遇到的问题及解决方法阅读全文

posted @ 2010-08-20 15:13 语风 阅读(146) 评论(0) 编辑

2009年6月5日 #

让Powerdesigner15支持C#3.5的自动属性(二)

摘要: 接下来我们按以下步骤修改powerdesigner的模板....阅读全文

posted @ 2009-06-05 11:55 语风 阅读(758) 评论(3) 编辑

2009年6月1日 #

让Powerdesigner15支持C#3.5的自动属性(一)

摘要: 让Powerdesigner15支持生成C#3.5的“自动属性(Automatic Properties)”的代码......阅读全文

posted @ 2009-06-01 16:52 语风 阅读(475) 评论(2) 编辑

2008年3月3日 #

我与一个女程序员的聊天记录一

摘要: 去年12月的一天夜里,我在网上百无聊赖地瞎逛了一通,正准备下线睡觉,突然,发现windows右下角一个陌生的QQ头像一闪一闪的,随手就点开了,从此,我就和这个叫做*雪的女孩子开始了几乎每天不断的聊天。阅读全文

posted @ 2008-03-03 22:14 语风 阅读(362) 评论(1) 编辑

2007年5月6日 #

你是我的玫瑰-类关系阐微

        世界是普遍联系的,因此程序世界中的类,也不可能是孤立的。UML为我们定义了它们之间的关系,就是:依赖、关联、聚合、组合还有泛化。

       泛化关系比较好理解,就是表示类之间的继承关系。容易混淆的是依赖、关联、聚合和组合的关系。这里做一些甄别:

       1、 依赖和关联的颠倒颠

       在网上查找了一下依赖和关联的区别,有说“关联本身即是一种依赖”,亦有说“依赖是一种弱关联”,其实说来说去是一档子事。依赖和关联都是说一个类用到了另一个类。其区别在于一个是使用,一个是拥有。

      依赖:具有某种偶然性。比如说我要过河,没有桥怎么办,我就去借来一条小船渡过去。我与小船的关系仅仅是使用(借用)的关系。表现在代码上,为依赖的类的某个方法以被依赖的类作为其参数。或者是class A 的某个方法创造了 class B 的实例抑或对class B静态方法的调用。如果A依赖于B,那意味着B的变化可能要求A也发生变化;

       这是uml图表示的依赖关系:
       
代码表现:

1public class Person{    
2    /** 划船 */   
3    public void oarage (Boat boat){    
4        boat.oarage();    
5 }
    
6}
 
7

 

关联:有名的客户和订单的关系以及公司和员工的关系,都是关联关系。还有就是我和我的单车的例子,他们都是一种“拥有”的关系。表现在代码上,就是一个类包含另一个类的实例,通常表现为被关联类以类属性的形式出现在关联类的类定义中,也可以表现为关联类引用了一个类型为被关联类的全局变量。关联可以使单向的,也可以使双向的。

从网上找到的公司和员工的UML图和代码 :


公司和员工的关联关系
 1public class Company{    
 2    private Employee employee;    
 3    public Employee getEmployee(){    
 4        return employee;    
 5    }
    
 6    public void setEmployee(Employee employee){    
 7        this.employee=employee;    
 8    }
    
 9    //公司运作    
10    public void run(){    
11        employee.startWorking();    
12    }
    
13}
  
14

 

可见依赖于与关联亦有动静之别,关联的类静态地引用了被关联类的实例变量,而依赖的偶然性也正说明了它的动态性。

      2、 聚合与组合同出而异体

      聚合与组合其实都是关联的特例,都是整体和部分的关系。他们的区别在于聚合的两个对象之间是可分离的,他们具有各自的生命周期。而组合往往表现为一种唇齿相依的关系。

聚合:一种容纳或曰包含的关系,如同机场和飞机,汽车和轮胎的关系。其实仔细想想,前面的公司和员工的关系也有聚合的味道在里面。

组合:也可称之为强聚合,整体和部分是不可分的,整体的生命周期结束时也就是部分的生命周期到头时。很有名的就是桌子和桌子腿的关系。

      聚合的UML

组合的UML图:




 

然而,聚合与组合的代码表现形式是一样的,都可以表现为以下的形式,它们仅仅具有语义上的区别。

网上找到的电脑和CPU的关系的代码表现:

 1public class Computer{    
 2    private CPU cpu;    
 3    public CPU getCPU(){    
 4        return cpu;    
 5    }
    
 6    public void setCPU(CPU cpu){    
 7        this.cpu=cpu;    
 8    }
    
 9    //开启电脑    
10    public void start(){    
11        //cpu运作    
12        cpu.run();    
13    }
    
14}
  
15

 

   结语:

      一般情况下,当某个类被当作参数传递并且被当作结果返回的时候,或者被当作某个方法内的临时变量使用的时候,可以运用依赖关系,使用关联来表示一个拥有关系,而不是整体-部分关系。使用聚合来表示一个动态的整体-部分关系,而是用组合来表示一个静态的整体-部分关系。但是需要指出的是,所谓“关系”只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了,例如之前我和小船的关系,可能在某个问题域中,我是船夫,我的工作就是驾着小船在河上摆渡,那我和小船的关系就上升为关联关系了。试想一下,武侠小说中的那些剑仙们,修炼到人剑合一的境地,剑在人在,剑亡人亡,那它们之间的关系就似乎与组合关系类似了。又如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。这说明关系是在特定的问题域中的“关系”,会随着问题域的迁移而改变的。最后顺便问一句:老公和老婆的关系是依赖还是关联呢?一笑……

posted @ 2007-05-06 00:11 语风 阅读(493) 评论(4) 编辑

2007年2月1日 #

asp.net后台长时间操作时,向前台输出“请等待"信息的方法

摘要: 在asp.net中,有时候页面加载时,后台需要进行一些操作,比如查询数据库等。而且可能这些操作需要花费较长时间,致使前台长时间无响应,甚至有可能造成页面超时。可以采用以下方法解决阅读全文

posted @ 2007-02-01 22:11 语风 阅读(964) 评论(0) 编辑

2006年9月3日 #

DataSet的加密解密(续)

摘要: 在上次DataSet的加密解密一文发布后,有网友提出采用XML序列化的方式速度较慢,建议用二进制序列化。我觉得很有道理,下面是在VS2005种采用二进制序列化方式结合对称加密算法对DataSet进行加密解密的代码:1usingSystem;2usingSystem.Collections;3usingSystem.Security.Cryptography;4usingSystem.IO;5usi...阅读全文

posted @ 2006-09-03 23:25 语风 阅读(392) 评论(6) 编辑

2006年8月31日 #

在InstallShield中加密字符串,在C#中解密

摘要: 一般情况下,Asp.Net程序中,数据库连接字符串大多存储在配置文件中。如果程序不是手工发布,而是通过安装程序部署,那么通常在安装过程中需要用户输入数据库管理员帐号和密码,以便安装数据库。同时将管理员帐号和密码以及数据库服务器地址(或者数据库连接字符串)写入配置文件中。但是如果不加密,尤其是数据库管理员密码,若以明码形式存储,极容易被窃取。
这就需要对字符串进行加密处理。但是在安装制作软件(我用的是InstallShield 12)中没有提供专用的加密方法,而且在InstallShield中加密过的字符串在Asp.Net(我用的是C#编写Asp.Net)中要能够被解密,则必须用两者通用的加密解密方法。因此我想到,每个字符的ASCII码都是通用的,只要在InstallShield中对字符的ASCII码进行处理,比如加一或移位,得到一个新的字符串,再到C# 中进行逆向操作,就可以还原为原来的字符串。
阅读全文

posted @ 2006-08-31 22:55 语风 阅读(631) 评论(2) 编辑

2006年6月11日 #

DataSet的加密解密

摘要: 最近在一个工程中需要对DataSet进行加密,然后以文件形式传输后在另一端解密还原。于是查询了一些资料,发现多是对字符串和文件加密的方法。于是只好自力更生,参考.net的对称加密技术和网上的一些资料,研究出了DataSet的加密方法。 代码比较简单,附下:1usingSystem;2usingSystem.Collections;3usingSystem.Security.Cryptography...阅读全文

posted @ 2006-06-11 23:20 语风 阅读(2350) 评论(2) 编辑

仅列出标题