免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3361 | 回复: 9
打印 上一主题 下一主题

面向对象的思考 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-19 15:01 |只看该作者 |倒序浏览
程序就是数据结构+ 算法。

如果把算法都一个个写成函数(方法),把数据到放入一个个数据结构,比如字典,二维array。

那么类该怎么设计,哪些函数和数据属于class A,哪些应该是class B。

真迷茫。 各位大佬,有何建议?

论坛徽章:
0
2 [报告]
发表于 2011-07-19 15:29 |只看该作者
下面是一个具体的问题描述:
1.配置文件,xml
2.读取xml文件中的数据
3.通过http向服务器发送请求。
4.获得服务器返回数据
5.现实在GUI上(wxpython)

论坛徽章:
0
3 [报告]
发表于 2011-07-19 15:30 |只看该作者
涉及的库:
xml.dom.minidom
httplib
wxpython

论坛徽章:
0
4 [报告]
发表于 2011-07-19 16:16 |只看该作者
本帖最后由 nakar 于 2011-07-21 10:19 编辑

继续思考:

面向对象和面向过程的区别是什么? 很多书都是这样说的,面向对象很好,但是太抽象,初学者先别学,到底难在哪里?

面向过程的思考方式:

数据是流,函数(方法)是节点。 数据从一个节点流到下一个节点。从main开始,依次向下。碰到 条件 用if对数据分流,运到 选择用while选择。

论坛徽章:
0
5 [报告]
发表于 2011-07-21 10:25 |只看该作者
那么按照面向过程的思想,上面的例子变成什么样呢?
1.定义一个数据结构s,用于存放数据。
2.定义读取xml文件的函数readxml(),输入xml文件名,输出xml文件中的数据,保存到s中。
3.接着定义http函数http_request(),输入数据结构s,用其中需要的数据去作http请求,然后将http response放入数据结构s中。
4.创建gui函数gui_main(),输入数据结构s,将数据显示在wx的各个控件上。

论坛徽章:
0
6 [报告]
发表于 2011-07-29 10:06 |只看该作者

  1. 伪代码
  2. s=[]   #定义一个数据结构
  3. def readxml(xmlfilename):
  4.     #操作
  5.     return s
  6. def http_request(s):
  7.     #操作
  8.     #return s
  9. def gui_main(s):
  10.     #创建gui
  11.     #把s显示在控件上

  12. def main():
  13.     readxml()
  14.     http_request()
  15.     gui_main()
复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
7 [报告]
发表于 2011-07-29 23:29 |只看该作者
对于python的面向对象支持,一直没太看明白。

论坛徽章:
0
8 [报告]
发表于 2011-07-30 00:01 |只看该作者
下面谈面向对象的思考方式,主要涉及下面几个问题:
1. 相对于面向过程中的数据S,面向对象该定义在哪里?
2. 相对于面向过程中的各个函数,他们该定义在哪里?
3. 类和实例是什么区别,为什么这样设计?
4. 多个类之间的数据和函数怎么互相继承,为什么要继承?

上面这几个问题是我从面向过程编程到python编程过程的思考。
下面给出个人理解,有不对的地方,望不啻指正。

论坛徽章:
0
9 [报告]
发表于 2011-07-30 00:11 |只看该作者
本帖最后由 nakar 于 2011-07-31 11:33 编辑

第一个问题:
1. 相对于面向过程中的数据S,面向对象该定义在哪里?
    面向过程一般把数据定义在主函数main内,而面向对象,一般都会把数据定义在类里面。
比如

  1. class a():
  2.     self.data=[]
  3.     ...
复制代码
这个数据定义,一旦你创建了一个实例

  1. a = a()
复制代码
你就可以使用

  1. a.data
复制代码
来访问这些数据了。所以,面向对象的首先,是要创建实例,然后才是数据,数据被隐藏在实例后面,也算是一种保护。

另一种是对象的静态数据,就是在变量前不使用self。

这两种数据分别被称为实例的数据属性和类的数据属性。 它们会有不同的作用域。

论坛徽章:
0
10 [报告]
发表于 2011-07-31 11:35 |只看该作者
本帖最后由 nakar 于 2011-07-31 11:46 编辑

2. 相对于面向过程中的各个函数,他们该定义在哪里?
在面向过程中,def定义的叫函数(function),在面向对象中,class内def定义的称为方法(method)

  1. class a(object):
  2.     def p():
  3.        print 'hello'
复制代码
注意看上面的方法没有带self,所以叫做类方法(静态方法)
而我们常用的方法是这样

  1. class a(object):
  2.     def p(self):
  3.        print 'hello'
复制代码
这样,在创建一个实例后,就可以用.符号直接调用这个方法了。

  1. s=a()
  2. s.p
复制代码
还有一种定义的方法,就是在全局名字空间中定义,这个就和面向过程的思路类似了。
比如我们常常定义的main函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP