SlideShare a Scribd company logo
1 of 88
面向对象开发 课程开发 :penghao 2008-04-01
课程目的 ,[object Object],[object Object]
课程大纲 ,[object Object],[object Object],[object Object],[object Object]
我们面对的是什么?
这种情况下的应对之道 ,[object Object],[object Object]
程序,服务具有良好结构有两个层面的考虑 ,[object Object]
细粒度结构设计 - 本文档关注的核心
什么代码写得好?什么叫坏的代码?有标准吗? 2-5
 
坏代码举例 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
 
好代码的近似标准介绍 ,[object Object],[object Object],[object Object]
OO( 或者说语言 ) 的核心思想—表达领域概念 ,[object Object],[object Object],[object Object]
 
如何来表达一个 mmog- 静态视图?
针对某个领域对象粗分操作,行为,职责。
[object Object],[object Object]
 
实际 mmogAI 表达的例子
表达概念的几种类型 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
释意接口的例子 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
推荐写法如下: ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
实体表达的例子 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
约束表达的例子 ,[object Object],[object Object]
实际产品对进房需求的演化 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
 
 
[object Object],[object Object]
流程 ( 服务 ) 表达的例子
基本行为流程概念的表达,对于产品同事不断提及到的流程概念表达。
行为概念流程表达的好处
把规格用对象来表达 ,[object Object],[object Object],[object Object]
隐含概念表达实例 ,[object Object],[object Object],[object Object]
 
OO 的五项技术原则是什么?(讨论,提问)
 
OO 的五项技术原则 ,[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
五项技术原则实例 - 单一职责 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
五项技术原则实例 - 开闭原则 ,[object Object]
五项技术原则实例 - 依赖倒置 ,[object Object],[object Object]
 
经典的解决办法(参考 QQGame 大厅设计以及 《敏捷软件开发》)
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],五项技术原则实例 - 接口隔离
五项技术原则实例 - 可替换 ,[object Object],[object Object]
从 OO 看合理的分层结构
[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
从开发每个过程看 OO 方法论的应用 ,[object Object],[object Object],[object Object],[object Object],[object Object]
需求分析 -OOA ,[object Object],[object Object],[object Object]
OOA 实例 ,[object Object],[object Object],[object Object],[object Object]
 
实例一:把各个实体概念及其之间关系表达出来
实例二:进行抽象,使概念表达更具灵活性,和可扩展性。
设计 -OOD ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
设计模式实例—模板方法 ,[object Object],[object Object]
MFC 的解决实例
模板方法类图结构
设计模式实例—观察者 ,[object Object]
观察者标准类图
观察者实际代码例子 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],这个实例中,命令是属于基础设施层的东西,但是要通知上层业务逻辑,自己的状态变迁。所以使用观察者。
设计模式实例—抽象工厂 ,[object Object],[object Object],[object Object]
简单的工厂
抽象工厂
[object Object],[object Object],[object Object],抽象工厂特征
设计模式实例—桥 ,[object Object],[object Object],[object Object],[object Object],[object Object]
 
ACE Reactor- 实现视图
设计模式实例 - 职责链 ,[object Object],[object Object],[object Object],[object Object]
 
 
职责链好处如下 ,[object Object],[object Object]
设计模式实例 - 组合模式 ,[object Object],[object Object]
 
设计模式实例— Reactor ,[object Object],[object Object],[object Object],[object Object]
注意 Reactor 对概念的抽象,和应用的分层隔离。这些经典的手段。
设计模式实例—异步命令模式 ,[object Object],[object Object],[object Object],[object Object]
异步命令模式框图
时序图 ,[object Object],[object Object],[object Object]
谢谢 Q&A

More Related Content

Viewers also liked

腾讯大讲堂42 数据库内核设计思路浅析
腾讯大讲堂42 数据库内核设计思路浅析腾讯大讲堂42 数据库内核设计思路浅析
腾讯大讲堂42 数据库内核设计思路浅析topgeek
 
腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3topgeek
 
Rest与面向资源的web开发
Rest与面向资源的web开发Rest与面向资源的web开发
Rest与面向资源的web开发topgeek
 
腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化topgeek
 
腾讯大讲堂24 qq show2.0重构历程
腾讯大讲堂24 qq show2.0重构历程腾讯大讲堂24 qq show2.0重构历程
腾讯大讲堂24 qq show2.0重构历程topgeek
 
Ruby agile development_of_game_operation_platform
Ruby agile development_of_game_operation_platformRuby agile development_of_game_operation_platform
Ruby agile development_of_game_operation_platformtopgeek
 
图形组件技术杂谈
图形组件技术杂谈图形组件技术杂谈
图形组件技术杂谈topgeek
 
空望 推荐系统@淘宝
空望 推荐系统@淘宝空望 推荐系统@淘宝
空望 推荐系统@淘宝topgeek
 
Manajemen keuangan (pengantar)
Manajemen keuangan (pengantar)Manajemen keuangan (pengantar)
Manajemen keuangan (pengantar)Lehandra
 

Viewers also liked (10)

腾讯大讲堂42 数据库内核设计思路浅析
腾讯大讲堂42 数据库内核设计思路浅析腾讯大讲堂42 数据库内核设计思路浅析
腾讯大讲堂42 数据库内核设计思路浅析
 
腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3
 
Rest与面向资源的web开发
Rest与面向资源的web开发Rest与面向资源的web开发
Rest与面向资源的web开发
 
腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化
 
腾讯大讲堂24 qq show2.0重构历程
腾讯大讲堂24 qq show2.0重构历程腾讯大讲堂24 qq show2.0重构历程
腾讯大讲堂24 qq show2.0重构历程
 
Ruby agile development_of_game_operation_platform
Ruby agile development_of_game_operation_platformRuby agile development_of_game_operation_platform
Ruby agile development_of_game_operation_platform
 
Virtual zoo!
Virtual zoo!Virtual zoo!
Virtual zoo!
 
图形组件技术杂谈
图形组件技术杂谈图形组件技术杂谈
图形组件技术杂谈
 
空望 推荐系统@淘宝
空望 推荐系统@淘宝空望 推荐系统@淘宝
空望 推荐系统@淘宝
 
Manajemen keuangan (pengantar)
Manajemen keuangan (pengantar)Manajemen keuangan (pengantar)
Manajemen keuangan (pengantar)
 

Similar to 腾讯大讲堂05 面向对象应对之道

重构——关于可读性、原则和模式
重构——关于可读性、原则和模式重构——关于可读性、原则和模式
重构——关于可读性、原则和模式cnfi
 
大数据的Reactive设计范式和akka实践
大数据的Reactive设计范式和akka实践大数据的Reactive设计范式和akka实践
大数据的Reactive设计范式和akka实践Sean Zhong
 
金字塔原理思考、写作和解决问题的逻辑教材
金字塔原理思考、写作和解决问题的逻辑教材金字塔原理思考、写作和解决问题的逻辑教材
金字塔原理思考、写作和解决问题的逻辑教材tielong
 
软件工程 第十一章
软件工程 第十一章软件工程 第十一章
软件工程 第十一章浒 刘
 
安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fbAlbert Hong
 
资身Dba经验谈
资身Dba经验谈资身Dba经验谈
资身Dba经验谈yiditushe
 
01 orm概述及持久化介绍
01 orm概述及持久化介绍01 orm概述及持久化介绍
01 orm概述及持久化介绍Zelin Wang
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
金字塔原理培训演示教材
金字塔原理培训演示教材金字塔原理培训演示教材
金字塔原理培训演示教材明镜 王
 
金字塔原理培训演示教材
金字塔原理培训演示教材金字塔原理培训演示教材
金字塔原理培训演示教材明镜 王
 
7 issues --- Foundation for goals --- part1 2014-09-01-002
7 issues --- Foundation for goals --- part1 2014-09-01-0027 issues --- Foundation for goals --- part1 2014-09-01-002
7 issues --- Foundation for goals --- part1 2014-09-01-002Tein Horng Yuan
 
Refactoring with Patterns in PHP
Refactoring with Patterns in PHPRefactoring with Patterns in PHP
Refactoring with Patterns in PHPJace Ju
 
設計模式的解析與活用:分析
設計模式的解析與活用:分析設計模式的解析與活用:分析
設計模式的解析與活用:分析Kane Shih
 
软件设计原则、模式与应用
软件设计原则、模式与应用软件设计原则、模式与应用
软件设计原则、模式与应用yiditushe
 
PLS偏最小平方法教材一天-三星統計謝章升-20131122
PLS偏最小平方法教材一天-三星統計謝章升-20131122PLS偏最小平方法教材一天-三星統計謝章升-20131122
PLS偏最小平方法教材一天-三星統計謝章升-20131122Beckett Hsieh
 
业务需求分析入门
业务需求分析入门业务需求分析入门
业务需求分析入门zhoujg
 
Design Pattern - Factory Pattern
Design Pattern - Factory PatternDesign Pattern - Factory Pattern
Design Pattern - Factory PatternLi-Wei Yao
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生appuniverz
 
魏琪君-重构-关于可读性、原则和模式
魏琪君-重构-关于可读性、原则和模式魏琪君-重构-关于可读性、原则和模式
魏琪君-重构-关于可读性、原则和模式fangdeng
 

Similar to 腾讯大讲堂05 面向对象应对之道 (20)

重构——关于可读性、原则和模式
重构——关于可读性、原则和模式重构——关于可读性、原则和模式
重构——关于可读性、原则和模式
 
大数据的Reactive设计范式和akka实践
大数据的Reactive设计范式和akka实践大数据的Reactive设计范式和akka实践
大数据的Reactive设计范式和akka实践
 
金字塔原理思考、写作和解决问题的逻辑教材
金字塔原理思考、写作和解决问题的逻辑教材金字塔原理思考、写作和解决问题的逻辑教材
金字塔原理思考、写作和解决问题的逻辑教材
 
软件工程 第十一章
软件工程 第十一章软件工程 第十一章
软件工程 第十一章
 
OOAD
OOADOOAD
OOAD
 
安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb
 
资身Dba经验谈
资身Dba经验谈资身Dba经验谈
资身Dba经验谈
 
01 orm概述及持久化介绍
01 orm概述及持久化介绍01 orm概述及持久化介绍
01 orm概述及持久化介绍
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
金字塔原理培训演示教材
金字塔原理培训演示教材金字塔原理培训演示教材
金字塔原理培训演示教材
 
金字塔原理培训演示教材
金字塔原理培训演示教材金字塔原理培训演示教材
金字塔原理培训演示教材
 
7 issues --- Foundation for goals --- part1 2014-09-01-002
7 issues --- Foundation for goals --- part1 2014-09-01-0027 issues --- Foundation for goals --- part1 2014-09-01-002
7 issues --- Foundation for goals --- part1 2014-09-01-002
 
Refactoring with Patterns in PHP
Refactoring with Patterns in PHPRefactoring with Patterns in PHP
Refactoring with Patterns in PHP
 
設計模式的解析與活用:分析
設計模式的解析與活用:分析設計模式的解析與活用:分析
設計模式的解析與活用:分析
 
软件设计原则、模式与应用
软件设计原则、模式与应用软件设计原则、模式与应用
软件设计原则、模式与应用
 
PLS偏最小平方法教材一天-三星統計謝章升-20131122
PLS偏最小平方法教材一天-三星統計謝章升-20131122PLS偏最小平方法教材一天-三星統計謝章升-20131122
PLS偏最小平方法教材一天-三星統計謝章升-20131122
 
业务需求分析入门
业务需求分析入门业务需求分析入门
业务需求分析入门
 
Design Pattern - Factory Pattern
Design Pattern - Factory PatternDesign Pattern - Factory Pattern
Design Pattern - Factory Pattern
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
 
魏琪君-重构-关于可读性、原则和模式
魏琪君-重构-关于可读性、原则和模式魏琪君-重构-关于可读性、原则和模式
魏琪君-重构-关于可读性、原则和模式
 

More from topgeek

明洪涛 个性化推荐系统@土豆
明洪涛 个性化推荐系统@土豆明洪涛 个性化推荐系统@土豆
明洪涛 个性化推荐系统@土豆topgeek
 
项亮 推荐系统实践 从入门到精通
项亮 推荐系统实践 从入门到精通 项亮 推荐系统实践 从入门到精通
项亮 推荐系统实践 从入门到精通 topgeek
 
从长津湖战役看团队建设
从长津湖战役看团队建设从长津湖战役看团队建设
从长津湖战役看团队建设topgeek
 
I hate unit test
I hate unit testI hate unit test
I hate unit testtopgeek
 
腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析topgeek
 
腾讯大讲堂45 解剖ttc
腾讯大讲堂45 解剖ttc腾讯大讲堂45 解剖ttc
腾讯大讲堂45 解剖ttctopgeek
 
腾讯大讲堂26 带宽优化之道
腾讯大讲堂26 带宽优化之道腾讯大讲堂26 带宽优化之道
腾讯大讲堂26 带宽优化之道topgeek
 
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)topgeek
 
腾讯大讲堂13 soso访问速度优化
腾讯大讲堂13 soso访问速度优化腾讯大讲堂13 soso访问速度优化
腾讯大讲堂13 soso访问速度优化topgeek
 
腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨topgeek
 
腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化topgeek
 

More from topgeek (11)

明洪涛 个性化推荐系统@土豆
明洪涛 个性化推荐系统@土豆明洪涛 个性化推荐系统@土豆
明洪涛 个性化推荐系统@土豆
 
项亮 推荐系统实践 从入门到精通
项亮 推荐系统实践 从入门到精通 项亮 推荐系统实践 从入门到精通
项亮 推荐系统实践 从入门到精通
 
从长津湖战役看团队建设
从长津湖战役看团队建设从长津湖战役看团队建设
从长津湖战役看团队建设
 
I hate unit test
I hate unit testI hate unit test
I hate unit test
 
腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析
 
腾讯大讲堂45 解剖ttc
腾讯大讲堂45 解剖ttc腾讯大讲堂45 解剖ttc
腾讯大讲堂45 解剖ttc
 
腾讯大讲堂26 带宽优化之道
腾讯大讲堂26 带宽优化之道腾讯大讲堂26 带宽优化之道
腾讯大讲堂26 带宽优化之道
 
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
 
腾讯大讲堂13 soso访问速度优化
腾讯大讲堂13 soso访问速度优化腾讯大讲堂13 soso访问速度优化
腾讯大讲堂13 soso访问速度优化
 
腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨
 
腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化腾讯大讲堂06 qq邮箱性能优化
腾讯大讲堂06 qq邮箱性能优化
 

Editor's Notes

  1. 想表达面向对象的主要观念,方法和原则。 设计模式是方法层面上的东西。 在这些方法之后是面向对象的观念在支撑。 为什么这样做是好的?什么是好的标准? 想结合许多代码的例子来表明面向对象怎么来看这 2 个问题。 理解了面向对象的观念,对于方法层面的理解应该会更好一点。同时对于全局写代码时可以建立自己的原则。
  2. 介绍面向对象的一般手法 , 原则和几个设计模式来。 需要 2 个小时。
  3. 这个希望能够能强化。很多毕业生不能够理解一个软件要写三年 很容易把这个搞成一个短期行为。 24 小时不停机的海量用户服务 或者上千万,上亿用户使用的软件 产品 / 策划很难把握 3 个月 /6 个月后的产品规划。 持续不断的需求,一般产品 3 年后还在持续不断开发是常见的情况。
  4. 第一点 比如要考虑详细的统计信息方便搜集情况和定位问题; 要考虑关键数据的安全策略; 要考虑方便的日志机制定位问题;等等。不在本文档讨论范围。
  5. 细粒度结构设计关注软件需求,需求分析,关注程序内部结构设计,代码实现。 对于细粒度的开发活动,面向对象有一个体系来支撑。 OO 是一个方法论。本文档着力描述它的应对方式。