Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele OOP-Periaatteet: Abstraktio | OOP
Java OOP

bookOOP-Periaatteet: Abstraktio

Abstraktio

Olemme nyt saapuneet viimeiseen, mutta erittäin tärkeään OOP-periaatteeseen: Abstraktio. Sana "abstraktio" kuulostaa melko abstraktilta, ja lyhyesti sanottuna tämä periaate kertoo, että tulisi tukeutua abstraktioon eikä tiettyyn toteutukseen. Tämä saattaa kuulostaa monimutkaiselta nyt. Aloitetaan kuitenkin määritelmästä:

Esimerkiksi meillä on luokka nimeltä Person, josta periytyy useita erilaisia luokkia. Person sisältää erilaisia kenttiä ja metodeja, jotka ovat yhteisiä kaikille luokille. Kun meillä on luokka nimeltä BasketballPlayer, height-ominaisuudesta tulee keskeinen, kun taas luokassa Driver height on merkityksetön eikä tärkeä. Tässä kohtaa abstraktio astuu kuvaan. Perimällä abstraktiosta voimme tehdä height-parametrista valinnaisen, jolloin sitä ei tarvitse käyttää siellä, missä se ei ole tarpeellinen.

Tämä saattaa kuulostaa monimutkaiselta, joten siirrytään esimerkkiin:

Car.java

Car.java

copy
123456789
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }

Luokka Car ei edusta mitään tiettyä. Ei ole olemassa pelkästään Car; on sedaneita, kuorma-autoja, traktoreita. Siksi tukeudumme abstraktioon nimeltä Car. Yksinkertaistettuna: Car on malli, jonka pohjalta luodaan tarkempia autoluokkia.

Kiinnitä huomiota syntaksiin:

public abstract class className{ }.

Tämä on syntaksi abstraktin luokan määrittelyyn. Huomaa myös abstraktin metodin syntaksi:

public abstract returnValue methodName();

Abstraktilla metodilla ei ole runkoa; tämä on sen pääominaisuus. Abstraktin luokan aliluokat yliohittavat tämän abstraktin metodin määritelläkseen oman toteutuksensa käyttäen polymorfismia.

Tarkastellaan tarkemmin, mitä abstrakti luokka on:

Huomaa, että abstraktista luokasta ei voi luoda oliota; se johtaa virheeseen:

Abstraktit luokat vapauttavat meidät käsittelemästä pelkkiä "olioita"; ne tarjoavat meille perustilan ja käyttäytymisen. Esimerkkinä autoista: jokaisella autolla tulisi olla malli, valmistusvuosi, huippunopeus ja väri. Niiden tulisi myös pystyä liikkumaan ja pysähtymään. Siinä kaikki; tästä eteenpäin suunnittelet tietyt luokkasi tämän abstraktin mallin pohjalta.

Säännöt abstraktin luokan luomiseen

  1. Abstrakti luokka on luokka, joka sisältää vähintään yhden abstraktin metodin. Voit luoda abstraktin luokan ilman abstrakteja metodeja, mutta silloin sillä ei ole tarkoitusta. Et voi luoda abstraktista luokasta olioita;
  2. Abstrakteja metodeja voi olla vain abstraktissa luokassa; et voi luoda abstrakteja metodeja luokan ulkopuolella;
  3. Abstraktissa luokassa metodit voivat olla joko abstrakteja metodeja tai toteutettuja metodeja;
  4. Luokan, joka perii abstraktin luokan, täytyy ylikirjoittaa kaikki abstraktit metodit;
  5. Voit periä korkeintaan yhden luokan (abstraktin tai tavallisen);
  6. Abstraktin luokan tulisi kuvata perivien luokkien yhteiset ominaisuudet ja käyttäytyminen. Käsittelemme tätä tarkemmin, kun opiskelemme SOLID-periaatteita.

Tarkastellaan esimerkkiä, jonka avulla ymmärrämme, miten aliluokkien tulisi ylikirjoittaa abstraktit metodit perimällä abstrakti luokka, käyttäen esimerkkinä lapsiluokkaa Truck:

Tässä on kuvakaappauksen koodi, kirjoitettuna uudelleen paremman luettavuuden ja selkeyden vuoksi:

Car.java

Car.java

Truck.java

Truck.java

Main.java

Main.java

copy
123456789
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }

Tarkastellaan tarkemmin yllä olevaa sisältöä:

  • Ensimmäinen dia: Luomme aliluokan Truck, joka perii abstraktin luokan Car. IDE kehottaa meitä toteuttamaan vaaditut metodit;

  • Toinen dia: Ylikirjoitamme tarvittavat metodit. Esimerkiksi kirjoitamme, että Truck on lähtenyt liikkeelle ja pysähtynyt;

  • Kolmas dia: Luomme olion main-metodissa. Kiinnitä huomiota käytettyyn syntaksiin: Car name = new Truck();. Aloitamme olion luomisen abstraktion kautta ja päätämme tiettyyn toteutukseen. Tätä kutsutaan kompositioksi. Tämän jälkeen asetamme kentille tarvittavat arvot ja kutsumme ylikirjoitettuja metodeja.

Voilà! Jos ymmärsit kaiken, olet oppinut käyttämään abstraktia luokkaa!

Yhteenveto

Abstraktio on luultavasti haastavin OOP-periaate ymmärtää, ja on hyvin mahdollista, ettet ole vielä sisäistänyt kaikkea. Älä kuitenkaan ajattele olevasi yksin tämän kanssa. Abstraktio on käsite, jonka omaksuminen on aluksi vaikeaa useimmille kehittäjille. Ajan myötä opit ymmärtämään paremmin, miten työskennellä tehokkaasti abstraktion ja abstraktien luokkien kanssa. Abstraktio on keskeinen periaate, koska sen avulla ohjelmistamme tulee laajennettavia ja erittäin joustavia.

1. Mitä abstraktio tarkoittaa olio-ohjelmoinnissa?

2. Mitkä seuraavista väittämistä pitävät paikkansa abstraktiosta?

3. Mikä on abstraktin luokan tarkoitus Javassa?

4. Miten abstraktio edistää koodin ylläpidettävyyttä?

question mark

Mitä abstraktio tarkoittaa olio-ohjelmoinnissa?

Select the correct answer

question mark

Mitkä seuraavista väittämistä pitävät paikkansa abstraktiosta?

Select the correct answer

question mark

Mikä on abstraktin luokan tarkoitus Javassa?

Select the correct answer

question mark

Miten abstraktio edistää koodin ylläpidettävyyttä?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 7

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 4.76

bookOOP-Periaatteet: Abstraktio

Pyyhkäise näyttääksesi valikon

Abstraktio

Olemme nyt saapuneet viimeiseen, mutta erittäin tärkeään OOP-periaatteeseen: Abstraktio. Sana "abstraktio" kuulostaa melko abstraktilta, ja lyhyesti sanottuna tämä periaate kertoo, että tulisi tukeutua abstraktioon eikä tiettyyn toteutukseen. Tämä saattaa kuulostaa monimutkaiselta nyt. Aloitetaan kuitenkin määritelmästä:

Esimerkiksi meillä on luokka nimeltä Person, josta periytyy useita erilaisia luokkia. Person sisältää erilaisia kenttiä ja metodeja, jotka ovat yhteisiä kaikille luokille. Kun meillä on luokka nimeltä BasketballPlayer, height-ominaisuudesta tulee keskeinen, kun taas luokassa Driver height on merkityksetön eikä tärkeä. Tässä kohtaa abstraktio astuu kuvaan. Perimällä abstraktiosta voimme tehdä height-parametrista valinnaisen, jolloin sitä ei tarvitse käyttää siellä, missä se ei ole tarpeellinen.

Tämä saattaa kuulostaa monimutkaiselta, joten siirrytään esimerkkiin:

Car.java

Car.java

copy
123456789
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }

Luokka Car ei edusta mitään tiettyä. Ei ole olemassa pelkästään Car; on sedaneita, kuorma-autoja, traktoreita. Siksi tukeudumme abstraktioon nimeltä Car. Yksinkertaistettuna: Car on malli, jonka pohjalta luodaan tarkempia autoluokkia.

Kiinnitä huomiota syntaksiin:

public abstract class className{ }.

Tämä on syntaksi abstraktin luokan määrittelyyn. Huomaa myös abstraktin metodin syntaksi:

public abstract returnValue methodName();

Abstraktilla metodilla ei ole runkoa; tämä on sen pääominaisuus. Abstraktin luokan aliluokat yliohittavat tämän abstraktin metodin määritelläkseen oman toteutuksensa käyttäen polymorfismia.

Tarkastellaan tarkemmin, mitä abstrakti luokka on:

Huomaa, että abstraktista luokasta ei voi luoda oliota; se johtaa virheeseen:

Abstraktit luokat vapauttavat meidät käsittelemästä pelkkiä "olioita"; ne tarjoavat meille perustilan ja käyttäytymisen. Esimerkkinä autoista: jokaisella autolla tulisi olla malli, valmistusvuosi, huippunopeus ja väri. Niiden tulisi myös pystyä liikkumaan ja pysähtymään. Siinä kaikki; tästä eteenpäin suunnittelet tietyt luokkasi tämän abstraktin mallin pohjalta.

Säännöt abstraktin luokan luomiseen

  1. Abstrakti luokka on luokka, joka sisältää vähintään yhden abstraktin metodin. Voit luoda abstraktin luokan ilman abstrakteja metodeja, mutta silloin sillä ei ole tarkoitusta. Et voi luoda abstraktista luokasta olioita;
  2. Abstrakteja metodeja voi olla vain abstraktissa luokassa; et voi luoda abstrakteja metodeja luokan ulkopuolella;
  3. Abstraktissa luokassa metodit voivat olla joko abstrakteja metodeja tai toteutettuja metodeja;
  4. Luokan, joka perii abstraktin luokan, täytyy ylikirjoittaa kaikki abstraktit metodit;
  5. Voit periä korkeintaan yhden luokan (abstraktin tai tavallisen);
  6. Abstraktin luokan tulisi kuvata perivien luokkien yhteiset ominaisuudet ja käyttäytyminen. Käsittelemme tätä tarkemmin, kun opiskelemme SOLID-periaatteita.

Tarkastellaan esimerkkiä, jonka avulla ymmärrämme, miten aliluokkien tulisi ylikirjoittaa abstraktit metodit perimällä abstrakti luokka, käyttäen esimerkkinä lapsiluokkaa Truck:

Tässä on kuvakaappauksen koodi, kirjoitettuna uudelleen paremman luettavuuden ja selkeyden vuoksi:

Car.java

Car.java

Truck.java

Truck.java

Main.java

Main.java

copy
123456789
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }

Tarkastellaan tarkemmin yllä olevaa sisältöä:

  • Ensimmäinen dia: Luomme aliluokan Truck, joka perii abstraktin luokan Car. IDE kehottaa meitä toteuttamaan vaaditut metodit;

  • Toinen dia: Ylikirjoitamme tarvittavat metodit. Esimerkiksi kirjoitamme, että Truck on lähtenyt liikkeelle ja pysähtynyt;

  • Kolmas dia: Luomme olion main-metodissa. Kiinnitä huomiota käytettyyn syntaksiin: Car name = new Truck();. Aloitamme olion luomisen abstraktion kautta ja päätämme tiettyyn toteutukseen. Tätä kutsutaan kompositioksi. Tämän jälkeen asetamme kentille tarvittavat arvot ja kutsumme ylikirjoitettuja metodeja.

Voilà! Jos ymmärsit kaiken, olet oppinut käyttämään abstraktia luokkaa!

Yhteenveto

Abstraktio on luultavasti haastavin OOP-periaate ymmärtää, ja on hyvin mahdollista, ettet ole vielä sisäistänyt kaikkea. Älä kuitenkaan ajattele olevasi yksin tämän kanssa. Abstraktio on käsite, jonka omaksuminen on aluksi vaikeaa useimmille kehittäjille. Ajan myötä opit ymmärtämään paremmin, miten työskennellä tehokkaasti abstraktion ja abstraktien luokkien kanssa. Abstraktio on keskeinen periaate, koska sen avulla ohjelmistamme tulee laajennettavia ja erittäin joustavia.

1. Mitä abstraktio tarkoittaa olio-ohjelmoinnissa?

2. Mitkä seuraavista väittämistä pitävät paikkansa abstraktiosta?

3. Mikä on abstraktin luokan tarkoitus Javassa?

4. Miten abstraktio edistää koodin ylläpidettävyyttä?

question mark

Mitä abstraktio tarkoittaa olio-ohjelmoinnissa?

Select the correct answer

question mark

Mitkä seuraavista väittämistä pitävät paikkansa abstraktiosta?

Select the correct answer

question mark

Mikä on abstraktin luokan tarkoitus Javassa?

Select the correct answer

question mark

Miten abstraktio edistää koodin ylläpidettävyyttä?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 7
some-alt