存档

2010年4月 的存档

类与类关系的UML图与代码表现

2010年4月20日 没有评论

转过来的,乱的像三国,还是看原文吧

http://www.javaeye.com/topic/37302

类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。
类与类之间存在以下关系:
(1)泛化(Generalization)
(2)关联(Association)
(3)依赖(Dependency)
(4)聚合(Aggregation)

UML图与应用代码例子:
1.泛化(Generalization)
[泛化]
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。
[具体表现]
父类 父类实例=new 子类()
[UML图](图1.1)



图1.1 Animal类与Tiger类,Dog类的泛化关系

[代码表现]

  1. class Animal{}   
  2. class Tiger extends Animal{}   
  3. public class Test   
  4. {   
  5.     public void test()   
  6.     {   
  7.         Animal a=new Tiger();   
  8.     }   
  9. }  


2.依赖(Dependency)
[依赖]
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
[具体表现]
依赖关系表现在局部变量方法的参数,以及对静态方法的调用
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作
[UML表现](图1.2)
(4)聚合(Aggregation)
[聚合]
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体部分之间的关系。
[具体表现]
与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。
[关联与聚合的区别]
(1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)拆了下来。
[UML图](图1.4)


图1.3 电脑和组件的聚合关系

[代码表现]



图1.2 Person类与Screwdriver类的依赖关系

[代码表现]

  1. public class Person{   
  2.     /** 拧螺丝 */  
  3.     public void screw(Screwdriver screwdriver){   
  4.         screwdriver.screw();   
  5.     }   
  6. }  


3.关联(Association)
[关联]
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
[具体表现]
关联关系是使用实例变量来实现
[现实例子]
比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司
[UML图] (图1.3)


图1.3 公司和员工的关联关系


[代码表现]

  1. public 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. }  

  1. public 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. }  

[参考资料]
1.《Java与模式》(阎宏 编著) 第2章 统一建模语言UML简介

分类: 其他 标签:

纠结的UML类图元素关系

2010年4月20日 没有评论

主要是聚合和合成比较让人觉得纠结,不知道总结的对不对,先记下来再说

依赖 dependency        方法参数对象类型引用 function(className var)
关联 association          属性引用对象类型
聚合 aggregation           被引用对象所引用的对象不会因为引用对象的销毁而销毁
合成 composition         被引用对象所引用的对象因为引用对象的销毁百销毁
泛化 generalization      继承extends
实现 realization            实现implements

分类: 其他 标签:

感悟UML中的禅理

2010年4月20日 没有评论

以前听说德国的最高学位只有哲学,不知道是不是德国,是不是这样,呵呵,看了一篇文章瞎了几句,略表悟意,有感.

UML来做一些设计时,开发人员会觉得自己好像不会写程序了。的确用UML降低了开发效率,好处却并不显见。于是我们看到了在教科书中大量地采用UML,看到了用UML解释别人的系统设计。

笔者是从C++开始学习面向对象程序设计的,并被IO流和Borland Turbo Vision这样的OO设计所折服,惊叹于OO编程的优雅,于是致力于学习OO编程。

当我自以为在OO编程上小有心得时,在网上看到了关于UML的介绍。开始了解UML时,我的心情是复杂的。原来软件是这样设计出来的?如果真像Booch所说,那么我们一直在造狗窝,一直不知道怎样造大厦?于是有了学习UML的冲动。但是随着学习的深入,产生了新的问题。UML很难掌握,尽管有“精通UML”之类的书。仅以用例图来说,曾在BBS论坛上遇到无数的人不知道怎样合适地画用例图。UML不但难掌握,而且很“肤浅”——它只是一种表示法而已。它只是一种语言,而用这种语言说出的话到底水平如何,显然取决于说话人的其他素养。

UML和OO思想哪个重要?没有OOA/OOD的深厚功底,学UML有何用?当我试着用UML来做一些设计时,觉得自己好像不会写程序了。用UML降低了我的开发效率,好处却并不显见。另外还有一些其他的问题也在困扰着我,例如:如何以用例驱动的方式设计一个类似Swing这样的类库?为什么书上的例子举来举去都是ATM机?为什么这么多优秀的开放源代码软件,几乎没有声称是以这种方式来设计开发的?我置疑是否这种方式真的有价值。

语言甚至会束缚思想。维特根斯坦应该是持这种观点的。奥威尔在他的名著《1984》中有一段描述,说明“新话”对思想的控制。UML1.x的版本对实际可能的设计做了许多简化,使我对UML有一种“新话”的感觉。我头脑中,曾一度把UML与“符号暴力”相联系。

据说Kent Beck从来不画UML图,最多画点简单的CRC卡片,经常是直奔编码而去。但很多人都不怀疑他是位优秀的OO设计师。于是我大部分时间思考的都是测试驱动,依赖注入,代码即设计这类问题,与UML渐行渐远。

机缘凑巧,我读过一点佛经和故事。给我留下很深印象的是,禅宗六祖惠能是不识字的。禅宗的十六字心传是“教外别传,不立文字。直指人心,见性成佛”。而正是这位不识字的六祖,要求“不立文字”的大德,他的讲稿被整理成了唯一一部由中国人写的被称为经的佛教典籍——六祖坛经。非常矛盾的一件事。坛经记载,惠能还未出家时,听到有人读《金刚经》,“惠能一闻,心明便悟”。这就是“籍教悟宗”。六祖之后,禅宗进入“不立文字”的无字禅时代。视语言为障道之本,视读经为磨砖成镜。然而没有文字终究不便,到了北宋,由于禅宗灯录的大量刊行,参究公案之风日盛,文字禅由之而起。“不立文字”之禅变成了“不离文字”之禅。

忽然间我仿佛明白了UML存在的意义:说不可说之说。“释迦四十九年说,未曾说着一字。”佛曰:不可说。明明不可说,偏又说了那么多。

以前曾经认为,设计OO系统掌握住一个要点就行,即“道法自然”。然后就是“运用之妙,存乎一心”。在这个理论结构里,似乎是没有UML存在的位置。毕竟“道可道,非常道”。但是佛经给了我启发,这些经书在翻来覆去花了很多力气讲一些本来讲不明白的东西。“不立文字”,是“说不得”;“不离文字”,是“说不得的东西如何去说”。对于这种难以言说的东西,人们常常采用寓言或发生在别人身上的故事来说明,即把抽象的道理形象化地释出。

UML所做的正是相同的事,于是我们看到了在教科书中大量地采用UML,看到了用UML解释别人的系统设计。也许我们能通过学习教科书中的UML和别人设计的UML实现“籍教悟宗”。

UML也是一种想像力的培训,让您在一切都还没有的时候,生动地想象出系统将来的样子。一个伟大的设计师,必是具有超凡想像力的人。UML是渡河的筏,对于已在河对岸的人,自然不需要;对于未渡而想渡的人,却是非常需要的东西。此时我的感觉就是:“向来枉费推移力,今日自在水中行。”

原文: http://developer.51cto.com/art/200702/40465.htm

分类: 其他 标签:

MySQL ERROR "** syntax to use near 'USING BTREE,KEY `Email` (`Email`) USING BTREE"

2010年4月13日 没有评论

报错:

[Err] 1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘USING BTREE,
KEY `Email` (`Email`) USING BTREE

       分析问题在使用了InnoDB 的 BTREE上面,查看了一下数据库 InnoDB是默认数据库引擎类型,应该问题不是这里面

mysql备份还原时,查看错误日志,内容如下:
Error Code: 1064 C You have an error in your SQL syntax; check themanual that corresponds to your MySQL server version for the rightsyntax to use near ‘USING BTREE

分析原因可能使用了高版本的SQL语句在低版本中导入,

最后在网上查找整理出以下几个解决方法:
1,升级MYSQL数据库到相应的对应版本(这个可能很麻烦)

2.导出文件中的源码:
PRIMARY KEY (`row_id`) USING BTREE,
UNIQUE KEY `columnAindex` (`columnA`),
KEY `columnBindex` (`columnB`) USING HASH,
KEY `columnCindex` (`columnC`) USING BTREE,

全部替换为:
PRIMARY KEY USING BTREE  (`row_id`),
UNIQUE KEY `columnAindex` (`columnA`),
KEY `columnBindex` USING HASH (`columnB`),
KEY `columnCindex` USING BTREE (`columnC`),

将导出文件中的所有索引类型(USING BTREE 等)挪到索引列(columnB等)的前面,问题解决

3,程序代码ENGINE=MyISAM DEFAULT CHARSET=latin1或者程序代码ENGINE=InnoDBDEFAULTCHARSET=latin1
全部替换为程序代码
ENGINE=MyISAM
可以将SQL文件分批COPY建立SQL文件,然后 分批导入.
这样方便查找具体是那个地方出错,如:
ERROR 1074 at line 1802: Too big column length for column ‘Cjieshao’(max = 255
. Use BLOB instead
说明文件字符长度超过当前版本. MYSQL4.0只支持255个,当高版本如MYSQL5.0导入时候就要注意修改长度为255再导入就会正常
ERROR 1064 at line 3034: You have an error in your SQL syntax.   Checkthe manua
that corresponds to your MySQL server version for the right syntax touse near
‘collate utf8_swedish_ci default NULL,
PRIMARY KEY   (`sshyid`)
解决方法: 去掉 ‘collate utf8_swedish_ci 就正常
.sql -u root -p密码

分类: MySQL 标签:

基于Centos部署Redmine项目管理系统

2010年4月4日 没有评论

Redmine安装指南

1.系统需求
Ruby 1.8.7 on Rails 2.3.5
数据库 (参考下面的兼容数据库列表)

可选的:
SVN 客户端(版本不低于1.3),用于版本库浏览功能(必须配置到您的 PATH 设置中)
RMagick (用于将甘特图输出至PNG图形文件)

支持的数据库:
MySQL 4 或更高版本(推荐)
文本已经运用yum提前部署好,方法如下:
yum install -y mysql mysql-server mysql-devel
PostgreSQL 8 (8.3版本未经充分测试)
SQLite 3

2.Ruby on Rails部署
mkdir /opt/source
cd /opt/source
wget http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz
tar zxvf ruby-1.8.7.tar.gz
cd ruby-1.8.7
./configure
make && make install
cd ext/zlib
ruby extconf.rb –with-zlib-include=/usr/include –with-zlib-lib=/usr/lib
cd ../../
make && make install

cd /opt/source
wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.6.tgz
tar zxvf rubygems-1.3.6.tgz
cd rubygems-1.3.6
ruby setup.rb

gem install rails -v=2.3.5
gem install mysql

3.检查Ruby on Rails状态
ruby -v

ruby 1.8.7 (2008-05-31 patchlevel 0) [i686-linux]
gem list

*** LOCAL GEMS ***

actionmailer (2.3.5)
actionpack (2.3.5)
activerecord (2.3.5)
activeresource (2.3.5)
activesupport (2.3.5)
mysql (2.8.1)
rack (1.0.1)
rails (2.3.5)
rake (0.8.7)

4.数据库设置(以Mysql为例)
启动Mysql数据库
/etc/init.d/mysqld start

创建数据库与设置权限
mysql -u root -p
Enter password:

mysql> create database redmine character set utf8;
mysql> grant all on redmine.* to ‘redmine’@’localhost’ identified by ‘redmine’;
mysql> flush privileges;

5.配制 redmine 环境和数据库
cd /opt/source
wget http://rubyforge.org/frs/download.php/69449/redmine-0.9.3.tar.gz
tar zxvf redmine-0.9.3.tar.gz
mv redmine-0.9.3 /opt/redmine
cd /opt/redmine/config
cp database.yml.example database.yml
vi database.yml

production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: redmine
encoding: utf8

在程序的根目录下运行以下命令来创建数据库结构:
cd /opt/redmine/
RAILS_ENV=production rake config/initializers/session_store.rb
rake db:migrate RAILS_ENV="production"

运行以下命令,向数据库中导入默认的配置数据:
rake redmine:load_default_data RAILS_ENV="production"
这一步操作是可选的,但 强烈推荐 您执行它,您也可以从头开始一步步填写自己的配置参数。此命令将导入默认角色、跟踪标签、状态、工作流程和枚举值。

6.运行WEBrick服务器来测试安装

ruby script/server -e production

当WEBrick启动后,使用浏览器访问 http://localhost:3000/ 您将看到系统的欢迎界面。
使用默认的用户名和密码登录:
* 用户名: admin
* 密码: admin
Redmine补充附录

1.Redmine备份方式:
Redmine的备份应该包括: * 数据(保存在redmine数据库中) * 附件(保存在Redmine安装目录的 files 目录中)

以下是一个可以进行每天备份的简单脚本程序(假设您使用mysql数据库):
cat >> /var/spool/cron/root << EOF
# Redmine Database
0 1 * * * /usr/bin/mysqldump -u redmine -p redmine redmine | gzip > /opt/backup/db/redmine_`date +%y_%m_%d`.gz
# Redmine Attachments
30 1 * * * rsync -a /opt/redmine/files /opt/backup/files
EOF

2.SMTP服务器配置

在 config/environment.rb 文件中,您可以设置您的SMTP服务器的参数:

* config.action_mailer.smtp_settings: SMTP服务器配置
* config.action_mailer.perform_deliveries: 设置为 false 以禁用邮件发送功能

修改此文件后需要重新启动服务器。

原文: http://www.20071231.com/ruby-on-rails-based-project-management-system-to-deploy-redmine.html/comment-page-1/:

补充:
RedMine集成环境: http://bitnami.org/stack/redmine

分类: 其他 标签:

常用项目制图软件比较(visio2007 SmartDraw ConceptDraw EDraw Max visio2010)

2010年4月2日 没有评论

        最近新项目需要做技术方案,因此免不了要画许多流程图,visio有其优点,比如说visio中画完的图可以全部框住粘到word文档里,然后在word文档里使用。在word里双击直接可以进入visio进行图形编辑。但缺点也明显,软件太大,操作繁琐(尤其箭头的操作),主题和色彩装饰效果简单,缺乏高亮效果等等。

visio2007效果图及评价

visio2007总评:

效果华丽指数

操作易用指数

破解版获取指数

与word兼容性:

   现在介绍另外三款比较时尚简单的软件。

   SmartDraw拥有visio所有功能,可以与word文档进行互动,并且由于其最早为苹果设计的,所以图形很是华丽。其最出彩的是对箭头和线段的操作,使用ctrl与方向键,就可以完成作图,操作也相当简单。但其缺点是对中文支持的有限,可能在一些处理上会有乱码,而且破解版的比较难找。

   简单效果图如下:

官方有华丽的演示视频:

http://www.smartdraw.com/videos/demo/index.htm

SmartDraw总评:

效果华丽指数

操作易用指数

破解版获取指数

与word兼容性:

下载地址:http://www.smartdraw.com/downloads/downloadb.aspx?WT.svl=download

   第二款软件是ConceptDraw,这个软件效果依旧华丽,但操作比较复杂,而且与微软的东西风格区别很大,但相比较SmartDraw软件比较小。

ConceptDraw总评:

效果华丽指数

操作易用指数

破解版获得指数

与word兼容性:

下载地址(需注册,呵呵):http://www.conceptdraw.com/scripts/resources/dwndtrial_cdo_load.php?prod=office&platf=win&lang=en

     

   最后一个是EDraw,这个软件个人比较推荐,使用也比较简单,操作风格与office也一样。但效果比visio好,而且里面的图标也比visio好看。

效果图:

EDraw总评:

效果华丽指数

操作易用指数

破解版获得指数

与word兼容性:

演示地址:http://xbeta.info/files/edraw2.htm

免费版下载地址:http://www.edrawsoft.com/download/EDrawMindMap.exe

专业试用版下载地址:http://down.tech.sina.com.cn/download/d_load.php?d_id=16379&down_id=1

  其实最期待的是visio2010了,现在已经有beta版本了,终于微软发现了其UI的丑陋,并做出调整。

官方截图:

visio2010总体评价

效果华丽指数

操作易用指数

破解版获得指数

与word兼容性:

原文地址:http://hi.baidu.com/johntech/blog/item/071671ef3d0c64dfb21cb154.html

分类: 其他 标签: