170 likes | 255 Views
面向对象与设计模式. 张 鹏 @ Sina RD 2011.1.10. 常见编程范式介绍 并行编程 - Process-oriented 组件编程 - Component-based 事件驱动 - Service- oriented , Time -driven 表达式编程 – 表达式驱动 Lisp 结构化编程 面向对象 模块化编程 递归. 什么是面向过程? #include < stdio.h > int main( int argc , char * argv []) { printf ("Hello, world<br>");
E N D
面向对象与设计模式 张鹏@Sina RD 2011.1.10
常见编程范式介绍 • 并行编程 - Process-oriented • 组件编程 - Component-based • 事件驱动 - Service-oriented,Time-driven • 表达式编程 – 表达式驱动 Lisp • 结构化编程 • 面向对象 • 模块化编程 • 递归
什么是面向过程? #include <stdio.h> int main(intargc, char *argv[]) { printf("Hello, world\n"); return 0; } 结构化,共享数据,简单
什么是面向对象 class { public static void main(String[] args) { System.out.println("Hello World!"); } public void ICanBark() { System.out.println(“Hey,Ican bark!"); } } 程序语言,完成了现实世界和虚拟环境的映射,语言的作用在于抽象, 表达/描述,进而解决问题。
面向对象特点 Class 实例 方法 消息传递 抽象 封装 继承 多态 松耦合 面向对象和面向过程,本质是一样的,光既是波,也是粒。面向对象最基础的部分,仍旧是面向过程的实现。
面向对象与程序员 • 披着JAVA外衣的C程序员 • SSH 程序员 ,Framework kids • 披着C++外衣的C程序员 • 纯C程序员 • 纯C++/JAVA程序员 不要被程序员的语言技能迷惑,要看透他们本质
面向对象的衍生问题 • 面向对象,试图用一种具体化的抽象,来描述现实世界的实体,实体之间的关系。这种方式,给语言和程序员,带来了沉重的负担。 • 对象生命周期管理成为big trouble • 组件之间的交互,成为大问题 • IOC 解决了上述问题 • 框架和引擎,依托于面向对象而生 • 设计模式 世界上没有任何一种语言,像C++一样对程序员脑力的剥削,持续的时间这么长,剥削的深度这么深
面向对象与设计模式 • JAVA语言对软件界的贡献 • 设计模式 Gang of Four
什么人需要了解设计模式 • 需要在Framework下面写代码,或者写一个框架 • 想成为真正的OO程序员 • 想自我剥削,更深刻的理解这个世界,用更抽象复杂的方式描述这个世界 • 脱离菜鸟的队伍 • 想成为软件构架师 • 想看懂国外的开源代码 • 以上都不想,只想写好WEB程序,或者GUI程序 SBD saids: 设计模式只涉及方法论,与语言人品无关
Singleton 设计模式 • 面向对象,有instance , object • 大量的对象产生,要把容器撑爆,很难管理 • 面试时候,一些学院派的考官,经常问这个问题 • 本质上,我们需要对象生命周期管理 • 其实,你只需要1个对象
一个Singleton的例子 public class IAmSingle { private static iInstance=new IAmSingle(); private IAmSingle {} public IAmSinglegetInstance() { return iInstance; } } Yep, Safe and simple
MVC说,我不是设计模式 严格意义来讲,MVC不是一个设计模式,而是多种设计模式的混合体
View通过策略模式,把用户动作代理给controller执行View通过策略模式,把用户动作代理给controller执行
View,controller都订阅了Model的状态变化,这样又是一个Observer模式View,controller都订阅了Model的状态变化,这样又是一个Observer模式
Thanks, 讨论一下 设计模式就像葵花宝典,但仍旧不是武术的最高境界,我们要把它变成易筋经。可以Fellow ,不能盲从…