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