我是怎样教媳妇面向对象编程的 已翻译 100%

凡程子 投递于 2013/01/09 10:37 (共 33 段, 翻译完成于 01-09)
阅读 57061
收藏 398
110
加载中

简介

我老婆 Farhana 想要继续软件开发生涯(之前因为我们的第一个孩子出生,她不得不放弃)。我已经有了一些软件设计和开发的经验,所以这几天我就在试着帮助她学习OOD。

由于我早年在软件开发的经验,我总是发现无论一个技术问题看上去多么难搞,只要从现实生活的角度去解释或用对话的方式去讨论总能让它变得更简单。关于OOD,我们已经有了许多成果丰硕的讨论,我觉得有人可能发现这是一个学习OOD有趣的方式,所以我想我应该分享出来。

sigai
sigai
翻译于 2013/01/09 11:14
10

下面是我们的谈话步骤:

话题:介绍面向对象设计

丈夫:亲爱的,让我们开始学习面向对象设计。你了解面向对象规范,对吗?

妻子:你是指封装,继承和多态吗?是的,我了解这些规范。

丈夫:行,我想你已经知道怎么用类和对象了。今天我们来学习面向对象设计。

妻子:等等。了解面向对象规范对面向对象编程来说难道不够吗?我的意思是,我能够定义类,封装属性和方法。我能够根据它们的关系定义类的继承。那还有什么呢?

丈夫:很好的问题。面向对象规范和面向对象编程完全是两码事。让我展示一个现实生活中的例子来帮助你理解它们。

风子
风子
翻译于 2013/01/09 12:01
7

我们从牙牙学语起,都是先从字母表学起的,对吧?

妻子: 嗯。

丈夫: 好,然后你就能认单词了,还能通过不同的字母拼写出不同的单词来。慢慢的,你能通过一些基本的语法把这些单词串成一句话。为了使句子时态正确且没有语病,你需要用一些介词,连词,等等。。看下面这句话

"I" (代词) "want" (动词) "to" (介词) "learn" (动词) "OOD" (名词)

通过把几个单词摆放妥当一句话就好了,然后用个关键词来说明一下这句话的重点。

王薇
王薇
翻译于 2013/01/09 12:46
9

妻子: 亲爱的,你闲扯这些到底要说明什么呢

丈夫: 我说的这个例子跟面向对象规范很类似,面向对象规范为面向对象编程定义了基本的规范,它是面向对象编程的主要思想。面向对象规范好比基本的英语语法,这些语法教会了你怎么用一个个单词拼凑出一句句话来,而面向对象规范教你怎么用类,怎么把一些属性和方法封装在一个类里,怎么串出类之间的继承关系。

妻子: 啊哈,我知道了,那么,面向对象适用于哪里呢。

丈夫: 听我慢慢道来。现在,假设你想写点有内容有题材的文章。你当然还希望写点你比较擅长的题材的书,就会简单造几个句子是远远不够的,对吧。你需要笔耕不辍写出一些长篇大论,你还需要学习怎么可以让读者很容易就看懂你写的这些长篇大论。。。

王薇
王薇
翻译于 2013/01/09 13:10
9

妻子:嗯,有那么点意思。。。继续吧

丈夫:现在,假如你想写本关于面向对象设计的书,你需要把这个大的课题拆分成一些小题目。把这些小题目分几个章节写,还得写前言,简介,说明,举例,一篇里还有很多段落。你需要设计一整本书,还得练习一些写作技巧,让文章读起来浅显易懂。这就是综观全局。

在软件开发中,OOD就是用来解决从全局出发考虑问题,在设计软件的时候,类和代码可以模块化,可重复使用,可灵活应用,现在已经有很多前人总结出的类和对象的设计原理了,我们直接拿来用就行了,总之,历史的车轮已经碾压出一条清晰的车轮印,我们只要照着走就可以了。

妻子: 哎,懂了点皮毛,还有很多要学呢。

丈夫:不用担心,你很快就会上手的,让我们接着来吧。

 

王薇
王薇
翻译于 2013/01/09 15:20
3

话题:为什么要进行面向对象设计?

作者:有个很重要的问题,既然我们能够很快的创建几个类,编写程序并提交,为什么我们还要关注面向对象设计?这样不够么?

妻子:恩,以前我不知道面向对象设计,我也能开发提交项目。有什么关系?

丈夫:好吧,先让我给你看一个经典的引述:

"需求不变的程序开发会同行走在冰上一样简单。"

- Edward V. Berard

妻子:你是指软件开发说明书会被不断修改?

丈夫:非常正确!软件开发唯一的真理是“软件必然修改”。为什么?

K6F
K6F
翻译于 2013/01/09 11:43
2

要知道,你的软件解决的是现实世界中的问题,而现实生活不是一成不变的。

可能你的软件现在运行良好。但它能灵活的支持“变化”吗?如果不能,那它就不是一个敏捷设计的软件。

妻子:好,那你就解释一下什么叫做“敏捷设计的软件”!

丈夫:“一个敏捷设计的软件能轻松应对变化,能被扩展和复用。”

而应用“面向对象设计”是做到敏捷设计的关键。那么,什么时候你可以说你的程序应用了面向对象设计?

K6F
K6F
翻译于 2013/01/09 11:59
2

妻子:我也正想问呢。

丈夫:如果代码符合以下几点,那么你就在“面向对象设计”:

  • 面向对象
  • 复用
  • 变化的代价极小
  • 无需改代码即可扩展

妻子:然后呢?

丈夫:不只我们。很多人也花了很多时间和精力思考这个问题上,他们尝试更好的进行“面向对象设计”,并为“面向对象设计”指出几条基本的原则(你可以用在你的“面向对象设计”中)。他们也确实总结出了一些通用的设计模式(基于基本的原则)。

K6F
K6F
翻译于 2013/01/09 12:08
2
妻子:你能说出一些吗?

丈夫:没问题。现在有许多设计原则,但是最基本的,就是SOLID(缩写),这五项原则。(感谢鲍勃叔叔,伟大OOD导师)。 

S  = 单一责任原则
O = 开闭原则
L  = Liscov替换原则
I  = 接口隔离原则
D = 依赖倒置原则

在下面的讨论中,我们将详细了解这些。
铂金小龟
铂金小龟
翻译于 2013/01/09 11:35
2

话题:单一功能原则

作者:让我们先来看图,我们应该感谢制作这张图的人,因为它们真的太有趣了。

单一功能原则图

它的意思是:“如果你可以在一个设备中实现所有的功能,你却不能这样做”。为什么呢?因为从长远来看它增加了很多的可管理性问题。

凡程子
凡程子
翻译于 2013/01/09 12:47
3
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(60)

leo_soul
leo_soul
简直写的太好了,翻译的也非常接地气,非常容易理解!作为工作多年的人,我恐怕都无法写出这样的经验之贴!
心茧6888
心茧6888
找到这么有耐心知识渊博对你又好的老公真是有福气啊,好文学习了!
RenKaidi
RenKaidi
妻子: 亲爱的,你闲扯这些蛋到底要说明什么呢
w
wjzl
不错,呵呵 http://www.wjcancer.com/
1
1054602234_11
直接了当,简单易懂.不失为好文章
yiqing95
yiqing95
虽然是一年后才看到 不过仍有所收获!
面向对象分析与设计 思想本就来自现实世界 是程序员脑中的微世界 现实世界中任何成形的产品里面必然隐藏着某种面向对象原理。

读上面的文章有这样的心得:
- 小的才更利于复用
- 规范接口是系统各组件的胶水 要规范接口先行 先于对象设计(在制造一个轮子前要先制造轮子的规范 不然可能安装不到任何汽车上)这个规范和接口就是抽象出来的角色 (我们需要一个轮子的角色 至于谁来提供我们不关心 只要你的实现可以担当这个角色就好 这也是里氏替换原则的体现)

对除solid之外的原则理解:
- 组合替代继承 : 继承只是复用的一种手段 但如果你要设计的两个类并没有is-a关系而你又想复用已有的功能 那么使用组合。 不要滥用继承
- 笛米特法则 :最少知识原理,你在设计一个方法时 尽量少依赖(使用)方法上下文之外的东西 比如全局变量 方法中的实现只依赖传入的方法参数 和该方法所属对象的实例变量 ,全局变量/对象要转变为方法参数或者对象的属性传入。
- 共同封闭原则:高内聚 低耦合 经常一起改变的类 应该放在同一个包中
- 稳定抽象原则 : 系统越底层的包 是越稳定的 也是越抽象的 由于许多系统构建在一些通用包之上 如果这些包都不稳定(经常改动)那么依赖这些通用包的代码可能需要经常改动 这个是要骂娘的
赵云30
赵云30
hoho 夫妻对话
文渊阁
文渊阁
收藏
liguobao
liguobao
很好,略微懂了点了....没办法,我还是小白
l
lee_hui
写的非常棒
返回顶部
顶部