Thursday, May 8, 2014

Pengertian Java Swing

 
Java Swing adalah librari java yang digunkan untuk menciptakan Grafik User Interface (GUI). Dengan Java Swing kita dapat membuat user interface yang cross platform atau OS independent. Artinya user interface yang kita buat dapat dijalankan pada system operasi apa saja (OS yang suport Java) dengan tampilan yang relative sama. Bahkan kita dapat membuat user interface yang menyerupai Windows XP, Mac OS atau Linux tanpa tergantung dari OS yang kita gunakan. SWING, adalah salah satu bagian dari Java Foundation Classes (JFC). Pada JFC ini juga terdapat fasilitas untuk menambahkan Rich Graphic Functionality.
Komponen Swing
Package dari Swing menyediakan banyak kelas untuk membuat aplikasi GUI. Package tersebut dapat ditemukan di javax.swing. Komponen Swing ditulis menyeluruh menggunakan Java. Kesimpulannya, program GUI ditulis menggunakan banyak kelas dari package Swing yang mempunyai tampilan look and feel yang sama meski dijalankan pada beda paltform. Lebih dari itu, Swing menyediakan komponen yang lebih menarik seperti color chooser dan option pane.
Nama dari komponen GUI milik Swing hampir sama persis dengan komponen GUI milik AWT. Perbedaan jelas terdapat pada penamaan komponen. Pada dasarnya, nama komponen Swing sama dengan nama komponen AWT tetapi dengan tambahan huruf J pada prefixnya. Sebagai contoh, satu komponen dalam AWT adalah button class. Sedangkan pada Swing, nama komponen tersebut menjadi Jbutton class.
Dalam  ranah  antarmuka  pengguna,  komponen  merupakan  bagian fundamental  di  Java.  Pada  prinsipnya,  segala  sesuatu  yang  kita  lihat  di tampilan aplikasi Java adalah suatu komponen—misalnya window, menu, dan button.
Di  sisi  lain,  container  adalah  jenis  komponen  yang  “menampung”  dan mengelola  komponen-komponen  lainnya.  Idealnya,  suatu  komponen harus diletakkan di sebuah container agar ia dapat digunakan.

Secara umum ada lima bagian dari Swing yang akan sering kita gunakan. Komponen atau
bagian – bagian itu adalah:
  1. Top-level Container, merupakan container dasar di mana komponen lainnya diletakan. Contoh Top-level container ini 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.
Features pada Swing diantaranya:
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.

Thursday, May 1, 2014

Pewarisan (Inheritance) pada java & contoh program Inheritance

Pewarisan (Inheritance) merupakan sifat dalam bahasa berorientasi objek yang memungkinkan sifat-sifat dari suatu kelas diturunkan ke kelas lain. Sistem OOP memungkinkan kita untuk mendefinisikan suatu kelas baru dengan mewarisi sifat dari kelas lain yang sudah ada. Penurunan sifat ini bisa dilakukan dilakukan secara bertingkat-tingkat, sehingga semakin ke bawah maka kelas tersebut semakin spesifik.
pewarisan memberikan atau mewariskan sesuatu kepada keturunan berikutnya. misalnya, seorang anak pasti akan mewarisi beberapa sifat atau perilaku yang dimiliki oleh ibu/bapaknya. dalam konteks ini, suatu kelas dalam program dapat diturunkan menjadi kelas-kelas baru lainnya yang akan mewarisi beberapa sifat atau perilaku dari kelas induknya. sebagai contoh, apabila anda memiliki kelas A dalam program yang anda buat maka anda dapat membentuk kelas-kelas turunan dari kelas A tersebut(Misalnya, kelas B) yang mewarisi sifat-sifat yang terkandung dalam kelas A. dalam proses pembuatan kelas turunan tersebut, Anda dapat menambahkan sifat dan perilaku baru ke dalam kelas B, yang sebelumnya tidak dimiliki dalam kelas A. Dalam terminologi java, kelas induk dinamakan dengan superclass dankelas turunan dinamakan dengan subclass. untuk membuat kelas anak atau kelas turunan berdasarkan class yang ada, anda dapat menggunakan kata kunci extends.
keterangan : extends artinya diturunkan.








contoh program:
program induk kakek.java
public class kakek
{
    protected String namekakek;
    protected String address;
    public kakek()
    {
        System.out.println(“\n Program Demo Inheritance”);
        System.out.println(“============================”);
        System.out.println(”   Masukan construktor kakek  “);
        System.out.println(“–Dijalankan oleh class Bapak–”);
        namekakek=”Doni wijaya”;
        address=”Merauke”;
    }
    public kakek(String name,String address)
    {
        this.namekakek=namekakek;
        this.address=address;
    }    
    public String getName()
    {
        return namekakek;
    }
    public String getAddress()
    {
        return address;
    }
}
program anak/turunan:
program bapak.java
public class bapak extends kakek
{
    protected String namebapak;
    protected String addressbapak;
    public bapak()
    {
        System.out.println(“Nama Kakek :”+namekakek);
        System.out.println(“Address kakek :”+address);
        System.out.println(“\n”);
        System.out.println(” Masukan Construktor Bapak “);
        System.out.println(“—-dijalankan class cucu—-”);
        namebapak=”Ridho Saputra”;
        addressbapak=”Yogyakarta”;
        }
        public bapak(String namebapak,String addressbapak)
        {
            this.namebapak=namebapak;
            this.addressbapak=addressbapak;
        }
        public String getNama()
        {
            return namebapak;
        }
        public String getAddress()
        {
            return addressbapak;
        }
        public static void main(String []args)
        {
            bapak sari=new bapak();
        }
}
program cucu.java
public class cucu extends bapak
{
    public cucu()
    {
        System.out.println(“Nama Bapak  :”+namebapak);
        System.out.println(“Address Bapak :”+addressbapak);
    }
    public static void main(String []args)
    {
        String namacucu;
        cucu lagan=new cucu();
        System.out.println(“\nSaya adalah CUCU”);
        System.out.println(“Nama Saya : Samuel”);
        System.out.println(“”);
    }
}
jika ingin menjalankan program datas makan kita perlu mengkompile terlebih dahulu class kakek.java, jangan di run karena main programnya terdapat dalam class bapak.java dan cucu.java.
jika kita menjalankan class bapak maka akan seperti berikut tampilannya:





jika kita menjalankan program cucu maka akan seperti berikut tampilannya:

Pointer Pada Bahasa C

Konsep pointer, hanya untuk memudahkan saja, secara sederhana dibagi menjadi 2, yaitu:

1. Pointer
Apa itu pointer?? pointer adalah variabel yang berisikan alamat yang merujuk kepada sesuatu

2. Pointee

Sedangkan, apa itu pointee?? pointee adalah sesuatu yang dirujuk oleh pointer



Ilustrasinya seperti gambar berikut

Berikut adalah contoh program pointer

Pada code diatas, 
  1. baris *pointer_x merupakan perintah untuk deklarasi pointer. Fungsi karakter ( * ) disini agar si pointer dapat menggunakan nilai alamat dari variabel yang ditunjuk oleh pointer 
  2. baris pointer_x = &pointee_X memberikan intruksi agar pointer_x menggunakan alamat dari pointee_X. Atau gampangnya, pointer_x tunjuk ke pointee_X. Karakter ( & ) disini agar nilai alamat dari variabel pointee_X dapat digunakan oleh varibel pointer pointer_x.
  3. %p pada perintah printf. Fungsinya untuk akses alamat dari pointer.
Hasil yang didapat adalah sebagai berikut

Struktur (Struct) dalam Bahasa C

Struktur atau juga disebut dengan struct adalah sekumpulan variabel dimana dapat terdiri dari berbagai tipe data, dan dikelompokkan ke dalam satu nama. Contoh dari stuktur adalah struktur data mahasiswa, dimana mahasiswa digambarkan dengan susunan lambang seperti nama, alamat, nim, dan sebagainya. Struktur digunakan untuk mendefinisikan record dari data yang disimpan pada suatu file. Contoh penulisan dari struktur adalah sebagai berikut :

                  struct mahasiswa
                  {
                       char *nama;
                       char alamat;
                       int nim;
                 
}

Berdasarkan contoh di atas, maka akan terdapat tipe data baru bernama struct mahasiswa, yang terdiri dari nama, alamat, nim, yang masing-masing disebut dengan field. Untuk dapat mengakses anggota dari struktur dapat digunakan salah satu dari dua operator, yaitu titik (.) digunakan apabila untuk variabel tunggal (misal x), dan tanda panah (->) untuk variabel pointer (misal y). Contoh pemanggilannya :
               
                  printf("%s",x.nama);
                  printf("%s",y->nama);
               
Untuk dapat lebih memahami materi struktur kali ini, silakan download materi di sini.
Sekian postingan saya kali ini, semoga bermanfaat untuk teman-teman. Terimakasih.

Inheritance atau Pewarisan Sifat Pada Java

     Konsep inheritance atau pewarisan ini mengadopsi dunia nyata dimana sebuah objek dapat mewariskan sifat pada turunannya. Dalam kehidupan manusia pasti memiliki karakter yang hampir sama dengan orang tua. Selain bentuk fisik yang memiliki keseragaman yang hampir sama, tentunya juga memiliki beberapa karakter/sifat yang hampir sama dengan kedua orang tua.

      Misalnya ayah nobita adalah orang penyabar, sedangkan nobita juga penyabar, tapi dibalik semua itu, nobita juga mempunyai sifat lain yang tidak dimiliki oleh ayahnya, yaitu pemalas. Itulah kenapa setiap turunan dikatakan ‘hampir‘ sama dengan induknya.

Inheritance (pewarisan) adalah proses pewarisan data dan method satu kelas induk kepada kelas turnannya.
Komponen class pada pewarisan yaitu:
  • Super Class: kelas induk atau kelas yang mewariskan
  • SubClass: anak kelas atau kelas yang mendapat warisan


Inheritance Pada Java !
        Di dalam bahasa pemrograman java, untuk mendeklarasikan suatu class sebagai subclass dilakukan dengan cara menambahkankata kunci extends setelah deklarasi nama classnya, kemudian diikuti dengan nama parent class-nya atau super classnya. Kata kunci extends tersebut memberitahu kompiler java bahwa kita ingin melakukan perluasan class.

Cara penulisan subclassnya adalah sebagai berikut:


Contoh kasus:
          Terdapat beberapa software di komputer. Software tersebut beraneka ragam: software game, software edukasi, dan lain-lain. Biarpun berbeda jenisnya, software tersebut pasti memiliki kesamaan dengan software sejenisnya. Dengan kata lain, apabila dilihat dari segi pemrograman, maka class Software adalah superclass, sedangkan class Game adalah subclassnya. Jadi penulisan code java-nya adalah sebagai berikut:



Manfaat Inheritance !
Berikut in adalah beberapa manfaat apabila menggunakan konsep inheritance:

1. Bersifat reusable

           Pada class yang memiliki sifat mirip denga class lain, tidak perlu membuat variabel dan method yang sama dalam penerapannya. Sehingga hanya perlu membuat satu class sebagai induk, dan beberapa class sebagai anak yang mewarisi method dan data dari class induk. Ketika membutuhkan data dan method tambahan pada class anak, hanya perlu menambahkan data tambahan tersebut, tanpa perlu mendeklarasikan data dan method yang sudah dimiliki oleh induk class.


2. Efisiensi dalam manajemen data dan method

         Ketika membutuhkan perubahan pada data dan method pada induk class, tidak perlu mengubah semua class anak, sehingga hanya perlu melakukan perubahan pada class induknya saja.

Keyword “super“  !

Keyword super digunakan oleh subclass untuk memanggil constructor atau method yang ada pada superclassnya. Berikut cara penulisan keyword super pada subclass untuk memanggil constructor pada superclass.
Sedangkan cara penulisan “super“ pada subclass untuk memanggil method
pada superclass adalah sebagai berikut:
 
Kontrol akses !

       Suatu parent class dapat tidak mewariskan sebagian data dan methodnya kepada subclassnya. Sejauh mana suatu data dan method tersebut dapat diwariskan ke kelas lain sangat berhubungan dengan access control. Gambaran akses kontrol digambarkan pada tabel berikut:

Wednesday, April 9, 2014

Perbedaan For, While dan Do-While di Java


Pembahasan perulangan di Java mulai dari While, Do-while dan For sudah kita bahas satu persatu. Sekarang saatnya membandingkan untuk mengetahui perbedaan utama dari ketiga perulangan tersebut.

  1. Perulangan For, program hanya akan menjalankan inisialisasi sebanyak satu kali kemudian akan dicek pada pernyataabn kondisi, bila kondisi bernilai benar maka modifier akan dijalankan diikuti dengan pernyataan. Setelah itu program akan kembali melakukan pengecekan kondisi dan apabila masih bernilai benar akan dilanjutkan dengan menjalankan modifier dan pernyataan. Program akan berputar mengecek kondisi, modifier dan pernyataan. Lalu sampai kapan ? Tentunya sampai kondisi tidak terpenuhi atau bernilai salah. Makanya kita kadang menemukan program yang outputnya tidak berhenti karena perulanganya berjalan terus. hal itu disebabkan karena kondisi selalu bernilai benar.
  2. Perulangan While, Pada perintah While  pengecekan dilakukan pada awal blok.
  3. Perulangan Do-While, Pengecekan dilakukan di akhir blok.  
  4. Persamaan Perulangan While dan Do-While adalah hanya menggunakan 1 parameter. Meskipun demikian tetap menghasilkan perulangan yang sama dengan for yang menggunakan  3 buah parameter . Hal ini dikarenakan bagian inisialisasi dan modifiernya kita masukkan dalam baris program biasa sehingga hasil outputnya pun tetap sama dengan menggunakan for.

8 Tipe Data Primitif Java

Tipe data adalah hal yang penting dalam konsep pemrograman. Tipe data ini akan membantu kita dalam membedakan setiap variabel yang kita buat. Java memiliki tipe data primitif,yaitu tipe data yang tidak diturunkan dari objek manapun. Java memiliki 8 tipe data primitif diantaranya boolean, char, byte, short, int, long, float, dan double. Berikut penjelasan mengenai 8 tipe data diatas.

  • Boolean adalah tipe yang mengharuskan operannya bernilai boolean (true atau false). Boolean literal tidak boleh berharga 0 atau 1. Boolean tidak memiliki range dan nilai default-nya adalah false. Tipe boolean adalah tipe yang menjadi hasil dari operator logika. Panjang tipe boolean adalah 16 bit.
  •  Char adalah tipe data yang memilik panjang 16 bit sama dengan boolean. Panjang karakter sebesar ini karena berada pada rentang 0 sampai dengan 65.536. Kumpulan  karakter standar (yang biasa disebut dengan karakter ASCII) berada pada rentang nilai 0 sampai 127, dan perluasan sekumpulan karakter 8-bit (ISO-Latin-1) rentang nilainya 0 sampai 255. Nilai karakter ini diapit dengan tanda petik tunggal. Nilai default dari tipe data ini adalah ‘\u0000’.
  • Byte adalah tipe data integral 8 bit. Memiliki rentang nilai antara -27 sampai 27 – 1 atau dari -128 sampai 127. Nilai default dari tipe data byte adalah 0.
  • Short adalah tipe data integral 16-bit. Tipe Memiliki rentang nilai antara -215 sampai 215 – 1 atau dari -32768 sampai 32767. Nilai default dari short adalah 0.
  • Int adalah tipe data Integral 32-bit. Memiliki rentang nilai antara -231 sampai 231 – 1 atau dari -2,147,483,648 sampai 2,147,483,647. Nilai default dari tipe data int adalah 0.




  •  Long adalah tipe data  Integral 64-bit. Memiliki rentang nilai antara -263 sampai 263 – 1 atau dari -9,223,372,036,854,775,808 sampai 9,223,372,036,854,775,807. Nilai default dari tipe data long adalah 0L, jika tidak diberi akhiran L memiliki default litral int.
  • Float adalah tipe data  Floating Point 32-bit. Nilai literalnya mengandung pecahan (dipisahkan dengan tanda titik ‘.’). Nilai default dari tipe data float adalah 0.0F, jika tidak diberi akhiran F memiliki default nilai literal double.
  • Double adalah tipe data  Floating Point  64-bit. Nilai default dari ipe data double adalah 0.0.

   
Spesifikasi panjang bit,  range, dan nilai default tipe data primitif

tipe data priitive

Thursday, April 3, 2014

Queue Dalam Bahasa Pemrograman C

Queue (antrian) adalah barisan elemen yang apabila elemen ditambah maka penambahannya berada di posisi belakang (rear) dan jika dilakukan pengambilan elemen dilakukan di elemen paling depan (front). Oleh karena itu, queue bersifat FIFO (first in first out).

Operasi-operasi dasar dari sebuah queue adalah :
1. Enqueue : proses penambahan elemen di posisi belakang
2. Dequeue : proses pengambilan elemen di posisi depan
Selain operasi dasar di atas, ada pula operasi-operasi lain yang dapat dilakukan terhadap sebuah queue yaitu :
1. Operasi pemeriksaan queue kosong (fungsi kosong)
2. Operasi pemeriksaan queue penuh (fungsi penuh).
3. Operasi inisialisasi queue (fungsi inisialisasi)

Adapun presentasi queue dapat dilakukan dengan 2 cara yaitu :
Dengan menggunakan array statis
Operasi-operasi yang dapat dilakukan dalam queue yang menggunakan representasi array statis adalah :

- Pendeklarasian sebuah queue
Setiap queue memiliki elemen-elemen (field) berupa posisi depan, posisi belakang, elemen antrian, dan maksimal elemennya.

Adapun pendeklarasian queue dalam bahasa C adalah :

#define maks 5
struct TQueue{
int depan,belakang;
int maks_queue;
int antrian[maks];
};
TQueue Q,Queue,Q2;//deklarasi variable bertipe TQueue

- Inisialisasi Queue
Inisialisasi queue adalah proses pemberian nilai 0 untuk field depan dan belakang dari queue dan juga pemberian nilai maks ke maks_queue yang menunjukan banyaknya maksimal data dalam queue.
Karena dalam bahasa C elemen sebuah array dimulai dengan 0 maka proses inisialisasi nilai depan dan belakang bukan 0 tetapi -1 sehingga ketika ada proses penambahan elemen (enqueue) akan bernilai 0 sehingga elemen tersebut akan disimpan dalam elemen antrian pada posisi 0.
Implementasi fungsi inisialisasi queue dalam bahasa C adalah
void inisialisasi(TQueue *Q)
{
Q->maks_queue=maks;
Q->depan=-1;
Q->belakang=-1;
}
Cara pemanggilannya adalah :
Inisialisasi(&Q);

- Fungsi Kosong
Fungsi kosong digunakan untuk memeriksa apakan keadaan queue tidak memiliki elemen. Fungsi kosong didapatkan dengan memeriksa field belakang dari queue. Jika field belakang bernilai 0 maka berarti queue kosong dan jika tidak 0 maka berarti queue mempunyai elemen.
Implementasi dalam bahasa C agak berbeda karena elemen array dimulai dari 0 sehingga pemeriksaan nilai belakang dilakukan dengan membandingkannya dengan nilai -1. Jika nilai belakang bernilai -1 maka queue kosong (true) dan jika lebih dari -1 berarti queue tidak kosong (false). Sehingga implementasinya dalam bahasa C adalah :
int kosong(TQueue Q)
{
if (Q.belakang==-1)
return 1;
else
return 0;
}
Cara pemanggilannya adalah :
if(kosong(Q))// jika queue Q kosong
……
- Fungsi Penuh
Fungsi penuh berguna untuk memeriksa apakah suatu queue telah penuh. Fungsi ini diperlukan ketika proses enqueue. Fungsi ini akan bernilai benar (true) jika field belakang sama dengan nilai maks_queue jika tidak sama dengan berarti queue belum penuh.
Dalam bahasa C perbandingan yang dilakukan adalah bukan dengan maks_queue tetapi dengan nilai maks_queue-1 karena elemen array dalam bahasa C dimulai dari posisi 0. Implementasi dalam bahasa C adalah :
int penuh(TQueue Q)
{
if(Q.belakang==Q.maks_queue-1)
return 1;
else
return 0;
}
Cara pemanggilannya adalah :
If(!penuh(Q)) //if queue Q tidak(!) penuh
.....

- Operasi Enqueue
Proses enqueue adalah proses untuk penambahan di posisi belakang. Penambahan ini dilakukan jika kondisi queue tidak penuh. Jika keadaan masih kosong, maka field depan dan belakang bernilai 1 tetapi jika sudah mempunyai elemen maka yang nilai belakang harus bertambah 1. Kemudian data baru disimpan di array pada posisi belakang.
Implementasi dalam C harus melakukan penyesuaian karena elemen array C dimulai dari 0 sehingga ketika queue masih kosong pemberian nilai depan dan belakang adalah 0 bukan 1. Untuk lebih jelasnya perhatikan potongan program di bawah ini :
void enqueue(TQueue *Q, int data)
{
if(!penuh(*Q))
{
if(empty(*Q)
{
Q->depan=0;
Q->belakang=0;
}
else
Q->belakang++;
Q->antrian[Q->belakang]=data;
}
else
printf("Queue Telah Penuh\n");
}
Cara penggunaannya :
int data=7
enqueue(&Q,data);

- Operasi Dequeue
Operasi dequeue adalah proses pengambilan elemen queue. Tentunya elemen yang diambil selalu dari elemen pertama (1). Setelah elemen pertama diambil, maka akan diperlukan proses pergeseran elemen data setelah elemen data yang diambil (dari posisi ke-2 sampai posisi paling belakang), dan kemudian posisi belakang akan dikurangi 1 karena ada data yang diambil.
Implementasi dalam bahasa C dilakukan dengan pengambilan elemen pada posisi 0, sehingga fungsi dequeue-nya menjadi :

int dequeue(TQueue *Q)
{
int data,i;
if(!kosong(*Q))
{
data=Q->antrian[Q->depan];
for(i=0;i<=Q->belakang-1;i++)
Q->antrian[i]=Q->antrian[i+1];
Q->belakang--;
return data;
}
else
{
printf("Queue Kosong.\n");
return 0;
}
}
Cara penggunaan fungsi tersebut adalah :
int data;
data=dequeue(&Q); //ambil data dari dequeue pada queue Q
printf(“%d”,data);

2. Dengan menggunakan linked list.
Proses penyimpanan elemen queue dalam linked list mirip dengan operasi pada single linked list yang menggunakan penyimpanan tambah akhir dan hapus awal.

Operasi Enqueue
Proses enqueue dalam queue linked list adalah dengan menambahkan elemen baru ke posisi paling belakang (sambungkan field berikutnya dari field belakang ke posisi pointer baru). Setelah itu, pointer penunjuk belakang harus berpindah ke posisi baru tersebut. Proses ini seperti proses penambahan di belakang pada single linked list.

Operasi Dequeue
Proses dequeue untuk queue linked list adalah dengan mengambil data yang ditunjuk pointer depan dan kemudian pointer yang depan tersebut diambil dan kemudian dihapus. Pointer depan harus berpindah ke elemen antrian berikutnya. Proses tersebut dilakukan hanya jika linked list tidak kosong. Proses ini mirip dengan proses penghapusan data awal pada single linked list.

QUEUE DENGAN CIRCULAR ARRAY
Jika kita menggunakan array untuk queue seperti di atas, maka ketika ada proses pengambilan (dequeue) ada proses pergeseran data. Proses pergeseran data ini pasti memerlukan waktu apalagi jika elemen queue-nya banyak. Oleh karena itu solusi agar proses pergeseran dihilangkan adalah dengan metode circular array.Atau agar lebih jelas, array di atas dapat dibayangkan ke dalam bentuk seperti lingkaran di bawah ini. Aturan-aturan dalam queue yang menggunakan circular array adalah :

1. Proses penghapusan dilakukan dengan cara nilai depan (front) ditambah 1 : depan=depan + 1.
2. Proses penambahan elemen sama dengan linear array yaitu nilai belakang ditambah 1 : belakang=belakang + 1.
3. Jika depan = maks dan ada elemen yang akan dihapus, maka nilai depan = 1.
4. Jika belakang = maks dan depan tidak 1 maka jika ada elemen yang akan ditambahkan, nilai belakang=1

5. Jika hanya tinggal 1 elemen di queue (depan = belakang), dan akan dihapus maka depan diisi 0 dan belakang diisi dengan 0 (queue kosong).

Operasi-operasi yang dapat terjadi dalam queue yang menggunakan circular array adalah :

1. Pendeklarasian Queue
Setiap queue memiliki elemen-elemen (field) berupa posisi depan, posisi belakang, elemen antrian, dan maksimal elemennya.

2. Inisialisasi Queue
Inisialisasi queue adalah proses pemberian nilai 0 untuk field depan dan belakang dari queue dan juga pemberian nilai maks ke maks_queue yang menunjukan banyaknya maksimal data dalam queue.
Karena dalam bahasa C elemen sebuah array dimulai dengan 0 maka proses inisialisasi nilai depan dan belakang bukan 0 tetapi -1 sehingga ketika ada proses penambahan elemen (enqueue) akan bernilai

3. Fungsi Kosong
Suatu queue yang menggunakan circular array dapat dikatakan kosong jika nilai yang menunjuk posisi depan atau belakang mempunyai nilai 0.
Implementasi dalam bahasa C, perbandingan posisi depan atau belakang dilakukan bukan dengan angka 0 tetapi angka -1 karena angka 0 menunjukan elemen pertama dari array.

4. Fungsi Penuh
Suatu queue akan disebut penuh jika terjadi 2 hal yaitu jika nilai depan mempunyai nilai 1 dan posisi belakang sama dengan maks_queue atau jika posisi depan sama dengan posisi belakang +1. Jika salah satu dari 2 hal tersebut terjadi maka fungsi penuh mempunyai nilai true dan jika tidak terjadi 2 hal tersebut maka fungsi bernilai false.
Implementasi dalam bahasa C agar beda karena posisi awal array bukan 1 tapi 0 dan posisi terakhir data adalah maks_queue-1 bukan maks_queue.

5. Operasi Enqueue
Proses enqueue data hanya bisa dilakukan jika queue tidak kosong. Ada beberapa hal yang harus diperhatikan ketika akan melakukan enqueue pada circular array, diantaranya adalah :

- Kondisi ketika queue masih kosong. Jika ini terjadi, maka posisi depan dan belakang bernilai 0.
- Ketika ketika nilai belakang sama dengan maks_queue, maka posisi belakang adalah 0. Ini terjadi ketika posisi depan lebih besar dari 0 (pernah ada dequeue).
- Ketika nilai belakang masih lebih kecil dari maks_queue maka posisi belakang ditambah 1 : belakang=belakang+1;

Dari ketentuan-ketentuan di atas dapat diimplementasikan dalam bahasa C dengan mengganti beberapa hal yaitu posisi perbandingan/pengisian dengan nilai 0 diganti dengan perbandingan/pengisian dengan nilai -1 dan perbandingan dengan nilai maks_queue diganti dengan maks_queue-1. Itu disebabkan karena dalam bahasa C array dimulai dari 0.

6. Operasi Dequeue
Proses dequeue hanya bisa dilakukan jika queue dalam keadaan tidak kosong. Ada beberapa kondisi yang harus diperhatikan ketika dequeue elemen queue yaitu :

- Kondisi ketika posisi depan sama dengan posisi belakang (queue hanya memiliki 1 elemen) maka nilai depan dan belakang diisi dengan 0 (queue kosong).
- Jika posisi depan sama dengan posisi maks_queue maka posisi depan berpindah ke 1.
- Selain itu, posisi depan ditambah dengan 1 : depan=depan+1

Ketika kita mengimplementasikannya dalam bahasa C, maka ada beberapa hal yang harus diganti adalah semua pengisian/perbandingan dengan angka 1 diganti dengan 0 (karena elemen array dalam bahasa C adalah 0), serta ketika ada perbandingan/pengisian dengan nilai 0 diganti dengan -1 dan perbandingan/pengisian dengan nilai maks_queue diganti dengan maks_queue-1.

Encapsulasi pada Java






A. TUJUAN

• Memahami konsep Encapsulasi

B. DASAR TEORI
Encapsulasi atau Pengkapsulan adalah cara “membungkus” data dan method yang menyusun kelas sehingga kelas dapat dipandang sebagai suatu modul dan menyembunyikannya dari dunia luar. Dunia luar disini adalah data, method, kelas, interface, atau package lain yang mungkin akan berinteraksi dengan modul tersebut. Dengan kata lain enkapsulasi adalah suatu cara untuk menyembunyikan implementasi detail dari suatu class.

contoh :
class PBO
{
public String kapsul = “Pemrograman Berbasis Objek”;
}
public class enkapsulasi

{
public static void main(String[] args)
{
PBO program = new PBO();
System.out.print(“hasil encapsulasi : “ + program.kapsul);
}
}

Enkapsulasi mempunyai dua hal mendasar, yaitu :
1. Information Hiding
Sebelumnya kita dapat mengakses anggota class baik berupa atribut maupun method secara langsung dengan menggunakan objek yang telah kita buat. Hal ini dikarenakan akses kontrol yang diberikan kepada atribut maupun method yang ada di dalam class tersebut adalah ‘public’. Kita dapat menyembunyikan informasi dari suatu class sehingga anggota class tersebut tidak dapat diakses dari luar, caranya adalah hanya dengan memberikan akses kontrol ‘private’ ketika mendeklarasikan atribut atau method. Proses ini disebut dengan information hiding.
2. Interface to access data
Jika kita telah melakukan information hiding terhadap suatu atribut pada suatu class, lalu bagaimana cara melakukan perubahan terhadap atribut yang kita sembunyikan tersebut, caranya adalah dengan membuat suatu interface berupa method untuk menginisialisasi atau merubah nilai dari suatu atribut tersebut.
Keuntungan menerapkan Encapsulasi adalah :
1. Bersifat independen
Suatu modul yang terencapsulasi dengan baik akan bersifat independen dari modul yang lainnya sehingga dapat digunakan pada bagian manapun dari program. Ia tidak akan terikat pada bagian tertentu dari program.
2. Bersifat transparan
Bila melakukan modifikasi pada suatu modul, maka perubahan tersebut akan dirasakan juga oleh bagian program yang menggunakan modul tersebut.
3. Menghindari efek diluar perencanaan
Modul yang terencapsulasi dengan baik hanya akan berinteraksi dengan bagian program lainnya melalui variable-variabel input/output yang telah didefinisikan sebelunnya. Dengan demikian, akan mereduksi kemungkinan adanya hasil imbas pemrosesan yang di luar perencanaan semula.
4. Melindungi listing program
Saat program didistribusikan pada khalayak, untuk melindungi listing program. Anda dapat menerapkan prinsip enkapsulasi. Di sini pengguna hanya dapat menggunakan program melalui variable input atau output yang didefinisikan tanpa disertai bagimana proses yang terjadi di dalam modul tersebut.
Implementasi UML
Berikut ini kita akan coba untuk lebih memahami penggunaan konsep enkapsulasi dengan mengimplementasikan UML berikut :
UML Vehicle class tidak dengan hiding
BAHAN PRETEST –PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK
Vehicle class berisi atribut yang mempunyai modifier public(+), sehingga TestVehicle1 sebagai test program mempunyai akses langsung terhadap atribut pada Vehicle.
1. Accessor Methods
Untuk mengimplementasikan enkapsulasi, kita tidak menginginkan sembarang object dapat mengakses data kapan saja. Untuk itu, kita deklarasikan atribut dari class sebagai private. Namun, ada kalanya dimana kita menginginkan object lain untuk dapat mengakses data private. Dalam hal ini kita gunakan accessor methods. Accessor Methods digunakan untuk membaca nilai variabel pada class, baik berupa instance maupun static. Sebuah accessor method umumnya dimulai dengan penulisan get. Method ini juga mempunyai sebuah return value. Contoh penggunaan accessor method adalah getAverage,
public class Studentrecord
{
private string name;
..
..
public double getAverage()
{
double result = 0;
result=(mathGrade+englishGrade+scienceGrade)/3;
return result;
}
}
Method getAverage() menghitung rata – rata dari 3 nilai siswa dan menghasilkan nilai return value dengan nama result
2. Mutator Method
Bagaimana jika kita menghendaki object lain untuk mengubah data? Yang dapat kita lakukan adalah membuat method yang dapat memberi atau mengubah nilai variable dalam class, baik itu berupa instance maupun static. Method semacam ini disebut dengan mutator methods. Sebuah mutator method umumnya tertulis set. Mari kita perhatikan salah satu dari implementasi mutator method :
public class StrudentRecord
{
private string name;
..
..
public void setNama (String temp)
{
nama = temp;
}
}
Dimana, public – Menjelaskan bahwa method ini dapat dipanggil object luar class void – Method ini tidak menghasilkan return value setName – Nama dari method (String temp) – Parameter yang akan digunakan pada method Pernyataan berikut : name = temp; mengidentifikasi nilai dari temp sama dengan name dan mengubah data pada instance variable name. Perlu diingat bahwa mutator methods tidak menghasilkan return value. Namun berisi beberapa argumen dari program yang akan digunakan oleh method

Tuesday, April 1, 2014

LCD 16×2: Pemrograman LCD Karakter (16×2) Menggunakan CV AVR



LCD (Liquid Crystal Display) adalah modul penampil yang banyak digunakan karena tampilannya menarik. LCD yang paling banyak digunakan saat ini ialah tipe LCD 16×2 M1632 karena harganya cukup murah. LCD 16×2 M1632 merupakan modul LCD dengan tampilan 2×16 (2 baris x 16 kolom) dengan konsumsi daya rendah. Modul tersebut dilengkapi dengan mikrokontroler yang didesain khusus untuk mengendalikan LCD.







LCD 16x2
Image: LCD 16×2
Untuk rangkaian interfacing, LCD 16×2 tidak banyak memerlukan komponen pendukung. Hanya diperlukan satu variable resistor untuk memberi tegangan kontras pada matriks LCD.
Dengan menggunakan CodeVision AVR, pemrograman untuk menampilkan karakter atau string ke LCD 16×2 sangat mudah karena didukung library yang telah disediakan oleh CodeVision AVR itu sendiri. Kita tidak harus memahami karakteristik LCD secara mendalam, perintah tulis dan inisialisasi sudah disediakan oleh library dari CodeVision AVR.

Pemrograman LCD 16×2 Menggunakan CV AVR

Buat proyek baru pada CV AVR. Setting chip AVR ATmega8535 dan clock 11.059200 MHz, kemudian setting bagian LCD seperti gambar berikut:
CV AVR
Setelah itu Generate file, save, and exit.
Perhatikan blok-blok program berikut:
...
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
...
Arti dari blok instruksi diatas adalah setting LCD di PORT C yang kemudian akan me-link ke library lcd.h yang didalamnya terdapat instruksi-instruksi untuk akses LCD secara langsung.
Untuk inisialisasi cukup dengan instruksi berikut:
...
// LCD module initialization
lcd_init(16);
...
Instruksi-Instruksi Di Library LCD
unsigned char lcd_init(unsigned char lcd_columns);
Instruksi ini berfungsi untuk inisialisasi LCD kemudian dilanjutkan dengan penghapusan tampilan LCD dan menempatkan posisi kursor di kolom 0 baris 0. lcd_columns harus memiliki nilai yang sesuai dengan tipe LCD, missal 16. Fungsi ini harus dipanggil pertama kali sebelum memanggil fungsi-fungsi LCD yang lain.
Contoh:
lcd_init(16);
unsigned char lcd_read_byte(unsigned char addr);
Instruksi ini membaca karakter dari RAM LCD.
Contoh:
Ch=lcd_read_byte(0x10);
void lcd_clear(void);
Instruksi ini akan menghapus tampilan LCD dan menempatkan kursor di kolom 0 dan baris 0
Contoh:
lcd_clear();
void lcd_gotoxy(unsigned char x, unsigned char y);
Instruksi ini untuk menempatkan posisi kursor pada kolom x dan baris y.
Contoh:
lcd_gotoxy(4,1);//menempatkan kursor pada kolom 4 dan baris 1
void lcd_putchar(char c);
Instruksi ini untuk menampilkan karakter pada posisi kursor saat itu.
Contoh:
lcd_gotoxy(5,0);
lcd_putchar(0x41); //menampilkan karakter A
                   //lihat tabel karakter LCD
                   //dapat juga ditulis lcd_putchar(‘A’);
void lcd_putsf(char flash *str);
Instruksi ini berfungsi untuk menampilkan string pada posisi kursor saat itu.
Contoh:
lcd_gotoxy(0,1);
lcd_putsf(“Halo Eko”); //menampilkan string Halo Eko
void lcd_puts(char *str);
Instruksi ini berfungsi untuk menampilkan string yang sebelumnya disimpan di SRAM. Sebelum memanggil instruksi ini, sebelumnya string sudah ditempatkan di SRAM. Instruksi ini memerlukan pustaka stdio.hex .
Contoh:
...
#include <mega8535>
#include <stdio.h> //tambahkan library
...
//Declare your global variable here
char buf[33];//deklarasi variable untuk menyimpan data string
//LCD module initialization
lcd_init(16);
lcd_gotoxy(0,1);
sprint(buf,”Angka %d”, 14);//menyimpan string ke SRAM
lcd_puts(buf);             //menampilkan ke LCD
Contoh aplikasi program yang disimulasikan di software Proteus:
lcdproteus