• 图书作品
  • 重点推荐
  • 新书推介
  • 学习指导
  • 关于我们
  • 最新文章

《CSS设计彻底研究——核心原理、技巧与设计实战》一书已经上市,各大网商店正在逐渐上架。

了解本书:

1:观看《CSS设计彻底研究》视频教程,与图书内容对应 。

2:了解本书的前言、目录和样章(PDF文档)

购买本书:

卓越亚马逊 / 当当网 / 淘宝网

这里查看更多信息

《精通Javscript+jQuery》上市了,本书适合于希望使用Javascript和jQuery进行Web开发的读者。

样张预览:(以下文件为pdf格式)

[ 前言 ] [ 目录 ] [ 全书案例索引 ] [ 第10章(jQuery) ]

配套视频教程:

[ http://learning.artech.cn/category/javscript-jquery ]

网上书店购买:

[ 卓越亚马逊 ] [ 当当 ]

这里查看更多信息

随着Web 2.0的不断深入和发展,Web设计和开发的相关技术也在迅猛地发展中,CSS是一项新的不可或缺的技术。通过使用CSS可以最大程度地实现Web的标准化,为Web设计和开发带来巨大的优势。

前沿视频教室推出了两本关于CSS设计的图书,它们分别是《精通CSS+DIV网页样式与布局》《CSS设计彻底研究——核心原理、技巧与设计实战》。前者于2007年8月出版,后者也即将上市。

我们共制作了10个小时的精彩视频教程,配合两本书的讲解,使读者学习更加轻松、容易。如果您对CSS和Web设计开的新技术感兴趣,不要错过这里的视频教程哦:

观看《精通CSS+DIV网页样式与布局》视频教程

观看《CSS设计彻底研究——核心原理、技巧与设计实战》视频教程

  • 您希望制作更吸引人的网页吗?
  • 你希望探究CSS网页布局的奥秘吗?
  • 您在寻找轻松学习制作Flash动画的方法吗?
  • 您对厚厚的计算机图书感到害怕吗?

在前沿视频教室中,您可以找到非常清晰的视频教程,所有这些教程都是我们精心制作的原创作品。

前沿视频教室为你提供各方面的免费视频教程。你第一次看我们课程,可能无法完全掌握它,但是如果你坚持几天以后,就会发现学习并不困难,而当你能够自己制作一些漂亮的网页或者动画的时候,你将会感受到非凡的成就感和由此带来的快乐!相信我们,相信你自己!

这里查看更多信息

共 86 页: [1] 2 3 4 5 6 » ... 末页 | 下一页»

随笔随心(10) —— 也谈 JavaEye 改名

TRACK TOP
2011年04月14日 星期四 | 所在分类: 随心随笔
334 条评论

这个“随心随笔”系列文章,是我在遇到有趣或值得思考的事情时,写的一些随笔,供大家参考。

10. 也谈 JavaEye 改名

9. 关于写书的一事一议

8. 论一论近日的百度侵权问题

7. 计算机图书十二年之体会

6. 闯荡北京值不值?

5. 沙漠里可以钓鱼吗?

4. 做网站比的是慢功夫

3. 给教师朋友的关于CSS的几点教学建议

2. 虚竹的人生启示

1. 如何写好技术博客

0. 大多数设计师将成为自由职业者

JavaEye.com 是在中国相当知名的一个开发者社区,前几天将使用了7年的名称和域名从 JavaEye 改名为 ItEye,原因是 Oracle 公司认为这个名称侵犯了对 Java 这个名称的权利,JavaEye 放弃了通过法律一争高下,选择改名。这里不讨论Oracle的行为是否符合法律。假设 Oracle 的要求是符合法律的,那么这类行动会对未来会产生什么结果呢?从一些相关的文章,可以知道,Oracle 收购 Sun 以后,获得了Java 的控制权,然后关闭许多知名的第三方 Java 开发者社区。Oracle的做法是,开发者社区要由Oracle自己来作;其他人要做Oracle的社区,就是对Oracle的侵权。对于Oracle来说,社区的学习需求要转化为Oracle的培训业务,社区成员之间的自我交流是会影响培训部门业务的。

感觉上,这是个有问题的做法。具体信息可以查看这里,此外还可以参考一篇原 Sun 中国技术社区的高级经理蒋清野的评论文章

8891052-1_l.jpg这让我想到了Merrill Chapman所著的《In Search of Stupidity》(中文翻译为《IT大败局》)一书中,对20世纪80年代的软件巨头 Ashton-Tate 公司的描述。20多年过去了,这个名字已经没有什么人知道了,不过它的产品 dBase 数据库,很多人还是有印象的。这家公司依靠 dBase 数据库,在上世纪八十年代如日中天,在软件领域与微软、Lotus 一起三国鼎立。

在《IT大败局》这本书中,总结了这家公司失败的原因:大量封杀基于 dBase 的第三方开发团队,以法律手段进行恐吓,威胁要诉讼那些他认为侵犯了dBase 权利的人;对咨询、培训和出版市场进行封杀,禁止第三方的咨询、培训、出版机构使用任何关于 dBase 这一名称。这些行动的后果就是短短几年,dBase 就一败涂地,被卖给了当时鼎盛的Borland公司,而遗憾的是当时Borland公司的创始人 Philippe 当时也被胜利冲昏头脑,没有抓住机会,失去了对数据库软件的控制权。如果他们两人没有犯错误,可能就不会给 Oracle 和微软的 SQL Server 留下机会了。

这种级别的企业之间的竞争,已经不是一两个产品的竞争,这种级别的企业构建的不仅仅是几款产品,而是围绕产品的整个生态系统。竞争的本质是生态系统之间的竞争。没有大量第三方的参与,没有庞大的生态系统,仅仅靠一个公司自身力量,是不可能获得成功的。当然 Oracle 的成功有目共睹,他们采取的任何策略肯定都是尤其考虑和目的的。最终的结果如何,只有靠时间来检验。

蒋清野在文中谈到:“我向来认为,IT行业的进入门槛是在不断降低的。同样一个工程问题,由技术水平相当的两个团队使用不同的技术来实现,在工作量和实际效果上不会有太大的差别。在这个大前提下,谁能够吸引更多的开发人员,谁就能够在生产平台上获得更大的市场份额。”说的确实非常在理。与之对比的,这让我想起了一个在网上流传很广的视频,微软CEO鲍默尔在讲演中高喊“Developers!Developers!”(开发者!开发者!)的视频,。

当然这里还要顺便再指出一点,一个公司这么做,即使你认为这是在错误,最终也必须让市场去评判,而不能是用暴力的方式去不尊重知识产权。绝不能因为分享的名义,就可以放任盗版和侵权。这是中国目前面临的主要问题,不能混为一谈。

  本文作者:前沿视频教室    查看 334 条读者留言 »

Web开发杂谈(12) —— 编程语言的新动向

TRACK TOP
2011年04月11日 星期一 | 所在分类: Web开发杂谈
7 条评论

两年前,我写过两篇文章谈到“编程语言的流行度”和“解读 TIOBE 指数”,谈到关于编程语言的一些问题。转眼两年就过去了,真要感慨时间飞逝。在这两年里,当然又出现了很多新动向。

我们也可以简单说说这些新动向,以及对我们有什么影响。数据主要还是来自TIOBE的。

主流语言依然稳定

主流语言的范围变化很小,跟两年前相比,按照排名前10的语言来看,除了Ruby语言跌出前10名,Objective-C入围之外,其他语言没有变化。这一点很好理解,一个开发者,使用哪种编程语言,通常是相对稳定的,不会非常频繁和轻易地改变。熟练掌握一门语言,也需要相当长的时间,这都决定了各种语言占有率的变化是相当缓慢的,如果用10年、20年的时间间隔,来考察编程语言,才有可能有较明显的差异,一两年的差异不会很大。

tiobe.jpg

Objective-C 和 C# 耀眼

虽然,各种主流语言的变化并不很大,但是也有着一些差异。表现最好的是 Objective-C 和 C# 两种语言。

objective-c1.jpg c-sharp1.jpg

其中 Objective-C 属于异军突起型,爆发力极好,09年中开始突然爆发,这显然与苹果公司产品的优势分不开的,Objective-C是苹果产品,如iPhone、iPad的首选语言。

而 C# 则属于稳步前进型,耐力性选手,从发布第一个版本开始到现在的10年时间里,一直稳步提高,不急不躁。

静态语言保持优势

在开发社区,关于动态语言的讨论十分很热烈,但是在实际应用中,从2007年开始的几年来,动态语言使用的比例在缓慢下降。实际上动态语言还有很多实际问题需要解决。这些问题不解决,是很难成为真正的主力语言的。下图中,蓝线是动态语言的使用率,红线是静态语言的使用率。

dynamic.jpg

当然,静态与动态也不是绝对的。C# 语言在2010年推出了第4个版本,即 C#4,在这个版本中,最重要的改进,就是支持动态类型。

从哲学角度看,动态语言具有更好的弹性,可以让系统具有更好的可扩展性和灵活性。但是实际上在绝大多数场合,使用动态语言进行开发,对程序员的要求高很多,静态语言中编译器可以做的很多事情,都需要由程序员来做,这些具体问题不解决,动态语言的优势很难得到体现。就好像目前而言,要建一座大楼,还是要靠混凝土这样的刚性材料。

移动开发日益重要

Objective-C 异军突起,显然是由于苹果 iPhone 、iPad以及AppStore的成功引发的。大家也很容易发现,现在移动开发的火爆,经常可以听到一些朋友说到,移动开发人员紧缺,当然也就是高薪的同义词了。

所以,如果有兴趣的读者,不妨也关注一下相关的发展情况。总体来说,我认为在移动终端上的开发开发客户端软件,就想当于在10到20年前,PC上的主流开发。当时大部分开发都是在PC开发本地程序。现在,移动终端来了,那么自然也需要很多开发人员来进行相应的程序的开发。

但是我们看一看,PC是的历史,从单机程序逐渐变为开发“C/S模式,也就是客户端/服务器模式的程序,把很多核心业务放到了服务器上,客户端越来越瘦。后来,互联网来了,向大比例的C/S开发变成了“B/S”模式,也就是客户段痩到了不再开发单独的客户端程序,而是都用浏览器来作为操作界面了。

那么移动终端未来的趋势将会如何?我估计,一部份必须的客户端软件,都会在移动终端上出现,这是一种“补课”。此外还有大量业务,是基于网络的,在移动终端上,就像PC上一样,要么是做一个独立的客户端程序,要么用浏览器来作为界面。

目前来看,与PC上的一个区别是,PC的浏览器屏幕大,操作容易,因此客户端形式的程序并不多,除非是一些和系统结合紧密地,比如Windows自带的一些程序,Office这类软件(身子也出现了给予浏览器的在线版本),还有就是杀毒软件等等。

而移动终端的最大特点就是屏幕小,这就限制了流览器在移动终端上的应用,因此客户端软件(即所谓的“应用”)又显示出了优势 —— 可以让操作界面适应小屏幕的需要。

了解了上面的一些基本背景后,我们就可以想象,所谓“移动开发”,真正和PC上差异比较大的就是开发移动终端上的客户端软件,或者叫做“应用”这个部分上。其他的(包括给予浏览器的前端开发,以及服务器端程序的开发)则和PC任何区别。而一个比较复杂的系统,真正工作量绝大部分还是集中在服务期端的。

所以关于移动开发,大家也不用觉得是个很新鲜东西,其实我感觉本质上并没有太多的新东西。

语言 < 平台

在任何开发社区,关于语言的讨论都特别多,而且特别容易引起争论。按照我目前个人的理解,经过了近50年的发展,设计开发出一个新的高级语言,已经不像几十年前那么困难了。一些计算机领域中的明星人物,一个人就可以设计出一个非常牛B的语言,这些语言在一些社区中发展,很有特色。现在数得出名字的语言有几百种,Tiobe跟踪的有几十种。但是真正成为主流的还是很少的,比如现在,使用率超过1%的高级语言,不过11种。最主流的4种语言,就拥有了超过50%的使用者。

现在关于语言的竞争,本质上已经不在于语言本身了,而在于语言所在的平台的竞争。你会发现,所有发展的好的语言,都又一个很好的平台作为支撑。选择语言的本质是选择平台。这一点对于开发人员的选择是比较重要的因素。

总结

还是那句话,编程语言既是一个新技术层出不穷,又是一个相当稳定的东西。

不少人提这样一个观点,我非常赞同:真正精通一两个语言,然后多了解一些其他的语言。精通一两种语言,是你工作的武器,绝对不能丢。然后当有新技术、新热点出现时,可以花一些时间做一些尝试和试验,可以跟上新潮流,而且可以不断开阔眼界,加深对技术的理解,是一件很好的事情。

  本文作者:前沿视频教室    查看 7 条读者留言 »

.NET Web开发研习(10) —— 微软 MIX11 大会

TRACK TOP
2011年04月07日 星期四 | 所在分类: .NET Web 开发研习
1 条评论

mix11.gif

这个系列文章(.Net Web 开发研习)是在准备新书的过程中,一边构思,一边发文,逐步添加的,供大家参考。

0. 写书计划,欢迎大家提建议

1. Web开发的“十事要说”

2. 关于学习C#语言的几个建议

3. 技术平台选择,兼谈.Net 与微软

4. 语言与框架

5. ORM(对象关系映射)

6. 学习编程实践之“五子棋”

7. 学习编程实践之“文件压缩”

8. UCLA计算机系如何教C#

9. 学习编程实践之“电梯模拟”

10. 微软 MIX11 大会

不断添加中……

世界著名的软件公司或者科技公司,每年都会组织一些开发者大会,一方面是宣传自己的产品和战略,另一方面也是对新技术的探讨。比如微软每年上半年会举行MIX大会(面向Web开发和设计人员),下半年会举行PDC(面向专业开发人员)。此外,比如Adobe公司会举办MAX大会,苹果的开发者大会叫做WWDC,这些都是非常好的学习机会。

每年的 MIX 和 PDC 大会,都是我们学习新技术的好机会。大会分别都有100多场新技术的演讲。今年的MIX大会将在4月12号开幕,持续3天,有很多很酷的演讲。具体演讲的题目和日程,可以参见这里。微软在网站上,都会现场直播讲演的内容,结束以后这些讲演的视频也会保留在Channel9网站上,可以随时观看。所以这里不得不说,搞技术什么最重要?我看还是得说英语最重要啊。

我挑出了一些比较感兴趣的题目,这里先做个记号,一共选出了20个题目:

HTML5 & CSS3

加速 HTM5 网站的50个性能优化技巧:50 Performance Tricks to Make Your HTML5 Web Sites Faster

HTML5的未来:The Future of HTML5

深入 HTML5 的 canvas(画布) :Deep Dive Into HTML5 canvas

HTML5 世界中的数据:Data in an HTML5 World

CSS3征服世界:CSS3 Takes on the World

让你的网站更现代:SVG与HTML5:Modernizing Your Website: SVG Meets HTML5

Javascript & jQeury

编写可维护的Javascript:Writing Maintainable JavaScript

C# 开发人员的 Javascript 好习惯:Good JavaScript Habits for C# Developers;

用 jQuery 开发数据为中心的N层应用:Building Data-centric N-tier Applications with jQuery

Script#: 编译 C# 到 JavaScript:Script#: Compiling C# to JavaScript using Visual Studio

JavaScript的交互扩展 (RxJS):Reactive Extensions for JavaScript (RxJS)

JavaScript, jQuery, AJAX 与 ASP.NET 实战:Pragmatic JavaScript, jQuery & AJAX with ASP.NET

.NET平台上的开发

更大、更快、更强,优化ASP.NET应用:Bigger, Faster, Stronger: Optimizing ASP.NET Applications

脚手架:ASP.NET, NuGet, Entity Framework Code First 及其他:Scaffolding – ASP.NET, NuGet, Entity Framework Code First and More

深入MVVM开发模式:Deep Dive MVVM

ASP.NET MVC 3 与 MEF(托管扩展框架):Fun with ASP.NET MVC 3 and MEF

设计师与程序员,身兼二职:Designer and Developer: A Case for the Hybrid

ASP.NET MVC 3 @ : 现在进行时 :ASP.NET MVC 3 @:The Time is Now

Web 开发平台概述 :An Overview of the MS Web Stack of Love

设计草图、原形、捕捉灵感:使用Expression Blend 和SketchFlow:Get Real! Sketch, Prototype, and Capture Great Ideas with Expression Blend and SketchFlow

还有很多演讲是围绕 Silverlight、Windows Phone 和 Windows Azure 的,我不熟悉,所以没有列出来。

  本文作者:前沿视频教室    查看 1 条读者留言 »

随心随笔(9) —— 关于写书的一事一议

TRACK TOP
2011年04月03日 星期日 | 所在分类: 随心随笔
7 条评论

这个“随心随笔”系列文章,是我在遇到有趣或值得思考的事情时,写的一些随笔,供大家参考。

9. 关于写书的一事一议

8. 论一论近日的百度侵权问题

7. 计算机图书十二年之体会

6. 闯荡北京值不值?

5. 沙漠里可以钓鱼吗?

4. 做网站比的是慢功夫

3. 给教师朋友的关于CSS的几点教学建议

2. 虚竹的人生启示

1. 如何写好技术博客

0. 大多数设计师将成为自由职业者

作为一个十多年来,以各种方式参与过技术图书创作的作者,必然要经常考虑如何才能把一本书写好。今天遇到一件有趣的事,和写书有点关系,和读者朋友分享一下。

21004599-1_b.jpg

前几天,我从朋友的办公室要了一本书回来,封面如图所示。这本书放在桌上已经几个星期了,而且一直在利用闲暇的时间学习这本书,内容不错。有趣的是,我在几个星期的时间里,一直把这本书的名字看成《后门的秘密》,直到今天早上,我忽然发现到其实是《门后的秘密》!!!

我多次仔细地看封面上的书名,一直不理解为什么叫“后门”的秘密,甚至对照过原书的英文书名(也在封面上)——Behind Colosed Doors —— 直译是“关着的门的后面”,但即使如此,我依然没发现,其实是我把书名中的两个字顺序看反了。

顺便提一句,这本书内容很不错:通过实际的情景描述的方式,讲解了技术团队管理中的方方面面,如果你能实实在在地实践其中的方法,相信会提升你的管理能力和改善管理效果。

我知道,我是个粗心的人,这时看错书名的原因。这一点很多读者都有体会,比如在《CSS设计彻底研究》这本书里,存在很多疏忽造成的小错误,有的是因为一瞬间脑子短路写错的,有时纯属粗心造成的,如果不是这本书较好地把CSS讲的比较清楚(核心是我总结了学习CSS必须掌握的4大核心基础:盒子模型、标准流、浮动、定位,以及深入地讲清了它们),这本书可能是要被骂的。

但是另一个方面,如果你比较一下我的书和其他的很多CSS书,我认为一个很大的区别是,《CSS设计彻底研究》这本书读起来会很轻松。当你一眼看过一句话的之后,立即就能明白这句话是什么意思,歧义、指代不明等等情况会很少发生。打个比方,你比较一下读武侠小说的感受,和你在考英语时做阅读理解题目的感受,你觉得有什么区别?看武侠小说很轻松,甚至可以一目十行,而独阅读理解题目,你必须仔细一句句读,更麻烦的是一句话,一遍读不懂,你不得不常常翻回头再读一次两次,甚至还是不懂。

而我们的技术图书,目的绝对不是给读者考试。一本好书,就是要用最浅显易懂的语言,把复杂的事儿说清楚。所以作者必须要想办法让读者最轻松地掌握你写的内容。所以,遣词造句都是很讲究的。回到《门后的秘密》这本书来说,其实翻译的没有错误,也很简洁有力,是个好名字。甚至99%的读者也不是像我这样的粗心人,并不会看错。

但是我想在这里分析一下,我为什么会看错这个书名。在汉语里,如果“门”和“后”两个字连一起,“后门”和“门后”都是存在的,但是有两个因素引导我误认为是“后门”而不是“门后”。

1)在汉语中,“后门”是一个极其常用的词,“门后”远没有“后门”常用。

2)如果“门后”两个字连用,通常是“某某某在某某门后如何如何”这样的句式,“门后”即使连用,仅仅是连在一起而已,并不是一个单度的词,。

而这里“门后的”三个字连用,显然引导读者认为“门后”是个独立的词,可是“门后”很少单独作为一个词出现,相反,“后门”倒是出现频率极高的一个独立词汇。因此,就容易把读者引导到“后门”这个词上了。

当然,如果你问我:“那你说这本书应该叫什么名字?”我还真说不好,我对起名字还真不在行。我想,如果叫“藏在门后的秘密”是不是好点?

所以,这是一个很好的例子。如果你在写文章的时候,希望读者能够不费力地读懂你的文章,就应对文字非常讲究,尽可能避免掉类似容易发生误解或者歧义的词汇或者句子。类似的例子,我还可以举出很多很多。

通过这个例子,也说明一个道理,想写出一本书好书,每一个细节都需要花费多大的努力和精力。必须要对版权有充分的保护,才能让更多人为此努力,为此付出,这样读者才能享受到更好的文化产品,否则整个产业必将消亡,如果没有文化的创造者,这个世界还将如何前进?

希望我的文章对您有所帮助。

您可以到新浪微博联系我: http://t.sina.com.cn/1906984307

  本文作者:前沿视频教室    查看 7 条读者留言 »

.Net Web 开发研习(9) —— 学习编程实践之“电梯模拟”

TRACK TOP
2011年03月30日 星期三 | 所在分类: .NET Web 开发研习
1 条评论

这个系列文章(.Net Web 开发研习)是在准备新书的过程中,一边构思,一边发文,逐步添加的,供大家参考。

0. 写书计划,欢迎大家提建议

1. Web开发的“十事要说”

2. 关于学习C#语言的几个建议

3. 技术平台选择,兼谈.Net 与微软

4. 语言与框架

5. ORM(对象关系映射)

6. 学习编程实践之“五子棋”

7. 学习编程实践之“文件压缩”

8. UCLA计算机系如何教C#

9. 学习编程实践之“电梯模拟”

不断添加中……

上一篇文章介绍了加州大学洛杉矶分校(UCLA)的一门C#语言课的教学内容。今天就来讲解一下其中的一个作业题,这个作业题占它这门课程总成绩的20%。以下是我按照原文写的,以翻译为主,删掉了一点非核心的内容,并稍加了一些说明,原文见这里

概述

这个作业题的内容,是请你模拟一座建筑物中的电梯。你的程序需要控制电梯的运行以及乘坐电梯的乘客流。从教学的角度出发,这个作业可以分为三个部分,但你在实现的时候,不一定非要按照下面描述的顺序。你要为一座多层的建筑物中的几部电梯建模,这个模拟过程发生在一座建筑物中,需要跟踪乘客乘坐电梯在不同楼层之间运行。为了简单起见,我们设定一共有5层(标记为0-4),以及两部电梯(标记为0和1)。

这个模拟是基于“节拍”的,每一拍发生如下三件事:

1)电梯根据当前的状态进行移动;

2)乘客移动;

3)电梯的控制器更新电梯的状态。

模拟乘客流

一个乘客的状态一定处于两种状态之一:“空闲”(Idle)或“去向(n)”(GoingTo(n)),各自含义是:

去向(n):这位乘客要去向第n层楼。

空闲:乘客在电梯外休息。

乘客的状态变迁如图所示:

simstates.png

当整个模拟开始时,每个乘客的起始状态都是“空闲”。

乘客的位置

每个乘客有一个当前的位置,有以下7种可能: { 电梯0, 电梯1, 楼层0, 楼层1, 楼层2, 楼层3, 楼层4}。初始情况是每个乘客都在“楼层1”(楼层0表示地下室)。

当一个乘客正在乘坐“电梯i”的时候,我们就说他的位置是“电梯i”。当一个乘客正在“楼层f”的时候,我们就说他的位置是“楼层f”。

乘客的指令

我们一种简单的格式定义某个乘客的行动计划,例如

(t1,f1); (t2,f2); (t3,f3); …

其中的一个括号中有两个数字,t表示的时某一个时刻,f表示此时该乘客要取得楼层。这样的一对数字,我们称为一个“指令”。用一系列的指令就可以描述一个乘客的一系列行动的计划。注意,在实际模拟时,严格按照序列顺序,即使后面的指令中的时间早于前面指令的时间。然后,用一个简单的文本文件,可以构造出多个乘客的行动序列,每个乘客一行,如下所示:

(t11, f11); (t12, f12); (t13, f13) …
(t21, f21); (t22, f22) …
(t31, f31); (t32, f32); (t33, f33) …

在模拟程序开始的时候,读入这个文本文件,然后程序根据这个文件设定的所有指令模拟整个运行过程。

对乘客建模

乘客的移动按照下面的规则进行:假设一个乘客S,当前的状态是state,当前位置是p,当前的指令I,并假设当前的时刻为T。

 * 如果 state 为 Idle,那么
     o 如果 I 为空,那么什么也不做
     o 如果 I 的形式为 (t0,f0);I′, 那么
      + 如果 T < t0 那么什么也不做。
      + 如果 T ≥ t0 那么将 state 设置为 GoingTo(f0) 并且将 I 设置为 I′。
  * 如果 state 为 GoingTo(f), 那么
    o 如果 p = "楼层f",那么将 state 设置为 Idle。
    o 如果 S 正在 电梯e中,并且电梯e位于“楼层f”,电梯状态是 Open,那么将 p 设置为“楼层f”。
    o 如果 p =“楼层f0” ( 不等于“楼层f" ),那么
      + 如果 f < f0,那么将指示灯 d 设置为 Down,否则将 d 设置为 Up.
      + 如果电梯e位于“楼层f0”,且状态为 Open,指示灯为d,电梯内少于5人, 那么将p设置为电梯e。

注意,如果点运行的速度慢,可能导致乘客获取到一个过期的指令,以上的规则可以保证,所有的指令都会按照顺序被执行。换句话说,乘客可能在某些步骤,比指令计划的有所延迟,但是都会根据指令完成确定的旅程计划。

对电梯建模

模拟的电梯承载着乘客,在楼层之间移动。我们需要使用一些状态来对电梯建模。

电梯高度

每一部电梯都有一个“当前高度”,假设每层楼高10英尺,电梯的高度用从0到40的整数表示。当电梯的高度是10的整数倍的时候,我们就说该电梯唯一第“高度/10”层。比如当前的高度是30,就说明它在第3层。在模拟开始时,两部电梯都在第0层。

电梯动作

一个电梯一共有4种可能的状态:“打开”(Open)、“静止”(Stopped)、“上移”(GoingUp)和“下移”(GoingDown),描述如下。任何操作都不会使电梯的高度小于0或大于40,即高度永远在 [0,40] 这个区间内。

“打开”:乘客可以进入或离开。

“上移”:电梯按照5英尺/拍的速度上升。

“下移”:电梯按照5英尺/拍的速度下降。

“静止”:没有什么动作。

只有特定的电梯动作序列是有效的。一个电梯一旦开始运动,就不能开门。各种状态之间变迁需要符合下图。即从状态s到状态s’,只有符合下面图中存在从s到s’的箭头时才是允许的。例如。从“下移”状态,可以变为“静止”状态,但是不能变为“打开”或“上移”状态。

elevatoractions.png

电梯的初始状态是“静止”。一部电梯内同时最多容纳5个乘客。

指示灯

每一部电梯有一个指示灯,分别有“上”、“下”和“无”三种显示状态。

电梯调度

由电梯本身来决定自身的行动,也未尝不可。不过更好的方式,还是为电梯的运行提供集中的控制。这个模拟程序,将使用单一的方法来为整个电梯系统的运行提供计划。这个方法称为 PlanStep,由以下接口定义:

 interface  IElevatorPlanner 
 {
     //定义方法 PlanStep(controls, upFloors, downFloors) 
     //用于对电梯进行调度 
     //其中的参数: 
     //controls[e] 对应于电梯e的控制 
     //upFloors[i]为 true ,当且仅当一名乘客在“楼层i”,且状态为GoingTo(j),且 j > i 
     //downFloors[i]为 true ,当且仅当一名乘客在“楼层i”,且状态为GoingTo(j),且 j < i 
     void  PlanStep(IElevatorControl[] controls,
                   bool [] upFloors,
                   bool [] downFloors);
 }
 

PlanStep方法将会使用comtrols数组中的对象对外界作出响应。PlanStep可以使用内部的状态来辅助作出决策,但是必须做到仅通过这个接口与电梯和乘客交互。显然,upFloors 和 downFloors 数组对应的就是对每个楼层的电梯按钮,又等候电梯的乘客按下。这里做了一点简化,使用真实的电梯时,乘客会先把电梯呼叫到他所在的楼层,进入以后,再按目的楼层的按钮。而这里则化简为在电梯外就确定目的楼层。

IElevatorPlanner 接口依赖于一个控制电梯的类(声明为接口)以及两个相关的枚举类型。分别定义如下:

enum ElevAction { Open, Stopped, GoingUp, GoingDown };

enum ElevLight { Up, Down, None };

interface IElevatorControl{
    
    //StopRequested(i) 返回 true,当且仅电梯内乘客的状态是GoingTo(i)。
    //需要对i做参数检查,确保在 [0..4]范围内。
    bool StopRequested(int i);

    //只读属性,返回电梯的当前状态。
    ElevAction ActionState { get; }

    //设置电梯的当前状态。
    //需要对参数作检查,确保参数是一个有效的状态变迁。
    void SetAction(ElevAction s);

    //只读属性,返回电梯所电梯指示灯的状态。
    Light Indicator { getset; }

    //只读属性,返回电梯所处的高度。
    int Height { get; }
} 

作业内容

编写一个图形界面,显示模拟的当前状态。提示:System.Windows.Forms.PictureBox 提供了显示图像的方法。你的图形界面应该包括以下功能:

1)用户可以把鼠标移动到一个电梯或乘客上,查看他当时的状态。可以使用:System.Windows.Forms.ToolTip。

2)用户可可以控制电梯运行的步数,每次跳过一定的步数(比如10步、50步),显示电梯的状态。

3)用户可以通过读入文本文件设定乘客的行程计划。

挑战部分:动画演示

使用动画方式演示电梯的运行过程。

总结

这是一个很有意思的题目,通过这个题目,读者可以注意到几个问题:

1)现实世界中的系统,和信息世界中的系统,是如何对应的。在题目中多次提到了一个词“建模”,这非常本质地说明了,软件开发很重的一个性质。

2)系统地分析,在这题目的描述中,可以发现他非常清晰对系统地进行了划分,而且每个部分之间的耦合度非常低,这是值得学习程序设计的读者仔细领会的要点。

希望我的文章对您有所帮助。

您可以到新浪微博联系我: http://t.sina.com.cn/1906984307

  本文作者:前沿视频教室    查看 1 条读者留言 »

共 86 页: [1] 2 3 4 5 6 » ... 末页 | 下一页»