Selasa, 19 Agustus 2014

Materi OOP

OOP (Object Oriented Programming)
adalah suatu metode pemrograman yang berorientasi kepada objek. Tujuan dari OOP diciptakan adalah untuk mempermudah pengembangan program dengan cara mengikuti model yang telah ada di kehidupan sehari-hari. Jadi setiap bagian dari suatu permasalahan adalah objek, nah objek itu sendiri merupakan gabungan dari beberapa objek yang lebih kecil lagi.
Multitrading :  adalah cara yang memungkinkan pelaksanaan beberapa thread terjadi dalam sebuah proses, berbagi sumber daya tetapi dapat dijalankan secara independen (proses bergantian).
 Ada tiga model multithreading :
·         Many to One
·         One to One
·         Many to Many
 Keuntungan dari multithreading dikategorikan menjadi empat bagian:
·         Responsive
·         Sharing resources
·         Ekonomis
·         Pemanfaatan arsitektur multiprosesor
Tread :  urutan eksekusi dari awal sampai akhir dalam sebuah program.
Task: unit program yang mengeksekusi secara independen dari satu bagian dari program tersebut.

Multitasking : Proses dapat berjalan secara bersamaan
Multiprocessing : contohnya sperti system dualcore yang berada di dalam computer yang memang memiliki system dualcore yang dapat membaca data lebih cepat
MultipleTrhead : berjalan di belakang layar, contohnya seperti smart phone yang kita pakai, bila kita mengeluarkan suatu aplikasi tanpa menstop jalannnya aplikasi terseut, aplikasi tersebut akan terus berjalan di belakang layar
Package adalah suatu teknik mengumulkan beberapa class menjadi satu folder
OOP :
Pholimorph : suatu aksi yang memungkinkan pemrogram menyampaikan pesan tertentu keluar dari hirarki obyeknya, dimana obyek yang berbeda memberikan tanggapan/respon terhadap pesan yang sama sesuai dengan sifat masing-masing obyek.
Inharitance :  pewarisan pada pemrograman berorientasi objek merupakan suatu hubungan dua buah kelas atau lebih.
Encaptulation : adalah pembungkus, pembungkus disini dimaksudkan untuk menjaga suatu proses program agar tidak dapat diakses secara sembarangan atau di intervensi oleh program lain. 
API (Aplication Programing Interface)
adalah sekumpulan perintah, fungsi, dan protocol yang dapat digunakan oleh programmer saat membangun perangkat lunak untuk system operasi tertentu. API memungkinkan programmer untuk menggunakan fungsi standar untuk berinteraksi dengan system operasi.
Perbedaan absract class dan interface
Abstract Class
Interface
Bisa berisi abstract dan non-abstract method.
Hanya boleh berisi abstract method.
Kita harus menuliskan sendiri modifiernya.
Kita tidak perlu susah2 menulis public abstract di depan nama method. Karena secara implisit, modifier untuk method di interface adalah public danabstract.
Bisa mendeklarasikan constant dan instance variable.
Hanya bisa mendeklarasikan constant.  Secara implisit variable yang dideklarasikan di interface bersifatpublic, static dan final.
Method boleh bersifat static.
Method tidak boleh bersifat static.
Method boleh bersifat final.
Method tidak boleh bersifat final.
Suatu abstact class hanya bisa meng-extend satu abstract class lainnya.
Suatu interface bisa meng-extend  satu atau lebih interface lainnya.
Suatu abstract class hanya bisa meng-extend satu abstract class dan meng-implement beberapa interface.
Suatu interface hanya bisa meng-extend interface lainnya.  Dan tidak bisa meng-implement class atau interface lainnya.

Overloading :
yaitu ketika mendefinisikan beberapa method dengan nama yang sama, tapi daftar parameternya berbeda.
class Induk
{
            // mendefinisikan method test() tanpa parameter
            public void test()
{
                        System.out.println("Method di dalam kelas Induk");
            }    

            public void test(String s)
{
                        System.out.println("Method di dalam kelas Turunan");
                        System.out.println("s : \"" + s + "\"");
            }    
 }

Overriding
Pada saat mendefinisikan suatu method dalam kelas turunan yang memiliki nama dan daftar parameter sama persis dengan yang terdapat pada kelas induk, maka proses tersebut disebut Override.
class A
{
            ......
            public void tampilkanNilai()
            {
                        System.out.println("Nilai a: " + getA());
            }   
}
class B extends A
{
            .......   
            // melakukan override terhadap method tampilkanNilai()
            // yang terdapat pada kelas A
            public void tampilkanNilai()
            {
                        System.out.println("Nilai b: " + getB());
            }   
}
Setter getter
Getter dan Setter merupakan dua sejoli yang saling melengkapi. Getter sering disebut dengan accessor, sedangkan setter disebut juga dengan mutator. Dalam konsep pemrograman berorientasi objek, getter dan setter merupakan implementasi encapsuation. 
class Data
{
            private String Nama;
            private String Alamat;
            private String noTelp;

            public void setAlamat(String Nama, String Alamat, String noTelp)
            {
                        this.Nama = Nama;
                        this.Alamat = Alamat;
                        this.noTelp = noTelp;
            }
            public void setNama(String Nama)
            {
                        this.Nama = Nama;
            }
            public void Alamat(String Alamat)
            {
                        this. Alamat = Alamat;
            }
            public void setnoTlp(String noTlp)
            {
                        this. noTlp = noTlp;
            }
            public String getNama()
            {
                        return Nama;
            }
            public String getAlamat()
            {
                        return Alamat;
            }
            public String getNoTelp()
            {
                        return noTelp;
            }
}

Jumat, 15 Agustus 2014

Multithreading

Multithreading
Thread Concept
          Thread: urutan eksekusi dari awal sampai akhir dalam sebuah program.
          Task: unit program yang mengeksekusi secara independen dari satu bagian dari program tersebut.
          Sebuah thread memberikan mekanisasi perintah dieksekusi.
          Satu set instruksi dieksekusi secara paralel dengan metode skala waktu (ketika satu prosesor melakukan perpindahan dari satu thread ke thread lain.)
          Multiprocessing adalah penggunaan dua atau lebih CPU dalam sebuah sistem komputer.
          Multitasking adalah metode untuk menjalankan lebih dari satu proses di mana ada adalah berbagi sumber daya seperti CPU.
          Multithreading adalah cara yang memungkinkan pelaksanaan beberapa thread terjadi dalam sebuah proses, berbagi sumber daya tetapi dapat dijalankan secara independen.
          Thread sebenarnya mirip dengan proses, tapi cara berbagi sumber daya di antara proses dengan thread yang sangat berbeda.
          Beberapa benang dapat dijalankan secara paralel pada sistem komputer.
          Beberapa benang dapat membuat program lebih responsif dan interaktif dan untuk meningkatkan kinerja program.
Multithreading
          Ada tiga model multithreading
1.       Many to One (Solaris Green Thread and GNU Portable Thread)
2.       One to One (Windows NT/XP/2000 , Linux, Solaris 9 and above)
3.       Many to Many (Windows NT/2000, Solaris prior versions of nine )

Keuntungan menggunakan Multithreading
          keuntungan dari multithreading dikategorikan menjadi empat bagian:
§  Responsive
§  Sharing resources
§  Ekonomis
§  Pemanfaatan arsitektur multiprosesor
Creating Tasks and Thread
          Tasks = Objects.
          tugas A harus menerapkan interface Runnable.
          Interface Runnable metode run yang harus dilaksanakan dalam kelas yang digunakan.
          Example :

          Gunakan benang dari kelas yang sudah mengimplementasikan Runnable Kelas:
                                                Task task = new Task();
                                                Thread thread = new Thread(task);
                                                thread.start();
          Ketika JVM menjalankan perintah, maka metode run diimplementasikan dalam tugas Kelas yang ditangani.
          Contoh penggunaan Thread

Thread Method
          Metode berikut metode dalam kelas Thread:
§  start() à Mulai thread dengan fungsi berjalan di kelas. mengimplementasikan interface Runnable dan dijalankan oleh JVM.
§  isAlive() à mengetahui apakah thread berjalan atau tidak.
§  setPriority(p : int) à benang prioritas diatur dari 1 sampai 10.
§  join() à menunggu beberapa thread untuk menyelesaikan.
§  sleep(t : long) à membuat thread untuk tidur dalam ukuran milidetik.
§  yeild() à menghentikan thread sementara dan memungkinkan thread lain ke jalan.
§  interrupt() à interrupts thread.
Thread Synchronization
untuk mengatur beberapa thread secara bersamaan pada sumber daya yang sama untuk mencegah masalah
• Gunakan kata kunci disinkronkan dengan fungsi sinkronisasi sehingga hanya satu fungsi yang menggunakan benang dan bisa mengaksesnya
• Sebuah pernyataan disinkronisasi dapat digunakan untuk mendapatkan kunci dari objek tertentu, bukan hanya objek, ketika menjalankan blok kode dalam suatu fungsi
• Konsep memantau: mengontrol obyek dengan mengunci
• metode Synchronized dibuat dengan pengubah disinkronkan selama deklarasi
• bentuk umum dari pernyataan:
synchronized (expr)
{
                statements;
}
          untuk setiap objek, disinkronisasi metode pernah disebut maka objek akan kunci dan tidak ada metode disinkronkan dari objek yang dapat digunakan oleh thread lain.
          Thread lain yang mencoba menggunakan objek disinkronisasi akan transisi ke negara menunggu sampai disinkronkan membuka objek.
          objek akan dibuka saat thread meninggalkan metode disinkronkan.
Kerjasama antara Thread
          menggunakan antarmuka java.util.concurrent.Condition
          Antarmuka Kondisi sebagai penyedia fasilitas komunikasi antara benang.
          Metode yang digunakan:
§  await() à menunggu thread sampai ada kondisi sinyal tertentu
§  signal() à membangkitkan salah satu thread
§  signalAll() à wake up all threads waiting


Reflection

Reflection
          Memungkinkan untuk menjalankan program Java yang akan diperiksa dan "refleksi" dari dirinya sendiri (informasi) dan memanipulasi properti dalam program ini. Contoh: untuk mendapatkan semua nama-nama anggota kelas dan menampilkan mereka.
          Kemampuan untuk menjalankan dan memanipulasi kelas di Jawa.
          Proses di jalankan waktu JVM.
Menggunakan Kelas class
          Menggunakan kelas obyek Kelas untuk mendapatkan informasi dari kelas yang diinginkan. contoh:
                                                MyClass obj = new MyClass();
                                                Class Class = obj.getClass();
                                                                      or
                                                Class Class = MyClass.class;
                Catatan: obj adalah sebuah contoh objek dari kelas MyClass.
Reflection Function
          Ada beberapa metode / fungsi dari kelas Kelas yang dapat digunakan untuk memperoleh informasi dari kelas, yaitu:
          forName                             
          getName
          getSuperclass
          getContructors
          getDeclaredField
          getDeclaredMethod
          getField dan getFields
          getInterfaces
          getMethod dan getMethods
          getPackage
          getModifiers
          isArray
          isInstance , etc
Informasi lebih lanjut dapat dilihat pada Java documentation
Example of Reflection Function
          Berikut contoh untuk kelas Mahasiswa yang akan mengambil informasi properti dengan Refleksi:

          • Ini adalah kelas AmbilKelas yang akan mengambil informasi untuk kelas Mahasiswa:

          Output from class AmbilKelas :

Example of Reflection Function :
          Contoh jika kita ingin mengetahui informasi dari kelas yang telah dinyatakan sebelumnya dari Java itu sendiri.

          Output informasi dari kelas Stack

          Ada 5 fungsi yang kelas Stack memiliki (pop, push kosong, mengintip, dan pencarian)
          Dari fungsi di atas, fungsi mengembalikan tipe nilai bisa berupa Objects (pop, mendorong, mengintip), Boolean (kosong), int (pencarian)
          Jika kita mengganti String parameter dalam fungsi forName ke:
                Class c = Class.forName( "Mahasiswa“ );
Ini akan menghasilkan:
 


1.       izin akses untuk setiap fungsi
2.       3 fungsi setter dengan tipe Void
3.       3 fungsi getter dengan nilai pengembalian String
4.       3 fungsi setter dengan parameter String
5.       3 fungsi getter tanpa parsing parameter
Field Reflection
          Fields di kelas di Jawa juga bisa diperoleh melalui refleksi dengan menggunakan metode kelas kelas, antara lain dengan menggunakan:
v  getField(String name)  à mengambil salah satu bidang yang ditunjuk
v  getFields() à mengambil semua bidang ada
v  getDeclaredField(String name) à mengambil satu bidang dideklarasikan oleh kelas
v  getDeclaredFields() à mengambil semua bidang dinyatakan
Example of Field Reflection
          Contoh Reflection berikut class Student untuk mendapatkan bidang dinyatakan

          Output:

1.       Akses Modifier untuk setiap bidang dinyatakan
2.       Jenis Data setiap bidang dinyatakan

3.       nama field Dideklarasikan

Package

Package
          Mengatur file dalam sebuah direktori yang memiliki fungsi yang sama.
          Memfasilitasi dalam mengembangkan proyek besar.
          Contoh paket JDK dari SUN (java.xxx.yyy) ditunjukkan sebagai berikut:

          Keuntungan dari menggunakan
        Nama kelas Tabrakan menghindari yang kita buat dengan kelas yang ada.
        - Mudah dalam pemeliharaan dan pengembangan (pengelompokan)
        - Kemudahan dalam mencari dan menggunakan nama kelas dan kontrol akses yang
        - Memahami konsep Paket akan membantu dalam mengelola dan menggunakan file yang disimpan dalam JAR (Java Archive) lebih efisien.
Membuat dan Penamaan Paket
          Langkah-langkah untuk membuat paket:
1.       Buat direktori yang mewakili lokasi di mana paket akan dibuat
                Example: D:\Java\Proyek\MyPackage\Poligon
2.       Buat kelas (atau interface) yang akan menjadi isi dari paket yang akan kita buat dengan komposisi:
// Package declaration
package packagename;
                // Class declaration
public class classname{

}
3.       Package Declaration
Menggunakan paket kata kunci yang ditulis pada baris pertama dari file sumber (java).
                package packagename;
                Example :
                package MyPackage; 
                package MyPackage.Poligon;  
4.       Class Declaration
Disajikan dalam masyarakat sehingga dapat diakses oleh semua kelas yang ada di dalam dan di luar paket yang dibuat.
Jika ada beberapa kelas dalam file sumber, ada kelas hanya dapat dinyatakan di depan umum, yaitu, kelas yang namanya sama dengan nama file sumber.
5.       Setting CLASSPATH
                Set variabel lingkungan CLASSPATH yang menunjuk ke direktori dimana paket disimpan:Through Control Panel
a)      Melalui perintah set path di command line
b)      Melalui Configure - Preferences di Editor JAVA.
                SET CLASSPATH = .; D:\Java\Proyek;
Ketika file java (kelas atau interface) dikompilasi sehingga file kelas akan mengisi file yang ditunjuk untuk paket.
Using Package
          Ada 2 cara untuk menggunakan kelas dalam paket:
1)      Dengan mengacu pada paket nama kelasnya
Example :
Hasil kompilasi kelas segiempat dalam direktori Polygon               
MyPackage.Polygon.SegiEmpat S;
S = new MyPackage.Polygon.SegiEmpat(17, 8);
                                or
MyPackage.Polygon.SegiEmpat S = new MyPackage.Polygon.SegiEmpat(17, 8);
2)      Dengan menggunakan import
                import MyPackage.Polygon.*;
                import MyPackage.Polygon.SegiEmpat;
To use :
                                SegiEmpat s = new SegiEmpat(17, 8);

Sample Code
          Example of 2 Java file in Poligon package:

          If used, then :

          Output: