Toteutus
Muutakaa suunnitelma toimivaksi koodiksi: määrittäkää perusluokka, toteuttakaa konkreettiset muodot ja tulostakaa tulokset sekoitetusta listasta.
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.
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.