Object Oriented Programming With Java By : Winzaldi EDI Indonesia Java Programmer
Konsep OOP
Intro OOP OOP adalah sebuah paradigma/cara pandang pemograman Salah satu cara untuk menggambarkan struktur dari aplikasi Paradigma selain OOP - Procedural,Functional dan lain-lain Sekarang OOP menjadi paradigma pemograman yang popular - Java - PHP 5 - C# - C++
Keuntungan OOP Reuseability - Once you written code, you can reuse it! Management - Aplikasi yang diprogram menggunakan kelas-kelas dan objek.objek- objek yang saling berkomuniskasi. Maintenance - ketika kita melakukan perubahan code, maka tidak akan mempengaruhi seluruh bagian dari aplikasi
Konsep Dasar : Objek Di dunia nyata, dunia terdiri atas objek-objek. - mobil-mobil,bangunan-bangunan,pepohonan,manusia, bunga dan lain- lain. Biasanya setiap objek mempunyai perilaku/aksi (fungsi-fungsi) yang mempengaruhi objek lain. - agus mengendarai bmw - objek agus mempengaruhi objek bmw. - agus.mengendarai(bmw); Dan Objek mempunyai atribut-atribut. - bmw mempunyai gears,warna,kaca spion dan lain-lain.
Contoh Objek Mobil BMW Mobil BMW memiliki bebarapa perilaku/aksi : - melaju - berhenti - tambah kecepatan” - dan lain-lain Mobil BMW memiliki informasi atau atribut-atribut. - warna,jumlah gears,jumlah pintu dan lain-lain.
Konsep Dasar : Kelas Kelas adalah sebuah blue print atau cetakan dari sebuah objek. Kelas menggambarkan state/atribut dan perilaku/aksi objek. Objek dibentuk dari Kelas
Contoh Kelas Jika BMW adalah Objek Maka Kelasnya adalah Mobil Jika kita ingin membuat objek BMW maka kita harus mempunyai blue print/ cetakan dari BMW Blue print/ Cetakan dari Objek : Mobil Kelas Mobil -> Objek BMW
Contoh : Kelas > Objek Mobil BMW Manusia Aldi Warna Kuning Laptop Acer String “pergi ke mall” Array {1,2,3,4} …….
Mobil Blueprint (Kelas) di UML merk mesin jumlahPintu warna jumlahRoda …
Kelas ke Objek datsun Mobil Datsun 100A 1.0 3 red merk 4 tipeMesin jumlahPintu warna jumlahRoda … lambo Lamborghini Diablo 8.0 3 red 4
Kelas dan Objek di Java
Kelas Orang > Objek Iwan Iwan Orang Mahmud 25 guru 021-12345 namaAwal namaAkhir umur pekerjaan noTelpon Makan() Tidur() minumTeh() Iwan Mahmud 25 guru 021-12345 makan tidur minumTeh Zaki zaki Hasan 30 Programmer Java 021-654321
Orang – Kelas > Java Orang namaAwal namaAkhir umur pekerjaan noTelpon makan tidur minumTeh class Orang { public String namaAwal; public String namaAkhir; public int age; public String pekerjaan; public String noTelpon; public void makan() { System.out.println(“Makan ..yummy!"); } public void tidur() { System.out.println(“Lagi Tidur!"); public void minumTeh() { System.out.println(“Minum Teh!");
Tes kelas orang.bisanya applikasi di mulai dari main-method class Orang { .... } class JustTesting { public static void main(String [] args) { // Declare the object Orang jack; // Initialize the object jack = new Orang(); jack.namaAwal = "Jack"; jack.namaAkhir = "Smith"; jack.minumTeh(); System.out.println(“nama : ” + jack.namaAwal);
Contoh: Kelas -Mobil class Mobil { public String merk; public int jumlahMinyak; public void jalan() { jumlahMinyak--; }
class Mobil { .... } class JustTesting { public static void main(String [] args) { Mobil datsun = new Mobil(); datsun.jumlahMinyak = 100; datsun.jalan(); System.out.println(datsun.jumlahMinyak); Mobil ferrari = new Mobil(); ferrari.jumlahMinyak = 300; ferrari.jalan(); System.out.println(ferrari.jumlahMinyak);
Konsep Dasar - Enkapsulasi private public method
Tentang Atribut Atribut-atribut biasa dibuat private Agar objek lain tidak bisa merubah sewenang-wenang Misalnya, Anda tidak ingin bahwa setiap benda di dunia bisa mengubah berat badan seseorang untuk 500kg
Contoh: Kelas Orang class Orang { private String nama; private int berat; }
class Orang { private String nama; private int berat; } class JustTesting { public static void main(String [] args) { Orang jack = new Orang(); jack.nama = "Jack Smith"; jack.berat = 500; RESULT: TB308POHJUS-L-2:temp pohjus$ javac Orang.java Orang.java:9: nama has private access in Orang ^ Orang.java:10: berat has private access in Orang 2 errors
class Person { private String nama; private int weight; public void setnama(String n) { nama = n; } public String getnama() { return nama; public void setWeight(int w) { if(w > 0 && w <= 150) weight = w; public int getWeight() { return weight; class JustTesting { public static void main(String [] args) { Person jack = new Person(); jack.setnama("Jack Smith"); jack.setWeight(200); System.out.println(jack.getnama());
Accessor and Mutator - methods class Orang { private String nama; private int berat; // Mutator public void setNama(String n) { nama = n; } // Accessor public String getNama() { return nama; public void setBerat(int w) { if(w > 0 && w <= 150) berat = w; public int getBerat() { return berat;
Tipe-tipe di Java
Tipe-tipe di Java Tipe-tipe di java 1) Primitive types byte, short, int, long, double, float, char, boolean 2) Class(Kelas) types String, Scanner, Array, JButton, JFrame ...
Perbedaanya Tipe2 primitif di tulis dg huruf kecil di awal: int, double, float... Tipe2 kelas di tulis dg huruf besar di awal String, Scanner, Person, Cat, Mobil ... Deklarasi dan inisialisasi int a = 5; Tipe Kelas deklarasi dan inisialisasi dengan new Orang iwan = new Orang();
Perbedaan Tipe Primitif Tipe Kelas b menampung alamat di memory int a = 5; Tipe Kelas int [] b= new int[5]; b menampung alamat di memory a menampung nilai 5.
Alamat di memory ? int [] b = new int[2]; b[0] = 1; b[1] = 2; // prints 0x01 System.out.println(b); RAM variabel b address value 0x09 0x01 address value 0x01 1 0x02 2
Alamat di memory? int [] b = new int[2]; b[0] = 1; b[1] = 2; int [] a = b; // prints 0x01 System.out.println(b); System.out.println(a); RAM variabel b variabel a address value 0x09 0x01 address value 0x19 0x01 address value 0x01 1 0x02 2
Output? int [] b = new int[2]; b[0] = 1; b[1] = 2; int [] a = b; b[0] = 99; // Output? System.out.println(a[0]);
Perbedaan Lagi Tipe Primitif Tipe Kelas b menampung alamat di memory int a = 5; Tipe Kelas int [] b= new int[5]; b menampung alamat di memory a menampung nilai 5.
Output? Orang jack = new Orang(); jack.setNama("Jack Smith"); Orang james = jack; james.setNama("James Bond"); // output? System.out.println(jack.getNama());
Methods and Variables public void method(int x) { x++; } public void main(String [] args) { int y = 3; method(y); // Output nya 3! System.out.println(y);
Methods and Variables public void method(int [] x) { x[0] = 12; } public void main(String [] args) { int [] y = {1,2,3}; method(y); // Output nya 12 karna array termasuk tipe kelas! System.out.println(y[0]);
* String String adalah sebuah pengecualian dari tipe kelas. String adalah tipe kelas yang perlakuannya seperti tipe primitif. String adalah tipe kelas yang hanya bisa di inisialisasi tanpa kata new. String a = "hello"; String di perlakukan sebagai passed by value di dalam method,sehingga String adalah copian ketika String dilewatkan di dalam method.
String dan Memori Variable string adalah objek=> manampung alamat di memori. Membandingkan isi dari variabel String a.equals(b); Membandingkan alamat di memori a == b
Constructor (Konstruktor)
Konstruktor Konstruktor adalah sebuah “init method” yang dipanggil ketika objek diciptakan. Java menyediakan default konstruktor tanpa parameter. Konstruktor mempunya nama yang sama dengan nama kelas. Konstruktor tidak mengembalikan apapun. hanya mempunyai access modifer, tidak ada keyword lain yang diletakkan sebelum nama method pada deklarasi constructor
Example class Mobil { public Mobil() { System.out.println(“Konstruktor!"); } class Test { public static void main(String [] args) { Mobil ferrary = new Mobil(); > java Test Konstruktor!
class Mobil { private String merk; public Mobil(String b) { merk = b; } public String getMerk() { return merk; class Test { public static void main(String [] args) { Mobil datsun = new Mobil("Datsun 100A"); System.out.println( datsun.getMerk() ); > java Test Datsun 100A
Multiple Konstruktor class Mobil { public Mobil() { // Do something } public Mobil(String merk) { // Do something else class Test { public static void main(String [] args) { Mobil datsun = new Mobil(); Mobil ferrari = new Mobil("Ferrari");
Masalah ? class Mobil { String merk; public Mobil(String merk) { merk = merk; } class Test { public static void main(String [] args) { Mobil datsun = new Mobil("Datsun 100a"); > java Test null
Solusi class Mobil { String merk; public Mobil(String merk) { this.merk = merk; } class Test { public static void main(String [] args) { Mobil datsun = new Mobil("Datsun 100a"); > java Test Datsun 100a
KOMPOSISI
Komposisi Hubungan antara objek-objek,dimana suatu objek memiliki objek lain. Dimana objek kedua tidak bisa berdiri sendiri tanpa objek pertama. Mobil memiliki Mesin Ketika kita mencipatkan Mobil,berarti kita juga mencipatkan mesin. Ketika Mobil di hancurkan berarti mesin juga di hancurkan.
Notasi UML Mobil Mesin
Java: Komposisi // Komposisi class Mobil { private Mesin mesin; public Mobil() { mesin = new Mesin(); }
One to Many (Satu ke Banyak)? Departemen 1..20 Professor
Java: One to Many class Departemen { private Professor [] anggota; private int jumlahAnggota; public Departemen(Professor prof) { anggota = new Professor[20]; anggota[0] = prof; jumlahAnggota = 1; } public void addProfessor(Professor prof) { anggota[jumlahAnggota] = prof; jumlahAnggota++;
Inheritance (Pewarisan)
Pengenalan Pewarisan Pewarisan adalah sebuah hubungan antara dua kelas atau lebih dimana devrived class (kelas turunan ) mewarisi perilaku-perilaku dan atribut-atribut dari base class (kelas dasar). Membantu untuk menggunakan kembali code yang telah ada dengan sedikit modifikasi atau tanpa modifikasi.
Inheritance Pewarisan dapat terus bersambung Example: Kelas Turunan dapat mewarisi kelas lain,dimana klas lain tsb mewarisi kelas lain dan seterusnya. Ketika terjadi perubahan pada kelas dasar maka semua kelas turunannya juga ikut berubah Example: Mamalia <– Manusia <– Pekerja <- Programmer
Gambaran tentang Pewarisan Class A Fitur : a,b Fitur: a,b,c d e Class C Fitur : a,b,d,e c Class B Fitur: a,b,d,e,f f Class D
Banyak Pewarisan (Multiple Inherit) Di banyak pewarisan,kelas turunan dapat mewarisi banyak kelas dasar C++ mendukung banyak pewarisan, di java tidak ada banyak pewarisan Pengendara - SIM Kondektur - Nama Anggota Rumah Perahu Rumah terapung Sopir Taxi - area
Pewarisan dan Enkapsulasi private Hanya dapat di akses hanya didalam base kelas public Dapat diakses dari mana saja (base kelas, kelas turunan, kelas-kelas lain) protected Dapat di akses oleh base kelas dan kelas turunan.
Contoh Dasar Apa saja atribut dan method dari kelas Programmer? Manusia Programmer string nama int gaji void tidur() void minum() void makan() void buatApp()
Overriding? Sekarang ? Manusia Programmer string nama int gaji void tidur() void minum() void makan() void buatApp() void minum() void makan()
Overriding Ketika proggrammer makan dan minum yang berbeda dengan manusia(missal:coffee dan pizza),method makan dan minum telah di ditimpa oleh programmer !
Kelas Abstrak Kelas abstrak adalah kelas yang tidak bisa di instansiasi (buat objek). Kelas abstrak dapat di warisi dan membuat objek dari kelas yang mewarisinya. Kelas abtsrak Abstract di C++ mempunyai methode abstrak, dan tidak mempunyai implementasi. Method abstrak memaksa kelas turunannya untuk membuat implementasi method tsb.
Contoh Mamalia string nama void bersuara() {abstract} Elephant int panjangHidung bersuara()
Contoh Bentuk int x, y double hitungArea() {abstract} Bulat Kotak double diameter double panjang, lebar double hitungArea() double hitungArea()
Inheritance in java
Contoh : Dasar Pewarisan class Manusia { public void tidur() { System.out.println(“Sedang Tidur"); } class Programmer extends Manusia { class Test { public static void main(String [] args) { Programmer oji = new Programmer(); oji.tidur(); // “Sedang Tidur"
Contoh: Overriding class Manusia { public void tidur() { System.out.println("Manusia tidur"); } class Programmer extends Manusia { System.out.println("Programmer tidur"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); jussi.tidur(); // "Programmer tidur"
Contoh: super > java Test Manusia tidur Programmer tidur class Manusia { public void tidur() { System.out.println("Manusia tidur"); } class Programmer extends Manusia { super.tidur(); System.out.println("Programmer tidur"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); jussi.tidur(); > java Test Manusia tidur Programmer tidur
Konstruktor dan Pewarisan class Manusia { public Manusia() { System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); > java Test Manusia Programmer
Konstruktor dan Pewarisan Konstruktor selalu memanggil konstruktor dari kelas dasar! Ketika membuat konstruktor void Manusia() { } Java menambahkan super() – untuk memanggilnya: super(); // panggil konstruktor kelas dasar
class Manusia { public Manusia() { System. out class Manusia { public Manusia() { System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); > java Test Manusia Programmer
> java Test Manusia Programmer class Manusia { public Manusia() { super(); //Java menambahkan ini untuk memanggil konstruktor dari kelas dasar System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { super(); // Java menambahkan ini untuk memanggil konstruktor dari kelas dasar System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); > java Test Manusia Programmer
Kelas Dasar ? class Manusia { public Manusia() { // Java menambahkan ini untuk memanggil konstruktor dari kelas dasar super(); System.out.println("Manusia"); }
Object Every class derives from a class called Object. // Java juga menambahkan dengan meng- extends(memperluas) kelas Objek juga! class Manusia extends Object { public Manusia() { super(); System.out.println("Manusia"); }
Object clone() equals() finalize() toString() ... Manusia String nama http://java.sun.com/javase/6/docs/api/java/lang/Object.html
> Tidak Bisa di Compile!!! Kenapa ? class Manusia { public Manusia(int a) { System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer(); > javac Test.java > Tidak Bisa di Compile!!! Kenapa ?
class Manusia { public Manusia(int a) { System. out class Manusia { public Manusia(int a) { System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { super(); // java memanggil konstruktor // Manusia() tidak ada.. System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer();
class Manusia { public Manusia(int a) { System. out class Manusia { public Manusia(int a) { System.out.println("Manusia"); } class Programmer extends Manusia { public Programmer() { super(5); // sekarang bisa: Manusia(int a) ada. System.out.println("Programmer"); class Test { public static void main(String [] args) { Programmer jussi = new Programmer();
class Manusia { private String nama public Manusia(String nama) { this class Manusia { private String nama public Manusia(String nama) { this.nama = nama; } class Programmer extends Manusia { private int gaji; public Programmer(String nama, int gaji) { super(nama); this.gaji = gaji; class Test { public static void main(String [] args) { Programmer jussi = new Programmer("Jussi", 5000);
Kelas Abstrak Dari kelas abstrak tidak bisa dibuat objek ! Kelas Abstrak biasanya digunakan dengan pewarisan. Kelas Abstrak mungkin memiliki metode-metode abstrak. Metode Abstrak memaksa kelas turunan untuk mengimplementasikan metode abstrak tersebut.
Kelas Abstrak: contoh abstract class Mamalia { abstract void bersuara(); } class Kucing extends Mamalia { //Kamu harus mengimplementasikan ini! public void bersuara() { System.out.println(“Meong!");
Abstract Class: example // Tidak bisa, karena mamalia // kelas abstrak Mamalia object = new Mamalia(); // Does work Kucing jerry = new Kucing();
Java: Kelas Abstrak dan Interface Kelas Abstrak bisa menampung metode “normal” dan metode abstrak. Interface hanya menampung metode abstrak Kelas Abstrak: class A extends beberapaKelasAbstrak Interface class A implements beberapaInterface
Kelas Abstrak >> Interface abstract class Movable { abstract public void start(); abstract public void stop(); } interface Movable { public void start(); public void stop();
Implementasi Interface interface Movable { public void start(); public void stop(); } class Mobil implements Movable { // Kamu harus mengimplementasikan ini public void start() { // Do something public void stop() {
Kelas Abstrak vs Interface Kelas abstrak dapat menampung metode normal dan metode abstrak Interface hanya bisa menampung metode abstrak Kelas dapat mewarisi satu kelas abstrak Kelas dapat mengimplementasikan beberapa Interface !
class Mobil extends Vehicle implements Movable, RunsOnGasoline { // You have to implement these public void start() { // Do something } public void stop() { public void kurangiBensin() { public void tambahBensin() { }
Polymorphism
int sebagai parameter class Latihan { public static void main(String [] args) { int x = 4; myMethod(x); } public static void myMethod(int a) { a++;
Manusia sebagai parameter class Manusia { } class Latihan { public static void main(String [] args) { Manusia jack = new Manusia(); myMethod(jack); public static void myMethod(Manusia a) { System.out.line(a.getNama());
Mamalia sebagai parameter class Mamalia { } class Manusiaextends Mamalia { class Kucing extends Mamalia { class Latihan{ public static void main(String [] args) { Manusia jack = new Manusia(); Kucing spot = new Kucing(); Mamalia Mamalia = new Mamalia(); //kucing dapat di lewati sebagai parameter di metode myMethode(Mamalia a) myMethod(jack); myMethod(Kucing); myMethod(Mamalia); public static void myMethod(Mamalia a) { System.out.println(a.getNama());
Object sebagai parameter ... class Latihan{ public static void main(String [] args) { Manusia jack = new Manusia(); Kucing spot = new Kucing(); Mamalia Mamalia = new Mamalia(); // semua tipe objek dapat di lewati di method ini myMethod(jack); myMethod(Kucing); myMethod(Mamalia); myMethod("hello"); // String } public static void myMethod(Object a) { System.out.println(a.toString());
Memanggil metode dari kelas Mamalia class Mamalia { } class Manusia extends Mamalia { public void meong() { System.out.println(“Meong!"); }; class Kucing extends Mamalia { class Exercise13 { public static void main(String [] args) { Manusia jack = new Manusia(); Kucing spot = new Kucing(); Mamalia Mamalia = new Mamalia(); myMethod(jack); myMethod(Kucing); myMethod(Mamalia); public static void myMethod(Mamalia a) { a.meong(); // Why this does not work?
Solusi class Exercise13 { public static void main(String [] args) { Manusia jack = new Manusia(); Kucing spot = new Kucing(); Mamalia Mamalia = new Mamalia(); myMethod(jack); myMethod(spot); myMethod(Mamalia); } public static void myMethod(Mamalia a) { // Now it works if(a instanceof Kucing) { Kucing spot = (Kucing) a; spot.meong();
This works, why? class Mamalia { public void giveBirth() { System.out.println("Giving birth"); }; } class Manusia extends Mamalia { class Kucing extends Mamalia { class Exercise13 { public static void main(String [] args) { Manusia jack = new Manusia(); Kucing spot = new Kucing(); Mamalia Mamalia = new Mamalia(); myMethod(jack); myMethod(Kucing); myMethod(Mamalia); public static void myMethod(Mamalia a) { a.giveBirth(); // Why this works?
class Movable { public void start(); public void stop(); } class Kendaraan { class Mobil extends Kendaraan implements Movable { public void start() { // Do something } public void stop() { class Exercise13 { public static void main(String [] args) { Mobil c = new Mobil(); myMethod(c); //bisa dilewati sama objek yang implemen Moveable public static void myMethod(Movable a) { a.start();