若天明 发表于 2015-1-18 11:34:52

发布一篇摹拟渣滓接纳站

你通过从书的数量和开发周期及运行速度来证明:net网页编程和ruby要比java简单。
这个成绩的实质是若将渣滓丢进单个渣滓筒,现实上是未经分类的。但在今后,某些特别的信息必需恢复,以便对渣滓准确地回类。在最入手下手的办理计划中,RTTI饰演了关头的脚色(详见第11章)。
这并非一种一般的计划,由于它增添了一个新的限定。恰是这个限定使成绩变得十分风趣——它更象我们在事情中碰着的那些十分贫苦的成绩。这个分外的限定是:渣滓到达渣滓接纳站时,它们全都是夹杂在一同的。程序必需为那些渣滓的分类定出一个模子。这恰是RTTI发扬感化的中央:我们有大批不出名的渣滓,程序将准确判别出它们所属的范例。

//:RecycleA.java
//RecyclingwithRTTI
packagec16.recyclea;
importjava.util.*;
importjava.io.*;

abstractclassTrash{
privatedoubleweight;
Trash(doublewt){weight=wt;}
abstractdoublevalue();
doubleweight(){returnweight;}
//SumsthevalueofTrashinabin:
staticvoidsumValue(Vectorbin){
Enumeratione=bin.elements();
doubleval=0.0f;
while(e.hasMoreElements()){
//OnekindofRTTI:
//Adynamically-checkedcast
Trasht=(Trash)e.nextElement();
//Polymorphisminaction:
val+=t.weight()*t.value();
System.out.println(
"weightof"+
//UsingRTTItogettype
//informationabouttheclass:
t.getClass().getName()+
"="+t.weight());
}
System.out.println("Totalvalue="+val);
}
}

classAluminumextendsTrash{
staticdoubleval=1.67f;
Aluminum(doublewt){super(wt);}
doublevalue(){returnval;}
staticvoidvalue(doublenewval){
val=newval;
}
}

classPaperextendsTrash{
staticdoubleval=0.10f;
Paper(doublewt){super(wt);}
doublevalue(){returnval;}
staticvoidvalue(doublenewval){
val=newval;
}
}

classGlassextendsTrash{
staticdoubleval=0.23f;
Glass(doublewt){super(wt);}
doublevalue(){returnval;}
staticvoidvalue(doublenewval){
val=newval;
}
}

publicclassRecycleA{
publicstaticvoidmain(String[]args){
Vectorbin=newVector();
//FilluptheTrashbin:
for(inti=0;i<30;i++)
switch((int)(Math.random()*3)){
case0:
bin.addElement(new
Aluminum(Math.random()*100));
break;
case1:
bin.addElement(new
Paper(Math.random()*100));
break;
case2:
bin.addElement(new
Glass(Math.random()*100));
}
Vector
glassBin=newVector(),
paperBin=newVector(),
alBin=newVector();
Enumerationsorter=bin.elements();
//SorttheTrash:
while(sorter.hasMoreElements()){
Objectt=sorter.nextElement();
//RTTItoshowclassmembership:
if(tinstanceofAluminum)
alBin.addElement(t);
if(tinstanceofPaper)
paperBin.addElement(t);
if(tinstanceofGlass)
glassBin.addElement(t);
}
Trash.sumValue(alBin);
Trash.sumValue(paperBin);
Trash.sumValue(glassBin);
Trash.sumValue(bin);
}
}///:~
要注重的第一个中央是package语句:
packagec16.recyclea;
这意味着在本书接纳的源码目次中,这个文件会被置进从c16(代表第16章的程序)分付出来的recyclea子目次中。第17章的解包工具会卖力将其置进准确的子目次。之以是要如许做,是由于本章会屡次改写这个特定的例子;它的每一个版本城市置进本人的“包”(package)内,制止类名的抵触。
个中创立了几个Vector对象,用于包容Trash句柄。固然,Vector实践包容的是Object(对象),以是它们终极可以包容任何工具。之以是要它们包容Trash(大概从Trash衍生出来的其他工具),独一的来由是我们必要审慎地制止放进除Trash之外的其他任何工具。假如真的把某些“毛病”的工具置进Vector,那末不会在编译期失掉堕落或告诫提醒——只能经由过程运转期的一个背例晓得本人已犯了毛病。
Trash句柄到场后,它们会丧失本人的特定标识信息,只会成为复杂的Object句柄(上溯外型)。但是,因为存在多形性的要素,以是在我们经由过程Enumerationsorter挪用静态绑定办法时,一旦了局Object已外型回Trash,仍旧会产生准确的举动。sumValue()也用一个Enumeration对Vector中的每一个对象举行操纵。
外表上持,先把Trash的范例上溯外型到一个汇合包容基本范例的句柄,再回过火从头下溯外型,这仿佛是一种十分愚昧的做法。为何不但是一入手下手就将渣滓置进得当的容器里呢?(现实上,这恰是扒开“接纳”一团迷雾的关头)。在这个程序中,我们很简单就能够换成这类做法,但在某些情形下,体系的布局及天真性都能从下溯外型中失掉极年夜的优点。
该程序已满意了计划的初志:它可以一般事情!只需这是个一次性的计划,就会显得十分杰出。可是,真正有效的程序应当可以在任什么时候候办理成绩。以是必需问本人如许一个成绩:“假如情形产生了变更,它还能事情吗?”举个例子来讲,厚纸板如今是一种十分有代价的可接纳物品,那末怎样把它集成到体系中呢(出格是程序很年夜很庞大的时分)?因为后面在switch语句中的范例反省编码大概分布于全部程序,以是每次到场一种新范例时,都必需找到一切那些编码。若失慎漏掉一个,编译器除指出存在一个毛病以外,不克不及再供应任何有代价的匡助。
RTTI在这里利用不妥的关头是“每品种型都举行了测试”。假如因为范例的子集必要特别的看待,以是只寻觅谁人子集,那末情形就会变得好一些。但假设在一个switch语句中查找每品种型,那末极可能错过一个重点,使终极的代码很难保护。鄙人一节中,人人会进修怎样慢慢对这个程序举行改善,使其显得愈来愈天真。这是在程序计划中一种十分成心义的例子。
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。

透明 发表于 2015-1-21 10:29:59

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

莫相离 发表于 2015-1-30 15:09:13

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

再见西城 发表于 2015-1-30 15:12:09

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

老尸 发表于 2015-2-6 13:44:20

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

乐观 发表于 2015-2-14 02:43:08

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

第二个灵魂 发表于 2015-2-14 09:47:56

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

精灵巫婆 发表于 2015-3-4 05:27:26

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

因胸联盟 发表于 2015-3-6 09:00:20

是一种使用者不需花费很多时间学习的语言

冷月葬花魂 发表于 2015-3-9 08:38:28

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

小妖女 发表于 2015-3-16 21:06:14

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

蒙在股里 发表于 2015-3-17 03:46:07

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

不帅 发表于 2015-3-19 08:48:09

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

柔情似水 发表于 2015-3-25 13:04:48

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

愤怒的大鸟 发表于 2015-3-27 09:09:43

是一种使用者不需花费很多时间学习的语言

简单生活 发表于 2015-4-10 18:20:07

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

谁可相欹 发表于 2015-4-17 11:38:41

是一种语言,用以产生「小应用程序(Applet(s))

活着的死人 发表于 2015-5-9 14:13:06

是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能

若天明 发表于 2015-6-19 08:00:25

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

小魔女 发表于 2015-6-28 14:56:26

另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
页: [1]
查看完整版本: 发布一篇摹拟渣滓接纳站