Anda di halaman 1dari 39

UJIAN AKHIR SEMESTER

PEMROGRAMAN BEORIENTASI OBJEK

NAMA : KHARISMA WIDYA MUTIARA


ALAMSYAH
NIM : 203030503078
KELAS :B

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS PALANGKARAYA
2021
BAB I
PENDAHULUAN

1.1. Class, Objects, dan Methods


A. Class
Class merupakan suatu “Blueprint” atau “Cetakan” untuk
menciptakan suatu instance dari object. Class juga merupakan grup
suatu object dengan kemiripan attributes/properties, behavior dan relasi
ke object lain. Contoh :Class Person, Vehicle, Tree, Fruit dan lainnya.
Class dapat berisi salah satu jenis variabel berikut.
a. Variabel local
Variabel local merupakan variabel yang didefinisikan
didalam method konstruktor atau blok disebut variabel lokal,
variabel akan dideklarisasikan dalam method dan variabel akan
dihancurkan ketika method telah selesai.
b. Variabel Instance
Variabel Instance merupakan variabel dalam class tetapi
diluar method apapun, variabel ini dipakai ketika class dimuat.
Variabel instance dapat diakses dari dalam method, konstruktor
atau class tertentu.
c. Variabel Class
Variabel class merupakan variabel dideklarasikan dalam
class, diluar method apapun, dengan kata kunci static.
B. Objects
Object adalah instance dari class secara umum merepresentasikan
(template) sebuah object, sebuah instance adalah representasi nyata dari
class itu sendiri. Contoh : Dari Class Fruit kita dapat membuat object
Mangga, Pisang, Apel, dan lainnya.
C. Methods
Method pada bahasa pemrograman Java adalah kumpulan baris
kode yang dikelompokkan untuk menjalankan tugas tertentu. Sebuah
method dapat mengembalikan nilai tertentu (memiliki return value),
bisa juga tidak (void). Method dapat menerima argumen sebagai nilai
masukan yang akan diproses di dalam method bersangkutan.
Method dapat kita gunakan (panggil) berulang-ulang dari mana saja
dalam program kita. Dengan membuat method, kita tidak perlu lagi
menulis kode program yang melakukan hal sama berkali-kali. Tidak
kalah penting, penggunaan method juga membuat organisasi dan
struktur program kita menjadi lebih baik.

1.2. Parameter, Overriding dan Overloading Methods


A. Parameter
Parameter adalah Data yang dapat ditambahkan dari luar Method,
contoh : ketika kita membuat sebuah Method untuk mengubah nama
pada kelas Orang, Oleh karena itu kita kita membutuhkan sebuah
Parameter baru untuk menggantikan nama tersebut.
B. Overriding dan Overloading
Overloading adalah diperbolehkannya dalam sebuah class memiliki
lebih dari satu nama function/method yang sama tetapi memiliki
parameter/argument yang berbeda.
Sedangkan Overriding adalah kemampuan dari subclass untuk
memodifikasi method dari superclass-nya, yaitu dengan cara menumpuk
(mendefinisikan kembali) method superclass-nya.

Gambar 1.1 Perbedaan Overriding dan Overloading


1.3. Nested Class
Pada pemograman java kita dapat membuat kelas didalam kelas. Kelas
seperti ini disebut nested class (kelas bersarang). Tujuan dari membuat
nested class adalah ketika kita membutuhkan untuk membuat beberapa
kelas yang saling berhubungan, dimana kelas tidak bisa dibuat tanpa kelas
lain.

1.4. Inheritance
Inheritance merupakan proses pewarisan data dan method dari suatu
class yang telah ada kepada suatu class baru. Class yang mewariskan disebut
dengan superclass / parent class / baseclass, sedangkan class yang
mewarisi (class yang baru) disebut dengan subclass / child class /derived
class.
Subclass tidak dapat mewarisi anggota private dari superclass-nya.
Dengan inheritance, class yang baru (subclass) akan mirip dengan class
yang lama (superclass) namun memiliki karakteristik yang baru.
Dalam Java, subclass hanya bisa memiliki satu superclass (single
inheritance) sedangkan superclass bisa memiliki satu subclass atau lebih.
Untuk menerapkan inheritance, gunakan statement “extends”.
Keyword “super” digunakan oleh subclass untuk memanggil
constructor, atribut dan method yang ada pada superclass-nya.
Contoh untuk memanggil constructor milik superclass-nya :
super()
super(parameter)
Contoh untuk memanggil atribut dan method milik superclass-nya :
super.namaAtribut
super.namaMethod(parameter)

1.5. Polimorfisme
Polimorfisme terbagi menjadi dua suku kata yaitu, Poly yang berarti
banyak dan Morfisme yang berarti bentuk. Dalam ilmu sains, Polimorfisme
(polymorphism) adalah sebuah prinsip dalam biologi di mana organisme
atau spesies memiliki banyak bentuk serta tahapan (stages). Prinsip tersebut
diterapkan juga pada bahasa Java
Polimorfisme dalam OOP merupakan sebuah konsep OOP di mana
class memiliki banyak “bentuk” method yang berbeda, meskipun namanya
sama. Maksud dari “bentuk” adalah isinya yang berbeda, namun tipe data
dan parameternya berbeda.
Polimorfisme juga dapat diartikan sebagai teknik programming yang
mengarahkan kamu untuk memprogram secara general daripada secara
spesifik. Contohnya kita memiliki tiga class yang berbeda yaitu: “Kelinci”,
“Kucing”, dan “Sapi”. Di mana ketiga class tersebut merupakan turunan
dari class “Hewan”. Polimorfisme pada Java memiliki 2 macam yaitu
diantaranya:
a. Static Polymorphism (Polimorfisme statis).
b. Dynamic Polymorphism (Polimorfisme dinamis).
Perbedaan keduanya terletak pada cara membuat polimorfisme.
Polimorfisme statis menggunakan method overloading, sedangkan
polimorfisme dinamis menggunakan method overriding.
BAB II
PEMBAHASAN

2.1. Pembahasan Practice Lesson 7-1: Classes, Objects, and Methods


2.1.1. Tugas 1
Pada tugas 1 ini diminta untuk membuat sebuah program dengan
segmen garis untuk tepinya. Lalu buat setidaknya 2 konstruktor dan
pengambil serta mode penyetel. Untuk tampilan kode program dapat
diihat dibawah ini.
package UAS;

public class Shape {


int numSides;
boolean regular;

Shape() {
numSides = 3;
regular=true;
}

Shape(int n, boolean regular) {


numSides = n;
this .regular = regular;
}

public boolean isRegular() {


return regular;
}
public int getSides() {
return numSides;
}
public void setSides(int s) {
numSides = s;
}
public void setRegular(boolean regular) {
this.regular = regular;
}
}
2.1.2. Tugas 2
Pada tugas 2 ini diminta untuk mengidentifikasikan bagian
penting dari kelas java pada kode program yang telah diberikan, lalu
letakkan tanda bintang disamping semua variabel instan. Tempatkan
sebuah kotak pada setiap konstruktor. Kemudian lingkari method
selain method yang ada pada konstruktor. Kemudian beri segitiga
disekitar parameter. Dan garis bawahi return pada method.

2.1.3. Tugas 3
Pada tugas 3 ini diminta untuk menuliskan sebuah kode untuk
membuat 2 contoh template class hewan yang tercantum dalam
masalah pada tugas 2. Pastikan untuk menggunakan kedua
konstruktor yang disediakan. Untuk kode program tersebut dapat
dilihat dibawah ini.
Animal a1 = new Animal();
Animal a2 = new Animal (50,21,4);
System.out.println("Animal #1 has a speed of" +
a1.getSpeed() + "Animal #2 has a speed of" +
a2.getSpeed());

2.1.4. Tugas 4
Pada tugas 4 ini diminta untuk membuat sebuah class siswa
dengan memiliki variabel nama, kredit, nilai rata-rata (IPK) dan poin
kualitas. Lalu membuat konstruktor dengan method yang telah
diberikan pada soal. Untuk kode program dapat dilihat dibawah ini.
package UAS;

public class Student {


String name;
int credits,qualityPoints;
double gpa;
Student(String name,int credits, int
qualityPoints) {
this.name = name;
this.credits = credits;
this.qualityPoints = qualityPoints;
gpa =
(double)qualityPoints/(double)credits;
}

public double getGPA() {


return gpa;
}
public addCredits(int credits, int
qualityPoints) {
this.credits += credits;
this.qualityPoints += qualityPoints;
gpa =
(double)qualityPoints/(double)credits;
}
}

2.1.5. Tugas 5
Pada tugas 5 ini diminta untuk membuat tiga instance Student
Class dari tabel di bawah ini dengan menggunakan class pada
soal 4:
Name Credits Quality Points
Mary Jones 14 46
John Stiner 60 173
Ari Samala 31 69
Dan dibawah ini untuk kode program sesuai dengan perintah
pada soal.
Student mary = new Student("Mary Jones",14,16);
Student john = new Student("John
Stiner",60,173);
Student ari = new Student("Ari Samala",31,69);

2.1.6. Tugas 6
Pada tugas 6 ini diminta untuk menggunakan variable instance
pada soal 5 untuk menambahkan 13 kredit dan 52 poin kualitas
untuk student yang bernama Ari Samala. Untuk kode program dapat
dilihat dibawah ini.
ari.addCredits(13,52);

2.1.7. Tugas 7
Pada tugas 7 ini diminta untuk menggunakan Card class pada
slide dan test program tersebut untuk memastikan program berjalan
dengan baik. Dan tambahkan kartu acak yang kedua.
package UAS;

public class Card {


String suit,name;
int points;
Card(int n1, int n2) {
suit = getSuit(n1);
name = getName(n2);
points = getPoints(name);
}

public String toString() {


return "The " + name + " of " +
suit;
}
public String getName(int i) {
if(i == 1) return "Ace";
if(i == 2) return "Two";
if(i == 3) return "Three";
if(i == 4) return "Four";
if(i == 5) return "Five";
if(i == 6) return "Six";
if(i == 7) return "Seven";
if(i == 8) return "Eight";
if(i == 9) return "Nine";
if(i == 10) return "Ten";
if(i == 11) return "Jack";
if(i == 12) return "Queen";
if(i == 13) return "King";

return "error";
}
public int getPoints(String n) {
if(n == "Jack" ||n == "Queen" ||n ==
"King"||n == "Ten")
return 10;
if(n == "Two")
return 2;
if(n == "Three")
return 3;
if(n == "Four")
return 4;
if(n == "Five")
return 5;
if(n == "Six")
return 6;
if(n == "Seven")
return 7;
if(n == "Eight")
return 8;
if(n == "Nine")
return 9;
if(n == "Ace")
return 1;
return -1;
}
public String getSuit(int i) {
if(i == 1) return "Diamonds";
if(i == 2) return "Clubs";
if(i == 3) return "Spades";
if(i == 4) return "Hearts";
return "error";
}
}
MAIN CLASS
package UAS;

public class Main {


public static void main(String args[]) {
int suitNumber =
(int)(Math.random()*4.0+1);
int faceNumber =
(int)(Math.random()*13.0+1);
Card newCard = new
Card(suitNumber,faceNumber);
System.out.println(newCard);
suitNumber =
(int)(Math.random()*4.0+1);
faceNumber =
(int)(Math.random()*13.0+1);
Card newCard2 = new
Card(suitNumber,faceNumber);
System.out.println(newCard2);
}
}

2.1.8 Tugas 8
Pada tugas 8 ini diminta untuk Menambahkan kode ke class
utama dalam tugas 7 sebagai berikut:
a. Menampilkan nilai poin total untuk 2 kartu acak.
b. Tanyakan kepada user apakah mereka menginginkan kartu lain.
Jika mereka mengatakan ya, tampilkan kartu baru dan poin untuk
ketiga kartu tersebut di “tangan” mereka.
c. Loop untuk memungkinkan user untuk terus menambahkan
kartu ke tangan sampai jumlah poin melebihi 21 atau user
memutuskan untuk tidak menambahkan kartu lagi atau jumlah
total kartu adalah 5.
Dan berikut ini merupakan kode program sesuai dengan perintah
soal.
package UAS;

import java.util.Scanner;

public class Main {


public static void main(String args[]) {
int suitNumber =
(int)(Math.random()*4.0+1;
int faceNumber =
(int)(Math.random()*13.0+1);
Card newCard = new
Card(suitNumber,faceNumber);
System.out.println(newCard);
suitNumber =
(int)(Math.random()*4.0+1);
faceNumber =
(int)(Math.random()*13.0+1);
Card newCard2 = new
Card(suitNumber,faceNumber);
System.out.println(newCard2);
int points =
newCard.points+newCard2.points;
System.out.println("The total points
= " + points); int numCards = 2;
Scanner reader = new
Scanner(System.in);
int choice = 1;
while(choice == 1 && points < 21 &&
numCards < 5) {
System.out.println("Do you want
another card?");
System.out.println("1. Yes");
System.out.println("2. No");
choice=reader.nextInt();
if(choice == 1) {
numCards++;
}
}
}
}

2.2. Pembahasan Practice Lesson 7-2: Parameters and Overloading


Methods
2.2.1. Tugas 1
Pada tugas 1 ini diminta untuk membuat segmen kode yang
menginisialisasi public class Fish. Biarkan class berisi typeOfFish
dan integer friendliness. Jangan tetapkan nilai ke variabel ini terlebih
dahulu. Ini adalah variabel instan dan akan disetel di dalam class
konstruktor. Untuk kode program dapat dilihat dibawah ini.
public class Fish {
private String typeOfFish;
private int friendliness;
Fish(String typeOfFish, int friendliness)
{
super(); //calling
this.typeOfFish = typeOfFish;
friendliness;
}
}
Dari kode program diatas class Fish didefinisikan yang berisi 2
variabel private yaitu “typeOfFish” dan “friendliness” yang dimana
typeOfFish adalah variable; jenis string dan friendliness adalah
variabel jenis integer. Dalam class ini konstruktor berparameter
ditentukan yang memasukkan variabel-variabel ini sebagai
parameter dan didalam konsturktor ini digunakan kata kunci super
dan kata kunci ini. Kedua kata kunci ini adalah variabel referensi,
tetapi kata kunci super digunakan untuk memanggil objek class dan
kata kunci ini digunakan sebagai referensi untuk menahan bedan
saat ini.

2.2.2. Tugas 2
Pada tugas 2 ini diminta untuk membuat konstruktor public
dalam class Fish. Konstruktor ini seharusnya tidak ada argument.
Didalam konstruktor, setel typeOfFish ke “Unknown” dan
friendliness ke 3. Untuk kode program dapat dilihat dibawah ini.
public class Fish {
private String typeOfFish;
private int friendliness;
public Fish() {
typeOfFish = "Unknown";
friendliness = 3;
}
}
2.2.3. Tugas 3
Pada tugas 3 ini diminta untuk membuat konstruktor public lain
ddialam class Fish. Minta konstruktor ini mengambil string t dan
integer f, membiarkan typeOfFish = t dan friendliness = f. Untuk
kode program dapat dilihat dibawah ini.
public class Fish {
String typeOfFish;
int friendliness;
public Fish() {
typeOfFish = "Unknown";
friendliness = 3;
}
public Fish(String t, int f) {
typeOfFish = t;
friendliness = f;
}
}

2.2.4. Tugas 4
Pada tugas 4 ini diminta untuk menjelaskan mengapa
dimungkinkan untuk memiliki lebih dari satu konstruktor dengan
nama yang sama dan argumen yang berbeda.
Dan untuk sebuah class dapat memiliki banyak konstruktor
selama parameter yang mereka ambil tidak sama. Kita dapat
menentukan konstruktor sebanyak yang dibutuhkan. Ketika class
Java berisi banyak konstruktor, kita katakan bahwa konstruktor
kelebihan beban (tersedia dalam beberapa versi). Inilah yang
dimaksud dengan overload konstruktor, bahwa class Java berisi
banyak konstruktor. Karena itu, sepenuhnya tergantung pada
implementasi kita sendiri apakah kita ingin membuat lebih dari satu
konstruktor di class atau tidak, tetapi memilki lebih dari satu
konstruktor dapat memudakan kita dalam banyak kasus.
2.2.5. Tugas 5
Pada tugas 5 ini diminta untuk membuat method dalam class
Fish yang disebut dengan getFriendliness() yang tidak mengambil
argument dan mengembalikan tingkat keramahan ikan. Untuk kode
program tersebut dapat dilihat dibawah ini.
public class Fish {
String typeOfFish;
int friendliness;
public Fish() {
typeOfFish = "Unknown";
friendliness = 3;
}
public Fish(String t, int f) {
typeOfFish = t;
friendliness = f;
}
int getFriendliness() {
return friendliness;
}
}

2.2.6. Tugas 6
Pada tugas 6 ini diminta untuk menuliskan segmen kode yang
menginisialisasi 2 ikan baru seperti yang didefinisikan di bawah ini:
a. Ikan 1 : Nama-Amber, Jenis-AngelFish, Tingkat Keramahan-
5(sangat ramah)
b. Ikan 2 : Nama-James, Jenis-Guppy, Tingkat Keramahan-
3(netral).
Untuk kode program yang diperintahkan pada soal dapat dilihat
dibawah ini.
Fish amber = new Fish(AngelFish,5);
Fish james = new Fish(Guppy,3);

2.2.7. Tugas 7
Pada tugas 7 ini diminta untuk membuat method nicestFish yang
menggunakan 2 ikan sebagai parameter, membandingkan tingkat
keramahan 2 ikan dan mengembalikan ikan dengan keramahan lebih
tinggi. Untuk kode program dapat dilihat dibawah ini.
Fish nicestFish(Fish a, Fish b) {
if(a.getFriendliness() >
b.getFriendliness()) {
return a;
} else {
return b;
}
}

2.2.8 Tugas 8
Pada tugas 8 ini diminta untuk mengubah method nicestFish()
menjadi method argumen variabel yang mengambil sejumlah
variabel ikan dan mengembalikan ikan terbaik dari ikan yang
diberikan. Petunjuk:
Didalam method, buat ikan bernama temp. atur suhu sama
dengan ikan pertama yang masuk kedalam method. Gunakan loop
for untuk menelusuri semua ikan yang lolos ke metode dan jika
Anda menemukan ikan yang lebih ramah daripada suhu, atur suhu
yang sama dengan ikan itu. Setelah loop for selesai, temp harus
menjadi ikan yang paling ramah. Kembalikan suhu. Untuk kode
program dapat dilihat dibawah ini.
Fish nicestFish(Fish....a) {
Fish temp = a[0];
for(int i = 1; i < a.length; i++) {
if(temp.getFriendliness() <
a[i].getFriendliness())
temp = a [i];
}
return temp;
}

2.2.9. Tugas 9
Pada tugas 9 ini diminta untuk menguji method nicestFish()
dengan ikan yang dijelaskan pada tugas 6. Ikan yang dikembalikan
adalah ikan amber.
2.2.10. Tugas 10
Pada tugas 10 ini diminta untuk menentukan access modifier
terbaik untuk setiap situasi berikut:
a. Kelas Karyawan mencatat nama, alamat, gaji, dan nomor
telepon.
b. Metode penambahan di dalam kelas BasicMath yang juga
digunakan di kelas Aljabar.
Pembahasan :
Terdapat beberapa access modifier pada java, yaitu :
1) Default : hanya dapat diakses dalam paket yang sama.
2) Public : dapat diakses oleh semua kelas.
3) Private : hanya dapat diakses didalam kelas.
Untuk situasi a. Kelas Karyawan mencatat nama, alamat, gaji,
dan nomor telepon. Access modifier yang terbaik yaitu Protect,
protect digunakan di kelas yang saling memperluas.
Untuk situasi b. b. Metode penambahan di dalam kelas
BasicMath yang juga digunakan di kelas Aljabar. Access Modifier
yang terbaik yaitu Public, metode public ini dapat digunakan dalam
berbagai paket dan proyek dan kelas serta tidak ada informasi
penting mengenai keamanan.

2.3. Pembahasan Practice Lesson 7-3: The Static Modifier and Nested
Classes
2.3.1. Tugas 1
Pada tugas 1 ini diminta untuk membuat program dengan
petunjuk yang telah diberikan pada soal. Untuk kode programnya
dapat dilihat dibawah ini.
CLASS VEHICLE
public class Vehicle {
public static String MAKE ="Augur";
public static int numVehicles = 0;
private String chassisNo, model;
public Vehicle(){};
public Vehicle(String model) {
this.model = model;
numVehicles = numVehicles+1;
chassisNo =
"Ch"+Integer.toString(numVehicles);
System.out.println("Vehicle
manufactured");
}
public void setChassisNo(String cNo) {
this.chassisNo = cNo;
}
public void setModel(String model) {
this.model = model;
}
public String getChassisNo() {
return chassisNo;
}
public String getModel() {
return model;
}
public void ToString() {
System.out.println("The vehicle is
Manufactured by : "+ MAKE);
System.out.println("The model type
is : "+this.getModel());
System.out.println("The chassis
number is : "+this.getChassisNo());
System.out.println("Number of
vehicles manufactured: "+numVehicles);
}
}
CLASS TESTVEHICLE
public class TestVehicle {
public static void main(String args[]) {
System.out.println("Manufacturer :
"+ Vehicle.MAKE);
System.out.println("Number of
vehicles manufactured: "+Vehicle.numVehicles);
Vehicle vehicle1 = new
Vehicle("Vision");
System.out.println("Number of
vehicles manufactured:
"+vehicle1.getChassisNo());
vehicle1.ToString();
Vehicle vehicle2 = new
Vehicle("Edict");
vehicle2.ToString();
}
}
Untuk output dari program diatas dapat dilihat pada gambar
dibawah ini.

Gambar 2.1 Output Program

2.3.2. Tugas 2
Pada tugas 2 ini diminta untuk menambah kode program
sehingga menghasilkan output yang tertera pada soal. Untuk kode
programnya dapat dilihat dibawah ini.
public class Vehicle {
public static String MAKE = "Seer";
public static int numVehicles = 0;
private String chassisNo, model;
public Vehicle(){};

public Vehicle(String model) {


this.model = model;
numVehicles = numVehicles+1;
chassisNo =
"Ch"+Integer.toString(numVehicles);
System.out.println("Vehicle
manufactured");
}
public void setChassisNo(String cNo) {
this.chassisNo = cNo;
}
public void setModel(String model) {
this.model = model;
}
public String getChassisNo() {
return chassisNo;
}
public String getModel() {
return model;
}
public void ToString() {
System.out.println("The vehicle is
Manufactured by : "+ MAKE);
System.out.println("The model type
is : "+this.getModel());
System.out.println("The chassis
number is : "+this.getChassisNo());
System.out.println("Number of
vehicles manufactured : "+numVehicles);
}
}
Untuk output dari program diatas dapat dilihat pada gambar
dibawah ini.

Gambar 2.2 Output Program

2.3.3. Tugas 3
Pada tugas 3 ini diminta untuk membuat class baru mengenai
kapasitas mesin. Untuk kode program dapat dilihat dibawah ini.
public class Vehicle {
public static String MAKE = "Seer";
public static int numVehicles = 0;
private String chassisNo, model;
public Vehicle(){};

public Vehicle(String model) {


this.model = model;
numVehicles = numVehicles+1;
chassisNo =
"Ch"+Integer.toString(numVehicles);
System.out.println("Vehicle
manufactured");
}
public static class Engine {
private final static String MAKE =
"Predicter";
private final static int CAPACITY =
1600;
}
public static String getMake() {
return Engine.MAKE;
}
public static int getCapacity( ) {
return Engine.CAPACITY;
}
public void setChassisNo(String cNo) {
this.chassisNo = cNo;
}
public void setModel(String model) {
this.model = model;
}
public String getChassisNo() {
return chassisNo;
}
public String getModel() {
return model;
}
public void ToString() {
System.out.println("The vehicle is
Manufactured by : "+ MAKE);
System.out.println("The model type
is : "+this.getModel());
System.out.println("The Chassis
number is : "+this.getChassisNo());
System.out.println("The Engine make
is : "+getMake());
System.out.println("The Engine
Capacity is : "+getCapacity());
System.out.println("Number of
vehicles manufactured : "+numVehicles);
}
}
Untuk output dari program diatas dapat dilihat pada gambar
dibawah ini.

Gambar 2.3 Output Program


2.3.4. Tugas 4
Pada tugas 4 ini diminta untuk mengubah deklarasi class Engine
menjadi public static class Engine extends Vehicle{ dibaris program
yang sudah dibuat dinomor sebelumnya. Selanjutnya didalam class
yang sudah diubah, menambahkan sebuah konstruktor dengan
parameter string bernama model. Setelah itu, menambahkan
instance dari kelas objek Vehicle yang baru bernama vehicle3.
Untuk kode program tersebut dapat dilihat dibawah ini.
import vehicles.Vehicle.Engine;

public class TestVehicle {


public static void main(String args[]) {
Vehicle vehicle1 = new
Vehicle("Vision");
Vehicle vehicle2 = new
Vehicle("Edict");
vehicle2.setMake("Seer");
Vehicle.Engine vehicle3 = new
Vehicle.Engine("Fortune");
System.out.println("Vehicle number
is "+ vehicle3.getChassisNo() + " is a " +
vehicle3.getModel() + " and has an engine
capacity of " + Engine.getCAPACITY() + "cc");
}
}
2.4. Pembahasan Practice Lesson 7-4: Inheritance
2.4.1. Tugas 1
Pada tugas 1 ini diminta untuk ubah applet yang ada untuk
mengubah semua warna menjadi hitam, putih, dan abu-abu
menggunakan kode di bawah ini:
import java.awt.*;
import java.applet.*;

public class DrawShapes extends Applet {


Font font ;
Color redColor;
Color blueColor;
Color backgroundColor;

public void init () {


font = new Font("Arial",
Font.ITALIC, 18);
redColor = Color.white;
backgroundColor = Color.darkGray;
blueColor = new Color(0,0,0);
setBackground(backgroundColor);
}
public void stop() {

}
public void paint(Graphics graph) {
graph.setFont(font);
graph.drawString("Draw
Shapes",90,20);
graph.setColor(blueColor );
graph.drawRect(120, 120, 120, 120);
graph.fillRect(115, 115, 90, 90);
graph.setColor(redColor);
graph.fillArc(110,110,50,50,0,360);
graph.setColor(Color.CYAN);
graph.drawRect(50,50,50,50);
graph.fillRect(50,50,60,60);
}
}
Applet adalah salah satu jenis program yang bisa dihasilkan oleh
bahasa pemrograman Java selain program aplikasi dekstop dan
server. Applet Java harus dijalankan menggunakan web browser,
misalnya di Google Chrome dan browser lainnya. Applet Java dapat
disertakan didalam dkoumen HyperText Markup Language
(HTML) bila ingin di web browser. Dokumen HTML menggunakan
tag untuk memberikan instruksi ke web browser dan web browser
akan menerjemahkan dan memutuskan bagaimana menampilkan
atau memperlakukan konten dari dokumen HTML.

2.4.2. Tugas 2
Pada tugas 2 ini diminta untuk menggambar diagram UML
sederhana dengan kelas-kelas berikut:
a. Pohon, kayu keras, kayu lunak, birch, abu, aras, pinus,pinus
merah, dimana kayu keras dan kayu lunak adalah jenis pohon,
birch dan aras adalah jenis kayu keras dan cedar dan pinus adalah
jenis kayu lunak. Pinus merah adalah sejenis pinus.
b. A,B,C,D,E,F, dimana B dan C tipe A, D adalah tipe B, E adalah
tipe C dan F adalah tipe E.

Adapun tampilan UML seperti dibawah ini:


UML Jenis Pohon
UML ALFABET

2.4.3. Tugas 3
Pada tugas 3 ini diminta untuk membuat hirarki kelas yang
mewakili siswa di universitas. Siswa adalah tipe Orang, tetapi
Mahasiswa memiliki karakteristik yang lebih spesifik seperti
memilik nilai IPK, ID, dan disiplin studi. Membuat subclass orang
yang dipanggil siswa menggunakan kode untuk orang dan
spesifikasi yang tercantum pada soal latihan yang diberikan. Untuk
kode program dapat dilihat dibawah ini.
import java.util.Date;

public class Student extends Person {


private int studentID;
private double GPA;
private String major;
private String degreeType;
private int yearOfGrad;

public Student (String firstName, String


middleName,String lastName, Date dateOfBirth,
int studentID, double GPA, String major, String
degreeType, int yearOfGrad) {
super(firstName,
middleName,lastName, dateOfBirth);
this.studentID = studentID;
this.GPA = GPA;
this.major = major;
this.degreeType = degreeType;
this.yearOfGrad = yearOfGrad;
}
public int getStudentID() {
return studentID;
}
public double getGPA() {
return GPA;
}
public String getMajor() {
return major;
}
public String getDegreeType() {
return degreeType;
}
public int getYearOfGrad() {
return yearOfGrad;
}
public void changeMajor(String newMajor) {
major = newMajor;
}
public void calculateGPA( String[] grades)
{
double totalGradePoints = 0;
int numGrades = 0;
for(int i = 0; i < grades.length; i
++) {
if(grades[i]!=null)
{numGrades++;
if(grades[i].equals("A"))
{
totalGradePoints +=
4.00;
}
else
if(grades[i].equals("A-")) {
totalGradePoints +=
3.67;
}
else
if(grades[i].equals("B+")) {
totalGradePoints +=
3.33;
}
else
if(grades[i].equals("B")) {
totalGradePoints +=
3.00;
}
else
if(grades[i].equals("B-")) {
totalGradePoints +=
2.67;
}
else if(
grades[i].equals("C+")) {
totalGradePoints +=
2.33;
}
else
if(grades[i].equals("C")) {
totalGradePoints +=
2.00;
}
else
if(grades[i].equals("D")) {
totalGradePoints+=
1.00;
}
}
}
GPA = totalGradePoints/ numGrades;
}
}
Untuk diagram UML-nya seperti berikut ini:

2.4.4. Tugas 4
Pada tugas 4 ini diminta untuk menentukan Benar/Salah –
Subclass dapat mengakses kode ini di superclass dan memberikan
alasannya.
a. Public String aString; benar. Variabel public (yang tidak
berfungsi) dapat diakses oleh subclass.
b. Memperlihatkan Boolean aBoolean; benar. Diproteksi
membatasi viabilitas variabel kelas itu sendiri dan semua
subclassnya.
c. Int anInt; benar. Jika tidak ada pengubah akses yang
dideklarasikan, defaultnya pengaturan digunakan. Default
biasanya memungkinkan akses untuk semua class dalam paket
yang sama dengan class.
d. Private double aDouble; salah. Variabel private tidak diwarisi
oleh subclass dan tidak dapat diakses menggunakan kata kunci
super.
e. Publis String aMet() benar. Method public dapat diakses oleh
semua class, termasuk subclass.
f. Private class aNestedClass salah. Class bertingkat pribadi hanya
ada didalam lingkup class empat mereka didefinisikan dan tidak
dapat diakses oleh subclass atau class lainnya.
g. Public aClassConstructor() benar. Konstruktor publik dpaat
diakses oleh subclass menggunakan kata kunci super.

2.4.5. Tugas 5
Pada tugas 5 ini diminta untuk membuat sebuah program
berdasarkan pernyataan pada soal yang telah diberikan. Untuk kode
program tersebut dapat dilihat dibawah ini.
public class Instrument {
private boolean onSale;
private double price;
private int numInStock;

public Instrument (boolean onSale, double


price, int numInStock) {
this.onSale = onSale;
this.price = price;
this.numInStock = numInStock;
}
public double getPrice() {
if(onSale) {
return price* 0.85;
}
return price;
}
public double applyEmployeeDiscount() {
return price*0.75;
}
public void setOnSale(boolean onSale) {
this.onSale = onSale;
}
public boolean getOnSale() {
return onSale;
}
public void setPrice(double price) {
this.price = price;
}
public int getNumInStock() {
return numInStock;
}
public void setNumInStock(int numInStock)
{
this. numInStock = numInStock;
}
}
public class StringInstrument extends
Instrument {
private int numStrings;
public StringInstrument (int numStrings,
boolean onSale,double price, int numInStock) {
super(onSale, price, numInStock);
this.numStrings = numStrings;
}
public int getNumStrings() {
return numStrings;
}
public void setStrings(int numStrings) {
this. numStrings = numStrings;
}
}
public class Guitar extends StringInstrument {
private boolean isElectric;
public Guitar (boolean isElectric, double
price, boolean onSale, int numStrings, int
numInStock) {
super(numStrings, onSale, price,
numInStock);
this.isElectric = isElectric;
}
public boolean getIsElectric(){
return isElectric;
}
}
2.4.6. Tugas 6
Pada tugas 6 ini diminta untuk menggunakan kode dan diagram
UML yang diberikan dan mengisi bagian yang kosong dengan kata
kunci atau nama class yang benar. Jika kata kunci adalah hilang dari
kodenya, isikan dengan kata kunci yang sesuai. Jika class atau data
hilang dari UML, isikan dengan berna informasi. Untuk kode
program dapat dilihat dibawah ini.
public class Vehicle {
private int wheels;
public Vehicle(int wheels) {
this.wheels = wheels;
}
public int getWheels() {
return wheels;
}
}
public class Car extends Vehicle {
private int numDoors;
private boolean isElectric;
public Car (int numWheels, int numDoors,
boolean isElectric) {
super(numWheels);
this.numDoors = numDoors;
this.isElectric = isElectric;
}
public int getNumDoors() {
return numDoors;
}
public boolean getIsElectric() {
return isElectric;
}
}
public class Bicycle extends Vehicle {
private String bikeType;
public Bicycle(int numWheels, String
bikeType) {
super(numWheels);
this.bikeType = bikeType;
}
public String getBikeType() {
return bikeType;
}
}
public class Convertible extends Vehicle {
private String roofType;
public Convertible(int numWheels, int
numDoors, boolean isElectric, String roofType)
{
super(numWheels);
this.roofType = roofType;
}
public String getRoofType() {
return roofType;
}
}
Untuk diagram UML dari kasus diatas sebagai berikut :
2.4.7. Tugas 7
Pada tugas 7 ini diminta untuk membuat diagram UML dengan
Class Shape, Rectangle, Circle, Triangle, Dquare, dan object. Untuk
diagram UML-nya dapat dilihat dibawah ini.

2.4.8 Tugas 8
Pada tugas 8 ini diminta untuk membuat diagram UML dari
Class Crab, Crustacea, Manmal, Dog, Hermit, Crab, Animal, dan
Object. Untuk diagram UML-nya dapat dilihat dibawah ini.
2.5. Pembahasan Practice Lesson 7-5: Polymorphism
2.5.1. Tugas 1
Pada tugas 1 ini diminta untuk menampilkan output dari kode
program yang ada pada soal.
public class A {
void callthis() {
System.out.println("Inside Class A's
Method!");
}
}
public class B extends A{
void callthis() {
System.out.println("Inside Class B's
Method!");
}
}
public class C extends A {
void callthis() {
System.out.println("Inside Class C's
Method!");
}
}
public class DynamicDispatch {
public static void main(String args[]) {
A a = new A();
B b = new B();
C c = new C();
A ref;

ref = b;
ref.callthis();

ref = c;
ref.callthis();

ref = a;
ref.callthis();
}
}
Dan gambar berikut ini merupakan output dari program yang
tertera pada tabel diatas.
Gambar 2.4 Output Program

2.5.2. Tugas 2
Pada tugas 2 ini diminta untuk menjelaskan perbedaan antara
kelas abstrak dan antarmuka dan kapan waktu yang tepat untuk
menggunakan kelas abstrak ataupun antarmuka.
Penjelasannya yaitu, baik kelas abstrak maupun antarmuka tidak
dapat dibuat instance-nya, tetapi kelas abstrak bisa berisi metode dan
konstruktor yang di implementasikan atau di implemenstaikan
sebagian selain data. Antarmuka hanya menentukan metode mana
yang harus disertakan. Kelas abstrak dapat menentukan yang mana
metode harus diimplementasikan dalam subclass nya jika metode
dideklarasikan sebagai abstrak.
Abstrak class paling baik digunakan ketika seorang programmer
ingin menerapkan metode yang sama di beberapa subclass atau saat
bidang data perlu dimasukkan kedalam beberapa kelas, serta
mewajibkan subclass untuk memasukkan metode tertentu dengan
memasukkan metode abstrak. Dan untuk Antarmuka paling baik
digunakan ketika tidak ada data atau metode yang perlu di
implementasikan dengan kode yang ama diseluruh class. Tetapi
metode harus dimasukkan.

2.5.3. Tugas 3
Code: Always Compile, Sometimes Compile,
or Does Not Compile?
a = new B(); Always compile
d = new C(); Does not compile
b.methodA(); Always compile
e.methodA(); Always compile
c = new C(); Does not compiles
(D)c.methodC(); Sometimes compiles

2.5.4. Tugas 4
Pada tugas 4 ini diminta untuk mengganti metode toString()
untuk class dibwah ini untuk mengeluarkan hasil, cocok dengan
output yang diberikan. The toString() metode harus mencetak semua
nilai dari 1 ke nomor yang ditentukan dalam num dan kemudian
mencetak nilai akhir menggunakan menyediakan metode
getFactorial.
“Factorial: 10! =1*2*3*4*5*6*7*8*9*10 = 3628800”
int getFactorial(){
int factorial;
for(i = num; num > 0; i--){
factorial *= num;
}
return factorial;
}
public String toString() {
}
Untuk kode program dapat dilihat pada tabel dibawah ini.
public class Factorial {
static final int num=10;
public static void main(String[] args) {

System.out.println(Factorial.toString(num)
);
}
static int getFactorial(int num) {
int factorial=1;
for(int i =num; i>0; i--) {
factorial *= i;
}
return factorial;
}
public static String toString(int num) {
String kata;
kata = "Factorial: "+ num +"! =
1*2*3*4*5*6*7*8*9*10 = " +
getFactorial(Factorial.num);
return kata;
}
}
BAB III
PENUTUP

3.1. Kesimpulan
OOP dapat dianggap lebih baik dari banyak aspek, terutama ketika
mempertimbangkan waktu pengembangan dan biaya pemeliharaan. Dalam
konsep OOP, hal paling mendasar untuk diketahui adalah Class, Object, dan
Method. Ketiga hal tersebut saling berkaitan satu sama lain. Selanjutnya,
pada method itu sendiri diperlukan sebuah parameter yang dapat digunakan
untuk menentukan proses atau hasil dari method tersebut.
Tentunya agar konsep OOP menjadi sempurna, terdapat sebuah
konsep yang juga sangat penting yaitu Inheritance (Pewarisan), Modifier
dan Polimorfisme.
Inheritance digunakan untuk membuat class-class turunan yang
mempunyai fungsi lebih spesifik namun dengan dasar yang umum seperti
class induknya.
Modifier digunakan utnuk membatasi atau mengatur hak akses suatu
variabel dan method agar tidak sembarangan diakses sehingga
meminimalisir kerusakan atau kesalahan pemrosesan data.
Polimorfisme digunakan agar baris program yang dibuat efektif dan
efisien sehingga tidak boros dalam penggunaan memori dan memudahkan
programmer dalam menuliskan baris program.
DAFTAR PUSTAKA

ALZA. 2020. Method pada bahasa pemrograman Java

https://koding.alza.web.id/method-java/ (Diakses pada 07 Desember 2021)

Anonymous. 2018. Class, Method dan Parameter di Java

http://bahasa-pemrograman-java.blogspot.com/2014/03/class-di-java.html
(Diakses pada 07 Desember 2021)

dewaprogrammer. 2021. Java OOP | Nested Class

https://www.dewaprogrammer.com/2021/09/nested-class.html
(Diakses pada 07 Desember 2021)

Dicoding Intern. 2021. Pengertian Polimorfisme Dalam Pemrograman Java

https://www.dicoding.com/blog/pengertian-polimorfisme-dalam-
pemrograman-java/ (Diakses pada 07 Desember 2021)

Maulana, Reza. 2015. Class dan Object pada Pemrograman Java

https://teknorial.com/blog/class-dan-object-pada-pemrograman-java/
(Diakses pada 07 Desember 2021)

Muhardian, Ahmad. 2021. Belajar Java OOP: Memahami Inheritance dan Method
Overriding

https://www.petanikode.com/java-oop-inheritance/
(Diakses pada 07 Desember 2021)

Anda mungkin juga menyukai