面向对象讲座课外练习.ppt

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象讲座课外练习

面向对象讲座 韩宏 课外练习 前面的FileStream的设计真的没有问题吗?在c++中,有以下例子,请根据打印结果,分析FileStream构造和析构的设计有何危险。 教训:了解清楚你使用的语言。设计大多数时候独立语言,可当它悄悄算计你时,在茫茫代码中,很难发现啊。 课外练习 c++在构造分配析构释放的策略中,还有更多深藏的问题。比如,如果父类决定在析构时要调用一个sendMsg发送消息。可不同子类sendMsg的方式不同,有的是发tcp消息,有点是发跨进程消息,有点是发window消息…,那么自然将sendMsg设定为虚函数,在父类析构中调用,子类覆盖之。这在java,.net,delphi等中均没有问题,测试一下,有什么问题,怎么处理。 教训:不同语种啊,看来相似的东西,为什么有这么多差异呢?在语种间迁移设计要谨慎啊 课后练习 1)移动图形该怎么设计接口,满足开闭原则 2) 模仿word的图形组合功能,该怎么实现。考虑删除,移动。 课外练习 该代码有一个非常隐蔽的错误如果用以下代码将浮现该错误,这个错误展示了一个重要的原则: 设计有一部分和语言选择紧密耦合,语言特征决定了设计方案!!!在c语言模仿面向对象时,我们将仔细讨论背后机制后我们的选择 让错误浮现的代码: (1)unsigned long __stdcall TThread::Wrapper(void * arg){ TThread * Thd; Thd = ((TThread *) arg); Sleep(1000); Thd-Execute(); ….. MyThread * thd = new MyThread(); thd-Run(); delete thd; 重新设计,解决该问题 课外练习 冒泡算法对于不同类型的数据排序时,将出现典型的拷贝然后修改部分代码的问题。不用c++的泛型编程技术,请用模版方法模式解决重用可扩展性问题。 策略者和模版方法模式可互换 本质上,将模版方法模式换成等价策略者时,就是将其虚方法从模版方法模式的基类移动到策略者基类上。在模版方法模式中调用虚方法的地方调用策略者的虚方法。 课外练习 将前面冒泡排序的算法从模版方法模式变成策略者模式 课外题 设计一个TCPServer类,它实现了线程池模型,并且可让用户轻松扩展自己的应用逻辑。 提示,事件可用Listener通知,而TCP连接到使用的各个阶段可以用事件表示。而Spawn新线程是一个关键,通知客户代码,让客户决定spawn那种线程。 课外题 插件式协议处理, 首先和底层通讯机制无关,不论udp还是tcp。 其次,添加新协议通过添加新的协议解析器即可。 三、协议解析并非单独解析,往往需要解析后有相关动作,比如ftp需要存盘,qq消息需要展示在界面上等待。 以上3个点的实现应该满足开闭原则 关于2,可以有两种方式,同步,将comm给解析者 异步,只将数据给它。如何识别出协议。 课外题 假定有一个Storage类,有add, del, query函数。如果想给它添加缓存。且可以任意和不同缓存策略绑定,而不违反开闭原则。如何设计。提示,装饰模式可提供参考。 我在一个流程模板的存储接口中实现了该设计,而VCL的数据库架构中,也通过这样的设计获得透明缓存的效果。 课外练习 时钟的例子,如果任何一个时钟修改时间,所有时钟自动修改为新时间,如果修改设计 课外练习 在基于网络的入侵检测中,不同的攻击方式需要用不同的检测方法。而它们都需要分析抓到的报文。请给出一个设计让所有检测模块能共享抓包的基础设施。 假定open打开网卡,GetPacket读取抓到的包。Close为关闭网卡。 * * void test(TestClass a){ printf(a.i1=%d a.i2=%d\n, a.i1, a.i2); } void main(){ TestClass a; a.i1 = 1; a.i2 = 2; test(a); } class TestClass{ public: TestClass(){ printf(do constructor\n); } ~TestClass(){ printf(do destructor\n); } }; *

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档