[Groovy] 程式設計教學:建立和使用類別 (Class)

【分享本文】
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    Groovy 的物件系統基本上和 Java 的物件系統大同小異,都是以類別 (class) 做為物件 (object) 的藍圖,物件做為類別的實體 (instance)。Groovy 和 Java 相異的地方在於 Groovy 加上一些語法糖,使得語法變得更簡潔。

    類別 (class) 的虛擬碼如下:

    class KlassName {
        // Declare some private fields
    
        // The constructor.
        public KlassName(param_a, param_b, param_c) {
            // Init some fields.
        }
        
        // Declare some public methods
    }

    類別的目的是用來建立物件,而非物件本身,我們在撰寫類別時,其實是在撰寫帶有內部狀態的函式,這些函式藉由改變物件的屬性來改變物件的狀態。這樣講有點抽象,用實際的例子來看會比較容易了解,詳見下文。

    註:和類別或物件綁在一起的函式 (function) 又稱為方法 (methods)。

    以下用平面座標的點 (point) 為例子來看如何建立物件,這個例子只用到 getters 和 setters,算是相對單純的例子:

    class Point {
        // Some private fields.
        private double _x
        private double _y
        
        // The constructor of Point.
        public Point(double x, double y) {
            setX(x)
            setY(y)
        }
        
        // Pseudo-property getter x
        public getX() {
            return _x
        }
        
        // Pseudo-property setter x
        public setX(double x) {
            _x = x
        }
        
        // Pseudo-property getter y
        public getY() {
            return _y
        }
    
        // Pseudo-property setter y
        public setY(double y) {
            _y = y
        }
    }

    在程式的上半部,我們宣告類別 Point,該類別有兩個私有屬性 _x_y,分別代表 x 軸和 y 軸上的位置。

    在建構子中,傳入參數 xy,分別用來設定物件的屬性。我們分別呼叫兩個屬性的 setters getXgetY,可以確保設定屬性的行為是一致的。

    在這個類別中,只有單純的 getters 和 setters,而且 setters 沒有額外的限制。但我們不將屬性直接暴露在外,因為我們以後要修改 setters 的行為時,可確定外部程式是透過這些 setters 來存取屬性。

    使用這個類別的外部程式如下:

    def p = new Point(0, 0)
    
    assert p.x == 0
    assert p.y == 0
    
    p.x = 3
    p.y = 4
    
    assert p.x == 3
    assert p.y == 4

    在外部程式中,我們建立物件 p,並透過其 getters 和 setters 存取其屬性。在 Groovy 中,以 getset 開頭的 method 會自動轉為 property,和 C# 的 property 有些類似,原本 Java 的物件中沒有這項特性,這是稍微較 magic 的地方。

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【追蹤新文章】
    Facebook Twitter Plurk
    標籤: GROOVY, JAVA