OOP思想與Java實現__Java

來源:互聯網
上載者:User

大綱:

《Java編程思想》第一章對象導論摘錄 OOP的基本思想 OOP與面向過程的區別 OOP解決了什麼問題 Java中的OOP表現

《Java編程思想》第一章對象導論摘錄

抽象過程:

萬物皆對象;程式是對象的集合,他們通過發送訊息來告訴彼此所要的;每個對象都有自己的有其他對象所構成的儲存;每個對象都擁有其類型;某一特定類型的所有對象都可以接受同樣的訊息;對象具有狀態,行為和標識。

每個對象都有介面:

具有相同的特性(資料元素)和行為(功能)的對象集合,所以一個類實際上就是一個資料類型。

每個對象都提供服務:

對象是提供服務的集合,可以根據不同的服務去建立對象,是程式高內聚。

被隱藏的具體實現:

使用訪問標識符來隱藏相關內容,防止內部程式被更改

OOP的基本思想

OPP為物件導向編程,其重點是“對象”上面,什麼是對象。自然界中的一切物體,例如貓,狗,花,草等等都是對象,而物件導向編程就是一人看世界的角度來進行編程。一隻貓是怎麼樣的。毛色是黑色的還是黃色的。體重多少。體長多少。這些在人類社會中的“名詞”,用來描述一個對象狀態的詞語,在程式的是世界裡叫屬性。而一隻貓可以和狗打架,可以抓老鼠,可以叫主人起床鏟屎喂貓糧,這些在人類社會中的動詞,用來描述對象能夠做什麼的詞語,在程式的世界裡稱之為方法(也叫函數)。面對對象編程正是把這一個個屬性,一個個方法封裝在一個類(對象的一種抽象化描述)中,把一個類當作一個整體看待,而不是分成一個個屬性,一個個方法去看待,這樣的一種思想就是面對對象編程的思想。例如在貓這一個對象當中,我們關心的只是貓這一個生物,我能和它玩,能喂它,但我並不關心它是怎麼和我玩的,怎麼吃我的貓糧的,這些是貓的事,是貓自己內部的屬性和方法,我們從外部並不關心它這種屬性和方法是怎麼實現的。

OOP和面向過程的區別

面對對象和面對過程的區別就在於關注點的範圍的不同。在面對過程編程中,我們要關注一個程式有開頭到結尾的每一個細節,所有的方法和屬性都要自己掌握,而物件導向卻不是。例如,我喂貓吃貓糧的這一個動作上,在物件導向的思想中的過程是:我喂貓——貓吃糧;而在面向過程中則為:我什麼時間,什麼地點,拿什麼貓糧,怎麼拿貓糧去喂貓,貓怎麼吃貓糧,吃多少,吃的時候什麼表情,吃完之後會不會說很好處,這當中每一個細節我們都需要關注,這就是物件導向和面向過程的一個鮮明的例子。在物件導向當中,所有的東西都是已經封裝好的,就只有我和貓的概念,而面向過程則是關心所有的細節。

OOP解決了什麼問題

OPP解決了代碼複用的問題,什麼是代碼複用。代碼複用就是不重複書寫代碼,通過直接調用類代替複製,黏貼的過程。還有的是,對於我們不瞭解,不清楚的程式段中,我們也可以通過調用別人寫的類來實現我們自己想要的結果,這是一件十分方便高效的事情,而且在物件導向將代碼複用做到了喪心病狂的程度。

在Java中,OOP的實現主要表現在繼承和介面上面。

首先講繼承,在人類社會中,兒女繼承父母的手藝,繼承了父母的財產,父母中有什麼,兒女中也有什麼,那就是繼承。但是兒女不可能就只吃父母的老本,他們還在父母的基礎上增加了自己的事情,例如使用互連網,學會開汽車,這些都是父母不會做的事情。對於父母會做的事情,兒女也可以改變他,例如兒女不甘於使用人工去打磨一件產品,他們學會了產品的自動化生產,這些都是可行的。在程式中也是如此,子類繼承了父類,那麼子類就擁有了父類所有的屬性與方法,而且子類能夠增加自己屬性與方法,或者重寫父類的方法,這就是繼承。

由於Java中只支援單繼承,如果子類要解決想繼承多個父類的方法時,那應該怎麼辦呢。介面的出現就是為瞭解決這個問題。要瞭解介面,那麼就得先瞭解抽象類別,因為他們是相似的東西,能夠跟好地協助瞭解介面。抽象類別中有抽象方法,抽象方法只有類名,沒有具體的實現。例如在類people中有方法public abstract String name();在這個方法中,返回的是某個人的名字,以這個方法所屬的類作為父類,那麼在這個父類中並沒有這個方法的實現,而如果有一個子類繼承了該類,那麼在子類中一定要實現父類的抽象方法。抽象方法的好處是,統一了繼承鏈下實現某個方法的需求,防止程式員忘記書寫某些方法而造成程式錯誤,在另一個方面,父類的抽象方法不需要知道子類的具體實現,提高程式的可讀性,例如學生,教師,工人繼承了people這個類,每一個學生,教師,工人都有自己的名字,而且這個名字必須寫出來,而抽象類別則強製程序員實現這個方法,並且在子類中才實現各具特色的名字。接下來講介面,要注意的是,介面內的方法都是抽象方法,可能大家有疑問了,抽象方法要在子類中實現,在子類中書寫代碼,並沒有解決代碼的複用,那麼介面的出現又是為了什麼呢。答案還是代碼複用。我們假設有一個燈座和一批燈泡,燈泡和燈座有不同形狀的介面,有三角形的,有正方形的,有圓形的,假設有一個方法,他的動作是將燈泡安裝在燈座上。我們使用傳統的方法,來一個三角形介面燈泡我們就給它一個三角形介面的燈座,來一個正方形介面的燈泡,我們就給他一個正方形介面的燈座,這就照成了這個方法還要去尋找不同燈座的動作。那麼有沒有一種方法,可以實現我只用一個燈座就能夠接很多總類型的燈泡呢。答案是肯定的,我們可以使用一個轉換頭,將不同類型的燈泡轉換成圓形的介面,那麼我無論使用什麼樣的燈泡,我都能夠使用那一個圓形的燈座了。而且這個轉換的動作相對於換燈座的動作要簡單得多,這個轉換就是介面,而介面的作用也是如此。

=====2015/12/21 23:13======

更正:Java是不支援多繼承,但支援聲明多繼承,介面的作用是起聲明作用的,一旦有一個類聲明了某介面,那麼他也繼承了一些服務,廣義上講其實聲明也是繼承。

而由於存在介面和繼承,那麼使得多態有了用武之地,什麼是多態,多態就是父類應用指向子類對象。

=====2015/2/26 11:33======


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.