Polymorfiset toiminnallisuudet
Käyttäkää monimuotoisuutta sekoitettujen muotojen tulostamiseen, lajitteluun ja yhteenvetojen laskemiseen. Pitäkää algoritmit mobiiliympäristöön sopivina, pieninä ja helposti luettavina.
Polymorfiset toiminnallisuudet on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.
Yleiskatsaus
Polymorfisten toimintojen avulla voimme käsitellä kaikkia muotoja samalla tavalla, vaikka kukin suorittaa oman laskentansa. Aiomme: (1) tulostaa sekaisin olevan listan yhdenmukaisesti, (2) lajitella area-arvon perusteella ja (3) laskea summat yhdellä silmukalla.
Perus-API:n tarkistuslista
Perus-API sisältää kaikkialla tarvittavat toiminnot:
- area() ja perimeter() — jokaisen muodon on toteutettava ne.
- Valinnainen pieni apumetodi, kuten label() tai info(), siistiä tulostusta varten.
- Kentät pidetään konkreettisissa muodoissa.
Koodi: yhdenmukainen tulostus
Yhdenmukainen tulostus: silmukka käyttää vain Shape-API:a. Kukin olio suorittaa oman toteutuksensa laskentaa varten.
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 r; Circle(double r) { this.r = (r < 0) ? 0 : r; }
double area() { return Math.PI * r * r; }
double perimeter() { return 2 * Math.PI * r; }
}
static class Rectangle extends Shape {
double w, h; Rectangle(double w, double h) { this.w = Math.max(0, w); this.h = Math.max(0, h); }
double area() { return w * h; }
double perimeter() { return 2 * (w + h); }
}
public static void main(String[] args) {
Shape[] list = { new Circle(2.0), new Rectangle(3.0, 4.0), new Circle(1.0) };
for (int i = 0; i < list.length; i = i + 1) {
Shape s = list[i];
System.out.println(s.label() + " -> " + s.info());
}
}
}
Lajittelu alan perusteella (idea)
Lajitteluidea:
- Vertailu: verrataan kahden muodon area()-arvoja.
- Pienen tietomäärän tapauksessa yksinkertainen bubble/selection-lajittelu riittää.
- Käyttäkää vain Shape-metodeja; tyyppitarkistuksia ei tehdä.
Koodi: lajittelu alan perusteella
Yksinkertainen lajittelu: tarvitaan vain area()-kutsu. Tyyppitarkistuksia ei tehdä, mikä osoittaa polymorfismin voiman.
public class Main {
static abstract class Shape { abstract double area(); abstract double perimeter(); String label(){ return getClass().getSimpleName(); } }
static class Circle extends Shape { double r; Circle(double r){ this.r = Math.max(0, r);} double area(){return Math.PI*r*r;} double perimeter(){return 2*Math.PI*r;} }
static class Rectangle extends Shape { double w,h; Rectangle(double w,double h){ this.w=Math.max(0,w); this.h=Math.max(0,h);} double area(){return w*h;} double perimeter(){return 2*(w+h);} }
// Very small bubble sort for beginners (ascending by area)
static void sortByArea(Shape[] arr){
for(int pass=0; pass<arr.length-1; pass=pass+1){
for(int i=0; i<arr.length-1; i=i+1){
if(arr[i].area() > arr[i+1].area()){
Shape tmp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tmp;
}
}
}
}
public static void main(String[] args) {
Shape[] a = { new Rectangle(3,4), new Circle(2), new Circle(1) };
sortByArea(a);
for(int i=0;i<a.length;i=i+1){
System.out.println(a[i].label() + " area=" + String.format("%.2f", a[i].area()));
}
}
}
Koodi: kokonaisala
Summan laskeminen: area()-kutsut lasketaan yhteen yhdessä silmukassa. Jokainen alkio tekee oman laskentansa, joten koodimme pysyy yksinkertaisena.
public class Main {
static abstract class Shape { abstract double area(); abstract double perimeter(); }
static class Circle extends Shape { double r; Circle(double r){ this.r=Math.max(0,r);} double area(){return Math.PI*r*r;} double perimeter(){return 2*Math.PI*r;} }
static class Rectangle extends Shape { double w,h; Rectangle(double w,double h){ this.w=Math.max(0,w); this.h=Math.max(0,h);} double area(){return w*h;} double perimeter(){return 2*(w+h);} }
static double totalArea(Shape[] arr){
double sum = 0.0;
for(int i=0;i<arr.length;i=i+1){
sum = sum + arr[i].area(); // polymorphic call
}
return sum;
}
public static void main(String[] args) {
Shape[] list = { new Circle(1), new Rectangle(2,3), new Circle(0.5) };
System.out.println("Total area = " + String.format("%.2f", totalArea(list)));
}
}
Polymorfisen tyylin tarkistus
Pikatarkistus: Mikä koodityyli hyödyntää tässä polymorfismia parhaiten?
Kertaus
Kertaus: Kirjoitimme saman API:n avulla, ja jokainen muoto tuotti oman tuloksensa. Tulostus, lajittelu ja summan laskeminen toimivat yhdenmukaisella koodilla.
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 ”Polymorfiset toiminnallisuudet” ilmainen?
Kyllä – oppitunnin ”Polymorfiset toiminnallisuudet” 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 ”Polymorfiset toiminnallisuudet”?
Käyttäkää monimuotoisuutta sekoitettujen muotojen tulostamiseen, lajitteluun ja yhteenvetojen laskemiseen. Pitäkää algoritmit mobiiliympäristöön sopivina, pieninä ja helposti luettavina. 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 3/3.
Kuinka kauan ”Polymorfiset toiminnallisuudet”-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
- Suunnittelu
- Toteutus
- Polymorfiset toiminnallisuudet