Monday, April 21, 2014

REVIEW JAVA & OOP

REVIEW JAVA & OOP
Oleh
Ari Eko Wardoyo, M.Kom.

 Tujuan kuliah
•Mengulang dan mengingatkan kembali beberapa konsep penting dalam Object Oriented Programming  dan Java.

Outline
•Operator & Expresion
•Flow Control  (Decision & Iteration)
•References
•OOP
•Exception Handling

Operator
•Apakah operator?
 •Berdasarkan jumlah dari operands:
–Unary
–Binary
 •Berdasarkan operasi yang dilakukannya:
–Arithmatic
–Logical

 Operator & expression
•Apakah itu expression?
 •Apakah output dari potongan program berikut?

int ii = 1;
int jj = 2;
double a = (ii + 1) / (jj + 1);
double b = (double) (ii + 1) / (jj + 1);
double c = (ii + 1) / (double) (jj + 1);
double d = (ii + 1.0) / (jj + 1.0);
System.out.println (a + " " + b);
System.out.println (c + " " + d);

Operator & expression
• Apakah output dari potongan program berikut?

int width = 10;
int a = 3 / 4 * width;
System.out.println (a);
int b = width * 3 / 4;
System.out.println (b);
int c = width / 4 * 3;
System.out.println (c);
int d = width + 4 * 3;
System.out.println (d);

Perlu diingat: 

–Tipe data dari sebuah ekspresi bergantung pada operator dan tipe data dari
operands.
–Urutan evaluasi sebuah ekspresi bergantung pada tingkat precedence  operator. Jika dua buah operators memiliki tingkat precedence yang sama,  lihat pada associativity operatornya:

•LR: Left to Right
•RL: Right to Left

Flow control
•Branch (cabang)
–Digunakan untuk memilih perintah mana yang akan dijalankan berdasarkan kondisi tertentu. 


•Loop (pengulangan)
–Suatu kelompok program dijalankan secara berulang. Kondisi berhenti menyatakan berapa kali pengulangan dijalankan.


Flow control: if


if (condition)
{
    statement;
}
next statement




if (condition)
{
    statement1
}
else
{
    statement2
}
next statement



•Kesalahan umum:
if (x == 0);
    System.out.println (“x is zero”);

if (x > 0)
    System.out.println (“x = “);
    System.out.println (x);


 Flow control: switch

• Perintah if-else-ifyang membandingkan nilai sebuah konstant atau bilangan bulat dapat digantikan dengan perintah switch.

int digit;
String digitName;
switch (digit) {
    case 0: digitName = “zero”; break;
    case 1: digitName = “one”; break;
    case 2: digitName = “two”; break;
    case 3: digitName = “three”; break;
    case 4: digitName = “four”; break;
    case 5: digitName = “five”; break;
    case 6: digitName = “six”; break;
    case 7: digitName = “seven”; break;
    case 8: digitName = “eight”; break;
    case 9: digitName = “nine”; break;
    default: digitName = “”; break;
}

 Flow control: ?
testExpr ? yesExpr : noExpr

•Berguna untuk menyederhanakan perintah if-then-else sederhana

•Contoh:
•Setara dengan:

if (x > 100){
    y = x * 0.9;
} else {
    y = x;
}


y = (x > 100) ? (x * 0.9) : x;


Flow Control: while
  
while (condition){
      statement;
  }
  /* Post condition: ~condition */

•Selama nilai ekspresi condition true, maka
statement akan dijalankan, kemudian
ekspresi condition akan dievaluasi lagi.
•Saat nilai expression condition false,
pengulangan berhenti. Perintah statement
tidak lagi dijalankan.
•Ingat: condition dievaluasi lebih dulu!


Flow Control: do-while

do {


      statement;
      ...
  } while (condition);
  /* Post condition: ~condition */


•statement dijalankan lebih dulu, kemudian condition dievaluasi. 
–Jika kondisi true  statement dijalankan lagi.
–Jika kondisi false  loop berhenti.
•Minimal statement dijalankan sekali.


Flow control: for

for (initialization; condition; update) {
      statement;
  }

• setara dengan perintah while berikut:

initialization;
 while (condition) {
    statement;
    update;
 }

•for digunakan bila kita sudah tahu berapa banyak pengulangan yang akan dilakukan.


Flow Control: break
•Kegunaan: keluar dari loop terdalam
•Bukan kebiasaan programming yang baik (poor
design)!
•Contoh:

while (...) {
    ...
    if (something) {
        break;
    }
    ...
}


Flow Control: continue
•Kegunaan: menjalankan pengulangan selanjutnya tanpa menjalankan sisa dalam blok
pengulangan.
•Juga bukan kebiasaan programming yang baik!
•Contoh:

for (int ii = 1; ii <= 100; ii++) {
    if (ii % 10 == 0) {
        continue;
    }
    System.out.println (i);
}


•Bisakah anda tulis ulang tanpa continue?


Object oriented programming
•Class
–Kombinasi dari data dan operasi (metode) dengan  access modifier.
–Satu class membentuk sebuah tipe data

•Object
–instance dari class
–tiap object memiliki:
•state  => variable instances / fields
•behaviour  => methods


Class

•Class memiliki:
–Detail implementasi (blue print) dari sebuah object yang akan dibuat  bayangkan sebuah object factory.
–Class juga menyimpan static methods dan static variables dari object yang akan dibuat.

•Class menyatakan detail implementasi object  –Seluruh method dan fields
–code untuk method yang akan menentukan perilaku dari object.
•Berdasarkan definisi class  object dibuat.


 Object
• Membuat object dengan operator new
– Mengalokasikan ruang memory untuk object baru, dan mengembalikan alamat dari object dalam
memory.
– Panggil constructor yang sesuai.
Contoh: new Integer (20);

• Mendeklarasikan reference variable
ClassName varName;
Contoh:
• Integer x;
• int ii;
– Ingat: mendeklarasikan sebuah reference variable belum membuat object!


•Menyimpan alamat dari object agar dapat digunakan lagi: gunakan operator=
–Contoh:
Integer x = new Integer (20);
–Ingat: operator = tidak meng-copy (clone) object
•Mengakses field dan memanggil method:
gunakan operator . (dot)
–Contoh:

Dimension size;
size = getSize();
System.out.println (size.width);
System.out.println (size.getWidth());


 Field
•Menyimpan status dari object atau class
•Terdapat dua jenis field:
–Instance variable
•Tiap object punya nilai variable masing-masing  object
variable

–Static variable
•Satu class hanya punya satu nilai variable, walaupun class tersebut memiliki beberapa object  => classvariable

Method
•Definisi method terdiri dari:
–Header
•Access specifier (mis: public )
•Return type (mis : double, String)
•Nama method (mis: deposit, openFile)
•Kumpulan parameter
–Body (implementasi dari method)
•Method yang tidak memiliki body /
implementasi disebut abstract method.
•Mengapa ada method yang tidak memiliki
body / implementasi?
•Sebagaimana field, ada dua jenis method:
–Instance method (non-static method)
•method dapat dijalankan dari sebuah object  object
method
•ada parameter implisit this  method dapat mengakses
dirinya sendiri.
–Static method
•method dapat dijalankan tanpa object  class method
•tidak ada parameter this  static method tidak dapat mengakses instance variable
•Parameter Passing bersifat call by value:
pemanggil memberikan copy nilai kepada method
yang dipanggil. 

Reference Type
•Sebuah reference variable dalam Java menyimpan lokasi (alamat) dari objects dalam memory komputer.
•Sebuah primitive variable menyimpan nilai sebenarnya dari sebuah primitive data type.

•Dengan kata lain, reference variable tidak menyimpan object secara konkret (sebenarnya)
tapi primitive variable menyimpan ‘object’;

Reference Type
•Operator ==
–Untuk primitive data type, operator == digunakan untuk menguji apakah kedua variable memiliki nilai yang sama.
–Untuk reference data type, operator == digunakan untuk menguji apakah dua reference variables menunjuk pada object yang sama, TIDAK menunjukkan apakah dua objects berbeda memiliki nilai yang sama.
•Method equals
–Metode equals dapat digunakan untuk menguji apakah kedua object berbeda memiliki nilai yang sama.
–Metode equals pada beberapa object seperti Button, akan mengembalikan true bila keduanya menunjukkan pada object yang sama.

Array
•Deklarasi Array (array adalah object juga)
int [] array1;
–ingat: mendeklarasikan sebuah reference variable tidak berarti mengalokasikan memory dan membuat object.
•Membuat array
array1 = new int[100];
int[] array2 = { 2, 3, 7, 5 };

•Untuk mengakses element dalam array, gunakan index
array1[0] = 20;

•Karena array adalah object juga, operator = tidak
mengcopy(clone) array.
int[] lhs = new int[100];
int[] rhs = new int[100];
...
lhs = rhs;


 Dynamic Array Expansion
o   •Misalkan, kita hendak membaca sederetan bilangan bulat dari sebuah file dan
o   menyimpannya dalam array untuk kemudian diproses.
o   •Untuk membuat array, kita harus menyatakan ukuran dari array. 
o   •Jika kita tidak tahu berapa banyak bilangan buIat dalam file, maka kita tidak dapat menentukan ukuran dari array. 

Dynamic Array Expansion (2)

        contoh:
int[] a = new int[10];


–Jika array tidak cukup, kita dapat melakukan pengembangan array dengan contoh berikut:

int[] original = a;

a = new int[original.length * 2];

for (int ii = 0; ii < original.length; ii++) {
    a[ii] = original[ii];
}


Contoh matrix 1 dimensi


Contoh Matrix 2 Dimensi



Perkalian Matrix 

 C[0][0] = (A[0][0] * B[0][0]) + (A[0][1] * B[1][0]
 C[0][1] = (A[0][0] * B[0][1]) + (A[0][1] * B[1][1]
 C[1][0] = (A[1][0] * B[0][0]) + (A[1][1] * B[1][0]
 C[1][1] = (A[1][0] * B[0][1]) + (A[1][1] * B[1][1]


TUGAS Perkalian Matrix




Exceptions
o   •Exception menyatakan bahwa sebuah “kejadian aneh” telah terjadi;
o   •Sebuah object Exception menyimpan informasi tentang keanehan tersebut.
o   –throw  “menandakan” keanehan
o   –catch  tindakan “mengatasi” keanehan
o   •Error vs. Exception
o   –Error  kesalahan fatal, mis: out of memory
o   –Exception  masih bisa “dibetulkan”, mis:
§  EOFException,
§  ArrayIndexOutOfBoundException.

Exception throwing (˜tidak bertanggungjawab!)

o   •Klausa throws menyatakan bahwa sebuah method tidak menangani checked exception.
o   •Exception yang tidak ditangani akan di-propagate ke caller method.
o   •Exception yang tidak ditangani sampai di method main(String[] args) menyebabkan JVM mencetak error message, stack trace, lalu berhenti.

Exception handling (˜bertanggungjawab!)
o   •Gunakan statement try/catch/finally
o   –try menandakan kumpulan statement (try block) yang mungkin menyebabkan exception.
o   –try block diikuti 0 atau lebih catch block yang menangani sebuah tipe exception.
o   –Sesudah catch block, boleh ada finally block yang biasanya berisi statement “beres-beres”;
o   Statement ini dieksekusi apapun yang terjadi di try block.
§  •Jika flow control keluar dari try block karena break, continue atau return, finally block tetap dijamin akan dijalankan.

 Contoh exception handling
try {

    // Statement yang biasanya berjalan tanpa masalah

    // tapi mungkin menyebabkan exception
}
catch (SebuahException e1) {
    // Menangani exception dengan tipe SebuahException 
    // atau subclass-nya. Info tentang exception bisa
    // ditemukan dalam object e1

}
catch (SatuLagiException e2) {
    // Menangani exception dengan tipe SatuLagiException 
    // atau subclass-nya. Info tentang exception bisa
    // ditemukan dalam object e2
}
finally {
    // Statement yang pasti dijalankan, bagaimanapun
    // flow control berakhir dalam try block.
}


Prinsip-prinsip OOP
o   •Prinsip utama OOP:
o   –Abstraction: membuang detail yang “tidak penting”
o   –Encapsulation: menggabungkan data dan prosedur di dalam sebuah object
o   –Inheritance: tambahkan fungsionalitas dengan membuat subclass baru
o   –Polymorphism: “banyak bentuk”; Dalam Java, ada 2 jenis:
§  •Overloading: polymorphism secara trivial
§  •Overriding: polymorphism yang sebenarnya


Overloading
o   •Memakai nama sama untuk method berbeda
o   •Method-method ini dibedakan berdasarkan signature-nya:
o   –Jumlah parameter
o   –Tipe parameter
o   –Urutan parameter
o   •Perhatikan bahwa signature tidak tergantung
o   –Nama parameter
o   –Return type
o   •Overloading ditangani pada saat kompilasi (static binding)

Overriding
o   •Sebuah method yang memiliki nama dan signature yang sama dengan method dari superclass.
o   •Method dari subclass dikatakan meng-override method dari superclass.
o   •Ditangani pada saat runtime (dynamic binding): instance type menentukan method mana yang digunakan.

Polymorphism
o   •Dalam mendefinisikan method untuk sebuah subclass, ada tiga kemungkinan:
o   –override a method from the superclass: Nama dan signature sama dengan method milik superclass.
o   –inherit method from the superclass: Methods yang tidak ditulis ulang otomatis akan diturunkan kepada seluruh subclass. 
o   –create a new method: Nama dan signature berbeda dengan method milik superclass
o   •Ketika sebuah method dari sebuah object dipanggil (called), class/type dari object tersebut menentukan implementasi method yang mana yang akan dijalankan. 
o   •Sebuah method/field dapat atau tidaknya dipanggil/diakses ditentukan oleh tipe reference variable & access specifier.
o   •Kata kunci (keyword) “super” berfungsi sebagai reference terhadap object tapi diperlakukan sebagai instance dari superclass.
o   •Polymorphism dapat diartikan bahwa sebuah object dapat memiliki banyak ‘bentuk’, yaitu sebagai object dari class-nya sendiri atau sebagai object dari superclass-nya. 


Abstract Class
o   Abstract class sangat bermanfaat untuk menyimpan aspect generic dari subclass-nya. 
o   Sebuah method dapat didefinisikan tanpa implementasi dengan menyatakan method tersebut sebagai abstract. 
o   Abstract method tidak memiliki body, body –nya ‘digantikan’ dengan  (;).
o   Sebuah Class yang memiliki abstract method harus dinyatakan sebagai abstract class.
o   Abstract class tidak dapat dibuatkan langsung instance-nya. (objectnya)
o   Subclass dari abstract class dapat di buat instance-nya jika subclass override dan implement eluruh abstract methods dari superclass-nya.
o   Jika sebuah subclass dari sebuah abstract class tidak meng-implement seluruh abstract
o   methods dari superclass, maka subclass tersebut adalah abstract class juga.

 public abstract class Shape{
    public abstract double area ();
    public abstract double circumference ();
}
public class Circle extends Shape{
    protected double radius;
    public Circle (double r){   
           radius = r;
    }
    public Circle (){
           this (1.0);
    }
    public double area (){
           return Math.PI * radius * radius;
    }
    public double circumference (){
           return 2 * Math.PI * radius;
    }
    public double getRadius (){
           return radius;
    }
} public class Rectangle extends Shape{
    protected double length, width;
    public Rectangle (double length, double width)
    {   this.length = length;

        this.width = width;
    }
    public Rectangle ()
    {   this (1.0, 1.0);
    }
    public double area ()
    {   return length * width;
    }
    public double circumference ()
    {   return 2 * (length + width);
    }
    public double getLength ()
    {   return length;
    }
    public double getWidth ()
    {   return width;
    }

} public class Square extends Rectangle
{
    public BujurSangkar (double edge)
    {
        super (edge, edge);
    }
    public BujurSangkar ()
    {
        this (1.0);
    }
    public double getEdge ()
    {

        return length;
    }
} public class TryShape {
    public static void main (String args[]){
        Shape[] shape2 = new Shape[3];
        shape2[0] = new Circle (3.0);
        shape2[1] = new Rectangle (1.0, 2.0);

        shape2[2] = new Square (4.0);

        double totalArea = 0.0;
        double totalCircumference = 0.0;

        for (int ii = 0; ii < Shape2.length; ii++) {
            totalArea += shape2[ii].luas();
            totalCircumference += shape2[ii].keliling();
        }

        System.out.println (“Total Area = " + totalArea);
        System.out.println (“Total Circumference = " 
            + totalCircumference);
    }
}



Interface
o   Sebuah class hanya boleh meng-extend satu superclass, tapi boleh mengimplement banyak interface.
o   Ketika meng-extend superclass, sebuah class mewarisi interface (definisi method) dan juga implementasinya.
o   Ketika meng-implement interface, sebuah class hanya mewarisi interface (definisi method).
o   Contoh: sifat generik “comparable” didefinisikan di dalam sebuah interface:

 public interface Comparable {
    public int compareTo (Object ob);
}


–compareTo mengembalikan:
o   •<0: object this “lebih kecil” dari parameter ‘ob’
o   •0: object this sama nilainya dengan parameter ‘ob’
o   •>0: object this “lebih besar” dari parameter ‘ob’

Contoh: interface
public class CircleComparable extends Circle
    implements Comparable
{
    public CircleComparable (double r)
    {super (r);}
    public int compareTo (Object other)
    {

        CircleComparable otherCircle =
           (CircleComparable) other;
        if (radius < otherCircle.getRadius ())
        {return -1;}
        else if (radius > otherCircle.getRadius ())

        {return 1;}
        else
        {return 0;}
    }
}


 Interface
o   •Seluruh methods dalam sebuah interface adalah abstract method (keyword abstract dapat dinyatakan tapi optional)
o   •Seluruh variables dalam sebuah interface harus dinyatakan static dan final (constant)
o   •Class yang mengimplementasikan sebuah interface, harus memberikan implementation
o   (menuliskan method body) untuk seluruh method yang diturunkan dari interface.
o   •Sebagai mana class, interface adalah tipe data (data type).
o   •Interface dapat juga digunakan untuk menyatakan constant values.
o   •Sebuah interface dapat meng-extends satu atau lebih interfaces.
o   •Sebuah sub-interface menurunkan seluruh abstract method dan constants dari super-interfaces.
o   •Sub-interface dapat menambahkan new abstract methods dan juga new constants.
o   •Contoh:
public interface DrawingObject
    extends Drawable, Transformable {
... }
public class Shape
    implements DrawingObject { ... }

Ringkasan
o   •Tipe data dalam Java: primitive dan reference
o   •Dalam meng-evaluasi sebuah expression, perhatikan precedence dan associativity dari operator, dan tipe operand
o   •Flow Control: branch, loop
o   •Class & Object
o   –Object adalah instance dari class
o   –Behaviour sebuah object dinyatakan dalam method
o   –State sebuah object is dinyatakan dalam field
o   •Memperbesar ukuran array tidak efisien
o   •Abstract Class: menyimpan aspect generic dari subclass-nya. 
o   •Interface: Sekelompok method tanpa implementasi untuk menyamakan standarisasi penggunaan dengan implementasi yang bisa berbeda-beda.
o   •Exception digunakan untuk mengindikasikan kondisi special yang dapat terjadi. 

No comments:
Write komentar

Terimakasih Atas Kunjungan Anda..
Kritik dan Saran Anda membantu blog ini lebih baik..