




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简单工厂模式软件设计求职小故事 小菜今年计算机专业大四毕业,学了不少软件开发方面的东西,踌躇满志,一心要找一个好单位。投递简历后,收到一个单位的面试通知。 到单位后,前台小姐给了他一分题目,上面写着:“请用C+、Java、C#等任意一种面向对象语言实现一个计算机控制台程序,要求输入两个数和运算符号,得到结果。” 小菜一看,这还不简单,三下五除二,10分钟不到就写完了,感觉也没错,交卷后,前台小姐说一周内等通知吧 。于是小菜满怀期待地等待,可半个月过去了,什么消息也没有,小菜很郁闷,我的代码明明实现了啊,为什么不给机会? 23class Program/小菜代码 static void Main
2、( string args ) Console.Write(请输入数字 A:); string A=Console.ReadLine( ); Console.Write(请选择运算符(+ - * /)); string B=Console.ReadLine( ); Console.Write(请输入数字 B:); string C=Console.ReadLine( ); string D= ; if ( B=+ ) D=Convert.ToString(Convert.ToDouble(A)+Convert.ToDouble(C); if ( B=- ) D=Convert.ToString
3、(Convert.ToDouble(A)-Convert.ToDouble(C); if ( B=* ) D=Convert.ToString(Convert.ToDouble(A)*Convert.ToDouble(C); if ( B=/ ) D=Convert.ToString(Convert.ToDouble(A)/Convert.ToDouble(C); Console.Write(结果是:+D); 且先撇开出题人的意思,这段代码有何不足?4class Program/小菜代码 static void Main( string args ) Console.Write(请输入数字 A
4、:); string A=Console.ReadLine( ); Console.Write(请选择运算符(+ - * /)); string B=Console.ReadLine( ); Console.Write(请输入数字 B:); string C=Console.ReadLine( ); string D= ; if ( B=+ ) D=Convert.ToString(Convert.ToDouble(A)+Convert.ToDouble(C); if ( B=- ) D=Convert.ToString(Convert.ToDouble(A)-Convert.ToDouble
5、(C); if ( B=* ) D=Convert.ToString(Convert.ToDouble(A)*Convert.ToDouble(C); if ( B=/ ) D=Convert.ToString(Convert.ToDouble(A)/Convert.ToDouble(C); Console.Write(结果是:+D); 这样命名非常不规范,不成熟判断分支,这种写法意味着每个条件都要判断,等于计算机做了三次无用功若客户输入0呢?如果输入的是其他字符而非数字呢?5class Program/小菜修改后代码 static void Main( string args ) try C
6、onsole.Write(请输入数字 A:); string strNumberA=Console.ReadLine( ); Console.Write(请选择运算符(+ - * /)); string strOperate=Console.ReadLine( ); Console.Write(请输入数字 B:); string strNumberB=Console.ReadLine( ); string strResult= ; switch(strOperate) case + : strResult=Convert.ToString(Convert.ToDouble(.A)+Conver
7、t.ToDouble(.C); break; case - : strResult=Convert.ToString(Convert.ToDouble(.A)-Convert.ToDouble(.C); break; case * : strResult=Convert.ToString(Convert.ToDouble(.A)*Convert.ToDouble(.C); break; 6class Program/小菜修改后代码 static void Main( string args ) try . switch(strOperate) . case / : if(strNumberB
8、!=0) strResult=Convert.ToString(Convert.ToDouble(.A)/Convert.ToDouble(.C); else strResult=除数不能为0; break; /end switch Console.Write(结果是:+strResult); /end try catch (Exception ex) Console.WriteLine(输入有错+ex.Message); /end catch /end Main面向对象编程编程者容易遇到这样的问题。遇到问题直觉地用计算机能够理解的逻辑来描述和表达待解决问题及具体的求解过程。这其实是用计算机的
9、方式去思考。比如计算器,先要去输入两个数和符号,然后根据符号去选择如何运算,得到结果。本身没错,但却使得程序只是为满足当前需求,不易维护,不易扩展,更不容易复用,从而达不到高质量代码的要求。什么叫易维护,易扩展,易复用呢?活字印刷,面向对象 三国时期,曹操率领百万大军攻打东吴,大军在长江赤壁驻扎,军船连城一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,酒席间,曹操诗性打发,不觉吟道:“喝酒唱歌,人生真爽。.”。众文武齐呼:“丞相好诗!”于是一臣子速命印刷工匠刻版印刷,以便流传天下。喝酒唱歌,人生真爽。.活字印刷,面向对象 样张出来给曹操一看,曹操感觉不妥,说道“喝与唱,此话过俗,应
10、改为对酒当歌较好!”。 于是此臣就命工匠重新来过。工匠眼看连夜刻版之工,彻底白费,心中叫苦不迭。只得照办。喝酒唱歌,人生真爽。.对酒当歌,人生真爽。.喝酒唱歌,人生真爽。.活字印刷,面向对象 样张再次出来给曹操过目,曹操细细一品,觉得还是不好,说:“人生真爽太过直接,应改问语才够意境,因此要改为对酒当歌,人生几何?.”。 当臣子转告工匠时,工匠晕倒.对酒当歌,人生真爽。.对酒当歌,人生几何?.活字印刷,面向对象 工匠为何会晕倒? 三国时期还没有活字印刷,如果有了活字印刷,只需要更改四个字就可以,其余工作没有白做。喝酒唱歌人生真爽对当几何活字印刷,面向对象喝酒唱歌人生真爽对当几何第一,要改,只需
11、更改要改之字,此为可维护。第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用。第三,此诗若要加字,只需另外加入即可,这是可扩展。第四,字的排列其实可能是竖排也可能是横排,只需要将活字移动就可满足要求,此是灵活性好。面向对象的好处满足客户需求变化。封装、继承、多态降低程序耦合度。(传统印刷术问题在于字都刻在一个面板上耦合度太高)公司出题本意是希望求职者写出容易维护、容易扩展、容易复用的计算机程序。复制VS复用初级程序员的工作就是Ctrl+C和Ctrl+V,这其实很不好的编程习惯。当代码中重复代码多到一定程度,维护时,就是一场灾难。编程有一原则,尽可能避免重复。业务的封装现
12、在要求写一个Windows的计算器,那么小菜之前的代码可以复用吗?小菜:“那还不简单,直接代码复制过去不就可以?改动不大,不麻烦!”“想想看,小菜的代码那些与控制台有关哪些只和计算器有关?”小菜:“你的意思是分一个类出来?让计算和显示分开。”业务的封装让业务逻辑和界面逻辑分开,让它们之间的耦合度降低,只要分离开,可以达到容易维护和扩展。业务的封装public class Operation/运算类 public static double GetResult(double numberA,double numberB,string operate) double result=0d; swit
13、ch(operate) case + : result=numberA+numberB; break; case - : result=numberA-numberB; break; case * : result=numberA*numberB; break; case / : result=numberA/numberB; break; return result; 业务的封装static void Main( string args )/客户端代码 try Console.Write(请输入数字 A:); string strNumberA=Console.ReadLine( ); Co
14、nsole.Write(请选择运算符(+ - * /)); string strOperate=Console.ReadLine( ); Console.Write(请输入数字 B:); string strNumberB=Console.ReadLine( ); string strResult= ; strResult=Convert.ToString (Operation.GetResult(Convert.ToDouble(strNumberA), Convert.ToDouble(strNumberB), strOperate); Console.WriteLine(结果是:+str
15、Result); /end try catch (Exception ex) Console.WriteLine(输入有错+ex.Message); /end catch/end Main如果现在要写一个Windows的计算器,就可以复用运算类Operation。只实现了面向对象三大特征中的哪一种?紧耦合VS松耦合小菜:“计算器这样的小程序还可以用到面向对象三大特性,继承和多态怎么可能用上,我实在不能理解。”“小菜很有钻研精神嘛。你先考虑下,昨天那段程序除了可复用,还能否做到很灵活的可修改和可扩展呢?”小菜:“我已经把业务和界面分离了,不是很灵活了吗?”“那么,如果现在需要加上一个求根运算,要
16、如何修改?”紧耦合VS松耦合小菜:“只需要Operation类就行了,在switch中加一个分支就好了。”只要加一个平方根,却需要加减乘除都来参与编写、编译,如果一不小心把加改成减法,岂不糟糕。紧耦合VS松耦合例如:公司要求小菜为公司薪金管理系统做维护,原来只有技术人员(月薪),市场销售人员(底薪+提成),经理(年薪+股份)三种运算算法,现在要增加兼职人员(时薪)的算法。若按照小菜之前的程序写法,公司必须把包含三种薪资算法的运算类给他,让他修改。如果小菜心中打小算盘,“我去,公司给我工资那么低,我真够郁闷的,这下有机会”。紧耦合VS松耦合于是小菜除了增加兼职算法外,在技术人员(月薪)算法中再多
17、加一句if(员工是小菜) salary=salary*1.1;这就意味着,小菜月薪每月提高10%,本来只是加一个功能,却使得原有的运行良好的功能代码发生变化,风险太大。紧耦合VS松耦合小菜:“哦,所以我应该把加减乘除等运算分离,修改其中一个不影响另外几个,增加运算算法也不影响其他代码。”业务的封装public class Operation/运算类 private double _numberA=0; private double _numberB=0; public double NumberA get return _numberA; /外界调用时可以得到_numberA的值 set _n
18、umberA= value; /外界可以给内部的_numberA赋值 public double NumberB get return _numberB; set _numberB= value; public virtual double GetResult() double result=0; return result; 业务的封装class OperationAdd: Operation/加类 public override double GetResult() double result=0; result=NumberA+NumberB; return result; class
19、OperationSub: Operation/减类 public override double GetResult() double result=0; result=NumberA-NumberB; return result; 业务的封装class OperationMul: Operation/乘类 public override double GetResult() double result=0; result=NumberA*NumberB; return result; class OperationDiv: Operation/除类 public override doub
20、le GetResult() double result=0; if (NumberB=0) throw new Exception(除数不能为0。); else result=NumberA/NumberB; return result; 小菜:“我首先写了一个运算父类,它有两个Number属性,用于计算器的前后数,一个虚方法GetResult(),用于计算结果。如果要修改任何一个算法,就不需要提供其他算法代码。但问题来了,我该如何让计算器知道我要实现哪一个算法?”=如何实例化对象?简单工厂模式用单独的类来创造实例化过程。public class OperationFactory/工厂 pu
21、blic static Operation createOperate(string operate) Operation oper=null; switch(operate) case +: oper=new OperationAdd(); break; case -: oper=new OperationSub(); break; case *: oper=new OperationMul(); break; case /: oper=new OperationDiv(); break; return oper; 简单工厂模式/客户端代码Operation oper;oper=Operat
22、ionFactory.createOperate(+);oper.NumberA=1;oper.NumberB=2;double result=oper.GetResult();只需要知道运算符,工厂就能实例化出合适的对象。简单工厂模式核心思想:用一个工厂来根据输入的条件产生不同的类,然后根据不同类的成员函数得到不同的结果。GOOD: 适用于不同情况创建不同的类。 BUG:客户端必须要知道基类和工厂类,耦合性仍然不足。11醉翁亭记 1反复朗读并背诵课文,培养文言语感。2结合注释疏通文义,了解文本内容,掌握文本写作思路。3把握文章的艺术特色,理解虚词在文中的作用。4体会作者的思想感情,理解作者的
23、政治理想。一、导入新课范仲淹因参与改革被贬,于庆历六年写下岳阳楼记,寄托自己“先天下之忧而忧,后天下之乐而乐”的政治理想。实际上,这次改革,受到贬谪的除了范仲淹和滕子京之外,还有范仲淹改革的另一位支持者北宋大文学家、史学家欧阳修。他于庆历五年被贬谪到滁州,也就是今天的安徽省滁州市。也是在此期间,欧阳修在滁州留下了不逊于岳阳楼记的千古名篇醉翁亭记。接下来就让我们一起来学习这篇课文吧!【教学提示】结合前文教学,有利于学生把握本文写作背景,进而加深学生对作品含义的理解。二、教学新课目标导学一:认识作者,了解作品背景作者简介:欧阳修(10071072),字永叔,自号醉翁,晚年又号“六一居士”。吉州永丰
24、(今属江西)人,因吉州原属庐陵郡,因此他又以“庐陵欧阳修”自居。谥号文忠,世称欧阳文忠公。北宋政治家、文学家、史学家,与韩愈、柳宗元、王安石、苏洵、苏轼、苏辙、曾巩合称“唐宋八大家”。后人又将其与韩愈、柳宗元和苏轼合称“千古文章四大家”。关于“醉翁”与“六一居士”:初谪滁山,自号醉翁。既老而衰且病,将退休于颍水之上,则又更号六一居士。客有问曰:“六一何谓也?”居士曰:“吾家藏书一万卷,集录三代以来金石遗文一千卷,有琴一张,有棋一局,而常置酒一壶。”客曰:“是为五一尔,奈何?”居士曰:“以吾一翁,老于此五物之间,岂不为六一乎?”写作背景:宋仁宗庆历五年(1045年),参知政事范仲淹等人遭谗离职,
25、欧阳修上书替他们分辩,被贬到滁州做了两年知州。到任以后,他内心抑郁,但还能发挥“宽简而不扰”的作风,取得了某些政绩。醉翁亭记就是在这个时期写就的。目标导学二:朗读文章,通文顺字1初读文章,结合工具书梳理文章字词。2朗读文章,划分文章节奏,标出节奏划分有疑难的语句。节奏划分示例环滁/皆山也。其/西南诸峰,林壑/尤美,望之/蔚然而深秀者,琅琊也。山行/六七里,渐闻/水声潺潺,而泻出于/两峰之间者,酿泉也。峰回/路转,有亭/翼然临于泉上者,醉翁亭也。作亭者/谁?山之僧/曰/智仙也。名之者/谁?太守/自谓也。太守与客来饮/于此,饮少/辄醉,而/年又最高,故/自号曰/醉翁也。醉翁之意/不在酒,在乎/山水
26、之间也。山水之乐,得之心/而寓之酒也。节奏划分思考“山行/六七里”为什么不能划分为“山/行六七里”?明确:“山行”意指“沿着山路走”,“山行”是个状中短语,不能将其割裂。“望之/蔚然而深秀者”为什么不能划分为“望之蔚然/而深秀者”?明确:“蔚然而深秀”是两个并列的词,不宜割裂,“望之”是总起词语,故应从其后断句。【教学提示】引导学生在反复朗读的过程中划分朗读节奏,在划分节奏的过程中感知文意。对于部分结构复杂的句子,教师可做适当的讲解引导。目标导学三:结合注释,翻译训练1学生结合课下注释和工具书自行疏通文义,并画出不解之处。【教学提示】节奏划分与明确文意相辅相成,若能以节奏划分引导学生明确文意最
27、好;若学生理解有限,亦可在解读文意后把握节奏划分。2以四人小组为单位,组内互助解疑,并尝试用“直译”与“意译”两种方法译读文章。3教师选择疑难句或值得翻译的句子,请学生用两种翻译方法进行翻译。翻译示例:若夫日出而林霏开,云归而岩穴暝,晦明变化者,山间之朝暮也。野芳发而幽香,佳木秀而繁阴,风霜高洁,水落而石出者,山间之四时也。直译法:那太阳一出来,树林里的雾气散开,云雾聚拢,山谷就显得昏暗了,朝则自暗而明,暮则自明而暗,或暗或明,变化不一,这是山间早晚的景色。野花开放,有一股清幽的香味,好的树木枝叶繁茂,形成浓郁的绿荫。天高气爽,霜色洁白,泉水浅了,石底露出水面,这是山中四季的景色。意译法:太阳
28、升起,山林里雾气开始消散,烟云聚拢,山谷又开始显得昏暗,清晨自暗而明,薄暮又自明而暗,如此暗明变化的,就是山中的朝暮。春天野花绽开并散发出阵阵幽香,夏日佳树繁茂并形成一片浓荫,秋天风高气爽,霜色洁白,冬日水枯而石底上露,如此,就是山中的四季。【教学提示】翻译有直译与意译两种方式,直译锻炼学生用语的准确性,但可能会降低译文的美感;意译可加强译文的美感,培养学生的翻译兴趣,但可能会降低译文的准确性。因此,需两种翻译方式都做必要引导。全文直译内容见我的积累本。目标导学四:解读文段,把握文本内容1赏析第一段,说说本文是如何引出“醉翁亭”的位置的,作者在此运用了怎样的艺术手法。明确:首先以“环滁皆山也”
29、五字领起,将滁州的地理环境一笔勾出,点出醉翁亭坐落在群山之中,并纵观滁州全貌,鸟瞰群山环抱之景。接着作者将“镜头”全景移向局部,先写“西南诸峰,林壑尤美”,醉翁亭坐落在有最美的林壑的西南诸峰之中,视野集中到最佳处。再写琅琊山“蔚然而深秀”,点山“秀”,照应上文的“美”。又写酿泉,其名字透出了泉与酒的关系,好泉酿好酒,好酒叫人醉。“醉翁亭”的名字便暗中透出,然后引出“醉翁亭”来。作者利用空间变幻的手法,移步换景,由远及近,为我们描绘了一幅幅山水特写。2第二段主要写了什么?它和第一段有什么联系?明确:第二段利用时间推移,抓住朝暮及四季特点,描绘了对比鲜明的晦明变化图及四季风光图,写出了其中的“乐亦
30、无穷”。第二段是第一段“山水之乐”的具体化。3第三段同样是写“乐”,但却是写的游人之乐,作者是如何写游人之乐的?明确:“滁人游”,前呼后应,扶老携幼,自由自在,热闹非凡;“太守宴”,溪深鱼肥,泉香酒洌,美味佳肴,应有尽有;“众宾欢”,投壶下棋,觥筹交错,说说笑笑,无拘无束。如此勾画了游人之乐。4作者为什么要在第三段写游人之乐?明确:写滁人之游,描绘出一幅太平祥和的百姓游乐图。游乐场景映在太守的眼里,便多了一层政治清明的意味。太守在游人之乐中酒酣而醉,此醉是为山水之乐而醉,更是为能与百姓同乐而醉。体现太守与百姓关系融洽,“政通人和”才能有这样的乐。5第四段主要写了什么?明确:写宴会散、众人归的情景。目标导学五:深入解读,把握作者思想感情思考探究:作者以一个“乐”字贯穿全篇,却有两个句子别出深意,不单单是在写乐,而是另有所指,表达出另外一种情绪,请你找出这两个句子,说说这种情绪是什么。明确:醉翁之意不在酒,在乎山水之间也。醉能同其乐,醒能述以文者,太守也。这种情
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2031年中国空气层婴儿内衣行业投资前景及策略咨询研究报告
- 2025-2030年中国FPSO行业市场发展状况与市场运营趋势报告
- 2025-2030年中国tdscdma终端芯片行业发展前景预测及投资战略研究报告
- 2025-2030年中国LNG水上加气站市场运行新形势与投资前景报告
- 2025至2031年中国电动工具检测线行业投资前景及策略咨询研究报告
- 宣化科技职业学院《中华传统文化》2023-2024学年第一学期期末试卷
- 2025-2030年中国MOS微器件市场运营格局及发展趋势研究报告
- 突发公共卫生流行病学
- 企业上市的操作方法和建议资料
- 学习计划的制定与意义
- 2025年昆明市高三语文三诊一模考试卷附答案解析
- 湖北省武汉市2025届高中毕业生四月调研考试语文试卷及答案(武汉四调)
- 人工智能设计伦理知到智慧树章节测试课后答案2024年秋浙江大学
- 品管圈PDCA获奖案例-提高压疮高危患者预防措施落实率医院品质管理成果汇报
- 新中考考试平台-考生端V2.0使用手册
- 抗高血压药物研究进展页PPT课件
- 青春期健康教育之拒绝吸烟酗酒
- 环境土壤学PPT课件
- 办公生活区临时设施施工方案
- 博世中国14Q价值流的14条质量原则
- 空调保养维修紧急事件防范预案
评论
0/150
提交评论