Senin, 17 Desember 2018

Modul PBO BAB 8, 9, 10




BAB VIII
THREAD DAN MULTITHREADING

8.1 TUJUAN PRAKTIKUM
a.          Memahami Thread pada java
b.          Memahami penggunaan Thread

8.2    DASAR TEORI
8.2.1   Thread
1.    Thread adalah sekumpulan instruksi (proses) yang dieksekusi secara independen
2.    Multithreading adalah suatu kemampuan yang memungkinkan beberapa kumpulan instruksi (proses) dijalankan secara bersama (time slicing) dalam sebuah program.
3.    Multithreading bermanfaat untuk membuat proses yang interaktif, misalnya pada program permainan (game). Program tetap dapat menggerakan beberapa objek sambil member kesempatan pengguna melakukan respon melalui mouse atau keyboard.
8.2.2 Sinkronisasi
·      Pada beberapa kondisi, proses secara bersamaan terkadang tidak memungkinkan.
·      Contohnya adalah proses I/O stream khususnya pada proses membaca dan menulis suatu data atau file
·      Proses thread pembacaan atau penulisan data menjadi tidak benar karena seharusnya data dan file tersebut berubah-ubah (sedang dibuka dan ditulis oleh thread lain).
·      Untuk kondisi diatas perlu dilakukan sinkronisasi dengan menggunakan keyword synchronized.


8.2.3 Cara Penggunaan Synchronized
·      Sinkronisasi pada method : mendeklarasikan suatu method dengan menggunakan keyword synchronized.
·      Sinkronisasi pada objek : menambahkan blok dibawah pada pemanggilan objek Synchronized(objek){
}
8.2.4 Prioritas Thread
·      Method setPriority(int level) dapat dipanggil untuk menentukan prioritas thread
·      Nilai level bisa berupa bilangan bulat dari 1-10.
·      Prioritas normal memiliki nilai level 5
·      Tidak semua system operasi mendukung operasi ini, sehingga kadang pemanggilan method ini tidak memberikan efek apa-ap

8.3 HASIL DAN PEMBAHASAN
File Name : ThreadBeraksi1.java
//membuat bisa jga untuk mendifinisikan class
class Mobil implements Runnable{
//mendifinisikan jenis dan tipe data variable
String nama;
//untuk menafsirkan method pada class
public Mobil(String id){
nama = id;
}
//manafsirkan method pada class
public void run(){
//untuk kondisi pengulangan
for(int i=0; i<5; i++){
//digunakan Karena terdapat eksepsi
try{
//menyatakan pengulangan akan diproses dengan jeda 1 detik
Thread.currentThread().sleep(1000);
//pasangan dari try,dan akan memproses terjadinya eksepsi
}catch(InterruptedException ie){
//akan menampilkan hasil ke layar
System.out.println("Terinturipsi");
}
//mencetak nilai Thread pada layar
System.out.println("Thread:"+nama+":posisi"+i);
}
}
}
//menyatakan bahwa kelas dapat diambil alih oleh kelas lain atu menjadi kelas utama
public class ThreadBeraksi1{
//pembuatan objek
public static void main(String[]args){
Thread m1 = new Thread(new Mobil("M-1"));
Thread m2 = new Thread(new Mobil("M-2"));
m1.start();
m2.start();
}
}
Analisis:
Program diatas adalah semacam pengulangan namun ketika run keduanya ada posisi yang yang berbeda karrena itu adalah fungsi dari public void run,namun ketika di run kembali akan menghasilkan hasil yang sama seperti yang pertama Karena itu adalah fungsi try{

File Name : ThreadBeraksi2.java
class Mobil extends Thread{
public Mobil(String id){
super(id);
}
public void run(){
String nama = getName();
for(int i=0; i<5; i++){
try{
sleep(1000);
}catch(InterruptedException ie){
System.out.println("Terinterupsi");
}
System.out.println("Thread "+nama+":Posisi"+i);
}
}
}
public class ThreadBeraksi2{
public static void main(String[] args){
Mobil m1=new Mobil("M-1");
Mobil m2=new Mobil("M-2");
m1.start();
m2.start();
}
}
Analisis:
Program ini sama dengan program diatas namun ada sedikit yang ditambahkan pada sintak ini dan akan pada hasilnya pada m-1 dan m-2 posisinya akan terbalik jadi m-2 yang terlebih dahulu ditampilkan.

File Name : ThreadBeraksi3.java
class Mobil extends Thread {
   public Mobil (String id) {
     super(id);
   }
   public void run(){
     String nama = getName();
     for(int i=0; i<5; i++){
       try{
         sleep(1000);
       }catch(InterruptedException ie){
         System.out.println("Terinterupsi");
       }
       System.out.println("Thread "+nama+" : Posisi "+i);
     }
   }
}
public class ThreadBeraksi3 {
   public static void main (String[] args) {
     Mobil m1 = new Mobil ("M-1");
     Mobil m2 = new Mobil ("M-2");
     m1.start();
     m2.start();

     boolean m1Berakhir = false;
     boolean m2Berakhir = false;

     do{
        if(!m1Berakhir && !m1.isAlive()){
          m1Berakhir = true;
          System.out.println("Thread m1 berakhir");
        }
        if(!m2Berakhir && !m2.isAlive()){
          m2Berakhir = true;
          System.out.println("Thread m2 berakhir");
        }
     }while (!m1Berakhir || m2Berakhir);
  }
}
Analisis:
Program ini sama seperti diatas tapi disini ada beberapa tambahan seperti dalam sintaknya seperti if dan while yang akan mengahsilkan keluaran seperti gambar diatas dan pengubahan posisi dalam hasilnya.

File Name : ThreadBeraksi4.java
class Mobil extends Thread {
public Mobil (String id){
    super(id);
}
public void run(){
String nama=getName();
SinkronisasiKeluaran.info(nama);
}
}
class SinkronisasiKeluaran{
public static synchronized void info (String nama){
for (int i=0; i<5; i++){
try{
Thread.sleep(1000);
}catch(InterruptedException ie){
System.out.println("Terinterupsi");
}
System.out.println("Thread "+nama+":posisi"+i);}
}
}
public class ThreadBeraksi4{
public static void main(String[]args){
Mobil m1 = new Mobil("M-1");
Mobil m2 = new Mobil("M-2");
m1.start();
m2.start();
}
}

Analisis:
Pada program ini threadnya akan menampilkan nomor 0 pada run pertama dan kedu sedangkan run ketiga dank e empat  akan menampilkan nomor 1. Dan dalam posisi akan menampilkan urutan nomor dari 0-4 dan begitupun seterusnya Karena didalam program ini ada pogram pengulangan.

File Name : ThreadBeraksi5.java
class Mobil extends Thread{
public Mobil(String id){
super(id);
}
public void run(){
synchronized(this){
String nama = getName();
SinkronisasiKeluaran.info(nama);
}
}
}
class SinkronisasiKeluaran{
public static synchronized void info (String nama){
for(int i=0; i<5; i++){
try{
Thread.sleep(1000);
}catch(InterruptedException ie){
System.out.println("Terinterupsi");
}
System.out.println("Thread"+nama+":posisi"+i);}
}
}
public class ThreadBeraksi5{
public static void main(String[]args){
Mobil m1 = new Mobil("M-1");
Mobil m2 = new Mobil("M-2");
m1.start();
m2.start();
}
}
Analisis:
Program diatas sama seperti sebelumnya namun ada perbedaan Pada program ini threadnya akan menampilkan nomor 1 pada run pertama dan kedu sedangkan run ketiga dank e empat  akan menampilkan nomor 2. Dan dalam posisi akan menampilkan urutan nomor dari 0-4 dan begitupun seterusnya Karena didalam program ini ada pogram pengulangan.


BAB IX
PACKAGE & INTERFACE

9.1  TUJUAN PRAKTIKUM
a.       Memahami konsep penggunaan paket
b.      Dapat memaketkan beberapa class dalam satu paket
c.       Memahami penggunaan interface

9.2    DASAR TEORI
9.2.1    Package dan Interface
Package dalam java berarti pengelompokan beberapa class dan Interface dalam satu unit. Fitur ini menyediakan mekanisme untuk mengatur class dan interface dalam jumlah banyak dan menghinddar konflik pada penanaman.

9.3    Hasil dan Pembahasan
9.3.1   Paket
-       Package adalah koleksi dari beberapa class dan interface yang berhubungan, dan menyediakan proteksi akses dan pengelolaan name space.
-       Satu paket adalah 1 subfolder di file system.
-       Package sangat berguna untuk mengorganisir file dalam suatu paket atau library

File Name : Mobil.java
package Kendaraan;
//untuk mengorganisir file dalam satu paket atau folder
public class Mobil{
//untuk menyatakan bahwa kelas dapat diakses oleh kelas lain dan dimanapun
public void info(){
//untuk menyatakan kondisi pengulangan
System.out.println("Ini kelas mobil");
//untuk memunculkan hasil dari program
}
}


File Name : Motor.java
package Kendaraan;
//untuk mengorganisir file dalam satu paket atau folder
public class Motor{
//untuk menyatakan bahwa kelas dapat diakses oleh kelas lain dan dimanapun
public void info(){
//untuk menyatakan kondisi pengulangan
System.out.println("Ini kelas motor");
//untuk memunculkan hasil dari program
}
}


File Name : Sepeda.java
package Kendaraan;
// untuk mengorganisir file dalam satu paket atau folder
public class Sepeda{
//
public void info(){
//untuk menyatakan kondisi pengulangan
System.out.println("Ini kelas sepeda");
//untuk memunculkan hasil dari program
}
}
 Analisis:
·         Program diatas tidak akan akan tidak bisa dipanggil Karena menggunakan package yang berarti membuat folder baru yaitu kendaraan.agar bisa memanggil 3 program diatas kita harus mengganti nama filenya pada integrated terminalnya seperti gambar dibawah:


File Name : AlatTranfortasi.java
import Kendaraan.Motor;
import Kendaraan.Mobil;
import Kendaraan.Sepeda;
public class AlatTransportasi{
public static void main(String[]args){
Motor motorku=new Motor();
motorku.info();
Mobil mobilku=new Mobil();
mobilku.info();
Sepeda sepedaku=new Sepeda();
sepedaku.info();
}
}
Analisis:
·         Program dapat di panggil Karena mempunyai man classnya dan saling terhubung dengan program Mobil,Motor,dan Sepeda diatas,namun sebelum menjalankan program AlatTransportasi kita ubah kemabali nama usernya seperti sebelumnya seperti gambar diatas.

9.3.2   Interface
-       Interface berisi kumpulan nama metode tanpa implementasi aktual.
-       Interface digunakan apabila kita ingin menentukan apa yang harus dilakukan oleh suatu class tetapi tidak menentukan bagaimana cara untuk melakukannya.
-       Interface mirip dengan class, tetapi hanya memiliki deklarasi method tanpa implementasi.

File Name :PabrikBaru.java
interface Pabrik{
static final String PROVINSI ="Jawa Barat";
public void setNama(String namaBaru);
public void setAlamat(String alamatBaru);
public String getNama();
public String getAlamat();
}
class PabrikSepatu implements Pabrik{
String nama,alamat ;
public PabrikSepatu(String namaBaru,String alamatBaru){
nama=namaBaru;
alamat=alamatBaru;
}
public void setNama(String namaBaru){
nama=namaBaru;
}
public void setAlamat(String alamatBaru){
alamat=alamatBaru;
}
public String getNama(){
return nama;
}
public String getAlamat(){
return alamat;
}
public String getProvinsi(){
return PROVINSI;
}
public String toString(){
return
"Nama :"+nama+"\n"+
"Alamat :"+alamat+"\n"+
"Provinsi :"+PROVINSI+"\n";
}
}
public class PabrikBaru{
public static void main(String[] args){
test();
}
static void test(){
PabrikSepatu SupplierSepatu;
SupplierSepatu=new PabrikSepatu("Adidas","Jalan Merdeka 123");
System.out.println("Informasi perusahaan : "+"\n"+SupplierSepatu);
}
}
Analisis :
 Pada program ini dibuat untuk mengemukakan sebuah pabrik sepatu dan dapat di implementasikan dan mengisi data datanya



BAB X
GRAPHICAL USER INTERFACE (GUI)
10.1     Tujuan Praktikum
a.       Mengetahui Konsep GUI di Java dan Komponen dasar Swing
b.      Penanganan Kejadian (Event Handling)
c.       Membuat GUI dengan Netbeans
10.2          Dasar Teori
10.2.1    Pengertian Java GUI
Java GUI (Graphical User Interface) adalah pemrograman dengan menggunakan bahsa Java yang dibuat menggunakan aplikasi yang berbasi GUI.
Tujuan Java GuI adalah untuk menambahkan komponen-komponen yang tidak bisa dibuat dalam basis text seperti tombol, gambar, dll. Selain itu Java Gui digunakan untuk memudahkan user menggunakan Pogram yang dibuat tersebut [1].
10.2.2    Macam-Macam Java GUI
a.      AWT (Abstract Window Toolkit)
          AWT (Abstract Window Toolkit) ini adalah GUI Toolkit pertama pada bahasa pemrograman Java, AWT ini masih sangat kekurangan komponen yang biasa digunakan untuk membangun sebuah aplikasi desktop secara lengkap Sehingga aplikasi yang dibangun menggunakan AWT  akan tampak seperti aplikasi native. Maksudnya yaitu, jika aplikasi yang dibangun menggunakan AWT (Abstract Window Toolkit) ini dijalankan pada Sistem Operasi Windows. Maka aplikasi ini akan terlihat seperti aplikasi Windows pada umum-nya, dan begitu juga jika dijalankan pada Sistem Operasi Mac ataupun GNU/Linux. Hal itu  karena AWT (Abstract Window Toolkit) ini benar-benar memanggil native subrutin untuk menggambar setiap komponen-nya ke layar. AWT dikembangkan Oleh Sun Microsystem dari Oracle. Untuk sekarang, Sun Microsystem tidak merekomendasikan lagi penggunaan komponen GUI dari AWT.

b.   Swing/JFC (Java Foundation Class)
          Java Swing adalah library java yang digunkan untuk menciptakan Grafik User Interface (GUI).  Dengan Java Swing maka dapat membuat user interface yang cross platform (berbeda platform) atau OS independent. Artinya user interface yang dibuat dapat dijalankan pada system operasi apa saja yang Suport pada Java dengan tampilan yang relative sama. Selain itu dapat pula membuat user interface yang menyerupai Windows XP, Mac OS atau Linux tanpa tergantung dari OS yang kita gunakan. SWING merupakan salah satu bagian dari Java Foundation Classes (JFC). Dimana pada JFC ini terdapat fasilitas untuk menambahkan Rich Graphic Functionality. Swing/JFC merupakan komponen GUI terbaru dari Java yang direkomendasikan Sun Microsystem untuk pemrograman Java GUI, Komponennya sebagian besar merupakan tiruan dari AWT dan versi lengkap dari AWT.
c.    SWT (Standart Widget Tookit)
          SWT (Standart Widget Toolkit) adalah sebuah GUI Toolkit yang dikeluaran oleh IBM sebagai alternatif dari AWT/Java Swing milik SUN Microsystem, yang membedakan antara SWT (Standart Widget Toolkit) dan AWT/Java Swing adalah SWT ini benar-benar mengakses native GUI library yang terdapat pada Sistem Operasi melalui JNI (Java Native Interface). Dengan model seperti ini, memungkinkan tampilan aplikasi yang dibangun menggunakan GUI Toolkit SWT menjadi sama persis dengan aplikasi native lain-nya. Kekurangan dari model pemanggilan native GUI library seperti ini adalah kita harus menyediakan library untuk tiap-tiap Sistem Operasi target aplikasi kita.
d.   QtJambi
          Qt Jambi adalah toolkit GUI yang dikembangkan oleh nokia, tetapi sekarang Nokia telah menghentikan Proyeknya. Tetapi ada beberapa developer yang melanjutkan pengembangannya yaitu oleh QtJambi Comunity.

e.    JavaGNOME
          Java Gnome hampir sama dengan SWT dan QT Jambi yaitu mengakses native library tetapi API yang digunakan adalah API dari GTK.
10.2.3    Komponen Dasar Swing
Ada lima komponen dasar Swing yaitu:
1.      Top-level Container, merupakan container dasar di mana komponen lainnya diletakan. Contohnya adalah Frame, Dialog dan Applet yang diimplementasi dalam class JFrame, Jdialog, dan JApplet.
2.      Intermediate Container, merupakan komponen perantara di mana komponen lainnya akan diletakan. Salah satu contoh container ini adalah class JPanel.
3.      Atomic Component, merupakan komponen yang memiliki fungsi spesifik dan biasanya user berinteraksi langsung dengan komponen jenis ini. Contohnya adalah JButton, JLabel, JTextField, dan JTextArea.
4.      Layout Manager, berfungsi untuk mengatur bagaimana posisi dari komponen – komponen yang diletakan pada container. Secara default terdapat 5 macam layout yaitu berupa class BorderLayout, BoxLayout, FlowLayout, GridBagLayout, dan GridLayout.
5.      Event Handling, untuk menangani event yang dilakukan oleh user misalnya menekan tombol, mengkilik mouse dan lain – lain.

10.2.4    Fitur-fitur pada Swing
Ada 7 Fitur utama dari Swing Yaitu:
1.      Swing GUI Component
       Swing Toolkit memiliki beragam komponen GUI, mulai dari komponen sederhana (button, check boxes) hingga komponent komplex seperti tabel dan text. Anda pun dapat membuat komponen anda sendiri.
2.      Java 2D API
       Dengan Java 2D API , kita dapat dengan mudah menambahkan images, drop shadow, dan lain lain kedalam aplikasi GUI kita.
3.      Pluggable Look and Feel Support
       Setiap program yang menggunakan Swing Component, dapat diubah tampilannya. Banyak sekali pilihan tampilan yang nantinya dapat kita gunakan dalam pembuatan GUI ini.
4.       Data Transfer
       Anda dapat menerapkan Data Transfer (Copy, Paste, Drag and Drop pada Swing)
5.      Internationalization  
       Dengan adanya Internationalization, developer dapat membuat software sesuai dengan bahasa negaranya sendiri-sendiri, juga mensupport character dari berbagai negara seperti Japanese, Chinese, Korean.
6.      Undo Framework API
       Dengan Swing Undo Framework, maka developer dapat menggunakan undo dan redo seperti pada text component. Java Swing mensupport unlimited undo dan redo.
7.      Flexible Deployment Support
       Swing dapat dideploy ke dalam Applet yang dijalankan via browser. Dapat juga dideploy ke dalam standalone application dengan Java Web Start sebagai Standard Destop Application.

10.2.5    Penggunaan Top Level Container
1.      Komponen GUI akan ditampilkan sebagai bagian dari containment hierarcy.
-          Aplikasi GUI berbasis swing paling tidak memiliki satu containment hierarcy dengan Jframe sebagai rootnya.
-          Jika sebuah aplikasi memiliki satu windoe utama dan dua dialog artinya aplikasi tersebut memiliki tiga containment hierarcy dan jua tiga top level container.
-          Satu containment hierarchy memiliki Jframe sebagai root , dan dua yang lainnya memiliki Jdialog sebagai root.
2.      Setiap komponen GUI hanya dapat dimuat pada satu top level container.
3.      Dapat menambahkan menubar pada top level container.

10.3               Hasil dan Pembahasan
Membuat insert dan delete dengan Vb



Gambar diatas adalah awal dari pembuatan login pada aplikasi VB.



Pada  gambar diatas adalah pembuatan formnya







Gambar adalah pengisian data, untuk memasukan data tersebut dengan cara menekan insert.
Gamba diatas menunjukan bahwa data tersebut sudah di hapus dengan menekan tombol delete