惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
V
V2EX
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Register - Security
The Register - Security
MongoDB | Blog
MongoDB | Blog
P
Privacy International News Feed
The Last Watchdog
The Last Watchdog
Security Archives - TechRepublic
Security Archives - TechRepublic
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
K
Kaspersky official blog
S
Secure Thoughts
T
Tenable Blog
Security Latest
Security Latest
The Cloudflare Blog
S
Security @ Cisco Blogs
H
Heimdal Security Blog
aimingoo的专栏
aimingoo的专栏
TaoSecurity Blog
TaoSecurity Blog
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
Schneier on Security
Schneier on Security
Webroot Blog
Webroot Blog
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Scott Helme
Scott Helme
IT之家
IT之家
Latest news
Latest news
The Hacker News
The Hacker News
C
Check Point Blog
T
The Exploit Database - CXSecurity.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
N
News | PayPal Newsroom
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
S
Security Affairs
S
Securelist
Google Online Security Blog
Google Online Security Blog
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
A
About on SuperTechFans

博客园 - bela liu

生成PDF文档,并在PDF文档结尾加印章 EF CodeFirst 学习 1 - 用fluent API设置元数据, silverlight: 关于dataform的commit silverlight:datagrid滚动 win7下chm打不开 MS DTC 无法正确处理DC升级/降级事件。MS DTC 将继续运行并使用现有的安全设置。 远程桌面如果超出最大连接数, 使用命令行mstsc /console登录即可。 windows server 2008 安装live mail windows server 2008 安装 MSN Help: DCOM中设定"launch permission"的问题 Qt 学习(1) 使用firefox的一个小技巧 - bela liu - 博客园 现有一车(千里马)过年从苏州回赣榆,15号或者17号出发,21号,23号或者25号返程。 在Oracle中申明与某个字段类型相同的变量 几道Python的习题 在ReportViewer中使用超链接(HyperLink) 未解之Bug (1) : 必须放在具有 runat=server 的窗体标记内 在window.showModelessDialog打开的窗体中调用原窗体的alert会使IE死掉。 在模式窗体中提交而不打开新窗体
[转]面向对象与数据模型
bela liu · 2006-09-26 · via 博客园 - bela liu

本文转自:http://forum.hibernate.org/viewtopic.php?p=2242301#2242301

首先说明一点,就是复杂性,在复杂性上,我一般习惯分为实现复杂性和思维复杂性,有的问题我们可以很容易的想到解,但是并不意味他是容易实现的,比如递归下降的词法分析(以及大多数递归求解算法),具有极强的思维简洁性,但是往往具有难以想象的实现复杂度。同样,我们还有两种就是对人简单和对机器简单,对机器简单的必要条件就是可形式化为递归能行求解过程(依据图灵机原理)。ok,从这样两个复杂纬度我们来分析一下oo和er在 数据表述(请注意,我仅仅说的是数据表述,也就是一个系统的静态纬度)上的复
杂度。
关系模型: 关系模型的数据模型集合以及在集合基础上发展出来的关系操作语义关系运算。那么很显然对于一个有数学(离散,集合论)基础的人而言,关系模型具有思维简洁性。对于计算机而言,关系运算在有限集上是递归能行的,所以对于计算机而言,关系模型具有计算简洁性
对象模型: 对象模型的数据模型,非常抱歉,虽然本人从94年起就开始接触OOA&D以及做相关的工作,也算个狂热的OO分子,但我不得不说,从计算机科学的角度来说,OO的数据模型未定义!但是往往大家都同意一个观点,就是用networked model或者
graph model可以很好的描述oo的数据模型,因此为了讨论的方便,我们可以不严格的认为OO的数据模型是Graph Model。那么再看一下OO数据模型的操作语义,显然可以推出为
图操
作(基于路径)
。那么我想请问一下,你在思考一个模型的时候,是集合简洁还是Graph简洁?我敢说这样的话,国内做计算机的,至少90%对图论是懵懂的,当然我也是(在下十岁起学习算法设计参加NOI/IOI竞赛的,当时主要的算法设计就是图算法,最好名次北京市第六名,也曾深入学习过离散和图论,不过仍然懵懂)更不要说用使用图来思考对象语义了。当然,这个结论有违常识,因为你会认为
Person p;
p.getName();
是很简洁的也是很好理解的,那么如你所说“请不要拿一个人能完成的小系统来作例子”,那么我们来说一下,复杂的对象系统,你怎么判定一个系统是好的?我想你会列出很多依据,不过我猜那些结论多是经验性的。对吧?比如bad smell。
那么你可曾考虑过使用图模型分析很多对象间复杂关系的设计合理性?你可曾考虑过在domain
model里,使用pattern之后图模型路径的变化?你可曾想过使用图模型来改善对象的静态设计?
如果你考虑过,你就会有这样的经验,OO在数据模型设计上不具有思维简洁性。因为我们不能follow一套递归过程,之后证明我们的设计就是合理的!!!而关系模型可以,就是范式。依据范式简化,我们可以说我的关系设计是无冗余的,是如何的,但是对象模型你就无能为力了。
我可以以我的经验告诉你,对象模型的优劣和一个对象图上的生成树,环的个数以及通度有关。但是具体关系,sorry,然后是未知的。我马上要在oo上进行的一个研究,就是分析各种OOA&D流派对对象图的改变,以及在图中引入的边语义。哎这个说的有点跑题。
我们会过来看OO的计算机处理,非常不幸,在包含环的Graph Model上的运算,虽然是递归可解的,但是费用相当的高。因此可以说OO不具有计算简洁性

那么OO不具有思维简洁性不具有计算简洁性,他为什么能如此成功?因为它符合冯诺依曼原理,控制流主导,也就是通由对象的行为,指引数据的传递。也就是为什么职责,协作在OO中格外重要的原意。因为他们是刻画控制流的。

因此我的论点是,在数据模型上,OO并不占有优势。

而你所讲的问题,是数据库在流程和运算上的缺陷。但是你用的题目是OO的关系比数据关系简单,等于你用了数据视角的论点但用了动态视角的论据。mismatch!

另外,可以考虑一下在消息或者服务驱动的分布式系统中,比如SOA,数据是XML描述的,why?其一是交互性,其二是因为消息扮演了控制流的角色,OO对象已经没有用处了,用它来传递数据,并不能发挥他的作用。

最后,上述所有内容,讨论的是计算机科学范畴,不是计算机应用范畴。跟语言和java,j2ee没有任何的关系。本来深刻认识OO不足是研究OO理解OO的必然过程,但是在初学者眼中会引起恐慌。
_________________
你可以做你想做的任何事情,不过要做好为此付出代价的准备。