linux-c的函数手册CHM版
如果你喜欢这样的文章,请订阅我 RSS feed. 谢谢访问!
可以很方便的查找函数
而且是CHM版的~
顺便说一下 用chmsee比较好用。。
以前找这个 下载了很多 都不怎么好用,有的地方还不怎么好下载
所以就发上来了
用的上的都来下载吧~ ^@^
下载地址:Linux C 函数库中文手册.CHM
The.Definitive.Guide.to.GCC.2nd
一本很好的书!
Apress.The.Definitive.Guide.to.GCC.2nd.Edition.2006
是英文的
不是扫描版的 哈哈
喜欢的都来下载看看吧!
下载地址:
Apress.The.Definitive.Guide.to.GCC.2nd.Edition.2006.pdf
C程序设计语言 第2版新版
C程序设计语言 第2版新版
学好C才是硬道理!虽然都学过,但是有没有学好,有没有学精了,这些都太重要了,不仅仅当作教科书,也可以当作参考资料。
下载地址:
C程序设计语言_第2版新版.pdf
BIT-QQ GTK重写的登录界面 带头像选择的
YY一下新的BIT-QQ登录 只是把上次用wxpython写的界面用GTK重写了加了个头像显示的
发现GTK还真是好用
太强大了…..
这个只是个界面
只是用来学习GTK的 没有功能…
功能太复杂 正在研究中…
GTK的下拉列表还真是功能强大
- GtkWidget*
- create_user_item(gchar *user,gchar *img)
- {
- GtkWidget *item;
- GtkWidget *hbox;
- GtkWidget *image;
- GtkWidget *label;
- hbox=gtk_hbox_new(FALSE,0);
- image=gtk_image_new_from_file(img);
- label=gtk_label_new(user);
- gtk_box_pack_start(GTK_BOX(hbox),image,FALSE,FALSE,2);
- gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,2);
- item=gtk_list_item_new();
- gtk_container_add(GTK_CONTAINER(item),hbox);
- gtk_widget_show_all(item);
- return item;
- }
- int
- main (int argc, char *argv[])
- {
- GtkWidget *window,*vbox,*usrbox,*pwdbox,*butbox,*image,*qqnumcombox,*table,*pwdtext;
- GtkWidget *align;
- GtkWidget *netbutton,*loginbutton;
- GtkWidget *item;
- GdkColor bgc,btnbgc;
- gdk_color_parse( "white", &bgc);
- gdk_color_parse( "#359bfc", &btnbgc);
- #ifdef ENABLE_NLS
- bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
- #endif
- gtk_set_locale ();
- gtk_init (&argc, &argv);
- // window = create_window ();
- window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_widget_modify_bg (window, GTK_STATE_NORMAL, &bgc);//窗口背景颜色
- gtk_window_set_title(window,"BIT-QQ");//设置窗口标题
- gtk_window_set_position(window,GTK_WIN_POS_CENTER);//设置窗口居中
- gtk_window_set_icon_from_file(window,"./img/qq.ico",NULL);//设置窗口的图标
- gtk_widget_set_size_request(window,310,400);//设置窗口的宽和高
- vbox=gtk_vbox_new(FALSE,0);
- usrbox=gtk_hbox_new(FALSE,0);
- pwdbox=gtk_hbox_new(FALSE,0);
- butbox=gtk_hbox_new(FALSE,0);
- gtk_container_add(GTK_CONTAINER(window),vbox);
- image=gtk_image_new_from_file("./img/QQ.png");//登录图片
- gtk_box_pack_start(GTK_BOX(vbox),image,FALSE,FALSE,0);
- //账号输入
- align=gtk_alignment_new(0.5,0.5,0,0);//对齐构件
- image=gtk_image_new_from_file("./img/usr.png");//QQ号前的提示图片
- gtk_box_pack_start(GTK_BOX(usrbox),image,FALSE,FALSE,0);
- qqnumcombox=gtk_combo_new();
- gtk_widget_set_size_request(GTK_WIDGET(qqnumcombox),160,28);//设置构件大小
- item=create_user_item("227651770","./img/usr/zb.bmp");
- gtk_combo_set_item_string(GTK_COMBO(qqnumcombox),GTK_ITEM(item),"227651770");
- gtk_container_add(GTK_CONTAINER(GTK_COMBO(qqnumcombox)->list),item);
- item=create_user_item("88100188","./img/usr/2.bmp");
- gtk_combo_set_item_string(GTK_COMBO(qqnumcombox),GTK_ITEM(item),"88100188");
- gtk_container_add(GTK_CONTAINER(GTK_COMBO(qqnumcombox)->list),item);
- gtk_box_pack_end(GTK_BOX(usrbox),qqnumcombox,FALSE,FALSE,0);
- gtk_container_add(GTK_CONTAINER(align),usrbox);
- gtk_box_pack_start(GTK_BOX(vbox),align,TRUE,FALSE,0);
- //密码输入
- align=gtk_alignment_new(0.5,0.5,0,0); //对齐构件
- image=gtk_image_new_from_file("./img/pwd.png");
- pwdtext=gtk_entry_new();
- gtk_widget_set_size_request(GTK_WIDGET(pwdtext),160,28);//设置构件大小
- gtk_entry_set_visibility(GTK_ENTRY(pwdtext),FALSE);
- gtk_box_pack_start(GTK_BOX(pwdbox),image,FALSE,FALSE,0);
- gtk_box_pack_start(GTK_BOX(pwdbox),pwdtext,FALSE,FALSE,0);
- gtk_container_add(GTK_CONTAINER(align),pwdbox);
- gtk_box_pack_start(GTK_BOX(vbox),align,TRUE,FALSE,0);
- //设置按钮,登录按钮
- align=gtk_alignment_new(0.5,0.5,0,0);
- image=gtk_image_new_from_file("./img/netset.png");
- netbutton=gtk_button_new();
- gtk_container_add(GTK_CONTAINER(netbutton),image);
- gtk_box_pack_start(GTK_BOX(butbox),netbutton,FALSE,FALSE,15);
- loginbutton=gtk_button_new();
- image=gtk_image_new_from_file("./img/login.png");
- gtk_container_add(GTK_CONTAINER(loginbutton),image);
- gtk_box_pack_start(GTK_BOX(butbox),loginbutton,FALSE,FALSE,15);
- gtk_widget_modify_bg (netbutton, GTK_STATE_NORMAL, &btnbgc);//窗口背景颜色
- gtk_widget_modify_bg (loginbutton, GTK_STATE_NORMAL, &btnbgc);//窗口背景颜色
- gtk_container_add(GTK_CONTAINER(align),butbox);
- gtk_box_pack_start(GTK_BOX(vbox),align,TRUE,FALSE,0);
- gtk_widget_show_all(window);
- gtk_main ();
- return 0;
- }
QQ登录密码MD5密钥错误的原因
QQ登录的密码密钥是经过2次MD5得到的
直接2次调用,或者嵌套调用生成MD5值的函数之后生成的值有时候并不是所需要的密码密钥
因为第一次MD5时,函数把密码读入成字符串 生成MD5的值
第二次的时候 直接读入了生成第一次的MD5值,把整个十六进制串当做了一个字符串读进去了,所以生成的密码密钥是不对的
比如: 123 第一次MD5得到 202CB962AC59075B964B07152D234B70
第二次MD5得到 D9840773233FA6B19FDE8CAF765402F5
上面是错误的!
第二次得到应该是 D022646351048AC0BA397D12DFAFA304
所以 在计算第二次MD5值时 应该把第一次得到的十六进制数转换成16位字符串再进行MD5运算
—-
ps. 因为这个问题已经出错过2次了,而且google的时候发现很多人都遇到这个问题,怕忘记了 就写出来了,也不知道对不对,希望大家能指正!
aMule安装使用的相关问题
aMule 可以在新立得软件包管理器里面直接安装
安装 amule 和 amule-utils
我用的是Firefox 3.0
地址栏输入 about:config
添加 network.protocol-handler.app.ed2k 字符串类型 值是 /usr/bin/ed2k
添加 network.protocol-handler.external.ed2k 布尔类型 值是 true
添加 network.protocol-handler.warn-external.ed2k 布尔类型 值是 true
打开aMule
选择要下载的文件 会出现提示框 选择运行的程序 选择 /usr/bin/ed2k 在提示框下面勾选 让Firefox记住你的选择 以后就可以直接点链接来添加要下载的文件了
还有个办法是 比如在Verycd里面 在你要下载的东西 前面勾选 点下面的”复制选中的链接”然后在amule的 “ED2K链接”里粘贴 点确定就可以了,一般这个方法不会产生文件名的乱码
乱码: 还有一个办法,在增加了下载文件并链接上之后,在有乱码的文件名上点右键,选择”显示文件信息”,在文件名一栏里面会列出很多正常的文件名,选择一个你喜欢的,双击,之后点应用,或者直接在显示文件名的文本框里面修改,之后点应用.
服务器人数已满:部分服务器是必须要在昵称上加标识才能连接的 如 verycd, Popgo Anime Server, IA MEDIA。
eMule的昵称需要含有关键词分别为 :[VeryCD], [eDtoon],[ICN]。否则会提示服务器人数已满.
服务器列表:在 Amule 设置 服务器 中,选择 启动后自动更新服务器列表,打开列表,粘贴下面的服务器地址。
http://www.gruk.org/server.met.gz
http://corpo.free.fr/server.met
http://www.emule-inside.net/nodes.dat
http://renololo1.free.fr/e/nodes.dat
—————-
上面只是我的一点使用心得,希望能有用,而且也不保证都正确,至少在我这是正常的 我用的是Ubuntu8.04
手把手教你把Vim 改装成一个IDE 编程环境
手把手教你把Vim 改装成一个IDE 编程环境(图文)
By: 吴垠
Date: 2007-09-07
Version: 0.5
Email: lazy.fox.wu#gmail.com
Homepage: http://blog.csdn.net/wooin
Copyright: 该文章版权由吴垠和他可爱的老婆小包子所有。可在非商业目的下任意传播和复制。对于商业目的下对本文的任何行为需经作者同意。
联系方式:lazy.fox.wu#gmail.com
作者原文地址 http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx
——————————————————————————
Linux 下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux 牛人, 黑客之类的也都不用IDE. 但是对我等从Windows 平台转移过来的Coder 来说, 一个好用的IDE 是何等的重要啊, 估计很多人就是卡在这个门槛上了, “工欲善其事, 必先利其器”嘛, 我想如果有一个很好用的IDE, 那些Linux 牛人也会欢迎的. 这都是劳动人民的美好愿望罢了, 我今天教大家把gvim 改装成一个简易IDE, 说它”简易”是界面上看起来”简易”, 但功能绝对不比一个好的IDE 差, 该有的功能都有, 不该有的功能也有, 你就自己没事偷着乐吧, 下面我开始介绍今天的工作了.
本文会教你:
1. 中文帮助手册的安装
2. vim 编程常用命令
3. 语法高亮
4. 在程序中跳来跳去: Ctags 的使用
5. 教你高效地浏览源码 — 插件: TagList
6. 文件浏览器和窗口管理器 — 插件: WinManager
7. Cscope 的使用
8. QuickFix 窗口
9. 快速浏览和操作Buffer — 插件: MiniBufExplorer
10. c/h 文件间相互切换 — 插件: A
11. 在工程中查找 — 插件: Grep
12. 高亮的书签 — 插件: VisualMark
13. 自动补全
14. 加速你的补全 — 插件: SuperTab
pdf文档下载地址:
vim.pdf
GCC编译选项
在BSD爱好者上看到的 感觉挺好的 所以转来了
作者是:剑心通明
1. -c 编译产生对象文件(*.obj)而不链接成可执行文件,当编译几个独立的模块,而待以后由链接程序把它们链接在一起时,就可以使用这个选项,如:
$cc -c hello.c ===> hello.o
$cc hello.o
2. -o 允许用户指定输出文件名,如
$cc hello.c -o hello.o
or
$cc hello.c -o hello
3. -g 指明编译程序在编译的输出中应产生调试信息.这个调试信息使源代码和变量名引用在调试程序中或者当程序异常退出后在分析core文件时可被使用.
4. -D 允许从编译程序命令行定义宏符号
一共有两种情况:一种是用-DMACRO,相当于在程序中使用#define MACRO,另一种是用-DMACRO=A,相当于程序中的#define MACRO A.如对下面
这代码:
#ifdefine DEBUG
printf(”debug message\n”);
#endif
编译时可加上-DDEBUG参数,执行程序则打印出编译信息
5. -I 可指定查找include文件的其他位置.例如,如果有些include文件位于比较特殊的地方,比如/usr/local/include,就可以增加此选项如下:
$cc -c -I/usr/local/include -I/opt/include hello.c 此时目录搜索会按给出的次序进行.
6. -E 这个选项是相对标准的,它允许修改命令行以使编译程序把预先处理的C文件发到标准输出,而不实际编译代码.在查看C预处理伪指令和C宏时,这是很有
用的.可能的编译输出可重新定向到一个文件,然后用编辑程序来分析:
$cc -c -E hello.c >cpp.out 此命令使include文件和程序被预先处理并重定向到文件cpp.out.以后可以用编辑程序或者分页命令分析这个文件,并
确定最终的C语言代码看起来如何.
7. -O 优化选项, 这个选项不是标准的
-O和 -O1指定1级优化
-O2 指定2级优化
-O3 指定3级优化
-O0指定不优化
$cc -c O3 -O0 hello.c 当出现多个优化时,以最后一个为准!!
8. -Wall 以最高级别使用GNU编译程序,专门用于显示警告用!!
$gcc -Wall hello.c
9. -L指定连接库的搜索目录,-l(小写L)指定连接库的名字
$gcc main.o -L/usr/lib -lqt -o hello
上面的命令把目标文件main.o与库qt相连接,连接时会到/usr/lib查找这个库文件.也就是说-L与-l一般要成对出现.
**********************gcc/egcs 的主要选项*********
gcc 命令的常用选项
选项 解释
-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,
例如 asm 或 typeof 关键词。
-c 只编译并生成目标文件。
-DMACRO 以字符串“1”定义 MACRO 宏。
-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。
-E 只运行 C 预编译器。
-g 生成调试信息。GNU 调试器可利用该信息。
-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY 连接时搜索指定的函数库LIBRARY。
-m486 针对 486 进行代码优化。
-o FILE 生成指定的输出文件。用在生成可执行文件时。
-O0 不进行优化处理。
-O 或 -O1 优化生成代码。
-O2 进一步优化。
-O3 比 -O2 更进一步优化,包括 inline 函数。
-shared 生成共享目标文件。通常用在建立共享库时。
-static 禁止使用共享连接。
-UMACRO 取消对 MACRO 宏的定义。
-w 不生成任何警告信息。
-Wall 生成所有警告信息。
UML入门教程 中文版
不是扫描版的哦!
呵呵 从别的论坛找到的 分享一下啦 希望能有用!
———————————————————————————————-
UML
开放分类: 计算机、软件工程
统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
统一建模语言 (UML)是非专利的第三代建模和规约语言。 UML是在开发阶段,说明,可视化,构建和书写一个面向对象软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
UML可以贯穿软件开发周期中的每一个阶段。被OMG采纳作为业界的标准。
UML最适于数据建模,业务建模,对象建模,组件建模。
UML作为一种模型语言,它使开发人员专注于建立产品的模型和结构,而不是选用什么程序语言和算法实现。当模型建立之后,模型可以被UML工具转化成指定的程序语言代码。
IBM的Rational Rose和MS的Visio都是UML工具。
同时还有一些免费的UML工具:
http://java-source.net/open-source/uml-modeling
一. 标准建模语言UML的出现
公认的面向对象建模语言出现于70年代中期。从1989年到1994年,其数量从不到十种增加到了五十多种。在众多的建模语言中,语言的创造者努力推崇自己的产品,并在实践中不断完善。但是,OO方法的用户并不了解不同建模语言的优缺点及相互之间的差异,因而很难根据应用特点选择合适的建模语言,于是爆发了一场“方法大战”。90年代中,一批新方法出现了,其中最引人注目的是Booch 1993、OOSE和OMT-2等。
Booch是面向对象方法最早的倡导者之一,他提出了面向对象软件工程的概念。1991年,他将以前面向Ada的工作扩展到整个面向对象设计领域。Booch 1993比较适合于系统的设计和构造。
Rumbaugh等人提出了面向对象的建模技术(OMT)方法,采用了面向对象的概念,并引入各种独立于语言的表示符。这种方法用对象模型、动态模型、功能模型和用例模型,共同完成对整个系统的建模,所定义的概念和符号可用于软件开发的分析、设计和实现的全过程,软件开发人员不必在开发过程的不同阶段进行概念和符号的转换。OMT-2特别适用于分析和描述以数据为中心的信息系统。
Jacobson于1994年提出了OOSE方法,其最大特点是面向用例(Use-Case),并在用例的描述中引入了外部角色的概念。用例的概念是精确描述需求的重要武器,但用例贯穿于整个开发过程,包括对系统的测试和验证。OOSE比较适合支持商业工程和需求分析。
此外,还有Coad/Yourdon方法,即著名的OOA/OOD,它是最早的面向对象的分析和设计方法之一。该方法简单、易学,适合于面向对象技术的初学者使用,但由于该方法在处理能力方面的局限,目前已很少使用。
概括起来,首先,面对众多的建模语言,用户由于没有能力区别不同语言之间的差别,因此很难找到一种比较适合其应用特点的语言;其次,众多的建模语言实际上各有千秋;第三,虽然不同的建模语言大多雷同,但仍存在某些细微的差别,极大地妨碍了用户之间的交流。因此在客观上,极有必要在精心比较不同的建模语言优缺点及总结面向对象技术应用实践的基础上,组织联合设计小组,根据应用需求,取其精华,去其糟粕,求同存异,统一建模语言。
1994年10月,Grady Booch和Jim Rumbaugh开始致力于这一工作。他们首先将Booch 93和OMT-2 统一起来,并于1995年10月发布了第一个公开版本,称之为统一方法UM 0.8(Unitied Method)。1995年秋,OOSE 的创始人Ivar Jacobson加盟到这一工作。经过Booch、Rumbaugh和Jacobson三人的共同努力,于1996年6月和10月分别发布了两个新的版本,即UML 0.9和UML 0.91,并将UM重新命名为UML(Unified Modeling Language)。
1996年,一些机构将UML作为其商业策略已日趋明显。UML的开发者得到了来自公众的正面反应,并倡议成立了UML成员协会,以完善、加强和促进 UML的定义工作。当时的成员有DEC、HP、I-Logix、 Itellicorp、 IBM、ICON Computing、MCI Systemhouse、Microsoft、Oracle、Rational Software、TI以及Unisys。这一机构对UML 1.0(1997年1月)及UML 1.1(1997年11月17日)的定义和发布起了重要的促进作用。
UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它溶入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。
面向对象技术和UML的发展过程可用图形来表示,标准建模语言的出现是其重要成果。在美国,截止1996年10月,UML获得了工业界、科技界和应用界的广泛支持,已有700多个公司表示支持采用UML作为建模语言。1996年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。1997年11月17日,OMG采纳UML 1.1作为基于面向对象技术的标准建模语言。UML代表了面向对象方法的软件开发技术的发展方向,具有巨大的市场前景,也具有重大的经济价值和国防价值。
UML是一个标准的图形表示法,它不是面向对象的分析和设计,也不是一种方法,它仅仅是一组符号而已。
UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它溶入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。
面向对象技术和UML的发展过程可用上图来表示,标准建模语言的出现是其重要成果。在美国,截止1996年10月,UML获得了工业界、科技界和应用界的广泛支持,已有700多个公司表示支持采用UML作为建模语言。1996年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。1997年11月17日,OMG采纳UML 1.1作为基于面向对象技术的标准建模语言。UML代表了面向对象方法的软件开发技术的发展方向,具有巨大的市场前景,也具有重大的经济价值和国防价值。
2. 标准建模语言UML的内容
首先,UML融合了Booch、OMT和OOSE方法中的基本概念,而且这些基本概念与其他面向对象技术中的基本概念大多相同,因而,UML必然成为这些方法以及其他方法的使用者乐于采用的一种简单一致的建模语言;其次,UML不仅仅是上述方法的简单汇合,而是在这些方法的基础上广泛征求意见,集众家之长,几经修改而完成的,UML扩展了现有方法的应用范围;第三,UML是标准的建模语言,而不是标准的开发过程。尽管UML的应用必然以系统的开发过程为背景,但由于不同的组织和不同的应用领域,需要采取不同的开发过程。
作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分。
(1) UML语义 描述基于UML的精确元模型定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的最佳表达方法所造成的影响。此外UML还支持对元模型的扩展定义。
(2) UML表示法 定义UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。
标准建模语言UML的重要内容可以由下列五类图(共9种图形)来定义:
第一类是用例图,从用户角度描述系统功能,并指出各功能的操作者。
第二类是静态图 (Static diagram),包括类图、对象图和包图。其中类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)。类图描述的是一种静态关系,在系统的整个生命周期都是有效的。
对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。
包由包或类组成,表示包与包之间的关系。包图用于描述系统的分层结构。
第三类是行为图(Behavior diagram),描述系统的动态模型和组成对象间的交互关系。其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。通常,状态图是对类图的补充。在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。
而活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。
第四类是交互图(Interactive diagram),描述对象间的交互关系。其中顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,合作图跟顺序图相似,显示对象间的动态合作关系。除显示信息交换外,合作图还显示对象以及它们之间的关系。如果强调时间和顺序,则使用顺序图;如果强调上下级关系,则选择合作图。这两种图合称为交互图。
第五类是实现图 ( Implementation diagram )。其中构件图描述代码部件的物理结构及各部件之间的依赖关系。一个部件可能是一个资源代码部件、一个二进制部件或一个可执行部件。它包含逻辑类或实现类的有关信息。部件图有助于分析和理解部件之间的相互影响程度。
配置图定义系统中软硬件的物理体系结构。它可以显示实际的计算机和设备(用节点表示)以及它们之间的连接关系,也可显示连接的类型及部件之间的依赖性。在节点内部,放置可执行部件和对象以显示节点跟可执行软件单元的对应关系。
从应用的角度看,当采用面向对象技术设计系统时,首先是描述需求;其次根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图(包含包)、对象图、组件图和配置图等五个图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图和合作图等四个图形,是标准建模语言UML的动态建模机制。因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。
3. 标准建模语言UML的主要特点
标准建模语言UML的主要特点可以归结为三点:
(1) UML统一了Booch、OMT和OOSE等方法中的基本概念。
(2) UML还吸取了面向对象技术领域中其他流派的长处,其中也包括非OO方法的影响。UML符号表示考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的和极少使用的符号,也添加了一些新符号。因此,在UML中汇入了面向对象领域中很多人的思想。这些思想并不是UML的开发者们发明的,而是开发者们依据最优秀的OO方法和丰富的计算机科学实践经验综合提炼而成的。
(3)UML在演变过程中还提出了一些新的概念。在UML标准中新加了模板(Stereotypes)、职责(Responsibilities)、扩展机制(Extensibility mechanisms)、线程(Threads)、过程(Processes)、分布式(Distribution)、并发(Concurrency)、模式(Patterns)、合作(Collaborations)、活动图(Activity diagram)等新概念,并清晰地区分类型(Type)、类(Class)和实例(Instance)、细化(Refinement)、接口 (Interfaces)和组件(Components)等概念。
因此可以认为,UML是一种先进实用的标准建模语言,但其中某些概念尚待实践来验证,UML也必然存在一个进化过程。
4. 标准建模语言UML的应用领域
UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。总之,UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。
此外,UML适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。在需求分析阶段,可以用用例来捕获用户需求。通过用例建模,描述对系统感兴趣的外部角色及其对系统(用例)的功能要求。分析阶段主要关心问题域中的主要概念(如抽象、类和对象等)和机制,需要识别这些类以及它们相互间的关系,并用UML类图来描述。为实现用例,类之间需要协作,这可以用UML动态模型来描述。在分析阶段,只对问题域的对象(现实世界的概念)建模,而不考虑定义软件系统中技术细节的类(如处理用户接口、数据库、通讯和并行性等问题的类)。这些技术细节将在设计阶段引入,因此设计阶段为构造阶段提供更详细的规格说明。
编程(构造)是一个独立的阶段,其任务是用面向对象编程语言将来自设计阶段的类转换成实际的代码。在用UML建立分析和设计模型时,应尽量避免考虑把模型转换成某种特定的编程语言。因为在早期阶段,模型仅仅是理解和分析系统结构的工具,过早考虑编码问题十分不利于建立简单正确的模型。
UML模型还可作为测试阶段的依据。系统通常需要经过单元测试、集成测试、系统测试和验收测试。不同的测试小组使用不同的UML图作为测试依据:单元测试使用类图和类规格说明;集成测试使用部件图和合作图;系统测试使用用例图来验证系统的行为;验收测试由用户进行,以验证系统测试的结果是否满足在分析阶段确定的需求。
总之,标准建模语言UML适用于以面向对象技术来描述任何类型的系统,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。
下载地址:
UML入门教程(中文版).pdf
Ubuntu复活节彩蛋 ^@^
刚在搜索时候发现的
不过那个地址已经过期 我还是发上来吧 很有意思呢 哈哈
————————————————————————————-
zhoubo@zhoubo-dell:~$ aptitude -v moo
本程序中确实没有复活节彩蛋。
zhoubo@zhoubo-dell:~$
zhoubo@zhoubo-dell:~$ aptitude -vv moo
我不是已经告诉您本程序中没有复活节彩蛋了吗?
zhoubo@zhoubo-dell:~$ aptitude -vvv moo
停下来!
zhoubo@zhoubo-dell:~$ aptitude -vvvv moo
好吧,好吧,如果我给您复活节彩蛋,您会停手吗?
zhoubo@zhoubo-dell:~$ aptitude -vvvvv moo
好吧,您赢了。
/—-\
——-/ \
/ \
/ |
—————–/ ——–\
———————————————-
zhoubo@zhoubo-dell:~$
————————————————————————————-
———————————————————————————-
zhoubo@zhoubo-dell:~$ apt-get -h | sed -n ‘$p’
本 APT 有着超级牛力。
zhoubo@zhoubo-dell:~$ aptitude -h | sed -n ‘$p’
这个 aptitude 没有超级牛力。
zhoubo@zhoubo-dell:~$ apt-get moo
(__)
(oo)
/——\/
/ | ||
* /\—/\
~~ ~~
….”Have you mooed today?”…
zhoubo@zhoubo-dell:~$
———————————————————————————
最新评论
-
- Подарки для мужчин发表于《GCC编译选项》
- ремонт офисов发表于《UML入门教程 中文版》
- David发表于《Ubuntu复活节彩蛋 ^@^》
- admin发表于《The.Definitive.Guide.to.GCC.2nd》
- HIncubus发表于《The.Definitive.Guide.to.GCC.2nd》






















