Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Abstraktit luokat ja metodit

Sivun loppuun

Macro [02.02.2011 18:15:40]

#

Hallo!

Mikä tarkoitus Javassa on abstrakteilla luokilla? Mitä kirjasta lukiessa käsitin, niin se on vain luokka jossa määritellään metodeja joissa ei ole toiminnallisuutta. Sitten se luokka peritään, ja perijäluokassa tarvitsee joka tapauksessa määritellä ne metodit, jotka ovat esitelty abstraktissa yläluokassa?

Ihmettelin vaan, että mikä idea on periä luokka joka ei tee mitään.

Grez [02.02.2011 18:28:39]

#

Abstraktia luokkaa itseään ei ole tarkoitus käyttää. Siinä voidaan määritellä abstrakteja ja normaaleja funktioita. Kun sitten jokin luokka periytetään tuosta abstraktista luokasta, niin sen täytyy ratkaista miten se abstrakti funktio toteutetaan ko. perityn luokan kannalta mielekkäästi.

Sinänsähän tuon saisi aikaan myös interfacella, mutta interfacessa ei voi toteuttaa mitään funktioita.

Eli voisi tavallaan ajatella, että abstrakti luokka on tavallisen luokan ja interfacen yhdistelmä.

Jaska [02.02.2011 18:31:40]

#

Abstraktit luokat ovat yleiskäyttöisiä luokkia. Jos kaksi ohjelmaa tarvisee samanlaisen luokan, joissa on joitain yhteisiä osia mutta ei kaikkia, niin on kätevää luoda yleinen abstrakti luokka, josta luodaan aliluokkia, joiden sovelluskohtaiset metodit koodataan itse.

eq [02.02.2011 19:00:40]

#

Jaska kirjoitti:

Abstraktit luokat ovat yleiskäyttöisiä luokkia. Jos kaksi ohjelmaa tarvisee samanlaisen luokan, joissa on joitain yhteisiä osia mutta ei kaikkia, niin on kätevää luoda yleinen abstrakti luokka, josta luodaan aliluokkia, joiden sovelluskohtaiset metodit koodataan itse.

En näe mitään tarvetta puhua "erillisistä ohjelmista" tässä yhteydessä - se ei varsinaisesti edes liity käsiteltävään aiheeseen. Yksinkertaistettuna, jos luokkahierarkiassa jokin yliluokka ei voi toimia (järkevästi) itsenäisenä, tehdään tästä luokasta abstrakti. Esimerkki tilanteesta olisi se, että aliluokat toteuttavat kaikki jonkin funktion, mutta yliluokassa funktion toteutukselle ei ole mitään mielekästä tapaa; funktiota ei toisaalta voi jättää toteuttamattakaan, ellei luokkkaa määritetä abstraktiksi.

_Pete_ [02.02.2011 21:55:07]

#

Itse olen kokenut tämän OO-suunnittelussa sellaiseksi, että jätetään luokka/metodi abstract ja sitä kautta pakotetaan perivä luokka jollain tapaa toteuttamaan sen.

Triton [03.02.2011 21:28:52]

#

Tutustu käsitteeseen polymorfismi ja koukku-metodi, niin tiedät miksi abstraktit-luokat ovat erinomainen keksintö.

Edit. _Pete_: Sitä varten on rajapinnat erikseen ja kaiken kaikkiaan en lähtisi liikaa pitämään rajapintoja ja abstrakteja-luokkia vertaisinaan, sillä niillä molemmilla on kuitenkin omat käyttötarkoituksensa...

Metabolix [03.02.2011 21:34:12]

#

Toni: Enpä ole mistään koukkumetodista ennen kuullutkaan, ja netistä näytti löytyvän tuolla hakusanalla ainoastaan Arto Wiklan oppimateriaalia. Onkohan järkevää käyttää tuollaista vakiintumatonta termiä, kun voi ihan hyvin puhua abstrakteista metodeista ja tulla paremmin ymmärretyksi?

kayttaja-2499 [03.02.2011 21:50:35]

#

Kapteeni Jaakko Koukku, eli Captain James Hook.

http://www.google.fi/#hl=fi&source=hp&biw=1242&bih=647&q=hook method&aq=6&aqi=g1&aql=&oq=hook meth&fp=3d11cf176563bb1e

Triton [03.02.2011 21:59:14]

#

Metabolix: Wiklan luennolta tuo termi olikin peräisin. :D Tosin kun etsiskelin googlella termiä "hook method", niin kyllä sillä ainakin löytyi keskusteluja...

Eli niille joille jäi epäselväksi, niin tuon tuntemattoman termini (tai Wiklan termin) idea on kaikessa yksinkertaisuudessaan seuraava:

public abstract class TervehdysAbstrakti {

	public abstract String annaNimi();
	public void tervehdi() {
		System.out.println("Moi, " + this.annaNimi() + "!");
	}

}

public class Tervehdys extends TervehdysAbstrakti {

	public String annaNimi() {
		return "Pikku-Kalle";
	}

	public static void main(String[] args) {
		this.tervehdi();
	}

}

Se, kuinka hyvin "koukkumetodi" kuvaa koko hommaa on oma juttunsa...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta