2017-07-26 261 views
2

所以,我明白一個類可以有屬性和方法。類圖總是需要屬性嗎?

1)如果一個類有一個方法但沒有屬性會有可能嗎? (這似乎是不可能的,在我看來,它擊敗了創建類的目的)

2)如果一個類有屬性但是沒有方法嗎? (這似乎是可能的)

非常感謝!

+1

是,是...... –

回答

4

1)是的,你有時會看到它在實用工具類

class MyUtils { 
    public int add(int a, int b) { 
    return a + b; 
    } 
} 

它是如何有用的是完全是另一個問題,但有一個在造型沒有問題。

另一種情況是接口(有時表示爲抽象類),其中不允許任何屬性(或更一般的狀態),只有方法或方法原型/頭文件。

2)是的,這在貧血模型中很常見,有些類只作爲數據持有者;因爲在圖中顯示訪問器方法並不是一種好的做法,所以您可能只能看到屬性,而不能看到方法;或者如果屬性是公共的,並且不需要訪問器,如C++結構體。

同樣,在設計模型中,您很少看到任何方法,因爲您關注的是類之間的關係,而不是其實現行爲。

+0

在抽象類中屬性是允許的。在接口 - 不,但問題不在他們身上。他們大多沒有方法,只有標題。 – Gangnus

+0

@Gangnus UML接口可以有屬性(儘管不一定是有狀態的)。沒有接口的語言的實現模型可以將它們表示爲沒有屬性的類。 –

+0

他用什麼語言使用具有屬性的接口?畢竟是編程。 ...而抽象類仍然可以有屬性。靜態,當然。 – Gangnus

4

無屬性(帶方法)和無操作類(帶屬性)的類都是可能的且合法的,但很少見。類層次化意味着你不應該直接訪問類屬性。然而,您可能有一個類用於存儲數據(僅用於屬性),另一個用於管理數據(僅用於操作)。 還要注意,即使模型存在於類中,您的模型也可能不顯示屬性或操作(或甚至兩者)。

0

具有方法但沒有字段的類經常用作實用程序類。例如,您有幾個功能可以對文本文件進行一些編輯。創建一個EditationsUtilities類,它將只有編輯方法。有人認爲練習邪惡,但它被廣泛使用。 Utility classes are evil? Utility classes are evil?

帶字段和無方法的類 - 它們被稱爲結構。並且仍然是 - 例如,你有一個類Point,它只有兩個字段:x和y。如今這些課程被認爲是不好的風格,但仍被廣泛使用。他們說如果將x和y聲明爲私有,並且getter和setter方法將爲他們制定,則會更好。有趣的是,有些人認爲getter/setter是邪惡的。 http://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html

在某些語言中,字段,屬性和屬性之間有區別,有些必須有getter/setter。在這些情況下,類不能有沒有方法的屬性,因爲屬性(不是字段!)必須有getter和/或setter。

在UML(類圖)中,當您開始思考類時,可以繪製一個只有空類矩形的圖表。所以,他們顯然不會有領域或方法。但那只是暫時的。在代碼中,你將不會有沒有字段和方法的類。

所以,使用它,因爲它對你很方便。你感覺不到什麼樣的組織更適合你的軟體。