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

简介:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本文转自 tonyxiaohome 51CTO博客,原文链接:http://blog.51cto.com/tonyxiaohome/198758 ,如需转载请自行联系原作者

目录
打赏
0
0
0
0
95
分享
相关文章
编程范式之争:面向对象与函数式的较量
在当今软件开发领域,面向对象编程(OOP)和函数式编程(FP)是两种备受瞩目的主流编程范式。本文将比较这两种范式的特点和优势,并探讨如何在实际项目中进行选择。
|
10月前
|
编程范式之争:面向对象编程与函数式编程的对决
在软件开发领域,面向对象编程(OOP)和函数式编程(FP)一直是两种主要的编程范式。本文将探讨这两种编程风格的优缺点,比较它们在不同场景下的适用性,并提供选择合适编程范式的指导原则。
89 0
从代码到哲学:编程中的思考与启示
【10月更文挑战第34天】在数字世界的编织中,每一行代码都蕴含着深邃的逻辑与创造的火花。本文通过探索编程的本质、代码与生活的关联、以及技术发展带来的社会影响,揭示编程不仅仅是技术的堆砌,更是人类智慧与哲学思考的体现。我们将一起走进代码的世界,发现那些隐藏在逻辑背后的哲理与人生启示。
从代码到哲学:编程中的人生启示
【9月更文挑战第35天】在代码的世界中,我们不仅是在编写程序,更是在书写生活。每一行代码都蕴含着逻辑与美,每一个算法都承载着智慧与挑战。本文将通过编程的视角,探讨人生的意义、选择的重要性以及面对困难的态度,带你领略技术背后的深刻哲理。
从代码到哲学:探索编程中的思考与实践
【10月更文挑战第37天】在编程的世界里,我们不仅是在编写代码,更是在编织思维。每一行代码都是对问题解决方案的深思熟虑,每一个算法都是对逻辑思维的锻炼。编程不仅是一种技术活动,它同样是一种哲学的实践——通过代码来体现我们对世界的理解与改造。本文将带你走进编程的世界,探索那些隐藏在代码背后的深刻哲理。
从代码到哲学:编程中的启示与人生思考
在编写代码的过程中,我们不仅构建程序,也在无形中编织着生活的哲理。每一行代码都像是生命中的一步,它们共同构成了复杂而精彩的生命之旅。本文将从编程的角度出发,探讨技术实践中的深刻启示,以及这些启示如何影响我们对生活、工作和自我成长的理解。
144 3
探索编程的本质:从代码到哲学的奇妙旅程
该文档指导如何安装NodeJS及PyExecJS。首先从官网下载并安装NodeJS,验证安装是否成功可通过命令`node --version`检查版本。PyExecJS则通过`pip install PyExecJS`进行安装。安装后,通过Python导入`execjs`模块可查看执行JS的环境,并使用`eval`和`compile`函数执行JavaScript代码或编译JS脚本。具体案例展示了简单的JS执行与环境选择方法。
31 1
从代码到哲学:编程中的启示与人生智慧
【8月更文挑战第31天】在编程的世界里,代码不仅仅是命令和逻辑的集合,它更像是一面镜子,反映出我们对待问题的态度和方法。本文通过探索编程中的一些基本原则和实践,揭示它们如何与我们日常生活中的决策和行为相互映射。从简单的代码片段到复杂的系统设计,每一步都蕴含着深刻的哲理,指引我们在面对生活和工作中的挑战时,如何保持清晰的思路和坚定的意志。文章将带领读者走进编程的内在世界,发现那些隐藏在代码行间的智慧和启示。
程序员面试中的测试驱动开发:如何展示你的编程范式
程序员面试中的测试驱动开发:如何展示你的编程范式
107 0