<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>郑晖的博客</title>
    <description></description>
    <link>http://xyz98.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>对本博感兴趣的朋友请移驾blogjava-http://www.blogjava.net/xyz98</title>
        <author>xyz98</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xyz98.javaeye.com">xyz98</a>&nbsp;
          链接：<a href="http://xyz98.javaeye.com/blog/189034" style="color:red;">http://xyz98.javaeye.com/blog/189034</a>&nbsp;
          发表时间: 2008年05月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>本博不再更新，有兴趣的朋友请移驾<a href="http://www.blogjava.net/xyz98/">www.blogjava.net/xyz98/</a>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://xyz98.javaeye.com/blog/189034#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 03 May 2008 11:39:14 +0800</pubDate>
        <link>http://xyz98.javaeye.com/blog/189034</link>
        <guid>http://xyz98.javaeye.com/blog/189034</guid>
      </item>
      <item>
        <title>冒号和他的学生们（11）——编程范式：情景编程</title>
        <author>xyz98</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xyz98.javaeye.com">xyz98</a>&nbsp;
          链接：<a href="http://xyz98.javaeye.com/blog/187909" style="color:red;">http://xyz98.javaeye.com/blog/187909</a>&nbsp;
          发表时间: 2008年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<h1 style="text-align: center;"><span style="font-family: 宋体;">冒号和他的学生们</span>
</h1>
<p class="MsoNormal" align="center" style="text-align: center;"><span style="font-family: 宋体;">&mdash;&mdash;程序员提高班纪事</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><strong><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></strong>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><strong>11</strong>
<strong><span style="font-family: 宋体;">．编程范式：情景编程</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify;"><em><span style="font-family: 宋体;">理论是认生的孩童，陪他多玩玩，自会活泼起来&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &mdash;&mdash;题记&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span>
</em>
<em><span style="font-family: 宋体;"></span>
</em>
</p>
<p>&nbsp;</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">叹号摘下眼镜，揉了揉眼：&ldquo;范式再好，多了也难免有些审美疲劳。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">逗号也搓着太阳穴：&ldquo;现在脑子被灌得沉甸甸的。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;彼此彼此！你们的脑袋闹涝灾，我的喉咙闹旱灾。&rdquo;冒号说着，拿起矿泉水瓶一饮而尽。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">大伙听着怪别扭的，这不是拐着弯说我们脑子进水了吗？</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号清了清嗓子：&ldquo;为尊重民意，也为避免消化不良，大家先放松一下。下面我们来个<strong>情景编程</strong>
。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;情景编程？没听说过，只听说过情景英语。&rdquo;问号觉得新鲜。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;都是学语言嘛，有何两样？&rdquo;冒号轻描淡写，&ldquo;让我们试着用生活中的实例将一些编程范式串联起来。前面提到，</span>
OOP<span style="font-family: 宋体;">可以看作管理一个服务型公司，现在以餐馆为例，你们每人设计一类对象及其提供的服务。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">问号来了兴致：&ldquo;我先来吧。构造一个前台接待员，负责迎客、引座、送客。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">句号很是不满：&ldquo;还真不客气，上来就把最漂亮的对象抢走了。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">台下一阵笑声。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;我来构建最常见的服务员。&rdquo;逗号一捋袖子，似乎准备开干的样子，&ldquo;负责斟茶、写菜、上菜、换盘。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;嗯，很熟练。&rdquo;冒号一本正经。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">句号实在得很：&ldquo;我设计收银员，专管收帐、出具发票。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">引号颇为自豪：&ldquo;我造一个技术含量最高的大厨，专门负责烹调。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">逗号不服：&ldquo;你倒简单，那么高的技术含量，敢情炒肉和炖肉一个做法啊？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">引号自觉理亏：&ldquo;那就负责蒸、煮、炒、炖吧。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号为其辩护：&ldquo;引号同学并没有错，可惜没能坚持。厨师只需提供一种服务：把纸上菜变成盘中菜，至于蒸、煮、炒、炖等具体做法纯属实现细节。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">叹号有点委屈：&ldquo;唉，看来我只好做技术含量最低的厨工了，负责食品预加工、洗碗、打扫清洁。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号将大家设计的类翻译成</span>
<em>Java</em>
<span style="font-family: 宋体;">&mdash;&mdash;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">前台接待员</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">Class Receptionist</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public
void receive(Customer)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;} // </span>
<em><span style="font-family: 宋体; color: blue;">迎客</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public
void usher(Customer)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;} // </span>
<em><span style="font-family: 宋体; color: blue;">引座</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public
void send(Customer)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;} // </span>
<em><span style="font-family: 宋体; color: blue;">送客</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">服务员</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">Class Waiter</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">public void pourTea(Customer)<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;}
// </span>
<em><span style="font-family: 宋体; color: blue;">斟茶</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public
List&lt;Order&gt; write(Customer)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;} // </span>
<em><span style="font-family: 宋体; color: blue;">写菜</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public
void serve(Customer, Course)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;} // </span>
<em><span style="font-family: 宋体; color: blue;">上菜</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">public void exchangePlate(Customer)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;} // </span>
<em><span style="font-family: 宋体; color: blue;">换盘</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">收银员</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">Class Cashier</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public
void charge(Customer)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;} // </span>
<em><span style="font-family: 宋体; color: blue;">收帐</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public
void issueInvoice(Customer)<span> </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;} // </span>
<em><span style="font-family: 宋体; color: blue;">出具发票</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">厨师</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">Class Cook</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public
Course cook(Order) <span>&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;}
// </span>
<em><span style="font-family: 宋体; color: blue;">烹调</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">厨工</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">Class KitchenHand</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">public void prepareFood()<span>&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;} // </span>
<em><span style="font-family: 宋体; color: blue;">准备食品</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public
void washDishes()<span>&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;}
// </span>
<em><span style="font-family: 宋体; color: blue;">洗碗</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">public void clean()<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{&hellip;} // </span>
<em><span style="font-family: 宋体; color: blue;">打扫清洁</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;你们造人，我来造物。&rdquo;冒号构造了一个餐馆的类&mdash;&mdash;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">餐馆</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">Class Restaurant</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">每当有顾客来访，返回该顾客</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">private Customer accept() {&hellip;}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;</span>
</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
//
</span>
<em><span style="font-family: 宋体; color: blue;">为指定顾客提供所有的餐馆服务</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">private void serve(Customer
customer) {&hellip;}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">餐馆服务</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">public void service()</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
while (true) // </span>
<em><span style="font-family: 宋体; color: blue;">无限循环，假设餐馆</span>
<span style="color: blue;">7</span>
</em>
<em><span style="font-family: 宋体; color: blue;">&times;</span>
<span style="color: blue;">24</span>
</em>
<em><span style="font-family: 宋体; color: blue;">小时营业</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
final Customer customer;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
if ((customer = accept() ) != null)
// </span>
<em><span style="font-family: 宋体; color: blue;">某顾客来访</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
serve(customer);<span>&nbsp; </span>
// </span>
<em><span style="font-family: 宋体; color: blue;">为该顾客提供服务</span>
</em>
</p>
<p class="MsoNormal" style="margin-left: 72pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: blue;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号解说道：&ldquo;这里</span>
accept<span style="font-family: 宋体;">类似</span>
Socket<span style="font-family: 宋体;">的</span>
accept<span style="font-family: 宋体;">，属于<span style="text-decoration: underline;">堵塞呼叫</span>
（</span>
blocking
call<span style="font-family: 宋体;">），意味着此方法将堵塞进程直至收到新数据。为简单计，把一行顾客当作一个</span>
Customer<span style="font-family: 宋体;">。大家对此段代码有何看法？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;没什么，很简单啊。&rdquo;逗号说完补充一句，&ldquo;关键是</span>
serve<span style="font-family: 宋体;">方法的实现。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;这里我们明显用到了两个范式，<em>对象式</em>
和<em>过程式</em>
。&rdquo;冒号提示道。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">引号会意：&ldquo;应该还需要并发式。</span>
serve<span style="font-family: 宋体;">如果与</span>
service<span style="font-family: 宋体;">在同一线程中运行，那么餐馆只有等服务完一个</span>
Customer<span style="font-family: 宋体;">后才能服务后面的，这显然是荒唐的。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;对极了！&rdquo;冒号将&ldquo;</span>
serve(customer);<span style="font-family: 宋体;">&rdquo;改写为&mdash;&mdash;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">// serve(customer); <span>&nbsp;</span>
// </span>
<em><span style="font-family: 宋体; color: blue;">错误地使用单线程！</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="color: blue;">new Thread<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
// </span>
<em><span style="font-family: 宋体; color: blue;">构造一个线程</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">(new Runnable()</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public void run(){
Restaurant.this.serve(customer); }</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">}).start();<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
// </span>
<em><span style="font-family: 宋体; color: blue;">启动该线程</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: blue;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="font-family: 宋体;">冒号解释：&ldquo;这回</span>
serve<span style="font-family: 宋体;">在新线程中运行，不会耽误</span>
Restaurant<span style="font-family: 宋体;">服务下一位</span>
Customer<span style="font-family: 宋体;">了。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="font-family: 宋体;">问号眼尖：&ldquo;我注意到声明</span>
customer<span style="font-family: 宋体;">时前面加上了关键字</span>
final<span style="font-family: 宋体;">，有必要吗？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="font-family: 宋体;">&ldquo;如果不用线程，是不必要的。&rdquo;冒号回应道，&ldquo;我们在建造线程时用到了实现</span>
Runnable<span style="font-family: 宋体;">接口的<span style="text-decoration: underline;">匿名类</span>
（</span>
anonymous class<span style="font-family: 宋体;">），它是涉及到<em>局部变量</em>
</span>
customer<span style="font-family: 宋体;">的<span style="text-decoration: underline;">内部类</span>
（</span>
inner class<span style="font-family: 宋体;">），</span>
Java<span style="font-family: 宋体;">语法要求该局部变量必须是</span>
final<span style="font-family: 宋体;">类型。值得一提的是，这里不仅用到了<em>并发式</em>
，而且与<em>函数式</em>
也密切相关。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="font-family: 宋体;">&ldquo;函数式？&rdquo;逗号奇道。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="font-family: 宋体;">&ldquo;不错。&rdquo;冒号坚定地点着头，&ldquo;函数式的一个重要特征是：函数是<em>头等公民</em>
（</span>
first-class
citizen<span style="font-family: 宋体;">），即与其他基本数据类型一样，可以作为传递参数、作为其他函数返回值或与变量名绑定。<span style="text-decoration: underline;">闭包</span>
（</span>
closure<span style="font-family: 宋体;">）便是这样一种函数，并且能保留当初创建时周围的环境变量。以上匿名类本质上是函数</span>
serve<span style="font-family: 宋体;">的包装，经实例化后作为参数传入</span>
Thread<span style="font-family: 宋体;">的构造函数，并且记住了外部类的局部变量</span>
customer<span style="font-family: 宋体;">&mdash;&mdash;这也是为什么它必须是</span>
final<span style="font-family: 宋体;">以保证不被重新赋值的原因。应该说这是一种</span>
OO<span style="font-family: 宋体;">化的闭包形式，预计在</span>
Java 7<span style="font-family: 宋体;">中它的用法会更简洁。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="font-family: 宋体;">句号自告奋勇：&ldquo;我来具体实现</span>
serve<span style="font-family: 宋体;">吧。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="font-family: 宋体;">得到冒号的默许，句号在黑板上写下&mdash;&mdash;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="color: blue;">private void serve(Customer
customer)</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
//
</span>
<em><span style="font-family: 宋体; color: blue;">找一个空闲的接待员</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">Receptionist receptionist =
findReceptionist();<em></em>
</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">receptionist.receive(customer);</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">receptionist.usher(customer);</span>
</p>
<p class="MsoNormal" style="text-align: justify;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
// </span>
<em><span style="font-family: 宋体; color: blue;">找一个空闲的服务员</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">Waiter waiter = findWaiter();</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">waiter.pourTea(customer);</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">List&lt;Order&gt; orders =
waiter.write(customer)<span>&nbsp; </span>
;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">将菜单交给一位厨师</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">Cook cook = waiter.pass(orders);</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">for (Order order : orders) // </span>
<em><span style="font-family: 宋体; color: blue;">厨师照单做菜</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
Course
course = cook.cook(order);</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
// </span>
<em><span style="font-family: 宋体; color: blue;">找一个空闲的服务员</span>
</em>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">waiter =
findWaiter();</span>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">服务员上菜</span>
</em>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">waiter.serve(customer,
course); <em></em>
</span>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">顾客开始享用</span>
</em>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">customer.eat(course);
</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">顾客用餐完毕。。。</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
// </span>
<em><span style="font-family: 宋体; color: blue;">找一个空闲的收银员</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
Cashier
cashier = findCashier();</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
cashier.charge(customer);</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
cashier.issueInvoice(customer);</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 15pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
//
</span>
<em><span style="font-family: 宋体; color: blue;">找一个空闲的接待员</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">receptionist = findReceptionist();</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">receptionist.send(customer);</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">句号写毕又复查一遍，拍拍手上的粉笔灰，心满意足地走下台来。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">叹号提意见：&ldquo;我的厨工没派上用场，应该在厨师烹调前调用</span>
KitchenHand<span style="font-family: 宋体;">的</span>
prepareFood<span style="font-family: 宋体;">方法。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">问号挑出另外的毛病：&ldquo;在</span>
for<span style="font-family: 宋体;">循环中，厨师、服务员和顾客的行为应该在不同的线程中，厨师不可能等服务员上完一道菜或顾客吃完一道菜后才做下一道。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;可能更复杂呢！&rdquo;逗号也来凑热闹，&ldquo;一位顾客点的几样菜可能分别由几位厨师同时做，每位厨师都在不同的线程中工作。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">引号更严谨：&ldquo;还应有一个后台线程，让</span>
Waiter<span style="font-family: 宋体;">随时</span>
exchangePlate<span style="font-family: 宋体;">，让</span>
KitchenHand<span style="font-family: 宋体;">随时</span>
washDishes<span style="font-family: 宋体;">和</span>
clean<span style="font-family: 宋体;">，这样所有服务人员提供</span>
<span style="font-family: 宋体;">的</span>
<span style="font-family: 宋体;">服务都用上了。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">句号吸口凉气：&ldquo;估不到漏洞这么多，并发式真是无处不在啊。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号指着引号：&ldquo;刚才有人不满你的大厨职责过于简单，现在你来实现一下，也好显显技术含量。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">引号在台上摸了半天头，编出一段代码&mdash;&mdash;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">Class Cook</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
public
Course cook(Order order) </span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
//
</span>
<em><span style="font-family: 宋体; color: blue;">根据菜单查食谱</span>
</em>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">Recipe recipe =
lookupRecipe(order);</span>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">// </span>
<em><span style="font-family: 宋体; color: blue;">找到食谱的烹调步骤</span>
</em>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">List&lt;Instruction&gt;
instructions = recipe.getInstructions();</span>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">for (Instruction
instruction : instructions)</span>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">{</span>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;"><span> </span>
follow(instruction); // </span>
<em><span style="font-family: 宋体; color: blue;">按食谱的指令操作</span>
</em>
</p>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify; text-indent: 36pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="color: blue;">}</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;堂堂大厨原来是靠查食谱做菜的。&rdquo;逗号揶揄道。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">引号为难地说：&ldquo;这不是在编程嘛，好端端的人脑，不得不去模拟电脑，完全搞倒了。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;要设计会烹调的机器人，兴许还真得这样呢。&rdquo;冒号笑道，&ldquo;不过由于各种菜式组合繁多，如果每种菜都配菜谱未免太庞杂，如何精简呢？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">句号建议：&ldquo;菜式成千上万，烹调技法相对少许多，不妨以技法为主线。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;好主意！&rdquo;冒号挑起大拇指，&ldquo;如果把待加工的菜看作数据，技法看作算法，将数据与算法分离，以算法为中心，那是什么范式？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;<em>泛型式</em>
！&rdquo;大家异口同声。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span>&nbsp;</span>
<span style="font-family: 宋体;">&ldquo;至此我们已涉及了过程式、对象式、并发式、函数式和泛型式。&rdquo;引号如数家珍，&ldquo;还差逻辑式、元编程和切面式了。&rdquo;</span>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 冒号把目光转向逗号：&ldquo;写菜单并不容易，如果客人不直接点菜，你的服务员如何向他推荐？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">逗号答：&ldquo;最简单的方法是报菜名，并一一询问客人。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号皱眉：&ldquo;这样你是简单了：一个迭代就搞定，可客人也该发火了。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">逗号赶紧修正：&ldquo;先询问客人的口味、忌讳等等，再向他建议一些菜式。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;这还差不多。&rdquo;冒号眉头舒展开来，&ldquo;考虑到客人的口味、忌讳等各有不同，餐馆的菜单也随时可能变化，如果把这些都硬编码（</span>
hardcode<span style="font-family: 宋体;">），代码将成为懒婆娘的裹脚&mdash;&mdash;又臭又长又难维护。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">引号提议：&ldquo;可以把这些信息预先存入数据库，届时用</span>
SQL<span style="font-family: 宋体;">查询。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;想法很好，只是有一点难度。&rdquo;冒号提醒道，</span>
<span lang="ZH-CN"> </span>
<span style="font-family: 宋体;">&ldquo;这些信息并非简单的对应关系，包含一些逻辑推理，甚至需要一些模糊判断。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">句号一拍大腿：&ldquo;前面不是提到领域特定语言</span>
DSL<span style="font-family: 宋体;">吗？将所有规则用自定义的</span>
DSL<span style="font-family: 宋体;">编写，再利用<em>元编程</em>
转换成</span>
C<span style="font-family: 宋体;">、</span>
Java<span style="font-family: 宋体;">之类的通用语言，不是很好吗？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;棒极了！&rdquo;冒号不吝赞词，&ldquo;不过还有一种思路。我们可以搜集餐馆的菜式、顾客口味、忌讳以及各种菜与口味、忌讳之间的关系等等一系列事实和规则，用<span style="text-decoration: underline;">规则语言</span>
（</span>
Rule
Language<span style="font-family: 宋体;">）如</span>
RuleML<span style="font-family: 宋体;">、</span>
SWRL<span style="font-family: 宋体;">、</span>
Jess<span style="font-family: 宋体;">等来描述，通过<span style="text-decoration: underline;">规则引擎</span>
（</span>
Rule Engine<span style="font-family: 宋体;">）来导出符合顾客需求的菜肴。这种方式将业务规则与应用程序分离、将知识与逻辑实现分离，是</span>
SoC<span style="font-family: 宋体;">原理的一种应用，同时也是一种<em>逻辑式</em>
编程。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">问号关心地问：&ldquo;这些规则引擎与</span>
Java<span style="font-family: 宋体;">程序兼容吗？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号回答：&ldquo;不少规则引擎用</span>
Java<span style="font-family: 宋体;">实现或专为</span>
Java<span style="font-family: 宋体;">平台设计，如</span>
Jess<span style="font-family: 宋体;">、</span>
Drools<span style="font-family: 宋体;">、</span>
JLisa<span style="font-family: 宋体;">等，另外</span>
Sun<span style="font-family: 宋体;">还发布了</span>
javax.rules
API (JSR 94)<span style="font-family: 宋体;">以统一对各类引擎的访问接口。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">讲到此处，每个人都意识到，只剩下最后一个范式了。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号提出新问题：&ldquo;假如餐馆经理接到顾客投诉，反映服务人员态度不好，卫生状况也不理想，应该怎么办？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">问号抢先说：&ldquo;首先我的接待员在</span>
receive<span style="font-family: 宋体;">时要笑容可掬地对顾客说：&lsquo;欢迎光临！&rsquo;，在</span>
send<span style="font-family: 宋体;">时要对顾客鞠躬：&lsquo;请慢走，欢迎下次再来&rsquo;&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">逗号接着说：&ldquo;我的服务员在上完菜后应对客人说：&lsquo;请慢用&rsquo;，句号的收银员也应加些礼貌用语，让人家高高兴兴地掏钱。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">句号补充道：&ldquo;服务员在</span>
serve<span style="font-family: 宋体;">前、厨师在</span>
cook<span style="font-family: 宋体;">前应洗手，厨工在</span>
washDishes<span style="font-family: 宋体;">后应对餐具消毒。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号紧接着问：&ldquo;如果餐馆对礼貌规范或卫生标准做修改，必然要牵扯不同类中的不同的方法，维护起来很不方便，怎样才能有效地解决这个问题呢？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">答案已经昭然若揭了。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号干脆自问自答：&ldquo;不错，正是用<em>切面式</em>
编程。只要创立两个</span>
Aspect<span style="font-family: 宋体;">：</span>
Etiquette<span style="font-family: 宋体;">和</span>
Sanitation<span style="font-family: 宋体;">，分别负责礼貌规范和卫生标准方面的事务。一旦某一方面的要求发生变化，比如餐馆来了外宾，或者碰上非典或禽流感，只需在相应的</span>
Aspect<span style="font-family: 宋体;">模块中作调整：将礼貌用语换成英语或者提高卫生标准等等。如果采用</span>
runtime
AOP<span style="font-family: 宋体;">，甚至还可在<em>运行期</em>
选择激活或禁用这些</span>
Aspect<span style="font-family: 宋体;">。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">下面开始有些骚动，大家早已脑中满满而腹中空空，有些头重脚轻了。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号见状，遂发出激动人心的号召：&ldquo;今天的课到此结束，让我们从虚拟的餐馆中走出，到真实的餐馆中去吧。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">众人齐声欢呼。</span>
<strong></strong>
</p>
<p class="MsoNormal" style="text-align: justify;"><!--      [if !supportEmptyParas]-->&nbsp;<!--      [endif]--></p>
          <br/>
          <span style="color:red;">
            <a href="http://xyz98.javaeye.com/blog/187909#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Apr 2008 10:09:44 +0800</pubDate>
        <link>http://xyz98.javaeye.com/blog/187909</link>
        <guid>http://xyz98.javaeye.com/blog/187909</guid>
      </item>
      <item>
        <title>冒号和他的学生们（3）——语言选择</title>
        <author>xyz98</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xyz98.javaeye.com">xyz98</a>&nbsp;
          链接：<a href="http://xyz98.javaeye.com/blog/184849" style="color:red;">http://xyz98.javaeye.com/blog/184849</a>&nbsp;
          发表时间: 2008年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h1 style="text-align: center;"><span style="font-family: 宋体;">冒号和他的学生们</span>
</h1>
<p class="MsoNormal" align="center" style="text-align: center;"><span style="font-family: 宋体;">&mdash;&mdash;程序员提高班纪事</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt;">&nbsp;</p>
<p class="MsoNormal" style="margin-left: 18pt;"><!--   [endif]-->
<strong><span style="font-family: 宋体;">3. 语言选择</span>
</strong>
</p>
<ol type="1" style="margin-top: 0cm;">
</ol>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><em><span style="font-family: 宋体;">尺有所短，寸有所长</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</em>
<em><span style="font-family: 宋体;">&mdash;&mdash;《楚辞》</span>
</em>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;"><br />
</span>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 问号觉得自己的问题并未解决，追问：&ldquo;这么多种语言，仅凭流行度就能分出主次优劣吗？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;流行度当然不是唯一的指标。&rdquo;冒号答道，&ldquo;语言的主次优劣因人而异，答案在你们自己身上。还是刚才那句话，唯一的老师是你自己。&rdquo;</span>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 看到大家期待的目光开始黯淡，冒号接着说：&ldquo;评书里名师授艺时，常常要徒弟自己挑选称手的兵器。威武的刀，灵活的枪，飘逸的剑，浑厚的棍，粗犷的斧，霸道的锤，诡异的鞭，无不谙合武者的个性。评判语言优劣，如同争论兵器高下，倘若撇开使用的主体和对象，皆为空泛之谈。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">句号若有所悟：&ldquo;所以<strong>好的语言就是适合编程者和解决对象的语言</strong>
。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;非常正确！&rdquo;冒号赞许道：&ldquo;这就是问号同学要的答案。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">引号并不满足：&ldquo;可我记得评书里经常描述高手的一句话</span>
&shy;<span style="font-family: 宋体;">：十八般兵器样样精通。&rdquo;</span>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 冒号一笑：&ldquo;兵器虽多，其理相通，高手精通多种兵器何足为奇？但如果让赵云使锤，李元霸使枪，武力恐怕还是要大打折扣吧？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">逗号依然困惑：&ldquo;我们如何判断一种语言是否适合自己，是否适合解决对象呢？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号看出大家共同的疑惑，不紧不慢地说：&ldquo;要想从中选择，自然先得了解，不然怎知兵器称不称手，合不合用？现在进入正题，我们先对计算机语言作个简要的回顾。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">大伙均想，总算要挠着痒处了。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;计算机语言是人用来指挥计算机的语言，按其发展历程通常分为五代。&rdquo;冒号说完在黑板上写下&mdash;&mdash;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><em><span style="font-family: 宋体;">第一代语言（</span>
1GL</em>
<em><span style="font-family: 宋体;">）：机器语言</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><em><span style="font-family: 宋体;">第二代语言（</span>
2GL</em>
<em><span style="font-family: 宋体;">）：汇编语言&mdash;&mdash;</span>
IA-32 Assembly</em>
<em><span style="font-family: 宋体;">，</span>
SPARC Assembly</em>
<em><span style="font-family: 宋体;">等</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><em><span style="font-family: 宋体;">第三代语言（</span>
3GL</em>
<em><span style="font-family: 宋体;">）：高级语言&mdash;&mdash;</span>
Fortran</em>
<em><span style="font-family: 宋体;">，</span>
Pascal</em>
<em><span style="font-family: 宋体;">，</span>
C</em>
<em><span style="font-family: 宋体;">，</span>
Java</em>
<em><span style="font-family: 宋体;">，</span>
VB</em>
<em><span style="font-family: 宋体;">等</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><em><span style="font-family: 宋体;">第四代语言（</span>
4GL</em>
<em><span style="font-family: 宋体;">）：面向问题语言</span>
&shy;</em>
<em><span style="font-family: 宋体;">&mdash;&mdash;</span>
SQL</em>
<em><span style="font-family: 宋体;">，</span>
SAS</em>
<em><span style="font-family: 宋体;">，</span>
SPSS</em>
<em><span style="font-family: 宋体;">等</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><em><span style="font-family: 宋体;">第五代语言（</span>
5GL</em>
<em><span style="font-family: 宋体;">）：人工智能语言&mdash;&mdash;</span>
Prolog</em>
<em><span style="font-family: 宋体;">，</span>
Mercury</em>
<em><span style="font-family: 宋体;">，</span>
OPS5</em>
<em><span style="font-family: 宋体;">等</span>
</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><!--   [if !supportEmptyParas]-->&nbsp;<!--   [endif]--></p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号补充道：&ldquo;也可简单地将前两代统称为低级语言，其他的统称为高级语言。语言从低级到高级，离机器语言更远，离人类语言更近，因而更易读写、调试和维护，安全性、通用性和可移植性更强，开发效率更高，更加抽象和宏观；但同时运行速度和效率下降，用法和功能上局限性更大。如果拿兵器作比，高级语言好比长兵器，威力强大却难免滞重，长于大型应用，可谓&lsquo;一寸长，一寸强&rsquo;；低级语言好比短兵器，轻便灵活却难免风险，长于底层应用，可谓&lsquo;一寸短，一寸险&rsquo;。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">大伙心里话，敢情来这儿不像是学编程的，倒像是学武术的。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">叹号说道：&ldquo;我看还是高级语言好，现在谁还学低级语言啊？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号纠正道：&ldquo;低级语言既不低级也不过时，只是随着高级语言的出现，计算机硬件性能的提高，渐渐有些边缘化了。虽然几乎没有人用机器语言编程了，汇编语言仍有其用武之地。常见的有：包括嵌入式系统在内的系统开发，如操作系统、编译器、驱动程序、无线通讯、</span>
DSP<span style="font-family: 宋体;">、</span>
PDA<span style="font-family: 宋体;">、</span>
GPS<span style="font-family: 宋体;">等；其他对资源、性能、速度和效率极为敏感的软件开发；以信息安全、软件维护与破解等为目的的逆向工程等等。即使你不打算从事系统开发，也不想作红客、黑客或骇客，掌握汇编语言对你深入了解计算机内部运行机制、调试软件和改进程序中某些关键代码的算法也是有帮助的。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">引号提出：&ldquo;好像有些书上把</span>
C<span style="font-family: 宋体;">语言称为中级语言。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号答道：&ldquo;这是因为</span>
C<span style="font-family: 宋体;">兼具高级语言和低级语言的特征。一方面它提供了高层抽象和可移植性，使程序员更多地专注问题逻辑而不是机器逻辑；另一方面它也提供诸如指针、位字段（</span>
bitfield<span style="font-family: 宋体;">）等工具进行底层操作，甚至可直接内嵌汇编代码。</span>
C<span style="font-family: 宋体;">语言既简洁灵活又高效强大，是迄今为止最具影响力的语言。几乎所有的操作系统和大多数高级语言都用它来实现，</span>
C<span style="font-family: 宋体;">家族的语言</span>
C<span style="font-family: 宋体;">、</span>
C++<span style="font-family: 宋体;">、</span>
Java<span style="font-family: 宋体;">、</span>
C#<span style="font-family: 宋体;">、</span>
D<span style="font-family: 宋体;">、</span>
Objective C<span style="font-family: 宋体;">等占据主流语言的半壁江山。如果再拿兵器作比，</span>
C<span style="font-family: 宋体;">语言就是一把剑，轻灵飘逸、锐利快捷。一名武将无论擅用什么兵器，往往都会腰悬宝剑。不会</span>
C<span style="font-family: 宋体;">的程序员正如不会使剑的武将，无论如何都是一种缺憾。相比之下，汇编语言就像小刀匕首，而机器语言则近乎赤手空拳了。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">句号灵光一闪：&ldquo;我明白了&mdash;&mdash;西门吹雪的西来一剑，那是</span>
C<span style="font-family: 宋体;">语言；李寻欢的小李飞刀，那是汇编语言；陆小凤的灵犀一指，那是机器语言。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">大家会心地笑了。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号也笑言：&ldquo;这位是古龙的粉丝吧？武侠小说里的侠客多轻功高绝且喜单打独斗，故使用轻、短兵器居多；而历史小说里的战将多骑马进行大规模作战，故除了佩剑外，使用重、长兵器居多。这就是前面提到的，中低级语言更适合中小型或底层应用，高级语言更适合大型应用。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">众人活跃起来，开始议论纷纷。冒号放耳听去，净是些古龙金庸、三国水浒里的人物，暗想：通俗小说到底比编程吸引人啊。</span>
</p>
<p class="MsoNormal" style="text-align: justify;"><!--   [if !supportEmptyParas]-->&nbsp;<!--   [endif]-->&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://xyz98.javaeye.com/blog/184849#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Apr 2008 09:07:00 +0800</pubDate>
        <link>http://xyz98.javaeye.com/blog/184849</link>
        <guid>http://xyz98.javaeye.com/blog/184849</guid>
      </item>
      <item>
        <title>冒号和他的学生们（2）——首轮提问</title>
        <author>xyz98</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xyz98.javaeye.com">xyz98</a>&nbsp;
          链接：<a href="http://xyz98.javaeye.com/blog/184850" style="color:red;">http://xyz98.javaeye.com/blog/184850</a>&nbsp;
          发表时间: 2008年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h1 style="text-align: center;"><span style="font-family: 宋体;">冒号和他的学生们</span>
</h1>
<p class="MsoNormal" align="center" style="text-align: center;"><span style="font-family: 宋体;">&mdash;&mdash;程序员提高班纪事</span>
</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <strong>2. <span style="font-family: 宋体;">首轮提问</span>
</strong>
</p>
<ol type="1" style="margin-top: 0cm;">
</ol>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><em><span style="font-family: 宋体;">敬畏老师莫如敬畏真理</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</em>
<em><span style="font-family: 宋体;">&mdash;&mdash;题记</span>
</em>
<strong></strong>
</p>
<p class="MsoNormal" style="text-indent: 18pt;"><strong><em><!--   [if !supportEmptyParas]-->&nbsp;<!--   [endif]--></em>
</strong>
&nbsp;<!--   [endif]-->  </p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">众人面面相觑，一阵沉默后开始窃窃私语，显然有些不太习惯这种教学方式&mdash;&mdash;笔记本上还没写两个字呢，老师就把球给踢回来了。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号也不说话，只是微笑地望着大家。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">还是问号打破僵局，开始发问：&ldquo;老师&mdash;&mdash;&rdquo;</span>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 冒号扬手打断他：&ldquo;这里没有老师，<strong>唯一的老师是你自己</strong>
。本班的一个特色是：师生角色模糊，大家自主学习，相互启发，教学相长。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">问号顿了顿：&ldquo;老冒&mdash;&mdash;&rdquo;全班哄堂大笑，&ldquo;学软件开发，当然得先学语言，计算机语言这么多，到底哪个好，或者说学哪个好？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号笑道：&ldquo;这个问题很典型，很实在，也很初级。&rdquo;问号被&ldquo;初级&rdquo;这个字眼刺得面上一红，&ldquo;如果信奉流行的就是好的，那么也许可以给你一个参考答案。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号转身在黑板上写下一串清单</span>
&shy;<span style="font-family: 宋体;">&mdash;&mdash;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><strong><em>Java</em>
</strong>
<em>(20.7%) <strong>C</strong>
(15.6%) <strong>VB</strong>
(10.8%) <strong>PHP</strong>
(10.1%) <strong>C++</strong>
(9.8%) <strong>Perl</strong>
(5.8%)</em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><strong><em>Python</em>
</strong>
<em>(4.6%) <strong>C#(</strong>
4.1%) <strong>Delphi</strong>
(2.7%) <strong>Ruby</strong>
(2.7%) <strong>JavaScript</strong>
(2.5%) <strong>D</strong>
(1.1%) </em>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><!--   [if !supportEmptyParas]-->&nbsp;<!--   [endif]--></p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;根据</span>
TIOBE<span style="font-family: 宋体;">截至</span>
2008<span style="font-family: 宋体;">年</span>
3<span style="font-family: 宋体;">月份的统计结果，选出以上流行度超过</span>
1<span style="font-family: 宋体;">％的</span>
12<span style="font-family: 宋体;">种程序语言。从中可以看出，它们的总占有率超过</span>
90<span style="font-family: 宋体;">％，应该算得上是当今主流语言的代表。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">引号很疑惑：&ldquo;怎么可能那么流行的</span>
ASP<span style="font-family: 宋体;">和</span>
JSP<span style="font-family: 宋体;">都不在其中呢？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;对啊，&rdquo;逗号附和道：&ldquo;还有</span>
HTML<span style="font-family: 宋体;">和</span>
XML<span style="font-family: 宋体;">怎么不算呢？&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号解释道：&ldquo;</span>
ASP<span style="font-family: 宋体;">、</span>
JSP<span style="font-family: 宋体;">和</span>
PHP<span style="font-family: 宋体;">是动态网页最流行的三种解决方案。动态网页的实现方式很多，但它们采取的几乎是同样的方式&mdash;&mdash;在静态网页中植入一些能在服务器端运行的代码。在</span>
ASP<span style="font-family: 宋体;">和</span>
JSP<span style="font-family: 宋体;">中，这些代码并不涉及新的语言，故称之为模板、框架或脚本环境更合适些。</span>
PHP<span style="font-family: 宋体;">则不同，本身是一种新的程序语言，并且除了应用于服务端外，还能编写命令行脚本和桌面应用程序。至于</span>
HTML<span style="font-family: 宋体;">和</span>
XML<span style="font-family: 宋体;">，还有</span>
XHTML<span style="font-family: 宋体;">、</span>
WML<span style="font-family: 宋体;">等，均为</span>
SGML<span style="font-family: 宋体;">（</span>
Standard Generalized Markup Language<span style="font-family: 宋体;">）的子集，属于标记（</span>
Markup<span style="font-family: 宋体;">）语言。与通常意义上的程序语言有所不同，它们是处理的对象而不是处理的主体。可以说它们更接近数据格式标准，正如</span>
CSV<span style="font-family: 宋体;">和</span>
JSON<span style="font-family: 宋体;">一样。当然也不绝对，</span>
XSLT<span style="font-family: 宋体;">是一种特殊的</span>
XML<span style="font-family: 宋体;">，但却包含变量定义和处理逻辑，更学术地说，它是图灵完备的（</span>
Turing-complete<span style="font-family: 宋体;">），应当属于程序语言。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;就算这些不是程序语言，那也是计算机语言，该学的还是得学。&rdquo;句号想起问号开始问的是计算机语言，老冒有偷换概念之嫌。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;不错，&rdquo;冒号点点头，&ldquo;不仅要学语言，还要熟悉相应的开发环境和开发工具等等，当然最重要的是学习其中的思想。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">&ldquo;唉，学完这些头发都白了，程序员可是吃青春饭的。&rdquo;叹号叹息道。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号扫视了一下，说道：&ldquo;现在班上每个人都尊口已开，这是一个很好的开始。开放言论才能解放思想，思想解放了才能产生灵感和激情。缺乏灵感和激情的程序员，学习起来吃力，工作起来辛苦，最后就会感慨这是吃青春饭的职业。&rdquo;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">叹号不好意思地挠了挠头。</span>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://xyz98.javaeye.com/blog/184850#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Apr 2008 08:01:00 +0800</pubDate>
        <link>http://xyz98.javaeye.com/blog/184850</link>
        <guid>http://xyz98.javaeye.com/blog/184850</guid>
      </item>
      <item>
        <title>冒号和他的学生们（1）——开班发言</title>
        <author>xyz98</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xyz98.javaeye.com">xyz98</a>&nbsp;
          链接：<a href="http://xyz98.javaeye.com/blog/184851" style="color:red;">http://xyz98.javaeye.com/blog/184851</a>&nbsp;
          发表时间: 2008年04月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h1 style="text-align: center;"><span style="font-family: 宋体;">冒号和他的学生们</span>
</h1>
<p class="MsoNormal" align="center" style="text-align: center;"><span style="font-family: 宋体;">&mdash;&mdash;程序员提高班纪事</span>
</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp; <strong><span style="font-family: 宋体;">1. 开班发言</span>
</strong>
</p>
<ol type="1" style="margin-top: 0cm;">
</ol>
<p class="MsoNormal" style="text-indent: 18pt;"><em><span style="font-family: 宋体;">授人以鱼不如授人以渔</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
</em>
<em><span style="font-family: 宋体;">&mdash;&mdash;古语</span>
</em>
</p>
<p class="MsoNormal" style="text-indent: 18pt;"><strong><em><!--   [if !supportEmptyParas]-->&nbsp;<!--   [endif]--></em>
</strong>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">冒号开了个程序员提高班，今天迎来了首期学员，他们是问号、句号、逗号、引号和叹号，皆为</span>
IT<span style="font-family: 宋体;">业的新兵。望着台下洋溢着青春与渴望的脸庞，冒号开始了他的开班发言&mdash;&mdash;</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">大家好！先自我介绍一下，本人姓冒名号字解之。诸位不必叫我老师，就叫老冒好了。比在座各位痴长几岁，&ldquo;老&rdquo;是担得的，&ldquo;师&rdquo;却不敢妄言。在下编程多年，自觉小有所成，不敢专藏，特开此班与众共享。虽系一家之言、一孔之见，若能抛砖引玉，又何惧方家之哂？疏谬之处，还望海涵斧正，不致自误误人。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">客套已毕，言归正传。本班主要采取讨论的形式，只要是软件开发中值得讨论的，但凡本人力之所及，均可共同探讨。</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">本班的宗旨是：<strong>学会不如会学，会学不如会用，会用不如被用</strong>
。对于一个软件开发者来说，这意味着四个阶段：</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">学会&mdash;&mdash;掌握一些具体编程知识的初级程序员</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">会学&mdash;&mdash;能快速而深刻地理解技术并举一反三的程序员</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">会用&mdash;&mdash;能将所学灵活运用到实际编程设计之中的高级程序员</span>
</p>
<p class="MsoNormal" style="text-align: justify; text-indent: 18pt;"><span style="font-family: 宋体;">被用&mdash;&mdash;能设计出广为人用的应用程序（</span>
application<span style="font-family: 宋体;">）、库（</span>
library<span style="font-family: 宋体;">）、工具包（</span>
toolkit<span style="font-family: 宋体;">）、框架（</span>
framework<span style="font-family: 宋体;">）等的系统分析员和架构师</span>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 至于被用的更高层次，如发明出主流的设计模式、算法、语言乃至理论等，则可称得上计算机专家了。本班的目的，正是为各位向更高阶段的提升助一臂之力。</span>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 大家可能都习惯了在小学、中学和大学里的课堂，那里的知识大多是系统而完备且貌似终极的，那里的学习大多是单向而被动的。但习惯并不意味着享受，更多的是因为别无选择。你们曾被引入一座座知识殿堂，被告知它们如何美轮美奂、巧夺天工，尽管很多时候你们或不以为然、或不解其妙，但还是不得不记下每一处被指点的细微结构。很少有人带你们看看当初为建造这些殿堂而打下的地基、搭设的脚手架，哪怕只是上漆前的模样也好，更遑论一瞻数易其稿的设计图纸了。那些与殿堂相比显得有些原始、甚至丑陋的东西，被有意无意地挡在视线之外。可没有那些，你们将来如何为这些宫殿添砖加瓦，又如何另起楼阁呢？</span>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 中国学生恐怕是世界上最擅长考试、最习惯考试、也最厌倦考试的群体了。你们告别了学生生涯，踏上了职业之旅。首先我要恭喜你们，脱离苦海了！同时也要悲告你们，掉进火坑了！危言耸听吗？如果你选择了做程序员，你时时都得学习，没有手把手教你的老师，没有指定的教科书和参考书，有的是层出不穷令人眼花缭乱的新概念、新技术、新问题，好不容易学到一些皮毛，有的已成明日黄花。你时时都得考试，每提交一段代码就是上交一份答卷，你不知道什么时候、什么人会批改，直到&mdash;&mdash;开发组同事发现你的代码难以看懂，系统分析员指出你的程序不符合规范，测试工程师检验到你的软件有</span>
bug<span style="font-family: 宋体;">，客户抱怨你的产品太慢太难用，最后老板倒是告诉你一个好消息：明天起放长假！</span>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 其实，又有哪行哪业的人不需要学习和考试呢？</span>
IT<span style="font-family: 宋体;">业只是相对更激烈更富挑战性而已。在这个瞬息万变、适者生存的时代，如果还沿用封闭、被动的学习方式，恐有淘汰之虞。有鉴于此，本班的风格与你们习惯的课堂有所不同：这里的知识不一定是系统或完备的，但一定是生动鲜活的。如果知识是水，我们要挖掘最先涌动的那颗泉眼；如果知识是火，我们要捕捉起初点燃的那颗火花。这里的问题不一定是预设的，结论不一定是终极的，甚至不一定是正确的，但一定是有的放矢、发人深思的。由此决定了这里的学习方式将是开放多元、双向互动的。</span>
</p>
<p class="MsoBodyTextIndent"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; 广告完毕，现在把话语权交给你们，大家自由发问吧。</span>
 </p>
&nbsp;
          <br/>
          <span style="color:red;">
            <a href="http://xyz98.javaeye.com/blog/184851#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 17 Apr 2008 19:42:00 +0800</pubDate>
        <link>http://xyz98.javaeye.com/blog/184851</link>
        <guid>http://xyz98.javaeye.com/blog/184851</guid>
      </item>
  </channel>
</rss>