Skip to content

Instantly share code, notes, and snippets.

@mhazim2
Created May 27, 2018 23:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mhazim2/6d05c851829f7e126e9abd0b27ef9e5c to your computer and use it in GitHub Desktop.
Save mhazim2/6d05c851829f7e126e9abd0b27ef9e5c to your computer and use it in GitHub Desktop.
50. OOP15 : Pewarisan dalam JAVA
// 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