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
course content

Kurssisisältö

Java OOP

Java OOP

1. Kuinka Työskennellä IDE:n Kanssa?
2. OOP
3. Rajapinta

book
OOP-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 monia erilaisia luokkia. Person-luokalla on erilaisia kenttiä ja metodeja, jotka ovat yhteisiä kaikille luokille. Kun meillä on luokka nimeltä BasketballPlayer,, height-ominaisuudesta tulee olennaisen tärkeä, kun taas luokassa Driver height on epäolennainen eikä merkityksellinen. Tässä kohtaa abstraktio astuu kuvaan. Periytymä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-nimistä asiaa; on sedaneita, kuorma-autoja, traktoreita. Siksi tukeudumme abstraktioon nimeltä Car. Yksinkertaistettuna: Car on pohja, jonka perusteella luomme tiettyjä autoluokkia.

Kiinnitä huomiota syntaksiin:

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

Abstraktilla metodilla ei ole runkoa; tämä on sen pääominaisuus. Abstraktin luokan aliluokat ylikirjoittavat 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. Auto-esimerkissä 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 pohjan perusteella.

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 abstraktin luokan 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 ei-abstraktin);

  6. Abstraktin luokan tulisi edustaa perivien luokkien yhteisiä ominaisuuksia ja käyttäytymistä. 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 kuvakaappauksessa oleva koodi, kirjoitettu 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(); }

Tarkastellaanpa yllä olevaa sisältöä yksityiskohtaisemmin:

  • Ensimmäinen dia: Luodaan aliluokka Truck, joka perii abstraktin luokanCar. IDE kehottaa toteuttamaan vaaditut metodit;

  • Toinen dia: Ylikirjoitetaan tarvittavat metodit. Esimerkiksi määritellään, että Truck on lähtenyt liikkeelle ja sitten pysähtynyt;

  • Kolmas dia: Luodaan olio main-metodissa. Kiinnitä huomiota käytettyyn syntaksiin: Car name = new Truck();. Olion luominen aloitetaan abstraktiosta ja päätetään toteutukseen. Tätä kutsutaan koostamiseksi. Tämän jälkeen kentille asetetaan tarvittavat arvot ja kutsutaan 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. Mutta älä luule olevasi yksin tämän kanssa. Abstraktio on käsite, joka on aluksi vaikea 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

course content

Kurssisisältö

Java OOP

Java OOP

1. Kuinka Työskennellä IDE:n Kanssa?
2. OOP
3. Rajapinta

book
OOP-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 monia erilaisia luokkia. Person-luokalla on erilaisia kenttiä ja metodeja, jotka ovat yhteisiä kaikille luokille. Kun meillä on luokka nimeltä BasketballPlayer,, height-ominaisuudesta tulee olennaisen tärkeä, kun taas luokassa Driver height on epäolennainen eikä merkityksellinen. Tässä kohtaa abstraktio astuu kuvaan. Periytymä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-nimistä asiaa; on sedaneita, kuorma-autoja, traktoreita. Siksi tukeudumme abstraktioon nimeltä Car. Yksinkertaistettuna: Car on pohja, jonka perusteella luomme tiettyjä autoluokkia.

Kiinnitä huomiota syntaksiin:

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

Abstraktilla metodilla ei ole runkoa; tämä on sen pääominaisuus. Abstraktin luokan aliluokat ylikirjoittavat 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. Auto-esimerkissä 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 pohjan perusteella.

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 abstraktin luokan 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 ei-abstraktin);

  6. Abstraktin luokan tulisi edustaa perivien luokkien yhteisiä ominaisuuksia ja käyttäytymistä. 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 kuvakaappauksessa oleva koodi, kirjoitettu 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(); }

Tarkastellaanpa yllä olevaa sisältöä yksityiskohtaisemmin:

  • Ensimmäinen dia: Luodaan aliluokka Truck, joka perii abstraktin luokanCar. IDE kehottaa toteuttamaan vaaditut metodit;

  • Toinen dia: Ylikirjoitetaan tarvittavat metodit. Esimerkiksi määritellään, että Truck on lähtenyt liikkeelle ja sitten pysähtynyt;

  • Kolmas dia: Luodaan olio main-metodissa. Kiinnitä huomiota käytettyyn syntaksiin: Car name = new Truck();. Olion luominen aloitetaan abstraktiosta ja päätetään toteutukseen. Tätä kutsutaan koostamiseksi. Tämän jälkeen kentille asetetaan tarvittavat arvot ja kutsutaan 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. Mutta älä luule olevasi yksin tämän kanssa. Abstraktio on käsite, joka on aluksi vaikea 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