电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPT文档下载
分享到微信 分享到微博 分享到QQ空间

-面向对象应对之道

  • 资源ID:60337250       资源大小:11.27MB        全文页数:88页
  • 资源格式: PPT        下载积分:20金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要20金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

-面向对象应对之道

面向对象开发,课程开发:penghao 2008-04-01,课程目的,描述面向对象编程的一般性的手法,原则 和技巧 工欲善其事,必先利其器。,课程大纲,引言 面向对象的表达方法 面向对象的五个原则 面向对象的几个设计模式,我们面对的是什么?,这种情况下的应对之道,规模大且服务不断的情况下对应的非功能性需求就会要求比较多. 变化多且持续变化的情况下要求程序具有良好的结构。本文档所关注的核心。,程序,服务具有良好结构有两个层面的考虑,大粒度的结构设计。关注的层面比较宏观。这一块的知识参考 面向模式的体系结构 卷一。本文档不关注。,细粒度结构设计-本文档关注的核心,什么代码写得好?什么叫坏的代码?有标准吗?,2-5,坏代码举例,僵化:很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的改动。 脆弱:对系统的改动会导致系统综合改动的地方在概念上无关的许多地方出现问题。 牢固:很难解开系统的纠结,使之成为一些可重用的组件。 粘滞:做正确的事情比做错误的事情要困难。 不必要的复杂:设计中包含不具有任何直接好处的基础结构。 不必要的重复: 晦涩:很难阅读,理解。 (引用于敏捷软件开发:原则,模式与实践 强烈推荐该书。),好代码的近似标准介绍,OO(或者说语言)的核心思想 OO的五大技术原则(标准) 从OO看合理的分层架构,OO(或者说语言)的核心思想表达领域概念,语言的语法都是比较简单的。不过同样的语法写出来的代码却有好坏高低之分。 重要的区别就在于表达领域概念的水平 重要的原则就是:“程序(代码)应该反映人的思想,而不是相反。” Martin fowler.(分析模式),如何来表达一个mmog-静态视图?,针对某个领域对象粗分操作,行为,职责。,通过对领域概念应用OO原则,分析模式,设计模式等等手段对对象职责进行抽象,细分职责。形成最终静态对象图。 通过对用例画时序图,确认对象职责是否可行,恰当。,实际mmogAI表达的例子,表达概念的几种类型,释意接口。 表达实体对象 表达约束 表达流程(服务) 表达规格 隐含机制表达,“在初学面向对象时对它们并不熟悉。每学会一个这样的表达的类型,我的设计水平就又进了一步” “My designs became sharper with each one of these I leaned.” Eric Evans 领域驱动设计强烈推荐该书,释意接口的例子,int CPlayer:StandUp( int iSessionID ) int iOpenNum = 0; iOpenNum = m_Sessions.GetLastIdx(); /下面两个判断判断违法情况。 if( iSessionID iOpenNum) ,推荐写法如下:,RoomSession 提取成一个对象(类),提供CheckRoomIDValid 接口。 int CPlayer:StandUp( int iSessionID ) iRet = m_Session.CheckValid(iSessionID); If(iRet) ,这种是完全达到了隐藏实现,消除了代码重复,又充分表意的目的。特别在此强调释意接口。 好的类 应该是每个函数都比较短,五,六十行。然后有二,三十个方法。这个类形成一个接近封闭的类型。具有充分的自我表达能力。,实体表达的例子,char sNowDate20=0; char sLastDate20=0; GetDate(time(NULL),sNowDate); GetDate(iReserveLastGive, sLastDate); if(strcmp(sNowDate, sLastDate) 0) else ,同一个功能的另外一种写法 也是实际代码。 int CGiveDaily:OnGive(CAttach *pPA, int iHE) Date dToday(time(NULL); Date dLastDay(pPA-GetGiveHELastTime(); if(dLastDay = dToday) else ,可以看出 抽取出了 日期类,用日期类 来表达人的思想,而不是只记得使用哪个API来实现功能。 日期这个概念在这个需求里面是比较重要的一个概念。面向对象就表达出了这个概念。,约束表达的例子,有时候某些约束表达的是领域逻辑。通常隐式的表达,将他们显示表达出来能够极大地改进设计。 比如QQGame 里面进入房间限制。,实际产品对进房需求的演化,第一个版本:限制一下玩家最低,最高积分。 第二个版本超级玩家和网管要优先进房 第三个版本如果是出租房间需要是承租方才能进房 第四个版本如果是比赛房间需要是比赛方才能进房 第五个版本需要拥有某种道具 第六个版本如果是欢乐场房间需要检查欢乐豆上下限制。,产品的需求演化说明进房约束是个热点问题。 抽象出约束接口,把约束的增加,约束的实现,变更对进房主流程屏蔽起来。,流程(服务)表达的例子,基本行为流程概念的表达,对于产品同事不断提及到的流程概念表达。,行为概念流程表达的好处,把规格用对象来表达,验证。 选择(查询) 按需创建,隐含概念表达实例,在QQGame里面对房间模式的描述结构如下。不同的房间模式,具有不一样的基本行为。 我们通过不同的工厂实现来屏蔽掉这一层变化。不同的房间聚合不同的生成工厂。 房间模式是挖掘出来的概念,抽象工厂表达出了这个概念。,OO的五项技术原则是什么?(讨论,提问),OO的五项技术原则,单一职责事情不要太复杂。 开闭原则让易变的容易变化,不变的稳定。 依赖倒置让易变的依赖于稳定,而不是相反。 接口隔离 可替代,OCP(Open-Closed Principle) : 开放-关闭原则 对扩展要说YES,对修改说NO。 LSP(Liskov Substitution Principle) : LSP原则 父母要对孩子负责。 SRP(Single Responsibility Principle) : 单一职责原则 感情要单一,不要脚踏两支船。 DIP(Dependency Inversion Principle) : 关系返转原则 不要一天打10个电话给我,有结果我会通知你。 ISP(Interface Segregation Principle) : 接口隔离原则 让李部长只负责开发吧,市场就让辛部长做吧,学习面向对象中最主要的一点就是,理解面向对象原则。如果你还没有真正理解这些原则,那你做出的设计可能不是最好的设计,那你学习设计模式也不能真正理解它的真谛。,五项技术原则实例-单一职责,实际代码例子 class CDBCtrl public: CDBCtrl(); CDBCtrl(); int Initialize(const char *szCfgFile); int PrepareToRun(); int Run(); void* operator new(size_t nSize); void operator delete( void* pMem); static int CountSize(); static CSharedMem *pCurrentShm; private: int ReadCfg(const char *szCfgFile); int LoadProxyCfgFromFile(char *szProxyFile, int,class CMainCtrl public: CMainCtrl(); virtual CMainCtrl(); virtual int Initialize(); virtual int Run(); int ReloadCfg(); int CheckRunFlag(); protected: private: ;,职责表达了负责的变化,有多个维度的职责,就有多个维度的变化,五项技术原则实例-开闭原则,QQGame 最经典的例子,Main Frame可以不动代码,游戏服务可以源源不断输出新的游戏。觉得这个是最核心的规则。(下图引用自zengyuQQGame服务器架构技术),五项技术原则实例-依赖倒置,问题界面控件,比如Button,ListBox,等。它们都是想做成通用的,也就是说和业务逻辑不相关。但是事件响应 是通过界面控件传递到逻辑的。 问怎么做到界面控件和业务逻辑隔离?,经典的解决办法(参考QQGame大厅设计以及 敏捷软件开发),实际代码例子: class CmdObserver public: CmdObserver(); virtual CmdObserver(); virtual int CmdDone(CCommand *pCmd,int iResult = CmdSucceed); ; class MsgObserver public: MsgObserver() virtual MsgObserver() virtual int OnMsg(CMsg *pMsg) = 0; ;,五项技术原则实例-接口隔离,五项技术原则实例-可替换,子类必须能够替换掉它们的基类型。 问题:正方形是特殊的长方形吗?,从OO看合理的分层结构,用户界面层:负责向用户显示信息,解析用户命令。不一定面对的是人,可能是一条狗。 应用层:定义软件可以完成的工作,指挥具有丰富含义的领域对象来解决问题。这个层要保持简练,不包括业务规则和知识,只是给下一层相互协作的领域对象协调任务,委托工作。 领域层:负责表示业务概念,业务状况以及业务规则。业务软件核心。 将领域层分离出来至关重要。 基础结构层:为上层提供通用的技术能力:应用的消息发送,领域持久化,绘制窗口等。,业务层根据Evans DDD,可以再细分为应用层和领域层两种,在业务层设计编码中,大量应用OO设计原则和设计模式。 领域层定义:负责表达业务领域概念、业务状态以及业务规 则,是整个业务软件核心和重点。 应用层定义:负责完成功能,并且协调丰富的领域对象来实现功能,不能包括业务规则,无业务状态;,从开发每个过程看OO方法论的应用,1.需求分析,用户活动图,软件需求规格说明书,领域建模。-OOA 2.概要设计/详细设计OOD 分析和设计的边界很难明确分开。 3.编码/测试-OOP 4.发布 5.从1再循环到4,需求分析-OOA,第一步,建立用户活动图。不关注实现。仅关注用户流程,实体。 第二步,画实体关系图,着重类概念,类之间关系。 第三步,画时序图,对关键活动,用例用时序图来分析职责是否合理。,OOA实例,系统需求:考评系统。 某XX公司要建立一个考评系统。 大体上领导考虑 要从德智体等几个方面综合考虑。 德包括考勤,同事意见,领导意见等;智包括技术各项指标,比如操作系统,网络,领域理解等;体包括体育各项指标,比如羽毛球,乒乓球等。 从这些方面给一个人打分。请用OO描述一下这个对象系统.,实例一:把各个实体概念及其之间关系表达出来,实例二:进行抽象,使概念表达更具灵活性,和可扩展性。,设计-OOD,设计模式介绍 深入浅出设计模式 强烈推荐此书。 设计模式某个环境下,对某个设计问题的一种解决方式的描述。 设计模式强调把容易变化和不变部分分离。让变化部分容易变化。 在日常开发中,找到变化点,积累变化面是重要的。,模板方法 观察者 抽象工厂 桥 职责链 组合 Reactor ac,设计模式实例模板方法,在一个框架里面,比如MFC,要做本身框架的初始化代码,又要给不同的业务留下初始化各自业务的空间。同时框架代码是以二进制形式发布的,不能在里面添加代码。怎么办? 一个MFC应用程序的WinMain函数哪里去了?,MFC的解决实例,模板方法类图结构,设计模式实例观察者,一个分层的架构,越下层的结构往往越通用,下层不能依赖于上层。但是下层又有东西要通知上层

注意事项

本文(-面向对象应对之道)为本站会员(ji****n)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.