Gyakorlati alapok III.
Körtulajdonságok interfészen keresztül
Az alábbi kódcsomagban a kör néhány jellegzetes, ugyanakkor most a legfontosabbnak ítélt tulajdonságát zárjuk interfészbe, hogy azokat kötelezően ki kelljen dolgoznunk azon osztályokban, amelyekben implementálásra kerülnek (implements). Ezen tulajdonságok:
-
a Pi értéke,
-
a kör területe,
-
a vizsgálni kívánt körök száma.
A tulajdonságokat, mint legáltalánosabb megközelítéseket az interfész tartalmazza, a 2 kidolgozó osztály ezen bemeneti adatok felhasználásával, illetve a metódusfej kötelező kidolgozásával (itt körterület) egyre specifikusabb kimeneti adatokat produkálnak. A jelen esetünkben ez a körterület összegzése és átlagolása.
Egyes programozói vélekedések szerint az interfészek elnevezéseit kötelezően I betűvel kezdjük (például IKortulajdonsagok). Számos példát láttam erre, azonban az ellenkezőjére is, amely során ezt a szabályt nem vették figyelembe.
Nézzük meg a futtatható Java-kódot:
Main.java
public class
Main {
public static void main(String[] args) {
new KorTeruletOsszegzo();
System.out.println();
new KorTeruletAtlagolo();
}
}
IKortulajdonsagok.java
import
java.math.*;
public interface IKorTulajdonsagok {
double PI = Math.PI;
int korSzam = 10;
double korTerulet(int sugar, double PI);
}
KorTeruletOsszegzo.java
public class KorTeruletOsszegzo implements IKorTulajdonsagok{
KorTeruletOsszegzo(){
System.out.println(osszegzo());
};
@Override
public double korTerulet(int sugar, double PI){
return (sugar * sugar) * PI;
}
public double osszegzo(){
double korTeruletOsszeg = 0;
for(int i = 1; i <= korSzam; i++){
int sugar = i;
korTeruletOsszeg += korTerulet(sugar,
PI);
System.out.println(sugar + " egyseg
sugaru kor terulete: " + korTerulet(sugar, PI));
}
System.out.print("Korteruletek osszege: " +
korTeruletOsszeg);
return korTeruletOsszeg;
}
}
KorTeruletAtlagolo.java
public class KorTeruletAtlagolo implements IKorTulajdonsagok{
KorTeruletAtlagolo(){
System.out.println(atlagolo());
};
@Override
public double korTerulet(int sugar, double PI){
return (sugar * sugar) * PI;
}
public double atlagolo(){
double korTeruletOsszeg = 0;
for(int i = 1; i <= korSzam; i++){
int sugar = i;
korTeruletOsszeg += korTerulet(sugar,
PI);
System.out.println(sugar + " egyseg
sugaru kor terulete: " + korTerulet(sugar, PI));
}
System.out.print("Korteruletek atlaga: " + korTeruletOsszeg /
korSzam);
return korTeruletOsszeg / korSzam;
}
}
Végeredmény:
1 egyseg sugaru kor terulete: 3.141592653589793
2 egyseg sugaru kor terulete: 12.566370614359172
3 egyseg sugaru kor terulete: 28.274333882308138
4 egyseg sugaru kor terulete: 50.26548245743669
5 egyseg sugaru kor terulete: 78.53981633974483
6 egyseg sugaru kor terulete: 113.09733552923255
7 egyseg sugaru kor terulete: 153.93804002589985
8 egyseg sugaru kor terulete: 201.06192982974676
9 egyseg sugaru kor terulete: 254.46900494077323
10 egyseg sugaru kor terulete: 314.1592653589793
Korteruletek osszege: 1209.51317163207051209.5131716320705
1 egyseg sugaru kor terulete: 3.141592653589793
2 egyseg sugaru kor terulete: 12.566370614359172
3 egyseg sugaru kor terulete: 28.274333882308138
4 egyseg sugaru kor terulete: 50.26548245743669
5 egyseg sugaru kor terulete: 78.53981633974483
6 egyseg sugaru kor terulete: 113.09733552923255
7 egyseg sugaru kor terulete: 153.93804002589985
8 egyseg sugaru kor terulete: 201.06192982974676
9 egyseg sugaru kor terulete: 254.46900494077323
10 egyseg sugaru kor terulete: 314.1592653589793
Korteruletek atlaga: 120.95131716320705120.95131716320705