Posts tagged ‘java’

Belajar JAVA – Akses Antar Kelas

Kelas merupakan salah satu topik utama jika kita belajar tentang OOP. Di dalam kelas biasanya terdapat method atau fungsi, selain itu juga terdapat variabel. Method yang berada dalam kelas tersebut dapat kita akses dari kelas yang lain. Dengan syarat saat method yang kita gunakan menggunakan public, bukan private.

Berikut merupakan salah satu contoh program untuk mengakses method yang berada pada kelas lain. Aplikasi ini terdiri dari satu kelas utama (main class) yaitu  BankAccountApp dan satu lagi kelas tambahan yaitu BankAccount.

Kelas BankAccount merupakan kelas tempat melakukan perhitungan account bank. Sedangkan kelas utama (BankAccountApp) merupakan tempat kelas untuk berinteraksi dengan user.

Berikut merupakan source code dari kelas BankAccount

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bankaccountapp;

/**
 *
 * @author eko rudiawan
 */
public class BankAccount {

private int saldo = 100000; // Variabel saldo tidak bisa diakses dari kelas lain, karena bersifat private

public int cekSaldo() { // Method ini bisa diakses dari kelas lain karena bersifat public
 return saldo;
 }

public int simpanUang(int uangTabungan) {
 saldo = saldo + uangTabungan;
 return saldo;
 }

public int ambilUang(int uang) {
 if (saldo > uang) {
 saldo = saldo - uang;
 } else {
 System.out.println("Maaf saldo anda tidak cukup");
 }
 return saldo;
 }

public void keluar() {
 System.out.println("Terima Kasih");
 System.exit(1);
 }
}

Sedangkan di bawah ini merupakan source code dari kelas BankAccountApp

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bankaccountapp;

/**
 *
 * @author eko rudiawan
 */
public class BankAccount {

private int saldo = 100000; // Variabel saldo tidak bisa diakses dari kelas lain, karena bersifat private

public int cekSaldo() { // Method ini bisa diakses dari kelas lain karena bersifat public
 return saldo;
 }

public int simpanUang(int uangTabungan) {
 saldo = saldo + uangTabungan;
 return saldo;
 }

public int ambilUang(int uang) {
 if (saldo > uang) {
 saldo = saldo - uang;
 } else {
 System.out.println("Maaf saldo anda tidak cukup");
 }
 return saldo;
 }

public void keluar() {
 System.out.println("Terima Kasih");
 System.exit(1);
 }
}

Advertisements

Aplikasi Pemesanan Restoran Dengan JAVA

Kemarin kami dapat tugas dari dosen, gampang sih soalnya cuma ngitung pesanan di restoran aja. Soalnya seperti di bawah ini :

1.Buat sistem manajemen restoran berbasis text
2.Harga semua masakan adalah Rp. 15.000
3.Sistem akan melakukan pengulangan tampilan Pilih Menu, sampai dipilih menu 5 (Hitung Total) atau menu 6 (Keluar Aplikasi))
4.Sistem menghitung uang kembalian dari total uang yang dibayarkan pelanggan
5.Sistem akan melakukan pengulangan tampilan Menu Restoran, sampai dipilih menu 6 (Keluar Aplikasi))

Menu Restoran:

1. Nasi Goreng   2. Nasi Rawon   3. Nasi Gudeg   4. Jus Jeruk   5. Hitung Total  6. Keluar Aplikasi

Pilih Menu?    1

Pilih Menu?   4

(mengulang ke tampilan Pilih Menu, sampai dipilih menu 5 (Hitung Total) atau menu 6 (Keluar Aplikasi))

Pilih Menu?   5

Pilihan menu adalah Nasi Goreng dan Jus Jeruk.

Total yang harus dibayar adalah Rp. 30.000

Uang yang dibayarkan Rp. 50.000

Uang kembalian anda Rp. 20.000

(mengulang ke tampilan Menu Restoran, sampai dipilih menu 6 (Keluar Aplikasi))

Dan jawaban kelompok kami adalah seperti di bawah ini :D

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package menurestoran;

import java.util.Scanner;

/**
 *
 * @author eko rudiawan
 */
public class MenuRestoran {

/**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
 // TODO code application logic here
 Scanner s = new Scanner(System.in);
 int pilihan = 6;
 int hargaTotal = 0;
 int uang = 0;
 String nasiGoreng = "";
 String nasiRawon = "";
 String nasiGudeg = "";
 String jusJeruk = "";
 int jumlahNasiGoreng = 0;
 int jumlahNasiRawon = 0;
 int jumlahNasiGudeg = 0;
 int jumlahJusJeruk = 0;
 boolean sudahPernahPilih = false;
 boolean sudahPilihNasiGoreng = false;
 boolean sudahPilihNasiRawon = false;
 boolean sudahPilihNasiGudeg = false;
 boolean sudahPilihJusJeruk = false;
 do {
 System.out.println("Menu Restoran");
 System.out.println("1. Nasi Goreng\t2. Nasi Rawon\t3. Nasi Gudeg\t4. Jus Jeruk\t5. Hitung Total\t6. Keluar");
 do {
 System.out.print("Pilih Menu : ");
 pilihan = s.nextInt();
 switch (pilihan) {
 case 1:
 hargaTotal += 15000;
 jumlahNasiGoreng++;
 if (sudahPernahPilih) {
 if (sudahPilihNasiGoreng) {
 if (!sudahPilihJusJeruk && !sudahPilihNasiGudeg && !sudahPilihNasiRawon) {
 nasiGoreng = jumlahNasiGoreng + " Nasi Goreng ";
 } else {
 nasiGoreng = "dan " + jumlahNasiGoreng + " Nasi Goreng ";
 }
 } else {
 nasiGoreng = "dan Nasi Goreng ";
 }
 } else {
 nasiGoreng = "Nasi Goreng ";
 }
 sudahPernahPilih = true;
 sudahPilihNasiGoreng = true;
 break;
 case 2:
 hargaTotal += 15000;
 jumlahNasiRawon++;
 if (sudahPernahPilih) {
 if (sudahPilihNasiRawon) {
 if (!sudahPilihJusJeruk && !sudahPilihNasiGudeg && !sudahPilihNasiGoreng) {
 nasiRawon = jumlahNasiRawon + " Nasi Rawon ";
 } else {
 nasiRawon = "dan " + jumlahNasiRawon + " Nasi Rawon ";
 }
 } else {
 nasiRawon = "dan Nasi Rawon ";
 }
 } else {
 nasiRawon = "Nasi Rawon ";
 }
 sudahPernahPilih = true;
 sudahPilihNasiRawon = true;
 break;
 case 3:
 hargaTotal += 15000;
 jumlahNasiGudeg++;
 if (sudahPernahPilih) {
 if (sudahPilihNasiGudeg) {
 if (!sudahPilihJusJeruk && !sudahPilihNasiRawon && !sudahPilihNasiGoreng) {
 nasiGudeg = jumlahNasiGudeg + " Nasi Gudeg ";
 } else {
 nasiGudeg = "dan " + jumlahNasiGudeg + " Nasi Gudeg ";
 }
 } else {
 nasiGudeg = "dan Nasi Gudeg ";
 }
 } else {
 nasiGudeg = "Nasi Gudeg ";
 }
 sudahPernahPilih = true;
 sudahPilihNasiGudeg = true;

break;
 case 4:
 hargaTotal += 15000;
 jumlahJusJeruk++;
 if (sudahPernahPilih) {
 if (sudahPilihJusJeruk) {
 if (!sudahPilihNasiGudeg && !sudahPilihNasiRawon && !sudahPilihNasiGoreng) {
 jusJeruk = jumlahJusJeruk + " Jus Jeruk ";
 } else {
 jusJeruk = "dan " + jumlahJusJeruk + " Jus Jeruk ";
 }
 } else {
 jusJeruk = "dan Jus Jeruk ";
 }
 } else {
 jusJeruk = "Jus Jeruk ";
 }
 sudahPernahPilih = true;
 sudahPilihJusJeruk = true;

break;
 case 5:
 System.out.println("Pesanan anda => " + nasiGoreng + nasiRawon + nasiGudeg + jusJeruk);
 System.out.println("Total Harga => " + hargaTotal);
 System.out.print("Uang yang dibayarkan : ");
 uang = s.nextInt();
 if (uang < hargaTotal) {
 System.out.println("Maaf uang anda tidak cukup");
 } else {
 System.out.println("Uang anda : " + uang);
 System.out.println("Kembalian : " + (uang - hargaTotal));
 }
 break;
 case 6:
 System.out.println("Terima Kasih");
 break;
 }
 } while (pilihan != 5 && pilihan != 6);
 } while (pilihan != 6);
 }
}

Template Game Untuk JAVA Mobile

Membuat game, inilah pengalaman baru saya setelah belajaar di SEAMOLEC. Kami diberikan sedikit pembahasan tentang cara pembuatan game pada aplikasi mobile ( handphone ). Sedikit hal yang saya ingat pada penjelasan materi pembuatan game bahwa untuk membuat game dibutuhkan sebuah logika yang tinggi. Untuk memudahkan membuat sebuah game, kami diberikan sebuah template game. Berikut source dari template dasar tersebut

import javax.microedition.lcdui.game.GameCanvas;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author user
 */
public class Game1 extends GameCanvas implements Runnable {

 private Midlet midlet;

 public Game1(Midlet m) {
 super(true);
 this.midlet = m;
 try {
 init();
 } catch (Exception ex) {
 ex.printStackTrace();
 }
 }
 private void init() throws Exception{

 }

 //fungsi untuk memulai game
 private void starGame(){
 new Thread(this).start();
 }

public void run() {

 while (true) {
 //Tuliskan program disini...!

 flushGraphics();
 try {
 Thread.sleep(20);
 } catch (InterruptedException ex) {
 ex.printStackTrace();
 }

 }
 }

}

pada method init, disitulah semua inisialisasi dilakukan, baik inisialisasi splash, sprite, dll. Kemudian dimanakah kita membuat program gamenya ? Tepatnya pada bagian blok while(true), disanalah kita menuliskan algoritma program dari game kita. Template ini nantinya akan memudahkan kita dalam pembuatan game, source code yang kita bangun juga lebih rapi.

Aplikasi Monitoring Suhu

Aplikasi monitoring suhu adalah salah satu project buatan kami. Aplikasi ini dapat memonitor kondisi suhu pada sekitar ruangan tempat kita berada. Aplikasi ini membutuhkan sebuah hardware. Hardware tersebut merupakan penggabungan arduino dengan sensor suhu LM35. Hardware ini yang nantinya akan mengirimkan data dari hasil pembacaan sensor ke PC/Laptop. Selanjutnya aplikasi pada PC akan mengolah data tersebut sehingga data dapat ditampilkan berupa besaran suhu. Selain itu, aplikasi ini juga dapat menampilkan grafik suhu terhadap waktu secara realtime.

Untuk mengakses serial port di java, kami menggunakan library RxTx. Library ini memang ditujukan untuk mengakses hardware melalui komunikasi serial. Sedangkan untuk menampilkan grafik hasil pembacaan sensor suhu, kami menggunakan library jFreeChart. Chart yang kami gunakan adalah jenis Dynamic Chart.

Skematik dari hardware dapat dilihat pada gambar berikut. Hardware hanya terdiri dari arduino board dan sensor suhu LM35

Beberapa screenshoot dari aplikasi yang kami buat dapat dilihat di bawah ini

Tampilan hardware

Tampilan hardware beserta aplikasi

Tampilan dari form aplikasi

Tampilan grafik hasil pembacaan suhu

Untuk menjalankan aplikasi ini ini, anda harus mengcopy dahulu file rxtxSerial.dll ke folder C:/Windows/System32. Filenya telah disertakan pada library RxTx.

Untuk lebih jelasnya mengenai source code dan programnya silahkan menuju blog pembuat programnya => http://blognyaeko.wordpress.com/2011/12/11/monitoring-suhu-menggunakan-arduino-dan-java/

Pengertian Deadlock & Thread

Pengertian DeadLock

  • Keadaan dimana 2 atau lebih proses saling menunggu meminta resources untuk waktu yang tidak terbatas lamanya
  • Deadlock adalah efek samping dari sinkronisasi, dimana satu variabel digunakan oleh 2 proses
  • Analoginya seperti pada kondisi jalan raya dimana terjadi kemacetan parah

 

  • Penyebab Deadlock :

 Mutual Exclusion

yaitu proses memiliki hak milik pribadi terhadap sumber daya yang sedang digunakannya. Jadi, hanya ada satu proses yang menggunakan suatu sumber daya. Proses lain yang juga ingin menggunakannya harus menunggu hingga sumber daya tersebut dilepaskan oleh proses yang telah selesai menggunakannya. Suatu proses hanya dapat menggunakan secara langsung sumber daya yang tersedia secara bebas.  

 

Hold and Wait

yaitu beberapa proses saling menunggu sambil menahan sumber daya yang dimilikinya. Suatu proses yang memiliki minimal satu buah sumber daya melakukan request lagi terhadap sumber daya. Akan tetapi, sumber daya yang dimintanya sedang dimiliki oleh proses yang lain. Pada saat yang sama, kemungkinan adanya proses lain yang juga mengalami hal serupa dengan proses pertama cukup besar terjadi. Akibatnya, proses-proses tersebut hanya bisa saling menunggu sampai sumber daya yang dimintanya dilepaskan. Sambil menunggu, sumber daya yang telah dimilikinya pun tidak akan dilepas. Semua proses itu pada akhirnya saling menunggu dan menahan sumber daya miliknya.

 

Circular Waiting

yaitu kondisi membentuk siklus yang berisi proses-proses yang saling membutuhkan. Proses pertama membutuhkan sumber daya yang dimiliki proses kedua, proses kedua membutuhkan sumber daya milik proses ketiga, dan seterusnya sampai proses ke n-1 yang membutuhkan sumber daya milik proses ke n. Terakhir, proses ke n membutuhkan sumber daya milik proses yang pertama. Yang terjadi adalah proses-proses tersebut akan selamanya menunggu.

No Preemption

yaitu sebuah sumber daya hanya dapat dilepaskan oleh proses yang memilikinya secara sukarela setelah ia selesai menggunakannya. Proses yang menginginkan sumber daya tersebut harus menunggu sampai sumber daya tersedia, tanpa bisa merebutnya dari proses yang memilikinya.

 

Strategi untuk menghadapi deadlock

  • Prevention : memastikan paling sedikit satu penyebab Deadlock tidak berlaku
  • Avoidance : sistem menolak request terhadap resource yang berpotensi deadlock, Algoritma Banker
  • Detection and Recovery : membiarkan Deadlock terjadi, lalu mendeteksinya, kemudian melakukan recovery, Algoritma Ostrich

 

  • Cara-cara yang ditempuh untuk memulihkan sistem dari deadlock adalah sebagai berikut:

Terminasi proses

Pemulihan sistem dapat dilakukan dengan cara melalukan terminasi terhadap semua proses yang terlibat dalam deadlock. Dapat pula dilakukan terminasi terhadap proses yang terlibat dalam deadlock secara satu per satu sampai ‘lingkaran setan’ atau circular wait hilang. Seperti diketahui bahwa circular wait adalah salah satu karakteristik terjadinya deadlock dan merupakan kesatuan dengan tiga karakteristik yang lain. Untuk itu, dengan menghilangkan kondisi circular wait dapat memulihkan sistem dari deadlock.

Rollback and Restart

Dalam memulihkan keadaan sistem yang deadlock, dapat dilakukan dengan cara sistem melakukan preempt terhadap sebuah proses dan kembali ke state yang aman. Pada keadaan safe state tersebut, proses masih berjalan dengan normal, sehingga sistem dapat memulai proses dari posisi aman tersebut. Untuk menentukan pada saat apa proses akan rollback, tentunya ada faktor yang menentukan. Diusahakan untuk meminimalisasi kerugian yang timbul akibat memilih suatu proses menjadi korban. Harus pula dihindari keadaan dimana proses yang sama selalu menjadi korban, sehingga proses tersebut tidak akan pernah sukses menjalankan eksekusi.

 

Pengertian Thread

Thread adalah sebuah alur kontrol dari sebuah proses. Suatu proses yang multithreaded mengandung beberapa perbedaan alur kontrol dengan ruang alamat yang sama. Keuntungan dari multithreaded meliputi peningkatan respon dari user, pembagian sumber daya proses, ekonomis, dan kemampuan untuk mengambil keuntungan dari arsitektur multiprosesor. User level thread adalah thread yang tampak oleh programmer dan tidak diketahui oleh kernel. User level thread secara tipikal dikelola oleh sebuah library thread di ruang user. Kernel level thread didukung dan dikelola oleh kernel sistem operasi. Secara umum, user level thread lebih cepat dalam pembuatan dan pengelolaan dari pada kernel thread. Ada tiga perbedaan tipe dari model yang berhubungan dengan user dan kernel thread.

  • Model many to one: memetakan beberapa user level thread hanya ke satu buah kernel thread
  • Model one to one: memetakan setiap user thread ke dalam satu kernel thread. Berakhir.
  • Model many to many: mengizinkan pengembang untuk membuat user thread sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadualkan oleh kernel dalam satu waktu.

 

 

 

Arah Pengembangan dan Masa Depan Pengguna Java

Arah Untuk Pengembangan Program Java

  • Mengembangkan  aplikasi yang berbasis server (website misalnya), teknologi ini disebut dengan J2SE (Java versi 2 Standard Edition).
  • Mengembangkan aplikasi berbasis Teks maupun Grafik (Graphical User Interface), teknologi ini disebut dengan J2EE (Java versi 2 Enterprise Edition).
  • Mengembangkan aplikasi berbasis Mobile, sehingga bisa jalan di Handphone, teknologi ini disebut dengan J2ME (Java versi 2 Micro Edition).

Masa Depan Java

Akhirnya masa depan Java sudah semakin jelas. Dengan bergabungnya James Gosling pendiri java ke perusahaan raksasa Amerika-Google. Menurut kabar yang beredar James merasa tidak cocok dengan masa depan Java yang diusung oleh Oracle. Tetapi Oracle sepertinya masih akan terus mengembangkan Java dan akan terus merangkul para developer, karena pada dasarnya layanan Oracle juga dibangun di atas Java, sehingga kelangsungan hidup Oracle tentu saja akan bergantung pada Java

Pengguna Java

Pada bulan April 2011 ini Java masih menduduki peringkat pertama untuk bahasa pemrograman yang paling populer saat ini menurut TIOBE Programming Community Index

Beberapa Engine Untuk Java

Engine sama seperti library yang memudahkan kita untuk membuat aplikasi di Java. Beberapa engine yang ada di Java adalah sebagai berikut.

Engine J2ME

1. Apime

Merupakan engine yang berfungsi untuk mendesign user interface di aplikasi java untuk mobile. User interface yang didukung antara lain skin, keyboard, dan  internacionalization.

2. BaseMovil

Merupakan engine J2ME yang berfungsi untuk membuat aplikasi database

3. jMobileCore

Merupakan engine yang berfungsi untuk mendesign user interface aplikasi. . jMobileCore mensupport pengembangan compact and rich Canvas-based GUI.

4. kUI

kUI adalah Canvas base replacement, yaitu engine yang berfungsi untuk mendesign tampilan highlevel LCDUI (LCD User Interface).

5. Mewt

Engine java yang berfungsi untuk mendesign UI berupa tabel, grafik, dll.

Engine J2SE

1.  SAP Exchange Infrastructure

SAP Exchange Infrastructure (SAP XI) berfungsi untuk mengimplementasikan cross-system processes. Dapat menghubungkan systems dari berbagai vendor (non-SAP dan SAP) dan berbagai bahasa pemograman (Java, ABAP, dll).

2. Adapter Engine

Adapter Engine digunakan untuk mengkoneksikan Integration Engine ke SAP systems (RFC adapter) dan external systems

3. TyphonRT

Berfungsi untuk membuat 2D game berbasis Quake 3. Engine ini dapat berjalan pada J2SE dan android.

4.  SNP Console

5.  A Quake 3 Class Engine

Merupakan engine yang berfungsi untuk merender game java.

Engine J2EE

1. JSP Engine

2.  Tomcat Servlet

3. Mobile Learning Engine (MLE)

4.  Cross-Browser Core enggine