Minggu, 22 Mei 2011

3 Konsep Yang Mendukung PBO

1. Encapsulation


     Encapsulation merupakan teknik dari pemrograman berorientasi obyek untuk mengatur method atau property dari suatu class dalam hal kemampuan untuk diakses. Pada dasarnya, pemrograman berorientasi obyek merupakan pemrograman yang menggunakan pola pikir alami dengan cara membuat berbagai obyek seperti dalam kehidupan nyata. Antara obyek tersebut kemudian berinteraksi melalui suatu antarmuka (interface). Interaksi antar obyek tersebut harus diatur karena pada dasarnya setiap obyek mempunyai atribut yang boleh diakses maupun atribut yang tidak boleh diakses.

2. Inheritance

Atau pewarisan pada pemrograman berorientasi objek merupakan  suatu hubungan dua buah kelas atau lebih. Dalam hal ini ada kelas yangmemiliki atribut dan metode yang sama dengan kelas lainnya beserta atributdan  metode  tambahan  yang  merupakan  sifat  khusus  kelas  yang  menjadi turunannya :

1. Inheritance (Pewarisan) merupakan salah satu dari tiga konsep dasar PBO.
2. Konsep inheritance ini mengadopsi dunia riil dimana suatu entitas/obyek 
3. dapat mempunyai entitas/obyek turunan.Dengan konsep inheritance, sebuahclass dapat mempunyai class turunan.
1. Pengertian Inheritance
Proses pewarisan data dan method dari suatu kelas kepada kelas yang lain
Class yg mewariskanSuperclass
Class yg diwariskan Subclass
2. Keyword Extends
bentukumumpada Java :
<hakakses> class <subclass> extends <superclass>
Contoh :
public class mobilextendsKendaraanBermotor
bentukumumpada C++ :
class <subclass> : <hakakses> <superclass>
contoh :
class mobil : public kendaraan_bermotor
3. Keyword Super
untuk memanggil konstruktor dan method oleh subclass yang dimiliki oleh superclass
o    Bentuk umum untuk memanggil konstruktor :
super ()
super(parameter)
o    Bentuk umum untuk memanggil method :
super.method(parameter)
4. Jenis-Jenis Inheritance
Single Inheritance (Pewarisan Tunggal)
Multiple Inheritance (PewarisanJamak)
Virtual Multiple Inheritance (PewarisanJamak Maya)
5. Single Inheritance (Pewarisan Tunggal)
Adalah pewarisan yang jumlah kelas dasarnya (basic class / superclass) tunggal, tapi kelas turunan (subclass) bisa lebih dari satu
Konsep inheritance yang ada di Java hanya memperkenankan adanya single inheritance.
6. Single Inheritance (Pewarisan Tunggal)
7. Syntax Single Inheritance
C++
JAVA
class A
{
. . .
};
class B : public A
{
. . .
}
class A
{
. . .
};
Public class B extends A
{
. . .
}

3. Polymorphism

Polymorphism merupakan kemampuan suatu method untuk bekerja dengan lebih dari satu tipe argumen. Pada bahasa lain (khususnya C++), konsep ini sering disebut dengan method overloading. Pada dasarnya, Python tidak menangani hal ini secara khusus. Hal ini disebabkan karena Python merupakan suatu bahasa pemrograman yang bersifat dynamic typing yaitu tidak memerlukan deklarasi tipe.
     Tidak seperti bahasa lain yang menangani Polymorphism ini secara khusus, Python tidak mengijinkan definisi lebih dari satu method. Untuk mengatasi hal ini, pemrogram harus mendefinisikan apa yang akan dilakukan terhadap method tersebut jika dalam method tersebut terdapat lebih dari kemungkinan argumen. Berikut ini adalah cara menangani polymorphism:

>>> class contohPoly:
...     def __init__(self, args=None):
...             if args == None:
...                     print 'Tidak ada argumen!'
...             if args == 1:
...                     print 'Ada 1 argumen!'
>>> testPoly = contohPoly()
Tidak ada argumen!
>>> test2Poly = contohPoly(1)
Ada 1 argumen!
>>> 

Berikut ini adalah contoh kesalahan karena mendefinisikan lebih dari satu method (meskipun dalam bahasa lain hal ini mungkin diijinkan):

>>> class polyError:
...     def __init__(self):
...             print 'Tidak ada argument!'
...     def __init__(self, args):
...             print 'Ada satu argument!'
...
>>> jelasKeliru = polyError()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: __init__() takes exactly 2 arguments (1 given)
>>> jelasKeliru = polyError(1)
Ada satu argument!
>>> 


Referensi :

  1. http://ns.akakom.ac.id/~kurikulum2009/Penyusunan%20modul%2024-27%20agt%200
  2. http://ifani.wordpress.com/2011/05/17/inheritance/

Pemrograman berorientasi obyek (PBO)

Apa itu PBO ?

 Pemrograman berorientasi obyek (PBO) adalah bahasa pemrograman model diorganisir sekitar "obyek" daripada "aksi" dan data daripada logika. Secara historis, program telah dilihat sebagai prosedur logis yang mengambil data input, proses, dan menghasilkan data keluaran.

Tantangan pemrograman dipandang sebagai cara menulis logika, bukan bagaimana untuk mendefinisikan data. Pemrograman berorientasi obyek mengambil pandangan bahwa apa yang kita benar-benar peduli adalah obyek yang kita ingin memanipulasi daripada logika diperlukan untuk memanipulasi mereka. Contoh benda berkisar dari manusia (digambarkan oleh nama, alamat, dan sebagainya) untuk bangunan dan lantai (yang dapat diuraikan sifat dan dikelola) ke widget kecil pada desktop komputer Anda (seperti tombol dan scroll bar).

Konsep dan aturan yang digunakan dalam pemrograman berorientasi objek memberikan manfaat penting:

§  Konsep kelas data memungkinkan untuk mendefinisikan subkelas objek data yang berbagi beberapa atau seluruh karakteristik kelas utama. Disebut warisan, ini milik PBO kekuatan analisis data yang lebih menyeluruh, mengurangi waktu pengembangan, dan memastikan lebih akurat coding.
§  Sejak kelas hanya mendefinisikan data perlu memperhatikan, ketika sebuah instance dari kelas (objek) dijalankan, kode tidak akan dapat mengakses data secara tidak sengaja program lainnya. Ini karakteristik menyembunyikan data menyediakan sistem keamanan yang lebih besar dan menghindari korupsi tidak disengaja data.
§  Definisi kelas adalah reuseable tidak hanya oleh program yang awalnya diciptakan tapi juga oleh program berorientasi objek lainnya (dan, untuk alasan ini, dapat lebih mudah didistribusikan untuk penggunaan dalam jaringan).
§  Konsep kelas data memungkinkan seorang programmer untuk menciptakan tipe data baru yang belum didefinisikan dalam bahasa itu sendiri.


 KONSTRUKTOR

Konstruktor adalah fungsi khusus anggota kelas yang otomatis dijalankan pada saatpenciptaan objek (mendeklarasikan instance). Konstruktor ditandai dengan namanya,yaitu sama dengan nama kelas. Konstruktor tidak mempunyai tipe hasil (return value).Biasanya konstruktor dipakai untuk inisialisasi anggota data dan melakukan operasi lain seperti  membuka file dan  melakukan  alokasi  memorisecara  dinamis. Meskipun konstruktor  tidak harus ada dalam kelas, tetapi jika diperlukan konstruktor dapat lebihdari satu.Konstruktor adalah fungsi anggota yang mempunyai nama yang sama dengannama kelas. Kegunaannya :

Mengalokasikan ruang bagi sebuah objek
Memberikan nilai awal terhadap anggota data suatu objek
Membentuk tugas-tugas umum lainnya


DESTRUKTOR

Destruktor adalah pasangan konstruktor. Pada saat program membuat objek makasecara otomatis kontruktor akan dijalankan, yang biasanya dimaksudkan untuk memberi nilai  awal  variable private.  Sejalan  dengan  itu,  C++  menyediakan  fungsi destruktor  (Penghancur  atau pelenyap)  yang  secara  otomatis akan dijalankan pada saatberakhirnya objek.Setiap kelas mempunyai tepat satu destuktor. jika kita tidakmendeklarasikan sebuah destruktor dalam sebuah kelas, maka destruktor akandiciptakan sendiri oeh compiler C++. Fungsi destruktor itu sendiri adalah untukmendealokasikan memori dinamis yang diciptakan kontruktor. Nama destruktor samadengan nama kelas ditambah awalan karakter tilde (~). Walaupun compiler C++ akansecara otomatis mendeklarasikan sebuah destruktor, akan tetapi sangat disarankan untuk mendeklarasikansendirisebuah destruktor. Karena dengan mendeklarasikansendiri destruktor maka kita mempunyai kontrol penuh terhadap apa yang dilakukan destruktor dari kelas yang kita buat.Destruktor adalah fungsi anggota yang mempunyai nama yang sama dengannama kelas ditambah symbol tilde (~) didepannya.


Referensi : 

  1. http://searchsoa.techtarget.com/definition/object-oriented-programming
  2. http://www.scribd.com/doc/53136298/11-Konstruktor-Destruktor

Pencarian sekuensial dan pencarian biner

pencarian sekuensial

Dalam ilmu komputer, pencarian linear adalah sebuah algoritma pencarian, juga dikenal sebagai pencarian sekuensial, yang cocok untuk mencari sebuah nilai tertentu pada sebuah himpunan data.
Algoritma ini beroperasi dengan memeriksa setiap elemen dari sebuah list sampai sebuah kecocokan ditemukan. Pencarian linear bekerja dalam O(n). Jika data terdistribusi secara acak, rata-rata ada n/2 pembandingan akan dilakukan. Kasus terbaik adalah ketika nilai yang dicari adalah elemen pertama dari list, kasus ini hanya memerlukan 1 pembandingan. Kasus terburuk adalah ketika nilai yang dicari tidak ada dalam list, yang memerlukan n pembadingan.
Modul List pada pustaka standard OCaml mendefinisikan sebuah fungsi "mem" yang mengembalikan nilai true jika elemen yang diberikan berada dalam list atau false jika tidak. Fungsi ini dinyatakan sebagai berikut:
let rec mem x = function [] -> false | h :: t -> h=x || mem x t
Pencarian linear dapat diimplementasikan secara matematika dengan pencocokan pola :
Mem[x_, {___, x_, ___}] := True Mem[_, _] := False
Pencarian linear dapat digunakan untuk mencari sebuah list tak berurut. Pencarian biner adalah pencarian yang lebih efisien yang dapat digunakan untuk mencari sebuah list berurut.
Jika diperlukan beberapa kali pencarian, disarankan untuk menggunakan struktur data yang lebih efisien. Satu pendekatan adalah dengan mengurutkan terlebih dahulu kemudian gunakan pencarian biner untuk setiap pencarian. Cara lain yang lazim adalah membuat sebuah tabel hash dan dilakukan pencariaan hash.

 

Algoritma pencarian biner

Umumnya, untuk mencari sebuah nilai dalam array disortir, kita harus melihat melalui elemen-elemen dari array satu per satu, sampai mencari nilai ditemukan. Dalam kasus dari pencarian nilai absen dari array, kita melewati semua elemen. Rata-rata, kompleksitas algoritma tersebut adalah proporsional dengan panjang array.
Situasi perubahan signifikan, ketika array diurutkan. Jika kita tahu itu, kemampuan akses acak dapat dimanfaatkan sangatefisien untuk menemukan pencarian nilai cepat. Biaya algoritma pencarian mengurangi untuk logaritma biner dari panjang array. Untuk referensi, log 2 (1 000 000) ≈ 20. Ini berarti, bahwa dalam kasus terburuk, algoritma membuat 20 langkah untuk menemukan nilai dalam array diurutkan dari satu juta elemen atau mengatakan, bahwa ia tidak hadir itu array.

Algoritma

Algoritma cukup sederhana. Hal ini dapat dilakukan secara rekursif salah satu atau iteratif:
  1. mendapatkan elemen tengah;
  2. jika elemen tengah sama dengan nilai yang dicari, algoritma akan berhenti;
  3. sebaliknya, dua kasus yang mungkin:
    • mencari nilai kurang, dari elemen tengah. Dalam hal ini, pergi ke langkah 1 untuk bagian array, sebelum elemen tengah.
    • mencari nilai lebih besar, daripada elemen tengah. Dalam hal ini, pergi ke langkah 1 untuk bagian array, setelah elemen tengah.
Sekarang kita harus mendefinisikan, kapan iterasi harus berhenti. Kasus pertama adalah ketika dicari unsur ditemukan.Kedua satu adalah ketika subarray tidak memiliki elemen. Dalam hal ini, kita dapat menyimpulkan, bahwa mencari nilai tidak hadir dalam array.

Contoh

Contoh 1. Temukan 6 di {-1, 5, 6, 18, ​​19 25,, 46, 78, 102, 114}.
Langkah 1 (elemen tengah adalah 19> 6):
   -1 5 6 18 19 25 46 78 102 114
Langkah 2 (elemen tengah adalah 5 <6):  
 -1 5 6 18 19 25 46 78 102 114
Langkah 3 (elemen tengah adalah 6 == 6):  
 -1 5 6 18 19 25 46 78 102 114

Contoh 2. Cari 103 di {-1, 5, 6, 18, ​​19, 25, 46, 78, 102, 114}.
Langkah 1 (elemen tengah adalah 19 <103):  
 -1 5 6 18 19 25 46 78 102 114
Langkah 2 (elemen tengah adalah 78 <103):  
 -1 5 6 18 19   25 46 78 102 114
Langkah 3 (elemen tengah adalah 102 <103):  
  -1 5 6 18 19 25 46 78 102 114
Langkah 4 (elemen tengah adalah 114> 103):  
  -1 5 6 18 19 25 46 78 102 114
Langkah 5 (dicari nilai tidak hadir):    
   -1 5 6 18 19 25 46 78 102 114 

Analisis Kompleksitas

keuntungan besar dari algoritma ini adalah yang kompleksitas itu tergantung pada ukuran array logaritmis dalam kasus terburuk. Dalam prakteknya ini berarti, algoritma yang akan melakukan paling banyak log 2 (n) iterasi, yang merupakan angka yang sangat kecil bahkan untuk array besar. Hal ini dapat terbukti sangat mudah. Memang, pada setiap langkah ukuran dicari bagian berkurang setengahnya. Algoritma berhenti, jika tidak ada unsur untuk mencari masuk Oleh karena itu, pemecahan ketimpangan berikut dalam bilangan bulat:
n / 2 iterasi> 0
mengakibatkan
Iterasi <= log 2 (n).
Ini berarti, bahwa kompleksitas algoritma pencarian biner waktu adalah O (log 2 (n)).

Kode snippet.

Anda dapat melihat solusi rekursif untuk Java dan berulang untuk C + + di bawah ini.

Jawa

/ **
  * pencarian untuk sebuah nilai di diurutkan susunan
  *
  * @ Param susunan
  *             susunan untuk pencarian di
  * @ Param nilai
  *             pencarian nilai
  * @ Param kiri
  *             indeks dari kiri batas
  * @ Param kanan
  *             indeks dari kanan batas
  * @ Kembali posisi dari pencarian nilai, jika itu menyajikan di yang susunan atau - 1, jika
  *          itu adalah absen
  * /
binarySearch int (int [] array, nilai int, int kiri, kanan int) {
      if (kanan> kiri)
            return -1;
      int tengah = (kiri + kanan) / 2;
      if (array [tengah] == nilai)
            kembali menengah;
      lain if (array [tengah] nilai>)
            kembali binarySearch (array, nilai, kiri, tengah - 1);
      lain
            kembali binarySearch (array, nilai, tengah + 1, kanan);
}

C + +

/ *
* Mencari nilai dalam array diurutkan
* Arr adalah array untuk mencari di
* Nilai dicari nilai
* Kiri adalah indeks dari batas kiri
* Benar adalah suatu indeks batas kanan
* Kembali posisi pencarian nilai, jika menyajikan dalam array
* Atau -1, jika tidak hadir
* /
int binarySearch (int arr [], nilai int, int kiri, kanan int) {
while (<kiri = kanan) {
int tengah = (kiri + kanan) / 2;
if (arr [tengah] == nilai)
kembali menengah;
else if (arr [tengah]> nilai)
kanan = tengah - 1;
lain
kiri = tengah + 1;
      }
return -1;