C++不僅是軟件設(shè)計(jì)的主流語(yǔ)言,而且因?yàn)槠鋸?qiáng)大的解釋力而成為代表軟件應(yīng)用能力的標(biāo)志性語(yǔ)言。但是,c++的概念龐雜,難以理解,不容易深入,同時(shí),C++新標(biāo)準(zhǔn)的出現(xiàn)使C++和數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)順序發(fā)生沖突:數(shù)據(jù)結(jié)構(gòu)的先修課是C++,而c++的新特性中包含數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,它們互為前提。我們認(rèn)為要有效地解決這兩個(gè)問(wèn)題,必須把C、C++和數(shù)據(jù)結(jié)構(gòu)整合。為此我們進(jìn)行了十年的改革實(shí)踐,探索從C到C++的學(xué)習(xí)方法?!队?jì)算機(jī)教育》于2008年以主編專訪和專業(yè)論文兩種形式對(duì)我們的改革進(jìn)行了連續(xù)一年的報(bào)道,本文對(duì)一年來(lái)發(fā)表的專業(yè)論文給予一個(gè)小結(jié)。
1從C到C++是一個(gè)有規(guī)律的過(guò)程
從機(jī)器語(yǔ)言到c++語(yǔ)言是一個(gè)發(fā)展過(guò)程,這個(gè)過(guò)程的根本動(dòng)因是程序設(shè)計(jì)的存儲(chǔ)與處理的矛盾?!皵?shù)據(jù)結(jié)構(gòu)+算法:程序”就是這層意思??v觀短暫的計(jì)算機(jī)發(fā)展史,這兩個(gè)方面一直保持不變。發(fā)展演化的是它們之間的關(guān)系,就是所謂的程序設(shè)計(jì)方法。我們的目的是:除去偶然的、擾亂性的因素,揭示出這個(gè)矛盾的變化規(guī)律,即程序語(yǔ)言發(fā)展規(guī)律。我們的具體做法是:先用C描述順序表、結(jié)構(gòu)串和鏈表,然后揭示、分析和解決C描述所表現(xiàn)的局限性,通過(guò)克服這些局限將它們轉(zhuǎn)化為C++描述。圖l是我們的教材《C/C++與數(shù)據(jù)結(jié)構(gòu)》(第3版)(上冊(cè))的內(nèi)容關(guān)系結(jié)構(gòu),它提綱挈領(lǐng)地表示了這個(gè)過(guò)程,貫穿其中的是圖2所展示的指針和函數(shù)同步發(fā)展的關(guān)系。我們?cè)?008年《計(jì)算機(jī)教育》連續(xù)發(fā)表了一些文章,對(duì)圖1和圖2中的一些關(guān)系分別做了比較詳細(xì)的論述。
2 C是C++的元語(yǔ)言
現(xiàn)在我們可以用三個(gè)語(yǔ)言環(huán)境理論來(lái)解釋這種方法的意義。一般說(shuō)來(lái),一個(gè)語(yǔ)言在它作為對(duì)象語(yǔ)言時(shí),它的符號(hào)和語(yǔ)法對(duì)象所取得的準(zhǔn)確性已被人們證明的結(jié)論,在它作為元語(yǔ)言時(shí),就可以用來(lái)解釋和說(shuō)明相應(yīng)對(duì)象語(yǔ)言的符號(hào)和語(yǔ)法對(duì)象,并用來(lái)證明該對(duì)象語(yǔ)言中不同語(yǔ)法對(duì)象之間的關(guān)系。這是人類從事科學(xué)研究的基本方法。
例如,C、C++和Java是程序語(yǔ)言發(fā)展中的版本序列。如果把C++視為對(duì)象語(yǔ)言,那么從C++程序集合到C程序集合的一個(gè)解釋映射和C程序集合就構(gòu)成C++的一個(gè)模型,而C語(yǔ)言就構(gòu)成了C++語(yǔ)言和它的模型的元語(yǔ)言。如果把Java視為對(duì)象語(yǔ)言,那么從Java程序集合到C++程序集合的一個(gè)解釋映射和C++程序集合就構(gòu)成Java的一個(gè)模型,而C++語(yǔ)言就構(gòu)成了Java語(yǔ)言和它的模型的元語(yǔ)言。表1和表2所示就是一種從對(duì)象語(yǔ)言C++程序到元語(yǔ)言C程序的解釋映射。
按照三個(gè)語(yǔ)言環(huán)境的概念和方法,把C作為C++的元語(yǔ)言,這時(shí)C什的概念就可以用C程序嚴(yán)格地描述,避免C++解釋中的歧義性和模糊性,有利于理解,而且C++也就不必從開(kāi)頭講起,我們可以直接講授C++相對(duì)C的修正和補(bǔ)充部分,有利于深入。
3小結(jié)
邏輯不是關(guān)于思維的外在形式的學(xué)說(shuō),而是關(guān)于一切物質(zhì)的、自然的和精神的事物的發(fā)展規(guī)律的學(xué)說(shuō)。這樣,成為科學(xué)對(duì)象的就不是事物,而是事物運(yùn)動(dòng)的規(guī)律。
程序語(yǔ)言的發(fā)展規(guī)律不是明擺著的,發(fā)現(xiàn)規(guī)律并嚴(yán)格地描述這個(gè)規(guī)律需要我們付出巨大的努力,要知道,如果事物的表現(xiàn)形式和事物的發(fā)展規(guī)律不是自然地合二為一,一切科學(xué)就都成為多余的了。
難題是,我們有沒(méi)有滿腔的熱忱,有沒(méi)有眼睛向下的決心,有沒(méi)有放下臭架子、甘當(dāng)小學(xué)生的精神,如果有,計(jì)算機(jī)基礎(chǔ)教育就一定有光明的未來(lái)。