﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-路的尽头-文章分类-思索</title><link>http://www.cppblog.com/tangxinfa/category/5921.html</link><description>开发者之旅</description><language>zh-cn</language><lastBuildDate>Sat, 27 Sep 2008 06:09:01 GMT</lastBuildDate><pubDate>Sat, 27 Sep 2008 06:09:01 GMT</pubDate><ttl>60</ttl><item><title>利用uml改进开发过程-（三）UML</title><link>http://www.cppblog.com/tangxinfa/articles/41130.html</link><dc:creator>唐新发</dc:creator><author>唐新发</author><pubDate>Mon, 14 Jan 2008 07:49:00 GMT</pubDate><guid>http://www.cppblog.com/tangxinfa/articles/41130.html</guid><wfw:comment>http://www.cppblog.com/tangxinfa/comments/41130.html</wfw:comment><comments>http://www.cppblog.com/tangxinfa/articles/41130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tangxinfa/comments/commentRss/41130.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tangxinfa/services/trackbacks/41130.html</trackback:ping><description><![CDATA[嗯，笔和纸都准备好了，就差才华了！<br>得学点UML才行了，目前打算弄懂类图、顺序图和用例图就行了，不管怎么样边用边学。<br><br><img src ="http://www.cppblog.com/tangxinfa/aggbug/41130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tangxinfa/" target="_blank">唐新发</a> 2008-01-14 15:49 <a href="http://www.cppblog.com/tangxinfa/articles/41130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用uml改进开发过程-（二）工具的选择</title><link>http://www.cppblog.com/tangxinfa/articles/41129.html</link><dc:creator>唐新发</dc:creator><author>唐新发</author><pubDate>Mon, 14 Jan 2008 07:44:00 GMT</pubDate><guid>http://www.cppblog.com/tangxinfa/articles/41129.html</guid><wfw:comment>http://www.cppblog.com/tangxinfa/comments/41129.html</wfw:comment><comments>http://www.cppblog.com/tangxinfa/articles/41129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tangxinfa/comments/commentRss/41129.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tangxinfa/services/trackbacks/41129.html</trackback:ping><description><![CDATA[工具的选择总是免不了的，基本功能具备就好了，也不指望玩出花来，商业收费的暂时不考虑，这样聚焦在以下三个：<br>　　1，StarUML<br>&nbsp;&nbsp;&nbsp; 2，Umbrello<br>&nbsp;&nbsp;&nbsp; 3，BOUML<br>上面都是不收费，开源的，其中StarUML跑在windows下，Umbrello跑在linux下，BOUML跨平台，看相关评论，StarUML好用易用，Umbrello功能强大，BOUML看起来比较扑实，相关评论也还说它不错，并且因为个人会在windows及linux上进行开发，所以暂选BOUML。<br><br><img src ="http://www.cppblog.com/tangxinfa/aggbug/41129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tangxinfa/" target="_blank">唐新发</a> 2008-01-14 15:44 <a href="http://www.cppblog.com/tangxinfa/articles/41129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>代码命名风格的选择</title><link>http://www.cppblog.com/tangxinfa/articles/41114.html</link><dc:creator>唐新发</dc:creator><author>唐新发</author><pubDate>Mon, 14 Jan 2008 03:28:00 GMT</pubDate><guid>http://www.cppblog.com/tangxinfa/articles/41114.html</guid><wfw:comment>http://www.cppblog.com/tangxinfa/comments/41114.html</wfw:comment><comments>http://www.cppblog.com/tangxinfa/articles/41114.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tangxinfa/comments/commentRss/41114.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tangxinfa/services/trackbacks/41114.html</trackback:ping><description><![CDATA[当你写下第一行代码，命名风格的问题就找上来了，我个人接触过几种风格的：<br>１，MFC风格<br>&nbsp;&nbsp;&nbsp; class CClassName<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void DoSomething();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString m_strName;<br>&nbsp;&nbsp;&nbsp;&nbsp; };<br>2，linux风格<br>　　class class_name<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void do_something();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::string name_;<br>&nbsp;&nbsp;&nbsp; };<br>　　class class_name_t<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void do_something();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::string name_;<br>&nbsp;&nbsp;&nbsp; };<br>3，Java风格<br>&nbsp;&nbsp;&nbsp; class ClassName<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void doSomething();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::string name;<br>&nbsp;&nbsp;&nbsp; };<br>这里关注的差异部分是：1，名称中是否使用类型前缀或后缀；2，怎样使用大小写。<br>　　风格1（MFC风格、匈牙利命名风格）带来的问题是：导致命名复杂化（m_lpszName？），每次写个变量名都要经过n道工序（中文-&gt;英文-&gt;类型提取-&gt;最后的名称），一个类型变化时（如：要用结构代替内置类型，typedef）是不是得发个重大更新重大升级啊，要不然怎么对得起程序中大范围的名称替换，要是用svn的版本比对一定可以看到状观的景像。<br>　　风格2（linux风格）问题是：带后缀总是显得不美观（看看stl的原代码），用户成了命名规范的二等公民（看看boost库），通用直观的好名字都认库占了。其实c++中成员变量带后缀是好理解的，它可以避免和参数名称冲突，如下所示：<br>　　class class_name<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class_name(std::string name)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  :name_(name)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void set_name(std::string name)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; name_ = name;&nbsp;  <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::string name_;<br>&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp; //当成员name_命名为name时，在set_name函数中name = name将是参数的自赋值。<br>成员变量带后缀可接受是因为我们认为没有人会引用它（看到它），但当序列化时，它的名称会被用户见到，另外成员变量也可能是公有的，如一个C结构带了一个辅助使用的构造函数时。那么参数名称加下划线怎么样？我这么干过，不过更不好，因为它会污染你IDE的智能提示以及用doxygen生成的文档。<br>类型名后加_t也是好理解的，除了表明这是一个类型外，可以避免与该类型的实例名称相冲突，有人会说实例名称用简写不就行了吗，问题是如果我的类名称已经足够简单了呢？加了_t会对用户代码的整洁性产生不必要的干扰。<br>　　风格3（Java风格）的问题：在c++中无法避免成员变量名称与参数名称冲突，java（或python）不存在这个问题是因为java中成员函数中引用成员变量时总是带个前缀this。但其实c++也可以这么干，只是出于习惯我们总是省略this前缀，这样的话就不存在什么问题了。<br>　　就我个人来说，目前倾向于采用java命名风格，原因是它最大程度地避免了命名冲突而又不会对代码带来太大的冲击，这或是就是为什么很多语言的命名风格会向它靠拢。<br>   <img src ="http://www.cppblog.com/tangxinfa/aggbug/41114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tangxinfa/" target="_blank">唐新发</a> 2008-01-14 11:28 <a href="http://www.cppblog.com/tangxinfa/articles/41114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用uml改进开发过程-（一）问题</title><link>http://www.cppblog.com/tangxinfa/articles/41108.html</link><dc:creator>唐新发</dc:creator><author>唐新发</author><pubDate>Mon, 14 Jan 2008 01:46:00 GMT</pubDate><guid>http://www.cppblog.com/tangxinfa/articles/41108.html</guid><wfw:comment>http://www.cppblog.com/tangxinfa/comments/41108.html</wfw:comment><comments>http://www.cppblog.com/tangxinfa/articles/41108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tangxinfa/comments/commentRss/41108.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tangxinfa/services/trackbacks/41108.html</trackback:ping><description><![CDATA[　　有时候我会兴之所致写些小程序，诸如：日程管理、网络通信库，但是基本上不出一周就腰折了，究其原因是不知道下一步要做些什么了，而已经写好的代码也有点不着调，它能工作，但就像是营养不良，设计的类似乎抓住了一点概念，但是总是以一种自以为是的方式工作。<br>　　我开发方式中的问题即使别人不提我也觉察到了：需求分析不足，过早进入实现阶段，习惯性地陷入细节的泥潭不可自拔。<br>　　当做一件事情有了不良习惯时，改正的办法不外乎不断地重复正确的方式，就像纠正你英语言中某个单词的发音错误，通过不断地朗读正确发音消除掉原有发音的记忆。不过这个方法对于解决我目前的问题似乎毫无帮助，因为我还不知道正确的发音是什么。<br>　　或许改变开发习惯会间接地解决上面的问题，在打开熟悉的IDE写代码之前用uml之类的高层语言打好结构、将关键的控制流程画出来，直到意识到可以将思路翻译成代码时才写代码。这样至少可以避免陷入细节的泥潭，因为一直以来当我发现局部的一个显而易见的解决方案时，总是忍不住立即动手，结果是捡了芝麻丢了西瓜。<br> <img src ="http://www.cppblog.com/tangxinfa/aggbug/41108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tangxinfa/" target="_blank">唐新发</a> 2008-01-14 09:46 <a href="http://www.cppblog.com/tangxinfa/articles/41108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++开源开发库、开发工具个人选择列表</title><link>http://www.cppblog.com/tangxinfa/articles/40341.html</link><dc:creator>唐新发</dc:creator><author>唐新发</author><pubDate>Thu, 03 Jan 2008 09:13:00 GMT</pubDate><guid>http://www.cppblog.com/tangxinfa/articles/40341.html</guid><wfw:comment>http://www.cppblog.com/tangxinfa/comments/40341.html</wfw:comment><comments>http://www.cppblog.com/tangxinfa/articles/40341.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tangxinfa/comments/commentRss/40341.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tangxinfa/services/trackbacks/40341.html</trackback:ping><description><![CDATA[一、IDE及其它工具：<br>　　1，emacs：<br>&nbsp;&nbsp;&nbsp; &nbsp; 不经细心配置的话用起来有点变态；通过细心配置、适当安装所需插件<wbr>后，用起来很顺手，特别是写代<br>　　　码时有一种健步如飞的感觉，全键盘操作。对于完成工作似乎无所不能<wbr>，有人说它就是操作系统不是开<br>　　　玩笑的。<br>　　　缺点是需要大量的配置工作，各种插件的集成度不是很高。<br>　　2，<a href="http://www.codeblocks.org/" target="_blank">
codeblocks</a>：<br>　　　类似vc，devcpp杀手，建议下载每日构建版本<wbr>，开发社区很活跃，不断更新中。<br>　　　特点是：跨平台，可以选择使用几乎所有类型c++编译器<wbr>，界面基于wxwidgets库，包含常用的插件，对<br>　　　wxWidgets程序开发支持力度大。可视化的调试器<wbr>，代码完成功能。<br>　　　可以认为是一个粗糙版的vc。<br>　　3，版本控制系统：subversion<br>　　4，登录工具：PieTTY
<br>　　　支持utf-8，可方便地通过拖动文件进行ftp上传。<br>&nbsp;&nbsp;&nbsp; 5，错误追踪系统<br>&nbsp;&nbsp;&nbsp; &nbsp; Mantis<br><br>二、库：<br>　　1，配置参数读取库：<a href="http://getpot.sourceforge.net/" target="_blank">GetPot</a><br>　　　使用简单直观，就一个头文件。<br>　　2，xml解析类：<a href="http://www.firstobject.com/dn_markdev.htm" target="_blank">Markup</a><br>　　　超轻量级，使用简单直观，就一个头文件和一个实现文件<wbr>。用于解析简单的xml文件（如：xml配置文
<br>　　　件，序列化）。用过之后忍不住感叹，原来解析xml也可以这么容易<wbr>，不过用于商业开发是要收费的，<br>　　　有空我再找一个不收费的。<br>　　3，正则表达式库：boost::regex<br>　　　准标准库，使用简单直观，大胆地用吧。<br>　　4，界面开发：<a href="http://gtkmm.sourceforge.net/" target="_blank">Gtkmm</a><br>　　　可免费用于商业开发，跨平台，代码漂亮，支持换肤。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缺点：在windows下界面也是linux风格<br>&nbsp;&nbsp;&nbsp; 5，日志库<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log4cxx log4j的c++版本，简单易用，配置能力强。<br>　　　　　　　log4j还有其它语言的版本（如：c, python, php, .net等），值得学习。<br><br>三、看好的库：<br>　　1，网络开发：<a href="http://asio.sourceforge.net/" target="_blank">asio</a><br>　　2，多线程开发：boost::thread，<a href="http://threadpool.sourceforge.net/" target="_blank">threadpool</a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a title="ZThreads" href="http://zthread.sourceforge.net/">ZThreads</a>　对跨平台的多线程开发进行了完整的封装，易用．<br>&nbsp;&nbsp;&nbsp; 3，序列化：boost::serialization
<br>     <img src ="http://www.cppblog.com/tangxinfa/aggbug/40341.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tangxinfa/" target="_blank">唐新发</a> 2008-01-03 17:13 <a href="http://www.cppblog.com/tangxinfa/articles/40341.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>