Java Academy · Oppitunti

Toteutus

Muutakaa suunnitelma toimivaksi koodiksi: määrittäkää perusluokka, toteuttakaa konkreettiset muodot ja tulostakaa tulokset sekoitetusta listasta.

Oppitunti 2/38 vaihetta

Toteutus on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 3 oppituntia.

Kertausta suunnitelmasta

Koodaamme ensin perusluokan Shape, jossa ovat area() ja perimeter(), ja lisäämme sitten Circle- ja Rectangle-luokat. Pidetään nimet lyhyinä ja matematiikka selkeänä, ja suositaan pieniä apumetodeja tulostamista varten.

Koodi: perusluokka ja Circle

Perusluokka määrittelee API:n ja pienen info()-apumetodin. Circle toteuttaa laskennan ja toString()-metodin selkeää tulostusta varten.

public class Main {
  // Base class with a tiny print helper
  static abstract class Shape {
    abstract double area();
    abstract double perimeter();
    String info() {
      return String.format("area=%.2f, per=%.2f", area(), perimeter());
    }
  }
  static class Circle extends Shape {
    double radius;
    Circle(double r) {
      // simple guard to avoid negative sizes for beginners
      radius = (r < 0) ? 0 : r;
    }
    double area() { return Math.PI * radius * radius; }
    double perimeter() { return 2 * Math.PI * radius; }
    public String toString() { return "Circle " + info(); }
  }

  public static void main(String[] args) {
    Shape s = new Circle(2.5);
    System.out.println(s); // prints Circle area/perimeter
  }
}

Konstruktorit ja suojaukset

Konstruktorit asettavat kenttien arvot. Aloittelijoille sopivassa esimerkissä negatiiviset syötteet käsitellään rajoittamalla ne nollaan. Oikeissa sovelluksissa käytetään kelpoisuuden tarkistusta tai poikkeuksia, mutta tässä pidämme asian yksinkertaisena.

Koodi: Rectangle-luokan lisääminen

Rectangle liittyy hierarkiaan ja käyttää samaa API:a. Huomatkaa, että molemmat muodot voidaan tulostaa samalla koodilla, koska perusluokka määrittelee sopimuksen.

public class Main {
  static abstract class Shape {
    abstract double area();
    abstract double perimeter();
    String info() { return String.format("area=%.2f, per=%.2f", area(), perimeter()); }
  }
  static class Circle extends Shape {
    double radius;
    Circle(double r) { radius = (r < 0) ? 0 : r; }
    double area() { return Math.PI * radius * radius; }
    double perimeter() { return 2 * Math.PI * radius; }
    public String toString() { return "Circle " + info(); }
  }
  static class Rectangle extends Shape {
    double w, h;
    Rectangle(double w, double h) {
      this.w = (w < 0) ? 0 : w;
      this.h = (h < 0) ? 0 : h;
    }
    double area() { return w * h; }
    double perimeter() { return 2 * (w + h); }
    public String toString() { return "Rectangle " + info(); }
  }

  public static void main(String[] args) {
    Shape a = new Circle(3.0);
    Shape b = new Rectangle(4.0, 2.0);
    System.out.println(a);
    System.out.println(b);
  }
}

Listat ja tulostus

Shape-listan avulla voimme yhdistää Circle- ja Rectangle-oliot. Yksinkertainen silmukka voi tulostaa jokaisen alkion. Mobiilitulostetta varten pidetään yksi muoto rivillä ja muotoillaan luvut kahden desimaalin tarkkuuteen.

Koodi: pieni raportti

Raportti: pieni silmukka tulostaa kunkin muodon tyypin ja yhteenvedon. Polymorfismi pitää silmukan selkeänä, kun kukin muoto huolehtii omasta laskennastaan.

public class Main {
  static abstract class Shape {
    abstract double area();
    abstract double perimeter();
    String label() { return getClass().getSimpleName(); }
    String info() { return String.format("area=%.2f, per=%.2f", area(), perimeter()); }
  }
  static class Circle extends Shape {
    double radius;
    Circle(double r) { radius = (r < 0) ? 0 : r; }
    double area() { return Math.PI * radius * radius; }
    double perimeter() { return 2 * Math.PI * radius; }
  }
  static class Rectangle extends Shape {
    double w, h;
    Rectangle(double w, double h) { this.w = (w < 0) ? 0 : w; this.h = (h < 0) ? 0 : h; }
    double area() { return w * h; }
    double perimeter() { return 2 * (w + h); }
  }

  public static void main(String[] args) {
    Shape[] shapes = { new Circle(1.2), new Rectangle(2.0, 3.0), new Circle(0.5) };
    for (int i = 0; i < shapes.length; i = i + 1) {
      Shape s = shapes[i];
      System.out.println(s.label() + " -> " + s.info());
    }
  }
}

Toteutuksen tarkistus

Pikatarkistus: Mitä jokaiselta konkreettiselta muodolta tässä hierarkiassa edellytetään?

Kertaus

Kertaus: Koodasimme Shape-, Circle- ja Rectangle-luokat, lisäsimme yksinkertaiset suojaukset ja tulostimme pienen raportin sekaisin olevasta listasta. Seuraavalla oppitunnilla käsittelemme polymorfisia toimintoja, kuten lajittelua alan perusteella.

Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Toteutus” ilmainen?

Kyllä – oppitunnin ”Toteutus” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Toteutus”?

Muutakaa suunnitelma toimivaksi koodiksi: määrittäkää perusluokka, toteuttakaa konkreettiset muodot ja tulostakaa tulokset sekoitetusta listasta. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/3.

Kuinka kauan ”Toteutus”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Suunnittelu
  2. Toteutus
  3. Polymorfiset toiminnallisuudet
← Takaisin: Java Academy