°Ë±¦Êé¿â > ÎÄѧÆäËûµç×ÓÊé > VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ) >

µÚ74²¿·Ö

VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ74²¿·Ö

С˵£º VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ) ×ÖÊý£º ÿҳ4000×Ö

°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡




¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mand¡¡to¡¡read¡¡piped¡¡data¡£¡¡The¡¡only¡¡thing¡¡missing¡¡is¡¡the¡¡file¡¡that¡¡contains¡¡the¡¡data£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡lotto¡£txt¡£¡¡For¡¡the¡¡example£»¡¡create¡¡a¡¡file¡¡called¡¡lotto¡£txt¡¡and¡¡add¡¡text¡¡such¡¡as¡¡the¡¡following£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡where¡¡each¡¡line¡¡represents¡¡the¡¡date¡¡of¡¡the¡¡lottery¡¡draw£»¡¡then¡¡the¡¡six¡¡lottery¡¡numbers£»¡¡and¡¡then¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡bonus¡¡number¡¡£¨you¡¡could¡¡also¡¡use¡¡the¡¡lotto¡£txt¡¡file¡¡included¡¡with¡¡this¡¡book¡¯s¡¡download

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡able¡¡code£©¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡1970¡£01¡£10¡¡7¡¡8¡¡12¡¡17¡¡32¡¡40¡¡24¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡1970¡£01¡£17¡¡7¡¡12¡¡22¡¡24¡¡29¡¡40¡¡36¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡1970¡£01¡£24¡¡16¡¡22¡¡25¡¡27¡¡30¡¡35¡¡24¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡1970¡£01¡£31¡¡3¡¡11¡¡21¡¡22¡¡24¡¡39¡¡8¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡1970¡£02¡£07¡¡2¡¡5¡¡11¡¡16¡¡18¡¡38¡¡37¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Now¡¡run¡¡the¡¡following¡¡piping¡¡mand¡¡£¨open¡¡a¡¡mand¡¡prompt¡¡and¡¡navigate¡¡to¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡TextProcessorTextProcessorbinRelease¡¡from¡¡the¡¡Visual¡¡Basic¡¡Express¡¡base¡¡directory£©£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡type¡¡lotto¡£txt¡¡£ü¡¡TextProcessor¡£exe¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡You¡¡should¡¡see¡¡the¡¡contents¡¡of¡¡¡¡lotto¡£txt¡£¡¡If¡¡that¡¡is¡¡what¡¡you¡¡get£»¡¡you¡¡have¡¡a¡¡successful¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡round¡­trip¡¡and¡¡have¡¡created¡¡all¡¡of¡¡the¡¡puzzle¡¡pieces¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡REMEMBERING¡¡TO¡¡IMPLEMENT¡¡ALL¡¡THE¡¡PIECES¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Some¡¡readers¡¡may¡¡argue¡¡that¡¡having¡¡an¡¡echo¡¡implemented¡¡in¡¡¡¡LottoTicketProcessor¡¡is¡¡the¡¡wrong¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡approach¡¡because¡¡there¡¡might¡¡be¡¡a¡¡munication¡¡failure¡¡among¡¡team¡¡members£»¡¡leading¡¡to¡¡buggy¡¡code¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Also£»¡¡you¡¡might¡¡miss¡¡implementing¡¡some¡¡code£»¡¡creating¡¡bugs¡¡when¡¡there¡¡should¡¡not¡¡have¡¡been¡¡any¡£¡¡Although¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡those¡¡risks¡¡are¡¡involved£»¡¡this¡¡approach¡¡has¡¡important¡¡benefits£»¡¡and¡¡there¡¡are¡¡ways¡¡to¡¡mitigate¡¡the¡¡risks¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡One¡¡of¡¡the¡¡challenges¡¡for¡¡Visual¡¡Basic¡¡developers¡¡is¡¡knowing¡¡not¡¡only¡¡the¡¡language£»¡¡but¡¡also¡¡the¡¡¡¡API¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡This¡¡book¡¡will¡¡not¡¡talk¡¡about¡¡the¡¡API¡¡because¡¡you¡¡could¡¡die¡¡of¡¡old¡¡age¡¡before¡¡you¡¡read¡¡everything¡¡there¡¡is¡¡to¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡know¡¡about¡¡the¡¡¡¡API¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡¡¡API¡¡is¡¡vast£»¡¡but¡¡you¡¡will¡¡not¡¡need¡¡to¡¡use¡¡all¡¡of¡¡the¡¡API¡¡all¡¡the¡¡time¡£¡¡What¡¡you¡¡need¡¡to¡¡be¡¡aware¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡of¡¡are¡¡the¡¡general¡¡classes¡¡of¡¡the¡¡API¡£¡¡What¡¡part¡¡of¡¡the¡¡API¡¡is¡¡used¡¡to¡¡read¡¡and¡¡write¡¡streams£¿¡¡What¡¡part¡¡of¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡API¡¡is¡¡used¡¡to¡¡create¡¡GUI¡¡elements£¿¡¡This¡¡means¡¡you¡¡are¡¡not¡¡ever¡¡going¡¡to¡¡be¡¡an¡¡expert¡¡on¡¡all¡¡parts¡¡of¡¡the¡¡API£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡although¡¡you¡¡might¡¡be¡¡an¡¡expert¡¡Visual¡¡Basic¡¡programmer¡¡and¡¡understand¡¡the¡¡general¡¡concepts¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡When¡¡I¡¡understand¡¡a¡¡domain¡¡quite¡¡well£»¡¡I¡¡develop¡¡using¡¡a¡¡bottom¡­up¡¡approach¡£¡¡This¡¡works¡¡because¡¡I¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡know¡¡which¡¡interface¡¡and¡¡implementation¡¡need¡¡to¡¡talk¡¡to¡¡which¡¡other¡¡interface¡¡and¡¡implementation¡£¡¡When¡¡I¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡don¡¯t¡¡understand¡¡a¡¡domain¡¡fully£»¡¡I¡¡develop¡¡using¡¡a¡¡top¡­down¡¡approach¡£¡¡Using¡¡a¡¡top¡­down¡¡approach£»¡¡I¡¡can¡¡figure¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡out¡¡what¡¡the¡¡pieces¡¡are¡¡in¡¡a¡¡simplified¡¡manner¡£¡¡I¡¡create¡¡my¡¡echo¡¡program£»¡¡which¡¡gives¡¡a¡¡plete¡¡round¡­trip¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡without¡¡getting¡¡bogged¡¡down¡¡in¡¡the¡¡details¡¡of¡¡the¡¡API¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Think¡¡of¡¡a¡¡bunch¡¡of¡¡guys¡¡putting¡¡together¡¡a¡¡barbecue¡¡grill¡£¡¡They¡¡might¡¡look¡¡at¡¡the¡¡instructions£»¡¡but¡¡more¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡likely£»¡¡they¡¡will¡¡look¡¡at¡¡the¡¡parts¡¡and¡¡try¡¡to¡¡mentally¡¡fit¡¡the¡¡pieces¡¡together¡£¡¡They¡¡might¡¡even¡¡put¡¡a¡¡couple¡¡of¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡pieces¡¡together¡¡to¡¡get¡¡an¡¡idea¡¡of¡¡what¡¡each¡¡piece¡¡does¡¡and¡¡how¡¡the¡¡overall¡¡grill¡¡should¡¡appear¡£¡¡Once¡¡they¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡bee¡¡confident¡¡of¡¡their¡¡prototype£»¡¡they¡¡build¡¡the¡¡real¡¡thing£»¡¡which¡¡hopefully¡¡resembles¡¡a¡¡barbecue¡¡grill¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡When¡¡you¡¡use¡¡this¡¡approach£»¡¡what¡¡you¡¡are¡¡doing¡¡is¡¡building¡¡a¡¡mockup£»¡¡proof¡¡of¡¡concept£»¡¡or¡¡prototype¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Maybe¡¡two¡¡or¡¡three¡¡team¡¡members¡¡might¡¡help¡¡develop¡¡this¡¡prototype£»¡¡but¡¡the¡¡fact¡¡that¡¡your¡¡code¡¡needs¡¡to¡¡be¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡declared¡¡as¡¡a¡¡prototype¡¡is¡¡extremely¡¡important¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡279¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡A¡¡PT¡¡E¡¡R¡¡¡¡¡¡1¡¡0¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡O¡¡U¡¡T¡¡¡¡P¡¡E¡¡R¡¡S¡¡IS¡¡T¡¡E¡¡N¡¡CE¡¡257¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Visual¡¡Basic¡¡Express¡¡and¡¡the¡¡Visual¡¡Studio¡¡products¡¡help¡¡you¡¡in¡¡that¡¡they¡¡allow¡¡you¡¡to¡¡embed¡¡task¡¡markers¡£¡¡Go¡¡¡¡

¡¡¡¡¡¡back¡¡to¡¡the¡¡source¡¡code¡¡example¡¡where¡¡LottoTicketProcessor¡¡was¡¡illustrated¡¡and¡¡look¡¡at¡¡the¡¡ment£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡'¡¡TODO£º¡¡Finish¡¡implementing¡¡the¡¡class¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Notice¡¡TODO¡¡is¡¡in¡¡all¡¡capital¡¡letters¡£¡¡That¡¡type¡¡of¡¡ment¡¡is¡¡special¡£¡¡It¡¡is¡¡called¡¡a¡¡¡¡task¡¡and¡¡is¡¡tracked¡¡by¡¡¡¡

¡¡¡¡¡¡Visual¡¡Basic¡¡Express¡¡in¡¡the¡¡Task¡¡List¡¡window¡£¡¡To¡¡open¡¡ments¡¡in¡¡the¡¡Task¡¡List¡¡window£»¡¡select¡¡View¡¡¡¡Other¡¡¡¡

¡¡¡¡¡¡Windows¡¡¡¡Task¡¡List£»¡¡and¡¡then¡¡select¡¡ments¡¡from¡¡the¡¡drop¡­down¡¡list¡¡at¡¡the¡¡top¡¡of¡¡the¡¡window¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡This¡¡allows¡¡a¡¡team¡¡of¡¡developers¡¡to¡¡add¡¡markers¡¡throughout¡¡the¡¡entire¡¡code¡¡base£»¡¡indicating¡¡what¡¡is¡¡done¡¡¡¡

¡¡¡¡¡¡and¡¡not¡¡done¡£¡¡That¡¡way£»¡¡you¡¡will¡¡not¡¡forget¡¡to¡¡do¡¡certain¡¡tasks¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Some¡¡other¡¡identifiers¡¡that¡¡you¡¡can¡¡use¡¡are¡¡HACK¡¡to¡¡identify¡¡some¡¡code¡¡that¡¡is¡¡not¡¡correct£»¡¡but¡¡hacked¡¡in¡¡so¡¡¡¡

¡¡¡¡¡¡that¡¡it¡¡works£»¡¡and¡¡UNDONE¡£¡¡If¡¡you¡¡happen¡¡to¡¡be¡¡using¡¡a¡¡Visual¡¡Studio¡¡edition¡¡other¡¡than¡¡Express£»¡¡you¡¡can¡¡define¡¡¡¡

¡¡¡¡¡¡your¡¡own¡¡ment¡¡identifiers¡£¡¡For¡¡more¡¡information£»¡¡see¡¡the¡¡MSDN¡¡article¡¡¡°Visual¡¡Studio¡¡How¡¡to£º¡¡Create¡¡Custom¡¡¡¡

¡¡¡¡¡¡ment¡¡Tokens¡±¡¡£¨http£º//msdn2¡£microsoft¡£/en¡­US/library/ekwz6akh£¨VS¡£80£©¡£aspx£©¡£¡¡



Implementing¡¡Stream¡¡Reading¡¡and¡¡Writing¡¡



Finishing¡¡the¡¡stream¡¡reading¡¡and¡¡writing¡¡means¡¡looking¡¡at¡¡the¡¡possible¡¡arguments¡¡that¡¡can¡¡be¡¡¡¡

given£»¡¡and¡¡then¡¡implementing¡¡the¡¡code¡¡to¡¡process¡¡the¡¡arguments¡£¡¡Here¡¡is¡¡the¡¡plete¡¡source¡¡¡¡

code¡¡for¡¡ReaderWriter¡£Bootstrap£º¡¡



#Const¡¡DEBUG_OUTPUT¡¡=¡¡True¡¡

Imports¡¡System¡£IO¡¡



Public¡¡Module¡¡Bootstrap¡¡

¡¡¡¡¡¡¡¡Public¡¡Sub¡¡DisplayHelp£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨You¡¡need¡¡help£¿¡¡Right¡¡now£¿¡¨£©¡¡

¡¡¡¡¡¡¡¡End¡¡Sub¡¡



¡¡¡¡¡¡¡¡Public¡¡Sub¡¡Start£¨ByVal¡¡args¡¡As¡¡String£¨£©£»¡¡ByVal¡¡processor¡¡As¡¡IProcessor£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡#If¡¡DEBUG_OUTPUT¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Argument¡¡count£¨¡¨¡¡&¡¡args¡£Length¡¡&¡¡¡¨£©¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡Each¡¡argument¡¡As¡¡String¡¡In¡¡args¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Console¡£WriteLine£¨¡¨Argument¡¡£¨¡¨¡¡&¡¡argument¡¡&¡¡¡¨£©¡¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Next¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡#End¡¡If¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡reader¡¡As¡¡TextReader¡¡=¡¡Nothing¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡writer¡¡As¡¡TextWriter¡¡=¡¡Nothing¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡args¡£Length¡¡=¡¡0¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡reader¡¡=¡¡Console¡£In¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡writer¡¡=¡¡Console¡£Out¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ElseIf¡¡args¡£Length¡¡=¡¡1¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡args£¨0£©¡¡=¡¡¡¨¡­help¡¨¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Bootstrap¡£DisplayHelp£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡If¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡280¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

258¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡0¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡P¡¡E¡¡R¡¡S¡¡IS¡¡TE¡¡N¡¡CE¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡reader¡¡=¡¡File¡£OpenText£¨args£¨0£©£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡writer¡¡=¡¡Console¡£Out¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ElseIf¡¡args¡£Length¡¡=¡¡2¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡args£¨0£©¡¡¡¡¡¨¡­out¡¨¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Bootstrap¡£DisplayHelp£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡If¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡reader¡¡=¡¡Console¡£In¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡writer¡¡=¡¡File¡£CreateText£¨args£¨1£©£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ElseIf¡¡args¡£Length¡¡=¡¡3¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡args£¨0£©¡¡¡¡¡¨¡­out¡¨¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Bootstrap¡£DisplayHelp£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡If¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡reader¡¡=¡¡File¡£OpenText£¨args£¨2£©£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡writer¡¡=¡¡File¡£CreateText£¨args£¨1£©£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Else¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Bootstrap¡£DisplayHelp£¨£©¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Return¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡If¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡writer¡£Write£¨processor¡£Process£¨reader¡£ReadToEnd£©£©¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Sub¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Module¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡code£»¡¡before¡¡the¡¡first¡¡If¡¡block£»¡¡the¡¡variables¡¡reader¡¡and¡¡writer¡¡are¡¡assigned¡¡to¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡value¡¡¡¡Nothing£»¡¡indicating¡¡that¡¡there¡¡is¡¡a¡¡reader¡¡and¡¡there¡¡is¡¡writer£»¡¡but¡¡we¡¡don¡¯t¡¡know¡¡whether¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡they¡¡will¡¡reference¡¡streams¡¡or¡¡files¡£¡¡Then¡¡the¡¡If¡¡blocks¡¡go¡¡through¡¡the¡¡different¡¡binations¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡and¡¡variations¡¡of¡¡the¡¡mand¡­line¡¡arguments¡¡£¨see¡¡Table¡¡10¡­1£©¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡code¡¡follows¡¡a¡¡truth¡¡table¡¡approach£»¡¡which¡¡could¡¡be¡¡considered¡¡following¡¡a¡¡set¡¡of¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡conditions¡¡and¡¡then¡¡acting¡¡on¡¡the¡¡conditions¡£¡¡For¡¡example£»¡¡a¡¡state¡¡could¡¡be¡¡defined¡¡as¡¡If¡¡A¡¡=¡¡X£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡and¡¡B¡¡£¡=¡¡Y¡¡then¡¡do¡¡C¡£¡¡To¡¡process¡¡the¡¡mand¡­line¡¡arguments£»¡¡we¡¡define¡¡all¡¡of¡¡the¡¡possible¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡states¡¡and¡¡then¡¡all¡¡of¡¡the¡¡possible¡¡resulting¡¡actions¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡öNote¡¡¡¡By¡¡going¡¡through¡¡each¡¡and¡¡every¡¡variation¡¡of¡¡the¡¡mand¡­line¡¡arguments¡¡in¡¡a¡¡sequential¡¡manner£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡I¡¡am¡¡ensuring¡¡that¡¡I¡¡am¡¡testing¡¡for¡¡each¡¡situation¡£¡¡When¡¡running¡¡various¡¡tests¡¡and¡¡then¡¡acting¡¡on¡¡the¡¡tests£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡you¡¡need¡¡to¡¡be¡¡explicit¡¡and¡¡redundant£»¡¡because¡¡the¡¡code¡¡is¡¡easier¡¡to¡¡follow¡£¡¡All¡¡too¡¡often£»¡¡programmers¡¡take¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡shortcuts¡¡and¡¡miss¡¡a¡¡particular¡¡test£»¡¡causing¡¡a¡¡bug¡¡that¡¡is¡¡extremely¡¡hard¡¡to¡¡track¡¡down¡£¡¡¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡first¡¡If¡¡block¡¡tests¡¡if¡¡the¡¡argument¡¡count¡¡is¡¡zero£»¡¡then¡¡the¡¡second¡¡tests¡¡if¡¡there¡¡is¡¡a¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡single¡¡argument£»¡¡and¡¡so¡¡on¡£¡¡Let¡¯s¡¡look¡¡at¡¡the¡¡first¡¡test£º¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡281¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡A¡¡PT¡¡E¡¡R¡¡¡¡¡¡1¡¡0¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡O¡¡U¡¡T¡¡¡¡P¡¡E¡¡R¡¡S¡¡IS¡¡T¡¡E¡¡N¡¡CE¡¡259¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡args¡£Length¡¡=¡¡0¡¡Then¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡reader¡¡=¡¡Console¡£In¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡writer¡¡=¡¡Console¡£Out¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£¡£¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡If¡¡



¡¡¡¡¡¡¡¡¡¡Here£»¡¡the¡¡source¡¡and¡¡destination¡¡of¡¡the¡¡lottery¡¡number¡¡data¡¡stream¡¡are¡¡the¡¡console¡¡input¡¡¡¡

and¡¡output¡¡streams¡£¡¡The¡¡code¡¡assigns¡¡the¡¡reader¡¡and¡¡writer¡¡variables¡£¡¡

¡¡¡¡¡¡¡¡¡¡If¡¡the¡¡mand¡¡line¡¡had¡¡no¡¡arguments¡¡or¡¡if¡¡one¡¡of¡¡the¡¡mand¡­line¡¡argument¡¡tests¡¡has¡¡¡¡

been¡¡verified£»¡¡the¡¡IProcessor¡¡implementation¡¡is¡¡called£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡writer¡£Write£¨processor¡£Process£¨reader¡£ReadToEnd£¨£©£©£©¡¡



¡¡¡¡¡¡¡¡¡¡The¡¡code¡¡directly¡¡executes¡¡writer¡£Write£¨£©£»¡¡processor¡£Process£¨£©£»¡¡and¡¡¡¡

reader¡£ReadToEnd£¨£©¡£¡¡There¡¡is¡¡no¡¡verification¡¡of¡¡whether¡¡writer£»¡¡processor£»¡¡or¡¡reader¡¡point¡¡to¡¡¡¡

actual¡¡object¡¡instances¡£¡¡There¡¡could¡¡be¡¡a¡¡case¡¡for¡¡adding¡¡code¡¡that¡¡verifies¡¡if¡¡processor¡¡references¡¡¡¡

an¡¡actual¡¡object¡¡instance£»¡¡

·µ»ØĿ¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨0£© ²È£¨1£©

Äã¿ÉÄÜϲ»¶µÄ