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 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
123456789public 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
- 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;
- Abstrakteja metodeja voi olla vain abstraktissa luokassa; et voi luoda abstrakteja metodeja luokan ulkopuolella;
- Abstraktissa luokassa metodit voivat olla joko abstrakteja metodeja tai toteutettuja metodeja;
- Luokan, joka perii abstraktin luokan, täytyy ylikirjoittaa kaikki abstraktit metodit;
- Voit periä korkeintaan yhden luokan (abstraktin tai tavallisen);
- 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
Truck.java
Main.java
123456789public 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 luokanCar. IDE kehottaa meitä toteuttamaan vaaditut metodit; -
Toinen dia: Ylikirjoitamme tarvittavat metodit. Esimerkiksi kirjoitamme, että
Truckon 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ä?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 4.76
OOP-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
123456789public 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
- 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;
- Abstrakteja metodeja voi olla vain abstraktissa luokassa; et voi luoda abstrakteja metodeja luokan ulkopuolella;
- Abstraktissa luokassa metodit voivat olla joko abstrakteja metodeja tai toteutettuja metodeja;
- Luokan, joka perii abstraktin luokan, täytyy ylikirjoittaa kaikki abstraktit metodit;
- Voit periä korkeintaan yhden luokan (abstraktin tai tavallisen);
- 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
Truck.java
Main.java
123456789public 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 luokanCar. IDE kehottaa meitä toteuttamaan vaaditut metodit; -
Toinen dia: Ylikirjoitamme tarvittavat metodit. Esimerkiksi kirjoitamme, että
Truckon 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ä?
Kiitos palautteestasi!