Hlavní navigace

Groovy v příkladech: objektově orientované programování

Jakub Šťastný

Dnešní díl seriálu Groovy v příkladech věnujeme objektově orientovanému programování v Groovy. Ukážeme si, jak na tvorbu tříd a objektů, jaké jsou možnosti objektového programování v Groovy a podobně. A protože nejlépe se učí na příkladech, bude tento díl hlavně o nich.

OOP v Groovy

Groovy, stejně jako jeho mateřská Java, je silně objektově orientovaný jazyk. Na rozdíl od Javy není nutné tvořit hlavní třídu, což ale jazyku na jeho objektovosti rozhodně neubírá. Ukažme si tvorbu třídy v Groovy:

class Dog{
  name

  bark(){
    println "Haf, haf!"
  }

}
myDog = new Dog()      // vytvoreni nove instance tridy Dog
myDog.name = "Mollie"  // pojmenujeme naseho psa (promenna objektu name)
myDog.bark()           // a ted si trochu zastekame

Na výstup dostaneme pochopitelně „Haf, haf!“ A teď se podíváme ještě na jednu, již o něco složitější ukázku (přejato z JavaBeat.net):

// vytvorime novou tridu
class Product{

    // promenne objektu
    private String name
    private def price
    def vendor

    public Product(){
    }

    Product(name, price, String vendor){
        this.name = name // pristup k promenne objektu z vnitrku tridy
        this.price = price
        this.vendor = vendor
    }

    public String getName(){
        return name
    }

    def setName(name){
        this.name = name
    }

    public String getPrice(){
        return price
    }

    def setPrice(price = 100.00){ // predani defaultni hodnoty promenne price
        this.price = price
    }

    def toString(){
        return "Name = $name, Price = $price, Vendor = $vendor";
    }

    static main(arguments){

        def p1 = new Product("Mobile", "10000", "Nokia")
        println(p1.toString())

        def p2 = new Product(name: 'Laptop', price: "540000", vendor: "IBM")
        println(p2.toString())

        def p3 = new Product()
        p3['name'] = "Television"
        p3.'price' = "45454"
        p3['vendor'] = "Samsung"
        println(p3.toString())

        def p4 = new Product(name: "DVD Player", vendor: "TCL")
        p4.setPrice();
        println(p4.toString())
    }
}

Výstup:

Name = Mobile, Price = 10000, Vendor = Nokia
Name = Laptop, Price = 540000, Vendor = IBM
Name = Television, Price = 45454, Vendor = Samsung
Name = DVD Player, Price = 100.00, Vendor = TCL

Nic moc překvapivého, jak vidíte. Definice třídy v Groovy je na půl cesty mezi kódem v Javě a kódem v Pythonu či Ruby. Proměnné objektu se z vnitřku třídy volají this.metoda, třída se tvoří klíčovým slovem class, metoda klíčovým slovem def, proměnná či metoda může být public nebo private.

Groovy podporuje tzv. defaultní parametry, což jsou defaultní hodnoty, které se přiřazují při definici metody jednotlivým proměnným a kterých proměnná nabude v případě, že její hodnota nebyla při volání metody specifikována. Defaultní hodnoty se předávají takto:

def setPrice(price = 100.00){
    this.price = price
}

Nyní, zavoláme-li metodu setPrice bez parametrů, proměnná price nabude defaultní hodnoty 100.00. Prosté a užitečné.

Příště

Tak, a to je pro dnešek vše. V příštím pokračování našeho miniseriálu se budeme věnovat zajímavým projektům v Groovy. Například webovému frameworku Grails a sestavovací utilitce Gant. Obě jsou inspirovány svými protějšky v Ruby – Ruby on Rails a Rake.

Odkazy

Našli jste v článku chybu?

5. 8. 2008 7:20

uf (neregistrovaný)
Neni lepsi jednotna jednoducha syntaxe, nez psat v jednom zdroji deklarace promennych a metod nekolika zpusoby? Zatim me to neuchvatilo, Python (Jython) me asi zaujal vic.

8. 2. 2008 0:10

Filip (neregistrovaný)
Ve skripte (groovy.lang.Script) se rozlisuji dve veci: promenne (variables) a vlastnosti (properties). Promenne jsou unikatni pouze pro skript - tridy je nemaji. Pouzitim def se definuje vlastnost bez nej je to promenna.
120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Vychytané vály a válečky na vánoční cukroví

Vychytané vály a válečky na vánoční cukroví

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Měšec.cz: Komu musí od ledna zvýšit mzdu?

Komu musí od ledna zvýšit mzdu?

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Měšec.cz: Stavební spoření: alternativa i pro seniory

Stavební spoření: alternativa i pro seniory

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?