2013-02-26 93 views
3

根據標準定義,對象是包含數據和行爲的實體。 根據我的理解,數據是從外部發送的。例如,我們有一個計算數字的平方的類。我們創建一個實例,並向對象發送消息以及數字,以計算平方。 我們不是從外部發送數據嗎? 爲什麼所有的定義都指出對象包含數據? 謝謝面向對象,對象概念

+0

是的,我們輸入到對象中,但對象由兩者組成。 – 2013-02-26 20:11:31

+1

一個對象可能包含這兩個對象,但沒有要求它這樣做。例如,假設我們有一個File對象。我們可以調用一個文件名爲'File :: Open'的方法,如 'myfile-> Open(「SomeFile.txt」);' 當時的File對象可能試圖打開文件,跟蹤一個類文件指針的內部,可能是文件的名稱等。所以現在它有數據,可能是文件大小爲'myfile-> FileSize'或文件中的位置爲'myfile-> FilePosition'。然後你可以調用更多的函數,「行爲」,如'myfile-> Close','myfile-> Read'等。 – 2013-02-26 20:14:42

+0

對象可以由純數據或純行爲或兩者組成。這是你的選擇。添加字段並保持狀態。添加方法並實現您的行爲。對象範例只說它可以包含它們兩個 – Alex 2013-02-26 20:21:03

回答

2

在這種情況下,數據是對象的狀態。該定義指出對象的狀態/數據應該在內部存儲。例如,請考慮以下類:

class Math { 

    Double square(double x) { 
     return x * x; 
    } 
    // other similar functions 
} 

作爲語言結構,它是一個類。但是,它不是面向對象意義上的真正的類。因爲它沒有狀態或數據。它只是一個包裝在類構造中的函數。這不一定是錯誤的。因爲在這種情況下,恰好你有不需要狀態的操作。

試圖強調的定義是:當它(或它的類)同時具有數據和行爲時,你有一個真實的對象。並非每個類構造的用法都代表一個真正的對象。

因此,如果代表它的類滿足以下三個條件,則您有一個對象。

  1. 該班有州/日期。如果不是,那麼它只是一堆功能。它不是面向對象的,它是程序性的。
  2. 該類有行爲。如果不是,那麼它只是一個容器,一堆變量(C中的結構)。
  3. 不僅該類具有狀態/數據和行爲/方法,而且數據和行爲之間存在內在聯繫。這意味着只是將一些變量和函數放在一起並不能成爲真正的對象。例如,如果你有狀態/數據,並且在類中也有一些方法,但是如果該函數不需要對任何狀態進行操作,那麼這個方法是否真的屬於這個類是有問題的。

下面是我認爲是一個適當的類(對象的表示)的簡單示例。

Class Patient { 
     // blood pressure 
    double systolic; 
    double diastolic; 
    double weight; 
     int age; 
    public Patient(double systolic, double diastolic, double weight, int age){ 

    } 

    Public boolean isHealthy(){ 
     // do some calculations and algorithms on age, weight and blood pressure indicators. 
     // return result as true of false 
    } 

} 

在這裏,我們看到這個類同時具有狀態和行爲。我們也看到,國家和行爲都屬於這個階層。它們是患者概念的屬性。我們進一步看到,操作與數據有內在的關係。您無法諮詢/使用其狀態,無法確定患者是否健康。

0

你的例子是一個私人的情況下,對象不需要保存數據(即狀態)。在這種情況下,它可以被一個函數替換(只是行爲)。大多數對象需要存儲數據。例如,一個對象人應該包含描述該人的品質,而不僅僅是可能的行爲。

1

我認爲這個問題與你的例子非常適合面向對象的設計。我的意思是計算一個數的平方是一個無記憶的函數,因此顯然沒有理由在對象屬性中存儲數據。然而,當你必須處理有狀態實體的管理時,你會更容易地瞭解類和麪向對象的重要性。

0

對象是一個類的實例。

類(a,a * a)是正方形類,但(2,4)是它的一個實例(對象)。是的,數據被髮送到班級並創建新的對象。