官术网_书友最值得收藏!

1.2 面向對象

1.2.1 面向對象語言的誕生

編程本質上是和計算機打交道,用程序去控制計算機的行為,從而解決現實世界中的各種問題。但計算機是個極其復雜的系統,并不是每個編寫程序的人都需要打開電腦機箱,搞清楚它的內部結構和工作原理(如圖1-3所示)。

圖1-3 計算機與程序員

將計算機的機器細節變成人腦容易理解和記憶的形式,將計算機的世界和人類日常生活的世界聯系起來,這就是編程語言所要完成的任務。編程語言的發展就是從計算機世界向現實世界,從計算機思維向人類思維不斷靠攏的過程。

計算機的世界中只有1和0兩個數字,最早的“編程語言”是在長長的紙帶上用打孔和不打孔來表示1和0,以此來操縱計算機的。這樣的方法費時費力費資源,一個簡單的程序需要的紙帶就多到令人發指的地步。此外,它還很容易出錯,一個孔打錯就意味著一整條紙帶的報廢,讓人欲哭無淚。

紙帶時代之后,匯編語言出現了,寫程序不再等于打孔,寫程序的人不必再用0和1思考,一條條的匯編指令代替了讓人抓狂的紙帶。這是一個巨大的進步。

匯編語言之后,出現了BASIC和C等高級語言,復雜的匯編指令消失了,程序代碼在可讀性、可維護性等方面都有了很大提升。可是,程序語言仍然是貼近計算機邏輯的東西,離人類思考問題的模式尚有很大的距離。

從打孔紙帶到匯編指令,再到高級語言中的函數,接下來,面向對象語言出現了,Java就是其中的典型代表,它的口號是:一切都是對象(如圖1-4所示)。

圖1-4 語言的發展

1.2.2 建立“一切都是對象”的觀念

“面向對象”的英文原名叫“Object-Oriented”,簡稱OO,根據翻譯的不同,它也有其他不同的稱謂,如臺灣地區慣用“物件導向”這種叫法。在 Java 的世界中,所有的東西都有一個統一的稱謂——對象。對象是什么呢?簡單說來,對象=屬性+方法(如圖1-5所示)。

圖1-5 對象

屬性也可以稱為特性,它從靜態上描述了該對象的各種特性;方法也可以稱做行為,它從動態上描述了該對象能夠做的事情。例如,一個人的屬性可以包括姓名、年齡、性別等,一個人的行為可以包括思考、說話、吃飯、睡覺等。

理論上,人們腦海中的任何東西都能成為程序中的對象。小到一粒沙,大到一個宇宙都可以是對象;不僅包括實實在在的東西,就連“思想”和“靈魂”這些抽象的概念也可以變成對象——總之,只要能用屬性+方法的形式來描述的東西,都可以成為對象(如圖1-6所示)。

圖1-6 面向對象的Java

了解了對象的概念之后。在面向對象的世界里,所謂的“程序”就不再是一條條的命令,而是成堆的對象組合在一起,通過彼此間傳遞消息互相協作,從而完成特定的任務。例如“上課”這個簡單的事情,便可以轉化為“學生”對象和“老師”對象之間的關系。這和現實世界是一致的。與BASIC、C這些高級語言相比,Java這樣的面向對象語言更加符合人類認識問題、思考問題的模式。

1.2.3 認識對象的模具——類

以“上課”為例,這個例子中同班的學生們除了姓名、年齡、性別等屬性不同之外,其他屬性是完全相同的,所以他們都屬于同一“類”。

“類”是面向對象程序設計中一個極其重要的概念(如圖1-7所示)。讀者已經知道,對象包含了屬性及行為。“類”便是有著共同屬性及共同行為對象的總稱。在面向對象的Java程序設計中,所有的個體都是對象,每個對象都屬于特定的類,類定義了屬于該類對象的屬性及行為。例如屬于“學生”這個類的對象,都具有姓名、年齡、性別等屬性,只是這些屬性的值不一樣。除了屬性之外,他們還都具有“記筆記”等“學生”類所定義的行為。

圖1-7 類和對象

類就像是對象的模具,程序員只要設置好了類,那么屬于該類的對象想產生多少就產生多少。這個產生的過程稱為類的“實例化”,所產生出來的對象,稱做類的實例。

在Java里面,用關鍵字Class來表示類。前面所說的“學生”類名字是Student,它有3個屬性:

(1)name:姓名,字符串類型。

(2)age:年齡,整數類型。

(3)sex:性別,字符串類型。

因此,這個“學生”類——Student,可以用Java代碼描述如下(參見清單1-1)。

清單1-1

    class Student {
        String name;    // 姓名
        int   age;      // 年齡
        String sex;     // 性別
        /**
        * 學生上課記筆記
        */
        void takeNote(){
            System.out.println("我是" + name);
            System.out.println("今年" + age + "歲" );
            System.out.println("性別" + sex);
            System.out.println("我開始記筆記了");
        }
    }

還沒有為這個類創建構造函數(這種情況下,Java 編譯器會自動為其創建一個無參數的構造函數),它只有一個叫做takeNote的方法,表示上課記筆記這個行為。方法中使用了System.out對象,調用它的println方法,向控制臺輸出信息。

Java命名規范

關于類、屬性和方法的命名,滿足以下兩點的名字都是合法的:

(1)以字母、下畫線及美元符號“$”開頭,隨后是字母和數字的任意組合。

(2)非Java的保留字(如class、void等)。

按照Java的命名規范,通常情況下,類名的第一個單詞以大寫字母開頭,屬性名、方法名的第一個單詞以小寫字母開頭,其后單詞——如果有的話,均以大寫字母開頭。類名和屬性名應該是一個名詞,方法名應該是一個動詞或動賓短語。在清楚表達意思的前提下盡量簡短。

為了測試這個類,讀者需要為它加上一個main方法。main方法是每個Java應用程序都必須有的,每一個Java應用程序都是由main方法開始的,而main方法執行完畢就意味著該應用程序的結束。

添加了main方法之后,Student類變成了下面這個模樣(參見清單1-2)。

清單1-2

在main方法中,讀者可以看到,這里通過關鍵字new創建了一個叫做zhouxingxing的Student類型的對象,然后對它的各項屬性進行賦值,姓名設為“JavaWeb愛好者”,年齡設為20歲,性別設為男。最后,調用他的takeNote方法,讓這個學生記筆記。

運行這個簡單的程序,就可以在控制臺上看到如下輸出:

    我是JavaWeb愛好者
    今年20歲
    性別男
    我開始記筆記了

以上通過代碼展示了一個簡單類的創建以及使用——與其說簡單,不如說它非常的簡陋。如果讀者具備Java編程的基礎知識,可以很容易地指出其中的問題:比如,類的屬性應該是對外部隱藏的,對屬性的訪問和修改應該通過標準的get和set方法;類及其屬性、方法等應有明確的訪問修飾符;等等。本書的重點在于講解應用開發,但是牢固的基礎知識和嚴格的編程規范是極為重要的,一些讀者寫了很多的代碼,編寫了很多的程序,但對一些基礎的知識卻不甚了解,這是本末倒置的做法,對提高自己的水平是不利的。“萬丈高樓平地起”,扎實的基本功是寫出好程序的基礎。在今后的知識講解中,筆者將會把重要的基礎知識融入其中,請讀者牢記它們。即使曾經學習過,也請再溫習一遍,說不定會發現以前不曾注意到的東西。

有些沒有使用過 Java 開發工具的讀者可能會無法去比對,不過不用著急,這里主要是向讀者示范。在下一節,筆者會詳細介紹開發工具的使用。

主站蜘蛛池模板: 中宁县| 桓台县| 泰顺县| 铁岭市| 刚察县| 温泉县| 定安县| 四子王旗| 通江县| 龙南县| 绥德县| 耒阳市| 中宁县| 比如县| 无极县| 莱州市| 蒲江县| 吉首市| 个旧市| 铁岭市| 榆社县| 睢宁县| 潮州市| 丹凤县| 玉屏| 房产| 巧家县| 伊吾县| 会泽县| 鹤山市| 新密市| 张家界市| 茶陵县| 汶上县| 长治县| 高雄市| 武汉市| 东辽县| 石家庄市| 鲁甸县| 鄂尔多斯市|