注册 登录
主题 : 如何培养面向对象编程思想
级别: 骑士
UID: 12612
精华: 0
发帖: 227
可可豆: 2008 CB
威望: 2007 点
在线时间: 166(时)
注册时间: 2010-01-05
最后登录: 2018-05-07
0 楼:  发表于: 2011-02-05 23:12    发自: Web Page
来源于 已解决 分类

如何培养面向对象编程思想   

我并非科班出身,在学校里面没有系统的学过程序设计,现在学objective-c,遇见的最大的困难时之前接触的c语言、basic语言都是面向过程的,没有面向对象编程的意识。
请问我如何才能建立OOP思想?有什么好的教材没有?
谢谢!
[ 此帖被breave在2011-02-13 11:48重新编辑 ]

级别: 圣骑士
UID: 35293
精华: 0
发帖: 296
可可豆: 2960 CB
威望: 2960 点
在线时间: 212(时)
注册时间: 2010-10-25
最后登录: 2016-03-16
1 楼:  发表于: 2011-02-08 01:46    发自: Web Page
oop嘛~
类和对象是面向对象的核心概念
而面向对象主要解决了两个问题:
1、代码的可扩展性
2、代码的可维护性总之我觉得把写的代码高度模版化,具有可重用性,可维护性就好了,慢慢的会越来越了解的!



Miku碎碎念,碎碎念。
级别: 骑士
UID: 31474
精华: 1
发帖: 138
可可豆: 1440 CB
威望: 1440 点
在线时间: 329(时)
注册时间: 2010-09-21
最后登录: 2016-02-19
2 楼:  发表于: 2011-02-08 13:28    发自: Web Page
引用
引用楼主breave于2011-02-05 23:12发表的 如何培养面向对象编程思想 :
我并非科班出身,在学校里面没有系统的学过程序设计,现在学objective-c,遇见的最大的困难时之前接触的c语言、basic语言都是面向过程的,没有面向对象编程的意识。
请问我如何才能建立OOP思想?有什么好的教材没有?
谢谢!




其实OOP跟你用C,用basic没有关系,一样可以用OOP的思想设计。只是后来的C++/C#,JAVA,OC等等语言增加了很多特性,做起OOP更方便而已。捷径就是写,根据某前google的某总裁所言,大学毕业前至少得写有10万行代码才算及格

级别: 圣骑士
UID: 42938
精华: 0
发帖: 435
可可豆: 3980 CB
威望: 3980 点
在线时间: 523(时)
注册时间: 2010-12-16
最后登录: 2017-09-22
3 楼:  发表于: 2011-02-08 19:40    发自: Web Page
给楼主一个诀窍。一般,面向过程写的代码,应该会比较详细的分单元文件的对吧?如果您的习惯也是如此的话,那么可以按照一个单元文件的方向思考。比如,把一个具体化的、相似的功能,写在一个单元文件中。然后从这个单元文件中提取成一个类结构,用到的全局变量是类的成员,用到的函数是类的方法。这样可以简单的组合成一个类。然后去掉这个单元文件,将类的整体放入一个更大的单元。测试代码从另外一个地方写,采用直接创建类对象的方式测试。如此一来,您可以写出第一个类对象了。不过,这样的类对象还不包含任何类的优势,主要的原因是,您目前只是把面向单元的过程代码整理在一个类框架下面了,并没有使用到任何多态、继承这两个更重要的要素(目前把单元文件变成类的做法,就是封装)。这个时候您可以仔细思考目前这个类的架构。比如,假设您从一个处理文件的单元文件中提取出了一个CFileStream类,那么此刻您可以往更高的抽象层次思考,首先文件流主要操作的是文件数据,读取数据到Buffer,从Buffer写入数据进去。那么这个读写实际上不仅仅对文件有用,可以对内存,对网络都有用。所以从这里,您应该可以提取出读写函数的抽象行为,于是往CFileStream上提取一个父类,只负责读写的函数声明,于是抽象的CStream就出来了。从这个父类开始,可以向下继承CMemoryStream,甚至CSocketStream等。这样慢慢前进,您就能体会到面向对象的优势了。

另外还是要建议您,找点入门的面向对象书籍看看,应该会很有帮助的。
级别: 侠客
UID: 15581
精华: 0
发帖: 55
可可豆: 541 CB
威望: 541 点
在线时间: 608(时)
注册时间: 2010-03-17
最后登录: 2018-05-24
4 楼:  发表于: 2011-02-09 23:36    发自: Web Page
外星人来到地球,第一个碰到了你(身高1米7左右,黄皮肤,黑眼睛。手脚、眼鼻...)。
外星人:你是神马?
你答:我是人。
外星人:人是神马?
你答:就我这样子。
外星人:哦~不错哇

外星人点头微笑,继续前行,见到一个老外(身高1米8左右,黑皮肤...)。
心里起了疑问:咦?这也是人吗?

外星人拉着黑人跑回来问你:这是神马?
你答:这也是人啊
外星人:哦~

你可以想到外星人接下来碰到三条腿的人、白人..甚至满大街的人会有怎么样的场面了。外星人都会傻傻地跑回来找你帮忙。嘻嘻~外星人智商再高,一下子也不知道所有人的样子吧
你:

面向过程:一般只是或想去解决个别或具体的问题。
面向对象:
描述问题的时候:将要解决的问题概括性地、恰到好处地(不多不少,太多就具体了,就会出上述外星人事件)描述出来;
分析问题的时候:概括性地、恰到好处地分析;
解决问题的时候:概括性地、不多不少地解决。

怎么样才能做到概括性、恰到好处?
我想,这需要我们对问题和项目的本质或特征进行正确地认识。
就像你要把神马是人这个认识告诉外星人一样,首先你自己要能正确认识“人”这个概念,能把所有必要的人的特征概括上,然后描述给外星人,这样外星人到大街上看到一个人就会和你的描述比较,哦,这个有两条腿、两个手,直立行走...
嗯,是个人啊
另外,一切都是对象。我们还要概括“外星人的问题”和“怎么样告诉外星人”,把看问题和传达答案也要当作两种对象来进行恰当地处理。

要培养面向对象的思想,说到底就是要培养提出问题、分析问题、解决问题的一般方法。除了在编程里学,还需要从编程之外学。

呃~毛主席思想就是典型的面向对象的思想,可惜不能很快学会,不妨看看《设计模式》吧。

我喝醉ing~瞎说几句了


级别: 新手上路
UID: 12976
精华: 0
发帖: 20
可可豆: 191 CB
威望: 191 点
在线时间: 51(时)
注册时间: 2010-01-13
最后登录: 2018-01-16
5 楼:  发表于: 2011-02-10 00:24    发自: Web Page
我建议先从简单点的语言学起,比如C#一类的,写一个Windows画图程序会比较有帮助,一个就理解了。
级别: 侠客
UID: 15468
精华: 0
发帖: 54
可可豆: 504 CB
威望: 504 点
在线时间: 316(时)
注册时间: 2010-03-15
最后登录: 2019-01-25
6 楼:  发表于: 2011-02-10 08:58    发自: Web Page
4楼的比喻很经典哦,对于面向对象我也是一知半解,今天学习了。
级别: 骑士
UID: 12612
精华: 0
发帖: 227
可可豆: 2008 CB
威望: 2007 点
在线时间: 166(时)
注册时间: 2010-01-05
最后登录: 2018-05-07
7 楼:  发表于: 2011-02-13 11:47    发自: Web Page
非常感谢大家的热心帮助!
级别: 新手上路
UID: 7847
精华: 0
发帖: 1
可可豆: 120 CB
威望: 120 点
在线时间: 27(时)
注册时间: 2009-08-15
最后登录: 2016-03-29
8 楼:  发表于: 2011-02-13 21:05    发自: Web Page
4楼的比如很经典啊 学习了...
级别: 圣骑士
UID: 35293
精华: 0
发帖: 296
可可豆: 2960 CB
威望: 2960 点
在线时间: 212(时)
注册时间: 2010-10-25
最后登录: 2016-03-16
9 楼:  发表于: 2011-02-14 01:06    发自: Web Page
回 4楼(iphone6788) 的帖子
神比喻啊,经典啊
Miku碎碎念,碎碎念。

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部