You are on page 1of 13

LAPORAN PEMROGRAMAN BERORIENTASI OBYEK

PERTEMUAN KE 7










Di Susun Oleh :
Nama : Mohamad Hanafi
Nim : 095410134
Jurusan : Teknik Informatika/Strata-1









LABORATORIUM TERPADU
Sekolah Tinggi Manajemen Informatika dan Komputer
AKAKOM
Yogyakarta
2011

PERTEMUAN KE-7
KELAS ABSTRAK DAN INTERFACE


A. LISTING
Terlampir

B. PEMBAHASAN LISTING
Membuat kelas abstract dan interface tentang Ekspresi wajah :
Kelas abstract :
public abstract class EkspresiWajah {
public abstract String Gembira();
public abstract String Sedih();
public abstract String Marah();
}
//menciptakan method untuk membuat kelas abstract yang pertama yaitu dalam ekpresi wajah
dan mempunyai method Gembira, Sedih, Marah.
Pada pengertian kelas abstract sendiri adalah kelas yang diimplementasikan secara parsial dan
tujuannya untuk kenyamanan perancangan

public class Wajah extends EkspresiWajah {
private String bntkmata;
private String bntkbibir;
private String bntktelinga;
private int lbrbibir;
private String wrnmuka;
public Wajah(){
bntkmata = "";
bntkbibir = "";
bntktelinga = "";
lbrbibir = 0;
wrnmuka = "";
}
//menciptakan sebuah subkelas (kelas turunan/anak) yang diwarisi pada Ekspresi wajah yang
mempunyai atribut bentuk mata, bentuk bibir, bentuk telinga, lebar bibir, warna muka pada
kelas wajah inilah method yang dideklarasikan pada kelas EkspresiWajah tersebut akan
dibuat pada kelas Wajah ini.

public Wajah(String bntkmata, String bntkbibir, String bntktelinga, int lbrbibir, String
wrnamuka){
this.bntkmata = bntkmata;
this.bntkbibir = bntkbibir;
this.bntktelinga = bntktelinga;
this.lbrbibir = lbrbibir;
this.wrnmuka = wrnamuka;
}
//mendeklarisikan bisa dinamakan membuat konstruktor yang diinisiasikan untuk
membedakan nilai prameter dan nilai atribut yang dipanggil pada program utama

public void hasilg(){
System.out.println("Bentuk Mata = "+bntkmata);
System.out.println("Bentuk Bibir = "+bntkbibir);
System.out.println("Bentuk Telinga = "+bntktelinga);
}
//untuk menampilkan pada method Gembira

public void hasils(){
System.out.println("Warna Muka = "+wrnmuka);
System.out.println("Lebar Bibir = "+lbrbibir);
System.out.println("Bentuk Bibir = "+bntkbibir);
}
//untuk menampilkan pada method Sedih

public void hasilm(){
System.out.println("Warna Muka = "+wrnmuka);
System.out.println("Lebar Bibir = "+lbrbibir);
System.out.println("Bentuk Mata = "+bntkmata);
}
//untuk menampilkan pada method Marah

public String Gembira(){
return bntkmata + bntkbibir + bntktelinga;
}
//menciptakan method yang diikuti dengan jumlah atribut yang dimilikinya yaitu pada
ekspresi wajah yang gembira.

public String Sedih(){
return wrnmuka + lbrbibir + bntkbibir;
}
// menciptakan method yang diikuti dengan jumlah atribut yang dimilikinya yaitu pada
ekspresi wajah yang Sedih.

public String Marah(){
return wrnmuka + lbrbibir + bntkmata;
}
// menciptakan method yang diikuti dengan jumlah atribut yang dimilikinya yaitu pada
ekspresi wajah yang Marah
}
//pada kelas wajah seumpama Cuma diisi dengan method Sedih program akan mengalami
masalah disebabkan karena dalam kelas abstract terdapat method 3 oleh karena itu program
akan kurang
Pada kelas abstract Cuma bisa dideklarasikan kelas 3 saja yang berisi tentang kelas yang
berisi method, kelas yang berisi atributnya, dan kelas yang berisi output dari programnya.

public class outputWajah {
public static void main(String[] hanafi){
EkspresiWajah w1 = new Wajah("agak sipit ", "Mengecil ", "Membulat ", 2, "Merah ");
System.out.println("Ekspresi Wajah yang Gembira :");
System.out.println(" "+w1.Gembira());
System.out.println("Ekspresi Wajah yang Sedih :");
System.out.println(" "+w1.Sedih());
System.out.println("Ekspresi Wajah yang Marah :");
System.out.println(" "+w1.Marah());
}
}
//program inilah yang akan menampilkan hasil dari program yang telah dibuat 2 kelas tersebut
pada pemanggilannya yaitu nama kelas abstrack yang pertama dan dikuti dengan obyeknya
dilanjutkan pembentukan obyek baru dan diteruskan dengan nama kelas abstract yang ke dua
dan dalam kurung tersebut diisi sesuai dengan tipe data atribut yang dimilki programnya.
Hasil outputnya :


Untuk Interface :
public interface EkspresiWajahInterface {
public abstract String Gembira();
public abstract String Sedih();
public abstract String Marah();
}
//program ini hampir sama bisa dikatakan juga sama soalnya yang membedakannya adalah
interfae dan kelas abstract yaitu menciptakan method untuk membuat kelas interface yang
pertama yaitu dalam ekpresi wajah dan mempunyai method Gembira, Sedih, Marah
Pada pengertian interface adalah protipe untuk kelas dan berguna ditinjau dari perspektif
rancangan logis.

public class WajahInterface implements EkspresiWajahInterface {
private String bntkmata;
private String bntkbibir;
private String bntktelinga;
private int lbrbibir;
private String wrnmuka;
public WajahInterface(){
bntkmata = "";
bntkbibir = "";
bntktelinga = "";
lbrbibir = 0;
wrnmuka = "";
}
//Menciptakan kelas dengan nama WajahInterface yang diwarisi pada EkspresiWajahInterface
pada penurunan pewarisan bukan extends melainkan dengan implements karena interface
adalah prototype, atau template untuk kelas maka kita harus mengimplementasikan interface
agar menjadi kelas yang berguna. Mengimplementasikan interface serupa dengan menuruni
dari kelas kecuali kita perlu mengimplementasikan semua metode yang didefinisikan di
interface untuk mengimplementasikan interface kita menggunakan kata kunci implements

public WajahInterface(String bntkmata, String bntkbibir, String bntktelinga, int lbrbibir,
String wrnamuka){
this.bntkmata = bntkmata;
this.bntkbibir = bntkbibir;
this.bntktelinga = bntktelinga;
this.lbrbibir = lbrbibir;
this.wrnmuka = wrnamuka;
}
//mendeklarisikan bisa dinamakan membuat konstruktor yang diinisiasikan untuk
membedakan nilai prameter dan nilai atribut yang dipanggil pada program utama

public void hasilg(){
System.out.println("Bentuk Mata = "+bntkmata);
System.out.println("Bentuk Bibir = "+bntkbibir);
System.out.println("Bentuk Telinga = "+bntktelinga);
}
//menampilkan output agar user tidak merasa bingung mana pada Ekpresi Wajah berdasarkan
atributnya yaitu pada Gembira.

public void hasils(){
System.out.println("Warna Muka = "+wrnmuka);
System.out.println("Lebar Bibir = "+lbrbibir);
System.out.println("Bentuk Bibir = "+bntkbibir);
}
//menampilkan output agar user tidak merasa bingung mana pada Ekpresi Wajah berdasarkan
atributnya yaitu pada Sedih.

public void hasilm(){
System.out.println("Warna Muka = "+wrnmuka);
System.out.println("Lebar Bibir = "+lbrbibir);
System.out.println("Bentuk Mata = "+bntkmata);
}
//menampilkan output agar user tidak merasa bingung mana pada Ekpresi Wajah berdasarkan
atributnya yaitu pada Marah.

public String Gembira(){
return bntkmata + bntkbibir + bntktelinga;
}
public String Sedih(){
return wrnmuka + lbrbibir + bntkbibir;
}
public String Marah(){
return wrnmuka + lbrbibir + bntkmata;
}
//program inilah yang akan dipanggil di program utamannya berdasarkan nama method yang
dideklarasikan
}

public class outputWInter {
public static void main(String[] hanafi){
EkspresiWajah w1 = new Wajah(" agak sipit ", " Mengecil ", " Membulat ", 2, " Merah
");
System.out.println("Ekspresi Wajah yang Gembira :");
System.out.println(" "+w1.Gembira());
System.out.println("Ekspresi Wajah yang Sedih :");
System.out.println(" "+w1.Sedih());
System.out.println("Ekspresi Wajah yang Marah :");
System.out.println(" "+w1.Marah());
}
}
//program inilah yang akan menampilkan hasil dari program yang telah dibuat 2 kelas tersebut
pada pemanggilannya yaitu nama Interface yang pertama dan dikuti dengan obyeknya
dilanjutkan pembentukan obyek baru dan diteruskan dengan nama interface yang ke dua dan
dalam kurung tersebut diisi sesuai dengan tipe data atribut yang dimilki programnya.
Yang membedakan kelas abstract dan Interface adalah deskripsi yang ada pada kelas abtract
hampir serupa dengan interface serupa namun tidak sama. Kelas abstract adalah kelas yang
diimplementasikan secara parsial
Sedangkan interface adalah kebalikannya kelas abstract yang sepenuhnya tidak
diimplementasikan
Hasil outputnya :



C. TUGAS
Pertemuan ke-8 yang membahas tentang THREAD
Praktikum :

Praktikum ke-1 :
class PrintNameThread extends Thread {
PrintNameThread(String name){
super(name);
start();
}
public void run(){
String name = getName();
for(int i=0; i<10; i++){
System.out.print(name);
}
}
}
public class Prak1 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
PrintNameThread pnt1 = new PrintNameThread("A, ");
PrintNameThread pnt2 = new PrintNameThread("B, ");
PrintNameThread pnt3 = new PrintNameThread("C, ");
PrintNameThread pnt4 = new PrintNameThread("D, ");
}
}
Hasil outputnya :


Praktikum ke-2 :
class PrintNameThread implements Runnable {
Thread thread;
PrintNameThread(String name){
thread = new Thread(this, name);
thread.start();
}
public void run(){
String name = thread.getName();
for (int i=0; i<10; i++){
System.out.println(name);
}
}
}
public class Prak2 {
public static void main (String[] hanafi){
new PrintNameThread("A");
new PrintNameThread("B");
new PrintNameThread("C");
new PrintNameThread("D");
}
}
hasil outputnya :



Praktikum ke-3 :
class TwoStrings {
synchronized static void print(String str1, String str2){
System.out.println(str1);
try{
Thread.sleep(500);
}
catch (InterruptedException ie){
}
System.out.println(str2);
}
}
class PrintStringsThread implements Runnable {
Thread thread;
String str1, str2;

public PrintStringsThread( String str1, String str2) {
this.str1 = str1;
this.str2 = str2;
thread = new Thread(this);
thread.start();
}
public void run(){
TwoStrings.print(str1, str2);
}
}
public class Prak3 {
public static void main (String[] hanafi){
new PrintStringsThread("Hello ", "there.");
new PrintStringsThread("How are ", "you?");
new PrintStringsThread("Thank you ", "very much!");
}
}
Hasil outputnya :


Latihan :
Mengubah program thread :
class TwoStrings {
synchronized static void print(String str1, String str2){
System.out.println(str1);
try{
Thread.sleep(500);
}
catch (InterruptedException ie){
}
System.out.println(str2);
}
}
class PrintStringsThread implements Runnable {
Thread thread;
String str1, str2;

public PrintStringsThread( String str1, String str2) {
this.str1 = str1;
this.str2 = str2;
thread = new Thread(this);
thread.start();
}
public void run(){
TwoStrings.print(str1, str2);
}
}
class PrintNameThread extends Thread {
PrintNameThread(String name){
super(name);
start();
}
}
public class Latihan1 {
public static void main (String[] hanafi){
new PrintStringsThread("Hello ", "there.");
new PrintStringsThread("How are ", "you?");
new PrintStringsThread("Thank you ", "very much!");
}
}
Hasil outputnya :


Program dengan pengambilan uang di mesin ATM :
public class Latihan2 {
public Latihan2() {
}
public static void main (String[] hanafi){
Callme target = new Callme();
System.out.println("INI ADALAH SKENARIO PENGAMBILAN UANG DI MESIN
ATM");
Panggil ob1 = new Panggil(target, "Masukkan Kartu");
Panggil ob2 = new Panggil(target, "Memilih Bahasa");
Panggil ob3 = new Panggil(target, "Masukkan NO. PIN");
Panggil ob4 = new Panggil(target, "Memilih menu Transaksi Lain");
Panggil ob5 = new Panggil(target, "Masukkan Nominal Angka yang akan di ambil");

try {
ob1.t.join();
ob2.t.join();
ob3.t.join();
}
catch (InterruptedException e){
System.out.println("Interrupted.");
}
}
}
class Callme{
void call (String msg){
System.out.println(msg);
try{
Thread.sleep(1000);
}
catch (InterruptedException e) {
System.out.println("Interrupted.");
}
}
}
class Panggil implements Runnable{
String msg;
Callme target;
Thread t;
public Panggil(Callme newTarget, String s){
target = newTarget;
msg = s;
t = new Thread(this);
t.start();
}
public void run(){
synchronized(target){
target.call(msg);
}
}
}
Hasil outputnya :


Tugas :
1. Penjelasan tantang komunikasi antar Thread
Methods untuk komunikasi Interthread
public final void wait()Menyebabkan thread ini menunggu sampai thread yang lain
memanggil notify ataunotifyAll method dari object ini.
Hal ini dapat InterruptedException. public final void notify()Membangunkan thread yang
telah memanggil method wait dari object yang sama.
public final void notifyAll()Membangunkan semua thread yang telah memanggil method
wait dari object yangsama.
Programnya adalah sebagai berikut :
public class Tugas {
public Tugas() {
}
public static void main (String[] hanafi){
Callme target = new Callme();
Caller ob1 = new Caller(target, "Hello");
Caller ob2 = new Caller(target, "Belajar Thread");
Caller ob3 = new Caller(target, "Memang agak susah bener");

try {
ob1.t.join();
ob2.t.join();
ob3.t.join();
}
catch (InterruptedException e){
System.out.println("Interrupted.");
}
}
}
class Callme{
void call (String msg){
System.out.println(msg);
try{
Thread.sleep(1000);
}
catch (InterruptedException e) {
System.out.println("Interrupted.");
}
System.out.println("");
}
}
class Caller implements Runnable{
String msg;
Callme target;
Thread t;
public Caller(Callme newTarget, String s){
target = newTarget;
msg = s;
t = new Thread(this);
t.start();
}
public void run(){
synchronized(target){
target.call(msg);
}
}
}
Hasil outputnya :


2. Perbedaan sinkronasi method dan objek
Pada method :
Sampai sejauh ini, Anda telah melihat contoh-contoh dari thread yang berjalan
bersamasama
tetapi tidak bergantung satu dengan yang lainnya. Thread tersebut adalah thread
yang berjalan sendiri tanpa memperhatikan status dan aktifitas dari thread lain yang
sedang berjalan. Pada contoh tersebut, setiap thread tidak membutuhkan resource atau
method dari luar sehingga ia tidak membutuhkan komunikasi dengan thread lain.
Pada objek :
banyak thread dapat mengakses objek atau metode yang sama karena Thread bukan
proses-proses independen yang memiliki ruang memori sendiri yang berisi kopian
objek-objek data sendiri-sendiri. tidak ada jaminan Thread yang akan mengakses
objek pada satu waktu tidak bertabrakan dengan Thread lain.

D. PEMBAHASAN TUGAS
Sebelum membahas tugasnya terlabih dahulu kita ketahui tentang apa yang dimaksud dengan
Thread, Thread merupakan cara di java untuk menjalankan banyak bagian secara konkuren.
Thread merupakan lightweight process yang tidak menghabiskan banyak overhead seperti
proses normal. Thread thread tidak membuat kopian-kopian baru yang lengkap seperti
intruksi fork() di UNIX sehingga memungkinkan aktiitas berlangsung lebih cepat. Thread-
thread dapat saling mengakses data. Pengaksesan memori bersama mempermudah
komunikasi antar thread namun menibulkan permasalahan sinkronisasi pengaksesan
data.banyak thread mungkin momodivikasi variabel yang sama yang seharusnya diantisipasi
pemrogram. Kita dapat mengendalikan situasi ini dengan kata kunci synchrnized yang dapat
dugunakan pada obyek atau metode serta menjamin hanya satu thread yang dapat
mengeksekusi blok kode pada satu waktu.
Program untuk tugasnya :
public class Tugas {
public Tugas() {
}
public static void main (String[] hanafi){
Callme target = new Callme();
Caller ob1 = new Caller(target, "Hello");
Caller ob2 = new Caller(target, "Belajar Thread");
Caller ob3 = new Caller(target, "Memang agak susah bener");
//pembentukan sebuah kelas dan program utama yang menggunakan pemanggilan kelas
pada method dan diikuti dengan obyeknya.
try {
ob1.t.join();
ob2.t.join();
ob3.t.join();
}
// pada dalam exception try ada sebuah pemanggilan obyek pada program utama disini
berfungsi manangkap thread yang nantinya akan dibolak-balikkan kalimat yang telah
dituliskan pada programnya. Untuk metode join sendiri yaitu mempunyai arti misalkan
kita mempunyai aplikasi yang melakukan komputasi berat dan melakukan suatu kerja lain
sebelum komputasi. Kita dapat memecah komputasi menjadi Thread tersendiri, tapi
kapankah kita mengetahui Thread telah selesai??? Itulah arti kita menggunakan metode
join().

catch (InterruptedException e){
System.out.println("Interrupted.");
}
}
}
//Untuk exception InterruptedException yaitu menangap satu thread telah diinterupsi oleh
thread lain.

class Callme{
void call (String msg){
System.out.println(msg);
try{
Thread.sleep(1000);
}
catch (InterruptedException e) {
System.out.println("Interrupted.");
}
System.out.println("");
}
}
//metode yang menggunakan sleep yaitu menunggu selama suatu perode waktu sebelum
berlanjut dan program memanggil Interrupe() di therad, interrupt flag di thread terpasang
dan bergantung state Thread maka InterruptedException dilempar. Jika thread sedang
sleeping dan metode interrupe() dipanggil di thread, metode sleep() akan melempar
InterruptedException. Dalam kasus ini Thread keluar dari sleeping dan transaksi ke ready
sehingga dapat di-dispatch dan mengolah Exception.

class Caller implements Runnable{
String msg;
Callme target;
Thread t;
public Caller(Callme newTarget, String s){
target = newTarget;
msg = s;
t = new Thread(this);
t.start();
}
//program bertujuan yang hanya untuk memunculkan dan mempermainkan pada program
utamannya sehingga inputan yang dimasukkan oleh seorang programmer akan dijalankan
pada program ini dan diletakkan pada program utama.

public void run(){
synchronized(target){
target.call(msg);
}
}
}
//kata kunci synchronized untuk mengunci objek saat mengeksekusi suat blok kode. Tidak
ada Thread lain yang dapat mengubah obyek yang dispesifikasikan selama blok kode
dieksekusi.

You might also like