游戏开发论坛

 找回密码
 立即注册
搜索
楼主: instemast

面向对象语言的语义学中的意味不明之处,剧本中常出现

[复制链接]

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-27 19:35:00 | 显示全部楼层

Re: Re: 面向对象语言的语义学中的意味不明之处,剧本中常

sander_like_kof: Re: 面向对象语言的语义学中的意味不明之处,剧本中常出现

C++风格引起的另一个耐人寻味的问题是,实际上你已经看到过了,比如:
是设计为 Manager->Move( Player...


你看到,我用了“Manager”这样一个无意义不大的名字,告诉读者----这不是一个多么有意义的类,换言之,设计者是从编码实现的角度来设计API的。

举个例子:

如果你有一个类库 1.1 版是这样用的:
str->Resize(new_size);
而这个类库的 1.0 版是这么用的:
StringAllocater->Resize( str, new_size );
从用户的角度看,他们在意义上有什么区别?
StringAllocater 只是实现细节,我们不想关心,所以,1.1 版对API作了改进。

再举个例子:
如果某一天你拿到这么一个类库:
WindowsGDI->SelectObject(hDC, hBitmap);
你会认为如何?呵呵......

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-27 19:37:00 | 显示全部楼层

Re: Re: 面向对象语言的语义学中的意味不明之处,剧本中常

sander_like_kof: Re: 面向对象语言的语义学中的意味不明之处,剧本中常出现

C风格的好处在于,它使得程序员将注意力集中在问题的客观的处理上.....

用C++就不能做到客观了? C++只是工具,它是死的能够左右一个活人的思想和主观能动性,我不信


首先我不是说C++不客观。只是,C++中要求程序员采用OO思想。
某些场合,问题不便于用OO描述,这时如果仍然拘泥于C++的OO框架,就“不客观”了

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-27 19:39:00 | 显示全部楼层

Re: Re: 面向对象语言的语义学中的意味不明之处,剧本中常

sander_like_kof: Re: 面向对象语言的语义学中的意味不明之处,剧本中常出现

OO == 用户界面
他们概念一样?数值相等?外延一样? 字符个数一样?有相同的历史? 血统一样? 你说极端那临界直一样?


这只是我的一种观点,因为我深入地从头到尾地开发过用户界面类库,深有感触:
用户界面可以极好地用OO描述。而编译器,渲染器...则不会那么美好

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-27 19:41:00 | 显示全部楼层

Re: Re: 面向对象语言的语义学中的意味不明之处,剧本中常

sander_like_kof: Re: 面向对象语言的语义学中的意味不明之处,剧本中常出现

"接近于一个人做一个事,比较贴近生活”,后者经常被认为是OO的好处"

这是那个说的? 我在前面...


是不是人,取决于具体意思,而不是说 int 就非要代表什么,比如:
123456 可能是一个学号,也可能是一个坐标

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-27 19:42:00 | 显示全部楼层

Re: Re: 面向对象语言的语义学中的意味不明之处,剧本中常

sander_like_kof: Re: 面向对象语言的语义学中的意味不明之处,剧本中常出现

"如果说C++风格的优点是method属于某个class的作用域之内,使得书写方便"


方便到那里,我那里...


用它是因为这样似的模块更明确,这跟什么语义学没关系

正如你所说,本文就是要阐明,OO和语义没有太大关系

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-27 19:43:00 | 显示全部楼层

Re: Re: 面向对象语言的语义学中的意味不明之处,剧本中常

sander_like_kof: Re: 面向对象语言的语义学中的意味不明之处,剧本中常出现

在C++风格下,总是会让我们用OO的思想来设计程序,而C风格则不管我们是否采用OO

不啊C++也可以写过程话程序,还可以用范型变成思想啊


C++语言对旧的C风格同时进行了兼容,我说“C++风格”指得当然不是C那样的风格。
此外,C#,java等语言,禁止了global函数和变量。。。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-27 19:45:00 | 显示全部楼层

Re: Re: 面向对象语言的语义学中的意味不明之处,剧本中常

sander_like_kof: Re: 面向对象语言的语义学中的意味不明之处,剧本中常出现

面向过程是simple的,他只是提供了一个空泛的框架,而把问题基本上扔给了我们!

不对啊, 面向对象也是si...


首先我没有说OO不空泛。
我的意思是,面向过程更加空泛不是吗?

func(a,b); 就比 a->method(b); 更加空泛,简单,自由。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-27 19:46:00 | 显示全部楼层

Re: Re: 面向对象语言的语义学中的意味不明之处,剧本中常

sander_like_kof: Re: 面向对象语言的语义学中的意味不明之处,剧本中常出现

符号作用域问题我们不讨论。仅仅为了这个而死守OO不一定是明智的

作用域问题是OO特有的? 是基本思想,是模块化思想的一种表现形式


正如你所说,不是OO特有的,所以,仅仅为了这个而死守OO不一定是明智的。

换句话说:

A 不是 B 特有的,所以,仅仅为了 A 而死守 B 不一定是明智的。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-27 20:10:00 | 显示全部楼层

Re: Re: 面向对象语言的语义学中的意味不明之处,剧本中常

sander_like_kof: Re: 面向对象语言的语义学中的意味不明之处,剧本中常出现

因为不同人有不同的喜好,比如喜欢English,日文,中文,或者菲律宾语等等

面向对象里有很多约定俗成的规...


你这个问题问的比较苛刻,需要细细分析,而且思维上容易----递归。

>> 但是却世界的OO程序员都习惯  主语.谓语(其他) 的格式
(1)“(其他)”---- 这个部分的语义如何确定呢?
(2)比如常见的 str1->Append(str2) ---- 这里明显,str1 是目的地格而不是主格。
这里的意思是 append str2 after str1. 主格被省略了----主格是 the library.

这里设计到一个“浅层语义”和“深层语义”的问题:

str1 is appended after str2 by the library  主格: str1
the library append str1 after str2  主格: the library

但是,实际执行这个动作的主体,都是----the library.
这时深层语义的问题。

此外我想说,还有一种语法现象是----主题和述题。

局一个综合的例子,说明以上我提到的各种语法现象:

A 那本书卖完了。
B 那本书我看过。
C 那本书被我看完了。
D 那本书很好看。

我们先从 主题和述题 来分析:
A,B,C,D中,主题都是“那本书”

然后仿照English那样,从主语谓语宾语来分析:
< < <   注意:对中文作这个分析意义并不大!不过很多人都喜欢按照英语的语法来分析中文   > > >
A 那本书==宾语
B 那本书==宾语
C 那本书==主语(被动句的主语)
D 那本书==主语

以上都是“浅层语义”,
最后我们在从实际的深层语义来分析:
A 那本书==动作的对象
B 那本书==动作的对象
C 那本书==动作的对象
D 那本书==动作/状态的主体

那么请问, “obj.method(x)” 这样的句子中,obj 究竟是:
1 主题 2 主语 3 动作或状态的主体
??

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-9-27 20:28:00 | 显示全部楼层

Re: Re:面向对象语言的语义学中的意味不明之处,剧本中常

帝释天: Re:面向对象语言的语义学中的意味不明之处,剧本中常出现

我不知道自己想得对不对,请搂主指教一下。我觉得之所以出现manager->setHP(player,newhp)的问题,是因为...


总而言之,到目前为止,我们的思维很容易混乱,和片面化,
而关于其原因,在 49 楼分析的很清楚。。。

我想看了49楼之后,我们再来讨论问题,就会轻松不少。


“是因为manager侵入了player的属性,也就是说,违反了OO的封闭性原则”
----实际上具体实现不是用户想要关心的,统统封闭起来是无法实现很多功能的。

“这个句子有嵌套——出现了介词结构,也就是介宾短语作为状语,但是函数中没有介词,所以造成混淆。”
----关于这些人类语言的语法细节,你不妨先看看49楼的内容。

“newhp这个参数没有资格作为句子的一部分出现。”
----但是newhp的确是用户的输入参数啊,否则类库怎么知道用户要加多少hp?

“另外,关于介词结构无法避免的情况,个人认为应该这样处理manager->moveplayer(door);”
----很明显,我们谁也不希望这样写代码不是吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 04:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表