主题:[讨论]C++教学教材中的改革与创新尝试
山寨捉鼠猫
[专家分:0] 发布于 2010-09-12 10:38:00
谢谢大家!1531
最后更新于:2011-12-06 08:51:00
回复列表 (共26个回复)
21 楼
cgl_lgs [专家分:21040] 发布于 2010-10-02 00:20:00
[quote]
现在的问题集中到一点,就是传统教材中对“stud1是Student类型的变量”语句,认为是定义语句,公然认为这是“将stud1定义为Student类型的变量”。这种说法到底是对还是错?
只有得到明确的回答,下面才能作出相应的处理。
[/quote]
您說的很片面。
“stud1是Student類型的變量”語句,既有可能是聲明,也有可能是定義!
22 楼
山寨捉鼠猫 [专家分:0] 发布于 2010-10-03 10:11:00
集中到一点,只问“将stud1定义为Student类型的变量”。这种说法到底是对还是错?
23 楼
cgl_lgs [专家分:21040] 发布于 2010-10-03 23:22:00
[quote]
集中到一点,只问“将stud1定义为Student类型的变量”。这种说法到底是对还是错?
[/quote]
很少見有這樣講的,一般都說:
定義一個Student類型的變量stud1。
或許與您說的那句話是等效的吧。
總之我個人覺得沒有什么不可以的。這句話很明顯就是代表它是“有動作”(內存分配,構造函數調用等等)的語句,而非僅僅是告訴人有一個外部的“符號”。
24 楼
cgl_lgs [专家分:21040] 发布于 2010-10-03 23:33:00
個人認為,如果您覺得定義一詞用的不好,則要么就換詞,要么就還是當做方言處理。
現在您的做法恰恰給大家又增加了些障礙:
1、看國內外其他著作與貴著作時的困擾:同樣的詞竟然代表不同的意思!您認為少數能打贏多數?
2、翻譯外國文獻時的困擾:Declare再也不是代表“聲名”,同時define再也不是代表“定義”了,它們在不同的情況下會有不同的意義,譯者一定要相當有水平且保持高度清醒!這樣勢必讓本來就跟不上國外技術的中國更有落后的理由了。又或是您認為您的技術水平遠超國外?他們將會以您的用詞為標準來修改自己的著作?
25 楼
cgl_lgs [专家分:21040] 发布于 2010-10-03 23:42:00
其實您的初衷是好的,但實際上每個創新都必然會存在它的難處,剛開始必然舉步為艱,還有可能半路夭折!
您想讓我們承認原來的“定義”一詞是用錯了!但您應該去找一個可代替的方式,而不是用原詞卻修改期使用范圍。
怎么說呢,您的教材老手看了也就看了,還是能明白大概,最多發發牢騷,覺得用詞很別扭。但新手看了(假設非常認真的)那將會是他(OR她,程序員男性多,這里沒有任何歧視問題)的惡夢的開始。從此以后他只能跟著您寫的C/C++系列,您要不進步,他就永遠也無法進步,更別說超越了(貌似這倒是賺錢的好方法,他只能讓你賺了:)呵呵,玩笑而已)。
26 楼
山寨捉鼠猫 [专家分:0] 发布于 2010-10-08 21:23:00
国庆节前,众位网友们对我主贴发表了好多很好的意见,增加了我们之间的相互了解和沟通,我很感谢。特别是在国庆节期间,强强和cgl_lgs提出的意见启发我要看看国外书是怎么写的。cgl_lgs在2日凌晨发一贴,3日半夜还把我贴问题记挂在心,连发四贴,我看了,着实使我感动万分。
国庆节一过,今天我径直去学校图书馆。找到一本人民邮电出版社2006年1月出版的《SMALL C++ How to Program》第5版 [美]H.M.Deitel和P.J.Deitel合著。据该书内容简介中说,该书是“全球使用最广泛的C++教材”。从该书的版次及简介中的评价来看,该书应该是比较权威的了。
书中对××类的代码表示,认为是对类的定义(class definition);对int number1;int number2;int sum;认为是对变量的声明(declaration);对类的对象建立,则用的是创建(create)。
我真高兴,所有这些都与传统教材中的认定相反,而与我的主张却不谋而合。使我心中顿感云消雾散,感到“英雄所见略同”。当然,这里只是对古语的引用,不能当真认为我是“英雄”。这顶多只能算是我“愚者千虑之一得”而已。
常规理解,使用“定义”名词时,必有“定义项”与“被定义项”等同(可用“=”表示),看百度搜索知道:“一般来说,一个定义往往是表达被定义项与定义项之间的等同的句子”。反过来说,只有“定义项”和“被定义项”等同,才能使用“定义”语句。
一个单身汉是一个未婚男子。 是定义语句,因为:单身汉=未婚男子。
小于60分的分数是不及格分数。是定义语句,因为:小于60分的分数=不及格分数。
Student类是Student类的代码。是定义语句,因为:Student类=Student类的代码。
上面这几个例子,等式两边都是类,分别是定义项和被定义项,二者等同。所以是定义语句。
邻居大哥是单身汉。 不是定义语句,因为:单身汉不=邻居大哥。
56分是不及格分数。 不是定义语句,因为:不及格分数不=56分。
Stud1是Student类型变量。 不是定义语句,因为:Student类型变量不=Stud1
int a; 不是定义语句,因为:int类型不=a
Student Stud1; 不是定义语句,因为:Student类型不=Stud1
定義一個Student類型的變量stud1。是错句,因为Student类型变量不=Stud1,不可用“定义”词,不可作为定义语句。
上面这几个例子,等号左边是类,右边是类的一个实例,二者不等同,故不能作为定义语句。而只能作为说明语句、声明语句;或对于对象而言,作为对象的创建语句。
传统教材中认为“Student Stud1;”是表示“Stud1是Student类型变量”这是可以的,但进一步认为是“将stud1定义为Student类型的变量”,这就错了,因为这不能作为定义语句。在这里不可用“定义”词。就好比说“56分是不及格分数”,这是对的,但若认为这是“将56分定义为不及格分数”,这就错了。若教务处认了这句话,则认为下式成立:“不及格分数=56分”,从而认为54分、32分、58分…,只要不是56分,通通全都是及格分数。该补考的不补考了,该留级的不留级了。结果,教务长就该“下课”了吧。
“定义”的概念,不可等闲视之。考公务员要考“定义判断题”内容涉及方方面面,可见各行各业都要用到“定义”概念。但传统教材P.124第20~21行中明确提出:“把建立存储空间的声明称为定义,而把不需要建立存储空间的声明称为声明”。按此标准贯穿全书。这种“定义”的使用明显与常规理解相悖,势必会造成“定义”概念的混乱。
这不可看作是C++方言而姑息之。广东话“谈恋爱”叫“拍拖”,“餐费结算”叫“埋单”,写法不同叫法不同,这是方言。像强强提出的“弄一个或搞一个”,这倒可作为C++方言。但“定义”不行,因为一笔写不出两个“定义”词,一口叫不出两个“定义”音。国内国外对“定义”都是同一个概念,我们C++不应别出心裁搞个建立不建立存储空间来确定“定义”的用词,以致造成“定义”概念混乱,贻害无穷!
我来回复