Created
May 27, 2018 23:04
-
-
Save mhazim2/6d05c851829f7e126e9abd0b27ef9e5c to your computer and use it in GitHub Desktop.
50. OOP15 : Pewarisan dalam JAVA
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Pewarisan.java | |
// Menggunakan class Pair yang sudah dibuat sebelumnya | |
////////////////////////////////////////////////////// | |
/// !!! inputan jangan di abaikan | |
import java.io.*; | |
abstract class Poligon { // Abstract class adalah kelas yang terletak pada posisi tertinggi pada hierarki kelas. Kelas ini digunakan sebagai basis bagi penurunan kelas lainnya, sehingga abstract class tidak dapat diinstansiasi secara langsung menjadi object. Suatu abstract class bisa mengandung method kongkrit dan/atau method abstract. Baca: https://7seasons.wordpress.com/tag/abstract-class-java/ | |
protected double[] x; // atribut array double x diberi Access Modifiers protected agar atribut tersebut bisa diturunkan/diwariskan kekelas pewarisnya. Baca: http://januar-ikmal.blogspot.co.id/2012/11/public-private-dan-protected-pada-java.html | |
protected double[] y; // atribut array double y diberi Access Modifiers protected agar atribut tersebut bisa diturunkan/diwariskan kekelas pewarisnya. Baca: http://januar-ikmal.blogspot.co.id/2012/11/public-private-dan-protected-pada-java.html | |
protected int edge; // atribut edge sebagai nilai dari banyaknya sisi poligon | |
public Poligon(double[] x, double[] y, int edge) { // Constructor dari Poligon, constructor adalah method yang pertama kali dijalankan pada saat sebuah objek pertama kali diciptakan | |
this.x = x; | |
this.y = y; | |
this.edge = edge; | |
} | |
public void setX(double[] x) { // Setter dari atribut x, setter adalah sebuah method yang digunakan untuk memberikan nilai pada suatu attirubte | |
this.x = x; | |
} | |
public void setY(double[] y) { // Setter dari atribut y, setter adalah sebuah method yang digunakan untuk memberikan nilai pada suatu attirubte | |
this.y = y; | |
} | |
public void setEdge(int edge) { // Setter dari atribut edge, setter adalah sebuah method yang digunakan untuk memberikan nilai pada suatu attirubte | |
this.edge = edge; | |
} | |
public abstract double luas(); // Abstract method luas, Abstract method meruapakan suatu method yang tidak mempunyai badan method. Hanya berupa nama method dan parameter inputan method. Ketika suatu abstract class diturunkan/ di-extends, maka subclass harus mengimplementasikan semua method abstract pada parent/ base class. | |
} | |
class Segitiga extends Poligon { // Class Segitiga yang meng-extends class Poligon | |
public Segitiga(double[] x, double[] y, int edge) { // Constructor dari Poligon, constructor adalah method yang pertama kali dijalankan pada saat sebuah objek pertama kali diciptakan | |
super(x, y, edge); // Mengakses constructor superclass oleh subclassc, dengan keyword super, subclass dapat memanggil constructor yang ada pada superclass. | |
} | |
@Override | |
public double luas() { // Method luas yang meng-override method dari superclassnya class poligon | |
// Rumus Luas Poligon Segitiga Tak Beraturan | |
Double sumOfFirstProduct = x[0]*y[1] + x[1]*y[2] + x[2]*y[0]; | |
Double sumOfSecondProduct = y[0]*x[1] + y[1]*x[2] + y[2]*x[0]; | |
return Math.abs(sumOfSecondProduct - sumOfFirstProduct)/2.0; | |
} | |
} | |
class Segiempat extends Poligon { | |
public Segiempat(double[] x, double[] y, int edge) { // Constructor dari Poligon, constructor adalah method yang pertama kali dijalankan pada saat sebuah objek pertama kali diciptakan | |
super(x, y, edge); // Mengakses constructor superclass oleh subclassc, dengan keyword super, subclass dapat memanggil constructor yang ada pada superclass. | |
} | |
@Override | |
public double luas() { // Method luas yang meng-override method dari superclassnya class poligon | |
// Rumus Luas Poligon Segiempat Tak Beraturan | |
Double sumOfFirstProduct = x[0]*y[1] + x[1]*y[2] + x[2]*y[3] + x[3]*y[0]; | |
Double sumOfSecondProduct = y[0]*x[1] + y[1]*x[2] + y[2]*x[3] + y[3]*x[0]; | |
return Math.abs(sumOfSecondProduct - sumOfFirstProduct)/2.0; | |
} | |
} | |
public class Pewarisan{ // class utama | |
public static void main(String[] args){ // fungsi main di java | |
BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in)); // Membuat objek dataIn dari class BufferedReader untuk membaca inputan dari pengguna | |
String inp = ""; | |
String delim = "[ ]+"; // string untuk pemisah | |
String[] temp; | |
Segitiga[] segitiga = new Segitiga[100]; // membuat array dari objek segitiga | |
Segiempat[] segiempat = new Segiempat[100]; // membuat array dari objek segiempat | |
try { | |
inp = dataIn.readLine(); // objek dataIn membaca inputan satu baris | |
int n = Integer.parseInt(inp); // mengkonversi string pada variable inp menjadi integer | |
Double sumLuasSegitiga = 0.0; | |
Double sumLuasSegiempat = 0.0; | |
for (int i = 0; i<n; i++){ // loop inputan selanjutnya | |
inp = dataIn.readLine(); // objek dataIn membaca inputan satu baris | |
temp = inp.split(delim); // men-split string berdasarkan spasi | |
double[] x = new double[4]; // membuat array ukuran 4 | |
double[] y = new double[4]; // membuat array ukuran 4 | |
x[0] = Double.parseDouble(temp[0]); // mengkonversi string dari variable temp index ke-0 ke double | |
y[0] = Double.parseDouble(temp[1]); // mengkonversi string dari variable temp index ke-1 ke double | |
x[1] = Double.parseDouble(temp[2]); // mengkonversi string dari variable temp index ke-2 ke double | |
y[1] = Double.parseDouble(temp[3]); // mengkonversi string dari variable temp index ke-3 ke double | |
x[2] = Double.parseDouble(temp[4]); // mengkonversi string dari variable temp index ke-4 ke double | |
y[2] = Double.parseDouble(temp[5]); // mengkonversi string dari variable temp index ke-5 ke double | |
segitiga[i] = new Segitiga(x, y, 3); // membuat objek segitiga dari class Segitiga dan memasukkan variable ke parameter untuk diinisiasi | |
sumLuasSegitiga = sumLuasSegitiga + segitiga[i].luas(); | |
} | |
inp = dataIn.readLine(); // objek dataIn membaca inputan satu baris | |
int m = Integer.parseInt(inp); // mengkonversi string pada variable inp menjadi integer | |
for (int i = 0; i<m; i++){ // loop inputan selanjutnya | |
inp = dataIn.readLine(); // objek dataIn membaca inputan satu baris | |
temp = inp.split(delim); // men-split string berdasarkan spasi | |
double[] x = new double[4]; // membuat array ukuran 4 | |
double[] y = new double[4]; // membuat array ukuran 4 | |
x[0] = Double.parseDouble(temp[0]); // mengkonversi string dari variable temp index ke-0 ke double | |
y[0] = Double.parseDouble(temp[1]); // mengkonversi string dari variable temp index ke-0 ke double | |
x[1] = Double.parseDouble(temp[2]); // mengkonversi string dari variable temp index ke-0 ke double | |
y[1] = Double.parseDouble(temp[3]); // mengkonversi string dari variable temp index ke-0 ke double | |
x[2] = Double.parseDouble(temp[4]); // mengkonversi string dari variable temp index ke-0 ke double | |
y[2] = Double.parseDouble(temp[5]); // mengkonversi string dari variable temp index ke-0 ke double | |
x[3] = Double.parseDouble(temp[6]); // mengkonversi string dari variable temp index ke-0 ke double | |
y[3] = Double.parseDouble(temp[7]); // mengkonversi string dari variable temp index ke-0 ke double | |
segiempat[i] = new Segiempat(x, y, 4); // membuat objek segiempat dari class Segiempat dan memasukkan variable ke parameter untuk diinisiasi | |
sumLuasSegiempat = sumLuasSegiempat + segiempat[i].luas(); | |
} | |
inp = dataIn.readLine(); // objek dataIn membaca inputan satu baris | |
temp = inp.split(delim); // men-split string berdasarkan spasi | |
int p = Integer.parseInt(temp[0]); // mengkonversi string pada variable temp menjadi integer | |
Double sumRataanSegitiga = 0.0; | |
Double sumRataanSegiempat = 0.0; | |
for (int i = 0; i<p; i++){ // loop inputan selanjutnya | |
inp = dataIn.readLine(); // objek dataIn membaca inputan satu baris | |
int objek_Ke = Integer.parseInt(inp); // mengkonversi string pada variable inp menjadi integer | |
sumRataanSegitiga = sumRataanSegitiga + segitiga[objek_Ke -1].luas(); // menjumlah luas | |
sumRataanSegiempat = sumRataanSegiempat + segiempat[objek_Ke -1].luas(); // menjumlah luas | |
} | |
sumRataanSegitiga = sumRataanSegitiga/(1.0*p); // menghitung rataan | |
sumRataanSegiempat = sumRataanSegiempat/(1.0*p); // menghitung rataan | |
System.out.format("%.2f %.2f\n", sumRataanSegitiga, sumRataanSegiempat); | |
} catch(IOException e) { | |
System.out.println("Error!"); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment