讀書筆記《Thinking in Java》-第一章-07/10/13

          Posted on 2007-10-13 21:23 Raylong 閱讀(1272) 評論(4)  編輯  收藏 所屬分類: 讀書筆記
          讀書筆記《Thinking in Java》-第一章-07/10/13

          1、所有編程語言都提供抽象機(jī)制。可以認(rèn)為,人們所能解決的問題的復(fù)雜性直接取決于抽象的類型和質(zhì)量。……匯編、C等所做的抽象仍要求在解決問題時要基于計算機(jī)的結(jié)構(gòu),而不是基于所要解決的問題的結(jié)構(gòu)來考量。程序員必須建立起在機(jī)器模型和實(shí)際解決問題的模型之間的關(guān)聯(lián)。建立這種映射是費(fèi)力的,而且這不屬于編程語言所固有的功能。
          (早期的程序員都是很強(qiáng)的……)

          2、面向?qū)ο蠓绞绞沟贸绦騿T不再受限于任何特定類型的問題。這種思想的實(shí)質(zhì)是:程序可以通過添加新類型的對象,使得自身適用于某個特定問題。因此,在閱讀描述解決方案的代碼的同時,也是在閱讀問題的表述。所以O(shè)OP允許根據(jù)問題來描述問題。每個對象看起來像一臺微型計算計---他有狀態(tài),也有操作……
          (創(chuàng)建一個學(xué)生管理程序,首先最重要的類是Student,他可以有名字、學(xué)號、院系、班級等屬性,并且可以計算每個學(xué)生的綜合素質(zhì)評分、打印各科成績等等。一旦這些都描述好了,你就可以創(chuàng)建學(xué)生Student實(shí)例,對學(xué)生執(zhí)行操作了。這就是OOP吧。)

          3、面向?qū)ο蟮奈鍌€基本特征:
          A、萬物皆對象。(Java中的原始數(shù)據(jù)類型就不是對象,但是這是出于對效率的權(quán)衡。再者說了,每個原始數(shù)據(jù)類型都有相應(yīng)的包裝器類型,這就把原始類型對象化了。)
          B、程序是對象的集合,它們通過發(fā)送消息來告知彼此所要做的。(通過“.”操作符。)
          C、每個對象都有自己由其他對象所構(gòu)成的存儲。(樓對象是由鋼筋、水泥、磚頭等等這些對象構(gòu)成。)
          D、每個對象都有其類型。(可以通過反射機(jī)制實(shí)現(xiàn)動態(tài)的類型檢查。)
          E、某一特定類型的所有對象都可以接收同樣的消息。(傳說中的多態(tài)了,通過父類的引用操作子類。)

          4、面向?qū)ο蟪绦蛟O(shè)計的挑戰(zhàn)之一就是,在問題空間的元素和解空間的對象之間創(chuàng)建一對一的映射。建立類,創(chuàng)建對象,然后操縱它們,這就是OOP的全部了。
          (問題描述出來了,也就解決了。)

          5、每個對象都有一個接口,也就是都只能滿足某些要求,這些要求就是對象的接口定義的。
          (聽說有的java架構(gòu)師只給出接口,然后程序員就開工了……沒親眼見到,不知是不是這樣的。)

          6、當(dāng)試圖開發(fā)或理解一個程序設(shè)計時,最好的方法是將對象想象為“服務(wù)提供者”,程序本身向用戶提供服務(wù),它通過調(diào)用其他對象提供的服務(wù)來實(shí)現(xiàn)這一目的。你可以創(chuàng)建,也可以從現(xiàn)成的代碼庫中尋找能夠提供理想服務(wù)的對象。
          (Java有一個幾乎無所不包的類庫,這個庫還在不斷地增大、改進(jìn)。Java水平的高低指標(biāo)之一就是你能否熟練地使用類庫,快速地查找,并且正確地運(yùn)用。這種能力和時間成正比的。運(yùn)用類庫能提高開發(fā)效率和代碼的質(zhì)量,)

          7、在良好的面向?qū)ο笤O(shè)計中,每個對象都可以很好地完成一項任務(wù),但它并不試圖做更多的事。如此做的好處之一就是使對象在別處復(fù)用成為可能。
          (該干嘛就干嘛,有助于提高類的內(nèi)聚性。一個無所不能的類有,且只有一個,那就是God類。)

          8、(再次強(qiáng)調(diào)對象是服務(wù)提供者)將對象作為服務(wù)提供者是一件偉大的簡化工具,它不僅在設(shè)計過程中非常有用,而且在他人試圖理解你的代碼或者重用某個對象時,它會使調(diào)整對象以適應(yīng)其設(shè)計的過程變得簡單得多。

          9、隱藏實(shí)現(xiàn)的概念再怎么強(qiáng)調(diào)也不過分。訪問控制的第一存在原因就是讓客戶端程序員無法觸及它們不應(yīng)該觸及的部分。第二個原因就是,允許庫設(shè)計者可以改變類內(nèi)部的工作方式而不用擔(dān)心會影響到客戶端程序員。
          (無論哪家的電器的廠家,都不會讓電路裸露在外面。用戶需要的是一個遙控器和說明書就足夠了。Java庫一直在更新升級,但是由于良好的設(shè)計隱藏了實(shí)現(xiàn),舊有的代碼無需重新編譯就能獲得更高的性能!)

          10、事實(shí)證明,復(fù)用性并不容易達(dá)到我們所希望的那種程度,產(chǎn)生一個可復(fù)用的類需要豐富的經(jīng)驗(yàn)和敏銳的洞察力。代碼復(fù)用是OOP所提供的最了不起的優(yōu)點(diǎn)之一。最簡單的復(fù)用就是直接使用一個類的對象。使用現(xiàn)有的類合成新的類,被稱為組合。組合帶來極大的靈活性。新類的成員對象通常被聲明為private,使得新類的客戶端程序員不能訪問它們。
          (我想建立一個個人的Java代碼庫,把一些庫中沒有的常用的功能加進(jìn)其中,復(fù)用。)

          11、繼承在OOP中如此重要,總被高度地強(qiáng)調(diào),于是程序員新手就會有這樣的印象:處處使用繼承。這會導(dǎo)致難以使用并過分復(fù)雜的設(shè)計。實(shí)際上,建立新類時,應(yīng)優(yōu)先考慮組合,因?yàn)樗雍唵戊`活。一旦有了經(jīng)驗(yàn)就會看出必須使用繼承的場合了。

          12、繼承---接口的復(fù)用。當(dāng)父類發(fā)生變化時,子類就會受到牽連。這就是繼承的不靈活的地方。
          (房屋的根基動搖了,上層建筑自然要不穩(wěn)了。)

          13、以同樣的術(shù)語將解決方案換成問題是大有裨益的,因?yàn)椴恍枰趩栴}描述和解決方案描述之間建立許多中間模型。可以直接從真實(shí)世界中對系統(tǒng)的描述過度到用代碼對系統(tǒng)進(jìn)行描述。(下面這段很有意思)事實(shí)上,對使用面向?qū)ο笤O(shè)計的人們來說,困難之一是從開始到結(jié)束過于簡單。對于訓(xùn)練有素、善于尋找復(fù)雜的解決方案的頭腦來說,可能會在一開始被這種簡單性嚇倒。
          (實(shí)際上,像我這種直接學(xué)Java的人來說,學(xué)C/C++是不可想象的……學(xué)中醫(yī)的搞西醫(yī)相對簡單,學(xué)西醫(yī)的搞中醫(yī)就不那么輕松了。)

          14、有兩種方式可以導(dǎo)致基類和子類的不同。第一,有時基類的方法并不能需求,那么在可以子類中添加新的方法。但是,應(yīng)該仔細(xì)考慮是否在基類也添加這些額外的方法。這種設(shè)計的發(fā)現(xiàn)與迭代過程在面向?qū)ο蟪绦蛟O(shè)計中會經(jīng)常發(fā)生。第二,改變現(xiàn)有的基類的方法的行為,這被稱為覆蓋。

          15、繼承應(yīng)該只覆蓋基類的方法嗎?如果這樣做了,子類和基類就具有完全相同的接口。這被稱為“純粹替代”。這是一種處理繼承的理想的方式。此種關(guān)系可稱之為“is a”關(guān)系。如果子類添加了新的方法,那么他和基類的關(guān)系是“is like a”關(guān)系。

          Feedback

          # re: 讀書筆記《Thinking in Java》-第一章-07/10/13  回復(fù)  更多評論   

          2007-10-14 10:37 by tomlove
          學(xué)習(xí)JAVA中,向你看齊

          # re: 讀書筆記《Thinking in Java》-第一章-07/10/13  回復(fù)  更多評論   

          2007-10-14 15:03 by Raylong
          @tomlove
          大家一起學(xué)習(xí)吧,雖然不能共同富裕,但是可以共同進(jìn)步啊!

          # re: 讀書筆記《Thinking in Java》-第一章-07/10/13  回復(fù)  更多評論   

          2007-10-15 17:37 by tomlove
          @Raylong
          呵呵 ,現(xiàn)在JAVA學(xué)的一知半解,Java編程思想看了一半,看不下去了。看了 你的文章,又讓我找到動力~~

          # re: 讀書筆記《Thinking in Java》-第一章-07/10/13  回復(fù)  更多評論   

          2007-10-15 17:48 by Raylong
          @tomlove
          《Thinking in Java》的確很經(jīng)典!不像別的書那么膚淺,講語法不講原理,不會帶著你去思考。
          主站蜘蛛池模板: 桐梓县| 新乡市| 乐清市| 分宜县| 陇南市| 常熟市| 大理市| 温宿县| 于田县| 宁强县| 保定市| 柯坪县| 鹤峰县| 麻城市| 藁城市| 涟源市| 响水县| 攀枝花市| 光山县| 太仆寺旗| 尼玛县| 中宁县| 赣榆县| 苍山县| 永胜县| 通道| 乌审旗| 长垣县| 徐州市| 虞城县| 信丰县| 济宁市| 汨罗市| 平果县| 宜春市| 敖汉旗| 梁河县| 义乌市| 海淀区| 遂平县| 肃南|