这段时间摆弄GAE,对于Python语言一直有点糊涂,看起来Python作为较新的一门语言,对于面向对象的支持度较好,但是在《Python核心编程》一书中,又看到Python与Ruby的比较,说明Python并不是一门纯面向对象的语言,而Ruby是。这给我带来一点困扰。

另外,我没有做过基于CGI的纯Web服务程序,目前正在努力学习和理解这个程序的工作原理,这里面也面临了一个问题,其运行模型为完全的响应请求型,即没有请求,不工作,有请求,启动一个线程或子进程开始工作,这和原来做的服务器,自己来组织线程的任务分配,有很大差异性,一时间,很难把面向对象模型套用进去加以思考。

这个周末主要在思考这个问题,渐渐有了一点心得,这里share出来,和大家讨论一下,还是那句话,一家之言,欢迎拍砖哈。

以前我们讨论过,软件编程语言的发展,其实就是一部数据私有化的历史。

以前做过很长一段时间的面相过程,面向过程的主体是函数,而C语言函数的出现,应该可以看做数据私有化的初步,因为第一次出现了函数内部变量,相对于汇编语言而言,函数私有变量明确了每个函数执行体,拥有自己的变量空间,不再是所有变量都必须全局,这给程序的安全性,带来了很大的好处。

但这种设计,相对比较原始,只能解决部分问题。变量私有化之后,固然带来了安全性,非授权访问被禁止,但同时,也带来了变量的“短生命周期”,即私有变量的生命周期,是和函数一起的,随函数退出而死亡。

这在多任务操作系统的并行计算中,给程序员带来了很大的困扰。并行计算中涉及大量的等待同步,这期间线程执行生命体其实无事可做,操作系统为了回收时间片,一般要求函数无事时及时退出,空闲出时间片给其他应用。这就涉及到现场保护问题。此时的函数,并没有完成其业务,仅仅是因为等待而临时退出,应该保留所有的中间变量,等待下次重入可以继续手边的工作。

这在C里面带来了很大的困扰,因为C只有两种变量,全局,和局部,结果,程序员为了在函数临时退出后,保留现场,被迫回到原始社会,重新使用全局变量来做这件事,这就让程序的安全性又退回了以前的水平。

所有的问题,其实归结到一点,工程需求,需要部分变量在函数结束后,仍然保留等待后续使用,但又不希望使用全局变量破坏程序的结构性。

于是,C++的面相对象思路出现了。我的理解,对象就是一堆数据和一堆方法的集合,在C++中,函数不再是程序的核心,即方法论失效了。关键是数据,一切都是围绕数据而存在,类和对象,为大家提供了一个数据的长久保存方法,函数反而由数据的拥有者,降格为数据的使用者。这就解决了变量的“长生命周期”和私有化保护需求之间的矛盾。

ok,理解到这里,我好像有点领悟了。

GAE中,我们的应用其实也分为两个方面,不要苛求一定要面向过程或者面向对象。

对于一个用户请求,如果是私有访问,与其他用户数据不相干,则这个可以看做一个纯过程应用,即以一个简单的过程函数,来处理请求并回应即可。如一个用户修改其个人资料,完全可以作为一个数据库事务,过程执行,以函数方式编程。

对于某些公有性用户请求,互相之间有数据互动,甚至可能影响其他用户的访问处理,则适合以该数据为核心,在内部构建数据对象,所有的类似用户请求,全部访问这个对象实现功能,采集结果回送,此时,以面向对象的类方式编程较为方便。

当然,对象的长期保存,在云计算中是个难题,不过这是另外一个话题,也不是无解。

比如对象实例化的数据可以考虑放到数据库中做永固性保存,访问类套用数据库的数据实现访问,但每个访问类不要去摧毁数据,此时的访问类有点类似“粘合剂”作用,将用户请求的访问行为,粘合到数据库中的数据上,就比较简单了。

一点想法哈,尚未得到验证,请大家讨论。

转载于:https://blog.51cto.com/tonyxiaohome/198758

GAE研究小组:面向对象与面向过程的工程化理解相关推荐

  1. 关于面向对象和面向过程的简单理解

    关于面向对象和面向过程的理解 1.什么是面向过程? 大概意思:就是做一件事情,走大到小,从里到外,每个步骤的细节(自上向下,逐步细化).

  2. 面向对象与面向过程理解

    本文源地址: http://blog.csdn.net/ithzhang/article/details/52983530 http://blog.csdn.net/ithzhang/article/ ...

  3. 面向对象与面向过程区别

    面向对象:用线性的思维.与面向过程相辅相成.在软件开发过程中,宏观上,用面向对象来把握事物间复杂的关系,分析系统.微观上,仍然使用面向过程. "面向过程"是一种是事件为中心的编程思 ...

  4. 面向对象编程(一)——面向对象和面向过程

    面向对象(Object Oriented),通过对象来封装我们的数据.(组织代码,封装数据) 面向对象和面向过程: 面向过程:procedure oriented programming,POP 面向 ...

  5. python面向对象和面向过程的区别_Python11-01_面向对象----面向对象和面向过程的区别...

    面向对象编程 面向对象(OPP)编程思想主要针对大型软件设计而来的.面向对象编程使程序的扩展性更加强,可读性更好.使得编程可以像搭积木一样简单. 面向对象编程将数据和操作数据的方法封装到对象中,组织代 ...

  6. 面向对象和面向过程,python中的类class,python中程序的入口——main方法,

    1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...

  7. 详解:面向对象与面向过程的比较 类之间的关系:泛化、实现、依赖、关联、聚合、组合

    文章目录 1.面向对象程序设计概述 1.1 面向对象程序设计 1.2 传统结构化程序设计 1.3 面向对象与面向过程举例 2.类之间的关系 2.1 泛化/继承 2.2 实现 2.3 依赖 2.4 关联 ...

  8. 面向对象与面向过程在软件开发中的应用

    今天设计一个功能模块,深入进去后突然对面向对象和面向过程有了些认识.赶紧记下来以免忘了. 在设计和开发一个软件或是功能的时候,眼光或是站的位置决定了你对软件的理解程度.如果你 以软件的设计者的角度你会 ...

  9. python 递归函数_Python尚学堂高淇|P82P86面向对象和面向过程的区别LEGB规则nonlocal_global递归函数阶乘计算案例...

    P82-递归函数-阶乘计算案例 #使用递归函数计算阶乘def factorial(n):if n==1:return 1else:return n*factorial(n-1)result=facto ...

最新文章

  1. 辽宁交通高等专科学校计算机专业,辽宁省交通高等专科学校怎么样 全国排名第几...
  2. 自我监督学习:AI技术的未来发展方向
  3. Leetcode 560. Subarray Sum Equals K
  4. 文档怎么添加云服务器,如何添加云服务器地址
  5. html头部中各式各样的meta
  6. linux 输出到文件 新,如何在Linux中将命令输出保存到文件
  7. [置顶] Mysql存储过程入门知识
  8. 输出一行数字,中间用空格隔开,最后一个数字没有空格
  9. 博科光纤交换机维护手册
  10. 水经注叠加cad_如何下载矢量格式的CAD等高线
  11. IE8/9下,text-indent对css描绘三角形的影响
  12. 番茄学习--番茄工具推荐
  13. 【20140429】两种游戏后台架构的简单总结
  14. 保险行业防范网络犯罪新思路
  15. quartus生成qdb文件_Quartus II简明教程——下载程序到Altera开发板
  16. 中南大学复试上机:1009: 安全路径
  17. 利用Python+opencv进行视频文件的读取和保存,打开笔记本摄像头拍照保存、图像在窗口显示等操作
  18. 查询同网段ip使用情况
  19. 计算机一级考试选择题知识点,计算机一级选择题必背知识点有哪些?快来了解一下...
  20. 谷歌小恐龙游戏源代码(1)

热门文章

  1. 100个iOS开发/设计面试题汇总,你将如何作答?
  2. ANDROID开机动画分析
  3. 当网络安全遇上大数据分析(6)
  4. Linux运维之--zabbix使用(实时更新)
  5. OracleHelper
  6. 《AngularJS实战》——3.2 过滤器的应用
  7. 让“云”无处不在-Citrix Xenserver之六 高可用性: High Availability
  8. 没来得及整理的一些网站
  9. Linux使用yum安装时出现The program package-cleanup is found in the yum-utils package.解决方法...
  10. Javascript实现类似C#类的封装