Wonderwall

Just another Binusian blog site

Bab 8, Object-Oriented Programming

December14

Tipe-tipe bahasa yang memiliki object oriented programming:

  • Beberapa mendukung procedural dan data-oriented programming (contohnya Ada 95+ dan C++)
  • Beberapa mendukung functional program (contoh CLOS)
  • Beberapa bahasa yang baru tidak mendukung paradigm lain tapi menggunakan struktur imperative yang mereka miliki (contoh: Java dan C#)

Beberapa bahasa adalah bahasa yang murni OOP (contoh : Smalltalk dan Ruby)

Object-Oriented Programming memiliki tiga konsep dasar yaitu:

  • Abstract Data Type
  • Inheritance (tema sentral dari OOP dan bahasa yang mendukungnya)
  • Polimorfisme

Object Oriented Programming Language juga mendukung paradigm menggunakan class, methods, object dan message passing.

Inheritance adalah pewarisan sifat dari superclass ke subclass, yang mewarisi attribute dan method yang masih sejenis beserta attribute dan method tambahan yang merupakan sifat khusus subclass. Sebagai contoh class sapi adalah hewan bertulang belakang / vertebrata yang merupakan mamalia pemakan tumbuhan / herbivora.

Konsep OOP:

  • Abstract Data Type dalam OOP sering disebut sebagai classes
  • Class instances disebut sebagai objek
  • Sebuah class yang mewarisi sesuatu disebut sebagai derived class atau subclass
  • Sebuah class yang sifatnya diwarisi oleh class lain dinamakan parent class atau superclass
  • Subprogram yang mendefinisikan sebuah operasi dari suatu objek disebut sebagai methods.
  • Dari calls ke methods dinamankan messages
  • Serangkaian koleksi methods dari suatu objek dinamakan message protocol atau message interface
  • Messagaes mempunyai dua bagian, method name dan destinasi dari objek.
  • Secara garis besar, sebuah class mewarisi seluruh sifat yang tadinya ada di parent class

Inheritance dapat di komplikasikan dengan akses control terhadap enkapsulasi entities

  • Class dapat menyembunyikan entities dari subclass nya
  • Class dapat menyembunyikan entities dari client nya
  • Class dapat menyembunyikan entities dari client nya tetapi memperbolehkan subclass mengakses nya

Sebuah class dapat memodifikasi method dari class turunan nya

  • Method yang baru melakukan override terhadap method yang lama
  • Method pada parent di overridden

Tiga cara membedakan dari class parent nya:

  • Class parent dapat mendefinisikan beberapa variable atau method nya untuk memiliki private akses, yang berarti mereka tidak akan terlihat oleh kelas turunan nya.
  • Subclass dapat menambahkan variable atau method untuk yang di wariskan dari parent
  • Subclass dapat memodifikasi sikap dari satu atau banyak method yang diwariskan.

Terdapat 2 jenis variable pada sebuah class :

  • Class variable – satu / class
  • Instance variable – satu / objek
  • Terdapat 2 jenis method pada sebuah class :
  • Class method – menerima pesan kepada class.
  • Instance method – menerima pesan kepada objek.

Konsep Dynamic Binding

  • Polymorphic variable dapat di definisikan pada kelas yang dapat melakukan referensi objek kelas dan objek dari turunan nya
  • Ketika hierarki kelas mengandung kelas yang override method biasa disebut dengan polymorphic variable, binding ke method akan dynamic
  • Mengizinkan system software lebih mudah di perpanjang ketika dikembangkan dan maintenance
  • Abstrak method adalah salah satu yang tidak dimiliki pada definisi (hanya mendefinisikan protocol)
  • Abstrak kelas memiliki setidak nya satu virtual method
  • Abstrak kelas tidak dapat di instansikan.

Hal-hal yang dapat menjadi suatu masalah dalam OOP Languages:

  • Ekslusivitas Objek
    • Semua adalah suatu objek
      • Keuntungan : Elegan dan kemurnian
      • Kekurangan : Lambat pada operasi objek yang simple
    • Menambah objek untuk menyempurnakan typing system
      • Kelebihan : Cepat pada operasi objek yang simple
      • Kekurangan : Hasil membingungkan type system
    • Memasukan gaya imperative typing system untuk primitf tapi membuatnya menjadi objek
      • Kelebihan  : Cepat pada operasi objek yang simple secara relative system typing lebih kecil
      • Kekurangan : Masih membingungkan type system
    • Jika kelas turunan adalah kelas parent maka objek pada kelas turunan harus bersifat sama dengan objek pada kelas parent.
    • Subclass dapat menambah variable dan method dan override method turunan dengan cara compatible
  • Single dan Multiple Inheritance
    • Multiple inheritance mengizinkan kelas baru untuk di warisi dari 2 atau lebih kelas
      • Kekurangan :
        • Bahasa dan implementasi yang kompleks
        • Potensial tidak efisien – dynamic binding memiliki biaya lebih disbanding dengan multiple inheritance
      • Kelebihan :
        • Terkadang berharga dan berguna
  • Alokasi dan Dealokasi Objek
    • Jika bersifat ADT, maka dapat di alokasikan dari semua tempat
      • Alokasi dari run-time stack
      • Secara explicit membuat pada heap
    • Jika heap-dynamic referensi dapat melalui pointer atau referensi variable
      • Memudahkan assignment – melakukan referensi ulang secara implicit
      • Jika objek stack dynamic, akan memiliki masalah pada subtype – object slicing
  • Dynamic dan Static Binding
    • Seluruh binding message to methods harus dynamic sehingga kita tidak kehilangan kelebihan dari dynamic binding namun hal ini menjadi tidak efisien. Akan lebih baik bila design nya memungkingkan si pengguna untuk menspesifikasi tipe bindingnya.
  • Nested Classes
    • Jika kelas baru dibutuhkan oleh satu kelas, maka tidak ada alasan untuk mendefinisikan agar dapat terlihat oleh kelas lain nya
  • Inisialisasi Objek

Kelebihan dari Object Oriented Programming adalah;

  • Representasi data dan fungsionalitasnya terpisah dari pemakaian
  • Divide dan Conquer
  • Penggunaan kembali kode
  • Meningkatkan readability kode

Kelebihan penggunaan Object Oriented Programming dalam bahasa C adalah

  • Lebih cepat
  • Sebuah lingkungan penulisan kode dimana C++ dan compiler lain nya tidak available

Kekurangan dari penggunaan Object Oriented Programming dalam bahasa C adalah:

  • Kode yang ditulis lebih kompleks
  • Ada kemungkinan akan kehilangan type safety
  • Memakan waktu programmer lebih lama (Proses pembuatan lebih lama)
  • Lebih cenderung error
  • Management memori secara manual

Dalam bahasa C, sebenarnya tidak benar-benar bisa digunakan untuk menuliskan kode berbasis Object-Oriented namun dapat dibuat menyerupai kode yang ditulis di dalam bahasa yang mendukung Object Oriented Language. Enkapsulasi dapat dilakukan dengan menaruh definisi dari struktur kode di dalam .c file dan bukan di dalam header seperti biasanya. Objek akan dihandle dengan menggunakan pointer dan programmer dapat menyediakan function yang dapat memproses pointer tersebut sebagai “method” dari objek tersebut Sifat polimorfisme bisa kita dapatkan dengan menggunakan function pointer, biasanya dikelompokan ke dalam struktur operasi, mirip dengan virtual method table di dalam C++. Ops structure bisa berisikan hal lain seperi konstanta yang value nya spesifik kepada suatu “subclass”. Struktur “Parent” dapat mempunyai reference ke ops-specific data melalui voi* pointer. Contoh:

12-1

12-2

12-3

Contoh di atas, struct printer itu adalah abstract class yang dapat di “derived” dengan cara mengisi struktur pr_ops dan menyediakan constructor function pr_create(). Setiap subtype akan mempunyai strukturnya tersendiri yang akan ter-“anchored” ke objek struct printer oleh pointer data. Ini didemonstrasikan dalam subtype fileprinter. yang secara dinamis.

Class Instance Records menyimpan keadaan suatu objek (static, terbentuk saat compile time). Apabila sebuah class mempunyai parent, maka variable subclass instance akan ditambahkan ke dalam parent CIR dan karena CIR itu static, maka semua akses ke instance variables dilakukan seperti record. Method yang berada di dalam class yang secara static terikat tidak perlu dimasukan ke dalam CIR, sebaliknya methods terikat harus memiliki entry di CIR.

Email will not be published

Website example

Your Comment: