1. 程式人生 > >004 面向物件1

004 面向物件1

目錄

一、面向過程的思想和麵向物件的思想

二、簡單理解面向物件

三、面向物件的設計思想

四、物件和類的概念

五、如何抽象出一個類?

六、類(物件)之間的關係

七、Java與面向物件

八、為什麼使用面向物件程式設計?


 

一、面向過程的思想和麵向物件的思想

       面向物件和麵向過程的思想有著本質上的區別, 作為面向物件的思維來說,當你拿到一個問題時,你分析這個問題不再是第一步先做什麼,第二步再做什麼,這是面向過程的思維,你應該分析這個問題裡面有哪些類和物件,這是第一點,然後再分析這些類和物件應該具有哪些屬性和方法。這是第二點。最後分析類和類之間具體有什麼關係,這是第三點。

      面向物件有一個非常重要的設計思維:合適的方法應該出現在合適的類裡面

二、簡單理解面向物件

  就是在程式裡面首先分解出來的應該是注意不再是一步一步的過程了,而是首先考慮在這個問題域裡面或者程式裡面應該具有有哪些物件,所以從現在開始考慮任何問題腦子裡不要再想著我實現這件事我第一步應該幹什麼,第二步應該幹什麼,如果這樣想,那就是面向過程的思維了。面向物件的思維是,當我碰到這個問題域的時候,碰到這個程式的時候,我首先應該把這個問題裡有哪些物件,物件與物件之間有什麼關係抽象出來。

三、面向物件的設計思想

  面向物件的基本思想是,從現實世界中客觀存在的事物出發來構造軟體系統,並在系統的構造中儘可能運用人類的自然思維方式。

  面向物件更加強調運用人類在日常生活的邏輯思維中經常採用的思想方法與原則,如抽象、分類,繼承、聚合、多型等。

  人在思考的時候,首先眼睛裡看到的是一個一個的物件。

四、物件和類的概念

     物件是用於計算機語言對問題域中事物的描述,物件通過“屬性(attribute)”和“方法(method)”來分別對應事物所具有的靜態屬性和動態屬性

     類是用於描述同一類的物件的一個抽象的概念,類中定義了這一類物件所具有的靜態屬性和動態屬性

    類可以看成一類物件的模板,物件可以看成該類的一個具體例項

    eg.什麼叫瓶子?

     瓶子的定義:具有某些類特徵的東西就是瓶子,比分說什麼樣的形狀,比方說有個口,能倒水,能裝水,一般有個蓋等等。給瓶子下定義的過程,其實就是把瓶子裡的某些東西抽象出來了,所以瓶子在這裡是叫做一類事物的一個抽象,在你腦子裡有瓶子的概念,可瓶子的概念在你腦子裡到底是什麼呢?瓶子的概念在你腦子裡叫做一類事物的一個抽象。怎麼抽象的呢?你往往抽象的是這兩個方面:第一個方面我們叫它靜態的屬性,瓶子應該具有哪些特徵,比分說瓶子應有個口,這是它的具有的一個靜態屬性,瓶子一般有一個蓋,這也是它的具有一個靜態屬性,除此之外,你還可能給它總結動態的屬性,什麼動態的屬性呢?比放說瓶子能倒水,這是它的動態屬性。瓶子這個概念在你腦子裡如果你細細的思維的話,其實你給它做了兩方面的總結,一方面是靜態的,一方面是動態的。反映到JAVA的類上,一個就是成員變數(靜態屬性),一個就是方法(動態屬性)方法是可以執行的,可以動的。成員變數是某一個類的靜態屬性。所以你腦子裡瓶子的概念實際上是一類事物的一個抽象,這種東西我們叫它類,椅子是類,桌子是類,學生是類。什麼是物件呢?這一類事物的具體的某個例項就叫做物件。所以一類事物的具體的某一個東西,符合這類事物具體的特徵的某個東西就叫做物件。瓶子是一個類,某個瓶子就是瓶子這個類裡面的一個物件。

五、如何抽象出一個類?

       有兩個方面,一方面是它的靜態屬性,另一方面是它的動態屬性。反映到JAVA裡面的類怎麼包裝它呢?一方面成員變數,另一方面是方法。

  eg.職員這個類該怎麼抽象出來?也是從兩個方面,一方面是它的靜態屬性,另一方面它的動態屬性

  職員有哪些屬性呢?有姓名,年齡,目前工資數額等屬性,他有哪些方法呢?讓這個職員來顯示姓名,顯示年齡,修改姓名,領取工資。當然顯示姓名,顯示年齡,修改姓名,領取工資這些也可以讓別人來做,但面向物件的設計思維是最合適的方法應該出現在最合適的類裡面。顯示姓名,顯示年齡,修改姓名,領取工資由誰來做更合適呢,那就是職員自己最合適。所以這些方法應該出現在職員這個類裡面。

  對於類來說,它有一些屬性或者稱為成員變數,以後說屬性或者成員變數指的是同一回事。具體的物件他有沒有相關的一些屬性或者叫成員變數呢?有,每一個人都有一份,只不過是取值不同而已。如從職員這個類例項化出來的兩個職員:職員A和職員B,他們都有姓名,年齡,目前工資數額這些屬性,但他們的名字,年齡,領取的工資數額都不一樣。這樣就能把職員A和職員B區分開來了,正是因為他們的屬性值不一樣,所以這個物件才能和另外的物件區分開來,所以通過屬性是可以區分兩個物件的。貓是一個類,這隻貓是一個物件,這隻貓和另外一隻貓該怎麼區分開來呢?那就得看你的貓這個類是怎麼定義的了,貓有貓毛,毛有顏色。OK,這隻貓是黑貓,另一隻貓是白貓,這樣通過貓毛的顏色區分開來了。如果只定義一個,如捉老鼠,白貓也能捉,黑貓也能捉,這樣就沒辦法區分出黑貓和白貓了,所以根據方法是沒辦法區分兩個物件的。所以每個物件都有自己的屬性,屬性值和另外一個物件一般是不一樣的

  一定要區分類和物件,什麼叫做類?什麼叫做物件?類是一類事物的一個抽象,具有共同特徵的一類事物的一個抽象。物件是這個類具體的某一個例項,所以以後說例項(instance)或者說物件(object)指的是同一回事。

六、類(物件)之間的關係

一.關聯關係(最弱的一種關係)

  類和類之間是有關係的,如學生和老師這兩個類,老師可以教學生,學生可以向老師學習。這就是他們之間的關係。關係和關係之間是不同的,你和你老婆的關係和你和你其他女朋友的關係是不能混為一談的。關係最弱的一種關係叫關聯關係。關聯關係反應到程式碼上往往是一個類的方法裡面的引數是另一個類的具體的某一個物件,比如教授教研究生,教哪個研究生,教是教授這個類裡面的一個方法,某個研究生是研究生這個類裡面的一個具體的物件。關聯關係是最弱的一種關係,咱們兩個類之間有關係,或者兩個物件之間有關係,但關係不是很緊密。

二.繼承關係(比較強的一種關係)

 

  繼承關係封裝了這樣一種邏輯:“XX是一種XX”,只要這東西能說通了,就可以考慮用繼承關係來封裝它。如:游泳運動員從運動員繼承,游泳運動員是一種運動員,這能說得通,所以游泳運動員就是從運動員繼承過來的,游泳運動員和運動員就是一種繼承關係。學生是一個人,學生從人繼承,老師是一個人,老師也從人繼承,學生是一種老師,這說不通,所以學生和老師就不存在繼承關係。所以將來做設計的時候要分清繼承關係很簡單,你只要說通這麼一句話:“XX是一種XX”。OK,那他們之間就是繼承關係。籃球運動員是一種球類運動員,這說得通,所以籃球運動員從球類運動員繼承,這樣繼承很有可能會產生一棵繼承樹,運動員派生出來,派生出來的意思是游泳運動員這個類、球類運動員這個類、射擊運動員類從它繼承,相當於運動員派生出來了這些個不同的運動員,包括游泳的,球類的,射擊的。球類的再派生足球的,籃球的,排球的。這就是一棵繼承樹,不過這棵樹是比較理想化的情況,只有一個根節點。但實際當中,我們真實世界當中的繼承關係不一定只從一個類繼承,一個類可能從多個類繼承過來,比如說:金絲猴從動物這個類繼承,這很正常,但我還有另外一個專門的類:“應該受到保護的東西”,這也是一個類,金絲猴應該受到保護,所以金絲猴是一種應該受到保護的東西。所以金絲猴從“應該受到保護的東西”這個類繼承過來。所以在現實情況當中,一個類完完全全有可能從多個不同的類繼承,C++正是因為想封裝這種繼承關係,所以C++存在多重繼承。

三.聚合關係(整體和部分)(比較強的一種關係)

相關推薦

004 面向物件1

目錄 一、面向過程的思想和麵向物件的思想 二、簡單理解面向物件 三、面向物件的設計思想 四、物件和類的概念 五、如何抽象出一個類? 六、類(物件)之間的關係 七、Java與面向物件 八、為什麼使用面向物件程式設計?   一、面向過程的思想和麵向物件的思想  &nb

Java(一)面向物件1.類的定義

class Servant1 { String name; int age; void shopping() { } void cook() { } void wash() { } } public class Serva

面向物件---1月2日課堂隨筆

1.作用域:   棧記憶體  js 執行的環境(作用域)   堆記憶體:存放程式碼塊的空間   存放方式   鍵值對的形式存   字串的形式存   js程式碼在執行之前,瀏覽器會給他一個全域性作用域叫window,每個作用域下分兩個模

js面向物件1--瞭解建構函式

一、建構函式與例項的區別 建構函式 1.1. 建構函式主要是一種用於生成物件的餅乾模具,這些物件具有預設屬性和屬性方法,它可以建立多個共享特定特性和行為的物件。 1.2. 建構函式只是一個函式,但當函式遇到了new,就發生了一些微妙的關係,它會將該函式的this值設定為正在構建

從零開始的全棧工程師——面向物件1.2( 六大繼承 )

一、物件克隆 var obj = { name:'li', age:23 } var obj2 = obj; // 這不是物件克隆 只是把obj的記憶體地址給obj2   1.for in克隆 通過for in克隆 不管是私有的還是公有的 都克隆成私有的   2.Obje

廖雪峰Java2面向物件程式設計-1面向物件-1面向物件基礎

面向物件程式設計:Object-Orien Programming 對現實世界建立計算機模型的一種程式設計方法。 物件的概念 現實世界 計算機模型 Java程式碼 人 類/class class Person()

Python面向物件1:基礎介紹+封裝特徵

目前有三種程式設計方式:面向過程:根據業務邏輯從上到下寫壘程式碼函式式:將某功能程

Java學習筆記(面向物件1

面向物件 1.何為面向物件 面相物件是相對面向過程而言的 面相物件和麵向過程都是一種思想 面向過程 強調功能行為 面向物件 將功能封裝進物件,強調具備了功能的物件。 面向物件是基於面向過程的。 2.類與物件 類就是對現實生活中事物的

java面向物件1

java的檔名與類名 ① Java儲存的檔名必須與類名一致; ② 如果檔案中只有一個類,檔名必須與類名一致; ③ 一個Java檔案中只能有一個public類; ④ 如果檔案中不止一個類,檔名必須與public類名一致; ⑤ 如果檔案中不止一個類,而且

PHP入門(8) 面向物件(1) 方法和屬性的覆蓋 訪問父類

<?php class _Parent{ //子類中無法訪問父類private屬性 protected可以 private $data = "parent"; protected $data2 = "protected data"; public functio

JAVA面向物件學習筆記(1)

1.Static關鍵字   特點: 1.一個類的多個物件共享,節省資源空間                2.隨著類的載入而載入         &nbs

熟練使用Lua(四)面向物件:基於table的面向物件實現(1

轉:https://www.cnblogs.com/yao2yaoblog/p/6433553.html c++和java語言機制中本身帶有面向物件的內容,而lua設計的思想是超程式設計,沒有面向物件的實現。 但是利用lua的元表(matetable)機制,可以實現面向物件。要講清楚怎樣

Java基礎1面向物件四大特性

面向物件四大特性 抽象(有時候會省略) 封裝 繼承 多型 抽象 將一類物件的共同特徵提取出來構建的類。包括資料抽象和行為抽 象。抽象只關注物件有哪些行為和屬性,而不關注具體的細節。 封裝 利用抽象資料型別將物件的屬性和對屬性的操作封裝起來,

淺談對Js面向物件的理解(1

    面向物件的語言有一個標誌,那就是它們都有類的概念,通過類來建立任意多個具有相同屬性和方法的物件。它是一種程式開發的方法,它將物件作為程式的基本單元,將邏輯和資料封裝其中,以提高程式碼的靈活性、重用性和擴充套件性。物件是把資料及對資料的操作方法放在一起,作為一個相互依存的整體。簡單的

1-理解面向物件

   java語言是純粹的面向物件的程式設計語言,主要表現為java完全支出面向物件的三種基本特徵:封裝(Encapsulation)、繼承(Inheritance)和多型(Polymorphism)。java語言以物件為中心,java程式的最小單位是類,整個java程式是由一個一個的類組成。封裝指

記 2018/11/08 面向物件基礎學習 1#

一、類與物件概述   1、為了把日常生活中實物用學習語言描述出來     2、如何描述現實事物     屬性:就是該事物的描述資訊(名詞)     行為:就是該事物能夠做什麼(動詞)   3、Java中最基本單位是類     成員變數:事物的屬性     成員方法:事物的行為   

JavaSE之面向物件程式設計—類與物件下—— 1

一、程式碼塊 在Java語言中我們總是感受到當遇到一個難的東西,就用一個大括號把它括起來,這樣被大括號括起來的程式碼塊就叫程式碼塊。程式碼塊一共有四種:普通程式碼塊、構造塊、靜態塊、同步程式碼塊。下面我們先介紹前三種程式碼塊。 1.普通程式碼塊 定義:普通程式碼塊就是在定義在方法中的程式碼塊

javaSE之面向物件程式設計->類與物件(上)——1 and 2

一、面向物件程式設計的簡介 在C語言的學習中我們所有的程式風格都是面向過程的,也就是比如兩個數相加這個程式段需要多次執行那麼我們在C語言中只能通過程式碼的賦值貼上才可以辦到,但是我們在面向過程程式設計裡面也有這樣類似的思想,就是函式。在java中我們採用面向物件的方法,就是可以將程式碼的可重

python3面向物件1

1.定義類,例項化物件: class Nanny(object): #class 定義一個類名Nanny,這個類繼承了object def __init__(self,name,age): #__init__初始化方法,在建立物件的時候自動呼叫,第一個引數是必須有的self指的是建

Java 知識點整理-4.面向物件(包、許可權修飾符、內部類1~38)+ 面向物件一點補充

1、包package的概述:Ⅰ.將位元組碼(.class)進行分類存放。 Ⅱ.包其實就是資料夾。 2、包的命名:域名倒著寫。 3、定義包的格式:package 包名; 多級包用.分開即可。 4、定義包的注意事項:ⅰ.package語句必須是程式的第一條可執行的程式碼。ⅱ.pac