快速业务通道

冒号课堂§4.4:情景范式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
0.00001;   // dx越小,近似度越高     return function(x) { return (f(x + dx) - f(x)) / dx; }; } /* 返回一个数的平方数 */ function square(x) { return x * x; } /* 返回一个数的双倍数 */ function double(x) { return 2 * x; } /* 对任何一个不大的数值变量x(比如小于100),下列函数的返回值应该非常接近于零 */ function testSquareDerivative(x) { return derivative(square) (x) - double(x); }

冒号课堂§4.4:情景范式(4)

时间:2011-06-27 BlogJava xyz98

叹号感到有点头痛:“怎么跑出了微积分?大学学的那点高数早就还给老师了。”

冒号笑着安慰他:“还给老师没关系,我再借给你一点:平方函数的导数是双倍函数。因此,函数derivative(square)应该很接近函数double的作用效果。作为检验,testSquareDerivative能将任何一个不大的数映射到近似于零的数[1]。”

引号这下彻底明白了:“在求导函数derivative中,传入的参数f和返回值都是函数,这是函数作为头等公民的特征。其中返回的匿名函数就是闭包,它附着了两个环境变量:外层函数的传入参数f和局部变量dx。”

“完全正确!”冒号作出积极的肯定,“如果不是闭包,这两个环境变量在derivative返回后就会失去效用。由此可见,合理地使用闭包能使代码更加简洁清晰,散发出函数式特有的优雅气质。”

句号有些按捺不住编程的冲动,自告奋勇:“我来具体实现餐馆的serve方法吧。”

得到冒号的默许,句号在黑板上写下——

private void serve(Customer customer) { // 找一个空闲的接待员 Receptionist receptionist = findReceptionist(); receptionist.receive(customer); receptionist.usher(customer);        // 找一个空闲的服务员 Waiter waiter = findWaiter(); waiter.pourTea(customer); List<Order> orders = waiter.write(customer)    ; // 将菜单交给一位厨师 Cook cook = waiter.pass(orders); for (Order order : orders) // 厨师照单做菜 { Course course = cook.cook(order);        // 找一个空闲的服务员 waiter = findWaiter(); // 服务员上菜 waiter.serve(customer, course); // 顾客开始享用 customer.eat(course); } // 顾客用餐完毕。。。     // 找一个空闲的收银员 Cashier cashier = findCashier(); cashier.charge(customer); cashier.issueInvoice(customer); // 找一个空闲的接待员 receptionist = findReceptionist(); receptionist.send(customer); }

冒号课堂§4.4:情景范式(5)

时间:2011-06-27 BlogJava xyz98

句号写毕又复查一遍,拍拍手上的粉笔灰,心满意足地走下台来。

叹号提意见:“我的厨工没派上用场,应该在厨师烹调前调用KitchenHand的prepareFood方法。”

问号挑出另外的毛病:“在for循环中,厨师、服务员和顾客的行为应该在不同的线程中,厨师不可能等服务员上完一道菜或顾客吃完一道菜后才做下一道。”

“可能更复杂呢!”逗号也来凑热闹,“一位顾客点的几样菜可能分别由几位厨师同时做,每位厨师都在不同的线程中工作。”

引号更严谨:“还应有一个后台线程,让服务员(Waiter)随时换盘(exchangePlate),让厨工(KitchenHand)随时洗盘(washDishes)和清洁(clean),这样所有服务人员提供的服务都用上了。”

句号倒抽凉气:“估不到漏洞这么多,并发式真是无处不在啊。”

冒号继续点拨:“换盘子有两种方式:一种是服务员主动换,一种是客人要求换。前者是轮询,后者是通知。”

“哦

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号