Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Matakuliah : KONSEP BAHASA PEMROGRAMAN Tahun : 2010 PEMROGRAMAN ORIENTASI OBYEK Pertemuan 9 Outline Materi •Pendahuluan •Pemrograman Orientasi Obyek •Isu Desain POO •Smalltalk •C++ •Java •C# •Ada 95 •Model Obyek JavaScript •Implementasi Konstruksi O-O Bina Nusantara University 3 Pendahuluan • Banyak bahasa pemrograman orientasi obyek (POO) – Sebagian mendukung prosedural dan pemrograman orientasi data(e.g., Ada and C++) – Sebagian mendukung pemrograman fungsional (e.g., CLOS) – Bahasa yang lebih baru tidak mendukung paradigma lain tetapi menggunakan struktur imperatifnya sendiri (e.g., Java and C#) – Sebagian bahasa POO murni (e.g., Smalltalk) • Fitur utama POO – TDA – Inheritance : inti OOP – Polimorfisme Bina Nusantara University 4 Inheritance • Produktivitas meningkat karena reuse – TDA sukar untuk reuse – Semua TDA independen pada aras yang sama • Inheritance memungkinkan mendefinsikan klas baru berdasarkan klas yang ada sebelumnya dengan cara mewarisi bagian-bagian yang sama • Inheritance adalah solusi kedua masalah di atas-- reuse TDA sesudah perubahan kecil dan definisikan klas baru Bina Nusantara University 5 Konsep Orientasi Obyek • • • • Semua TDA disebut classes Instances class disebut objects Class yang mewarisi adalah derived class atau subclass Class darimana klas lain mewarisi disebut parent class atau superclass • Subprogram yang mendefinisikan operasi pada obyek disebut method • Call ke method disebut messages • Seluruh koleksi method pada obyek disebut message protocol atau message interface • Messages mempunyai dua bagian – nama method dan obyek tujuan • Dalam hal yang paling sederhana, class mewarisi semua antitas parent-nya Bina Nusantara University 6 Konsep Orientasi Obyek (lanjutan) • Inheritance bisa ruwet dengan kendali akses ke entitas enkapsulasi – class dapat menyembunyikan entitas dari subclass-nya – class dapat menyembunyikan entititas dari client-nya – class juga dapat menyembunyikan entitas dari client-nya tetapi membolehkan subclass-nya dapat melihatnya • Selain metode pewarisan, class dapat memodifikasi metode yang diwarisinya – Metode baru overrides metode yang diwarisi – Metode di parent di overriden Bina Nusantara University 7 Konsep Orientasi Obyek (lanjutan) • Ada dua tipe variabel dalam class: – Class variables - one/class – Instance variables - one/object • Ada dua tipe metode dalam class: – Class methods – menerima messages ke class – Instance methods – menerima messages ke objects • Single vs. Multiple Inheritance • Satu kerugian dari penggunaan reuse di inheritance : – Menghasilkan interdependensi diantara yang mengakibatkan ruwetnya pemeliharaan Bina Nusantara University 8 Pengikatan Dinamik • Polymorphic variable dapat didefinisikan dalam class yang mampunmereferensi (atau menunjuk) obyek class dan obyek dari sembarang turunannya • Jika hirarki class mencakup class yang meng- override metode dan metode tersebut dipanggil melalui polymorphic variable, pengikatan ke metode akan dinamik • Memungkinkan sistem software lebih mudah dikembangkan selama pengembangan dan pemeliharaan • Konsep pengikatan dinamik – Abstract method adalah metode yang tidak mencakup definisi (hanya meliputi protokol) Bina Nusantara University – Abstract class adalah class yang paling sedikit memuat satu metode virtual 9 Isu Desain POO • • • • • • • Eksklusivitas obyek Subclass sebagai tipe Peencekan tipe dan polimorfisme Single dan Multiple Inheritance Alokasi dan de-alokasi obyek Pengiktan dinamik dan statik Nested Class Bina Nusantara University 10 Eksklusivitas Obyek • Everything is an object – Keuntungan – elegan dan murni – Kerugian - operasi lambat pada obyek sederhana • Tambahkan obyek ke complete typing system – Keuntungan - operasi cepat pada obyek sederhana – Kerugian - membingungkan type system (dua tipe entitas) • Masukkan imperatif-style typing system untuk primitif tetapi buat everything else objects – Keuntungan - operasi cepat pada obyek sederhana dan typing system relatif kecil – Kerugian - tetap membingunkan karena dua type systems Bina Nusantara University 11 Subclass Subtype? • Apakah relasi “is-a” berlaku antara obyek klas induk dan obyek klas turunan? – Jika klas turunan adalah klas induk maka obyek klas harus mempunyai perilaku yang sama dengan obyek klas induk • Klas turunan adalah subtipe jika mempunyai relasi is-a denahn klas induknya – Subclass hanya dapat menambah variabel dan metode dan override metode yang diwarisi Bina Nusantara University 12 Pencekan Tipe dan Polimorfisme • Polimorfisme memerlukan pencekan tipe parameter dan return value secara dinamik – Pencekan tipe secara dinamik sangat costly dan menunda deteksi eror • Jika metode overriding dibatasi untuk mempunyai tipe parameter dan return type yang sama maka pencekan dapat statik Bina Nusantara University 13 Single dan Multiple Inheritance • Multiple inheritance memungkinkan klas baru mewarisi dari dua atau lebih klas • Kerugian multiple inheritance: – Bahasa dan kompleksitas implementasi, sebagian karena adanya kolisi nama (name collisions) – Potensi inefisiensi - dynamic binding costs lebih dari multiple inheritance tetapi tidak signifikan • Keuntungan : – Kadang-kadang sangat menyenangkan dan sangat berharga Bina Nusantara University 14 Alokasi dan De-alokasi Obyek • Darimana obyek di-alokasikan? – Jika mereka behave line ADT, mereka dapat dialokasikan dari manapun • Dialokasikan dari run-time stack • Eksplisit dibentuk di heap melalui new – Jika semua heap-dynamic, referensi dapat melalui variabel pointer atau reference • Menyederhanakan penugasan – de-referensi dapat implisit – Jika obyek stack dynamic, ada maslah dengan subtypes • Apakah de-alokasi ekplisit atau implisit? Bina Nusantara University 15 Pengikatan Statik dan Dinamik • Perlukah semua pengikatan pesan ke metode adalah dinamik? – Jika tak ada satupun, kita kehilangan keuntungan pengikatan dinamik – Jika semua ya sangat tidak efisien Bina Nusantara University 16 Nested Class • Jika class baru dibutuhkan hanya oleh satu class tidak ada alasan untuk mendefinisikan nya sehingga ia kelihatan oleh class lain – Dapatkah class baru di-nested didalam class yang menggunakannya? – Dalam sejumlah kasus, class baru di-nested didalam subprogram bukannya langsung ke klas lain • Isu lain – Fitur mana dari nesting class yang kelihatan oleh nested class dan sebaliknya Bina Nusantara University 17 Smalltalk • Smalltalk adalah bahasa OOP murni – – – – – – Segalanya adalah obyek Semua obyek mempunyai memori lokal Semua komputasi melalui obyek yang mengirim pesan ke obyek lain Tidak ada sama sekali bahasa imperatif Semua obyek dialokasi dari heap Semua de-alokasi secara implisit • Pencekan tipe dan polimorfisme – Semua pengikatan pesan ke metode adalah dinamik • Proses adalah mencari obyek untuk mana pesan dikirim untuk metode; jika tidak ketemu pencarian dilanjutkan ke superclass dst sampai ke class yang tidak punya superclass – Pencekan tipe hanya dinamik dan tipe eror hanya muncul ketika pesan dikirim ke obyek yang tidak mempunyai metode yang cocok Bina Nusantara University 18 Smalltalk (lanjutan) • Inheritance – Subclass Smalltalk mewarisi semua instance variables, instance methods, dan class methods dari superclass-nya – Semua subclass adalah subtype (tak ada yang dapat disembunyikan) – Semua inheritance adalah implementation inheritance – Tak ada multiple inheritance • Evaluasi – – – – Sintaks sederhana dan regular Contoh yang baik yang disediakna oleh bahasa kecil Lambat dibandingkan dengan bahasa imperatif Pengikatan dinamik memungkinkan tipe eror tidak dapat dideteksi sampai run time – Pengaruh paling besar : pengembangan OOP Bina Nusantara University 19 C++ • Karakteristik umum – – – – – • Evolusi dari C dan SIMULA 67 Bahasa OOP yang paling banyak digunakan Sistem tipe campur (prosedural dan OO) Konstruktor dan destruktor Elaborasi kendali akses ke entitas class Inheritance – – Class tidak perlu merupakan subclass dari semabarang class Kendali akses ke anggota – – – Bina Nusantara University Private (hanya visible dalam class dan friend) Public (visible dalam subclasses dan client) Protected (visible dalam class dan subclass, tetapi tidak client) 20 C++ (lanjutan) • Pembentukan subclass dapat deklarasikan dengan akses kendali (private atau public), yang memberi peluang perubahan akses oleh subclasses – Derivasi private – anggota public dan protected adalah private dalam subclasses – Derivasi public – anggota public dan protected tetap public dan protected dalam subclasses Bina Nusantara University 21 Contoh Inheritance C++ class base_class { private: int a; float x; protected: int b; float y; public: int c; float z; }; class subclass_1 : public base_class { … }; // b and y are protected and c and z are public class subclass_2 : private base_class { … }; // b, y, c, and z are private, and no derived class has // access to any member of base_class Bina Nusantara University 22 Reeksportasi C++ • Anggota yang tidak dapat diakses dalam subclass (karena derivasi private) dapat dideklarasian agar kelihatan dengan menggunakan scope resolution operator (::), e.g., class subclass_3 : private base_class { base_class :: c; … } • Motivasi menggunakan derivasi private – Class menghendaki agar anggota harus kelihatan, maka mereka didefinisikan sebagai anggota public; klas turunan menambahkan anggota baru tetapi tidak menghendaki klien untuk melihat anggota klas induknya meskipun mereka adalah public dalam definisi klas induknya Bina Nusantara University 23 C++ (lanjutan) • Multiple inheritance – Jika ada dua inherited members dengan nama yang sama, keduanya dapat dirujuk menggunakan scope resolution operator • Pengikatan dinamik – Metode dapat didefinisikan sebagai virtual, yang berarti mereka dapat dipanggil melalui polymorphic variables dan diikat secara dinamuik ke pesan – Fungsi virtual murni sama sekali tida mempunyai definisi – Class yang paling sedikit mempunyai fungsi virtual murni disebut abstract class Bina Nusantara University 24 C++ (lanjutan) • Evaluasi – C++, tidak seperti, menyediakan banyak kendali akses – C++ menyediakan multiple inheritance – Di C++, pemrogram waktu desain harus menentukan metode mana yang akan diikat statik atau diikat dinamik. • Pengikatan statik lebih cepat ! – Pencekan tipe di Smalltalk adalah dinamik (luwes tetapi agak kurang aman) – Karena interpretasi dan pengikatan dinamik, Smalltalk ~10 kali lebih lambat daripada C++ Bina Nusantara University 25 Java • Karena sangat dekat dengan C++, fokus bahasan pada perbedaan dari C++ • Karakteristik umum – Semua data adalah obyek kecuali tipe primitif – Semua tipe primitif mempunyai klas pembungkus yang menyimpan satu nilai data – Semua obyek adalah heap-dynamic, dirujuk dengan variabel reference dan sebagian besar dialkasikan dengan new – Metode finalize dipanggil secara implisit ketika pengumpul sampah melakukan pengisian kembali ruang yang dipakai oleh obyek Bina Nusantara University 26 Java (lanjutan) • Inheritance – Hanya mendukung single inheritance, tetapi ada kategori klas abstrak yang menyediakan beberapa manfaat dari multiple inheritance (interface) – Interface hanya dapat memuat deklarasi metode dan named constants, e.g., public interface Comparable { public int comparedTo (Object b); } – Metode dapat bersifat final, yaitu tak dapat di-override Bina Nusantara University 27 Java (lanjutan) • Pengikatan dinamik – Di Java, semua messages diikat secara dinamik ke metode kecuali jika metode bersifat final (i.e., tak dapat di-overrid sehingga pengikatan dinamik tidak punya makna) – Pengikatan statik juga digunakan jika metode static atau private yang keduanya tidak memboleh kan override. • Beberapa variasi dari nested classes • Semua dapat disembunyikan dari semua klas di paketnya kecuali untuk nesting class • Nested class dapat anonymous • Nested class lokal didefinisikan dalam metode dari nesting class-nya – Tak ada access specifier digunakan Bina Nusantara University 28 Java (lanjutan) • Evaluasi – – – – Desain untuk mendukung POO mirip dengan C++ Tak mendukung pemrograman prosedural Tak ada class tanpa parent Pengikatan dinamik digunakan sebagai jalan “normal” untuk mengikat method calls ke method definitions – Gunakan interfaces sebagai fasilitas untuk mendukung multiple inheritance Bina Nusantara University 29 C# • Karakteristik umum – Mendukung OOP mirip Java – Mencakup class dan struct – Class mirip dengan dengan klas Java – Struct adalah less powerful stack-dynamic constructs • Inheritance – Menggunakan sintaks C++ untuk mendifinisikan class – Metode diwarisi dari parent class dapat diganti di klas turunan dengan menandai definisinya dengan new – Versi parent class tetap dapat dipanggil secara explisit dengan prefix base,e.g. base.Draw() Bina Nusantara University 30 C# (lanjutan) • Pengikatan dinamik – Untuk melakukan pengikatan dinamik metode memanggil metode: • Metode di base class ditandai dengan virtual • Metode pasangannya di derived classes ditandai dengan override – Metode abstrak ditandai dengan abstract dan harus diimplementasikan di semua subclasses – Semua klas C# diturunkan dari satu root class, Object • Nested Classes – Klas C# yang langsung di-nested berperilaku seperti Java static nested class – C# tidak mendukung nested classes yang berperilaku seperti non-static classes Java • Evaluasi – C# adalah bahasa OO yang paling baru didesain –University Perbedaan antara C# dan Java dalam mendukung OOP relatif kecil Bina Nusantara 31 Ada 95 • Karakteristik umum – OOP adalah perluasan yang paling penting ke Ada 83 – Enkapsulasi adalah package yang mendifinisikan tagged type – tagged type adalah enkapsulasi di mana setiap onyek mempunyai tag untuk menyatakan tipenya selama eksekusi – Tagged type mungkin private type atau record – Tak ada constructor atau destructor dipanggil secara implisit • Inheritance – Subclass dapat diturunkan dari tagged types – Entitas baru ditambahkan ke inherited entities dengan melatakkannya ke definisi record – Semua subclass adalah subtype – Tak ada multiple inheritance; efek sebanding dicapai melalui generic classes Bina Nusantara University 32 Contoh Tagged Type Package PERSON_PKG is type PERSON is tagged private; procedure DISPLAY(P : in out PERSON); private type PERSON is tagged record NAME : STRING(1..30); ADDRESS : STRING(1..30); AGE : INTEGER; end record; end PERSON_PKG; with PERSON_PKG; use PERSON_PKG; package STUDENT_PKG is type STUDENT is new PERSON with record GRADE_POINT_AVERAGE : FLOAT; GRADE_LEVEL : INTEGER; end record; procedure DISPLAY (ST: in STUDENT); end STUDENT_PKG; // Note: DISPLAY is being overridden from person_PKG Bina Nusantara University 33 Ada 95 (lanjutan) • Pengikatan dinamik – Dilakukan menggunakan variabel polymorphic disebut classwide types • Untuk tagged type PERSON, classwide type adalah PERSON’class – Pengikatan lain adalah statik – Sembarang metode mungkin diikat dinamik – Purely abstract base types dapat didefinisikan di Ada 95 menggunakan kata cadangan abstract • Evaluasi – – – – Ada mendukung POO secara utuh Bentuk inheritance C++ lebih baik daripada Ada Ada tidak mempunyai inisialisasi obyek (e.g., konstruktor) Pengikatan dinamik di bahasa POO berbasis C dibatasi oleh pointer dan/atau referensi ke obyek; Ada tidak punya batasan seperti ini sehingga lebih ortogonal Bina Nusantara University 34 Model Obyek JavaScript • Karakteristik umum JavaScript – Sedikit relasinya dengan Java; kemiripan ke Java hanya penggunaan sintaks yang mirip – Dynamic typing – Tak ada klas, inheritance dan polimorfisme – Variabel dapat merujuk obyek atau akses langsung nilai primitif • Obyek JavaScript – Obyek mempunyai koleksi properti, mungkin data properti atau metode properti – Muncul sebagai hash, internal dan eksternal – Daftar pasangan properti/nilai – Properti dapat ditambah atau dihapus secara dinamik – Bare object dapat dibentuk dengan new dan call ke konstruktor untuk Object Bina Nusantara University var my_object = new Object(); 35 – Referensi ke properti dengan notasi dot Evaluasi JavaScript • Efektif sesuai desain sebagai bahasa scripting • Tidak cukup untuk aplikasi skala besar • Tak ada enkapsulasi untuk membentuk class sehingga program besar tak dapat disusun secara efektif • Tak ada inheritance sehingga reuse sangat sulit Bina Nusantara University 36 LATIHAN A. SOAL PILIHAN 1. Polymorphism terbentuk karena terjadinya a. dynamic binding antara message dan definisi metode b. static binding antara message dan definisi metode c. dynamic binding antara object dan definisi metode d. static binding antara object dan definisi metode 2.Derived class disebut subtype dari parent class jika relasi di antara keduanya adalah a. is a b. has a c. get a d. whole-part 3. Bahasa yang semua entitasnya adalah object mulai dari konstanta integer sampai system penanganan file adalah a. C++ b. Java c. Ada d. Smalltalk Bina Nusantara University 37 LATIHAN 4.Arti dari pure virtual function di C++ adalah a. has no body, can be called b. has a body, can be called c. has no body, can not be called d. has a body, can not be called 5. Opsi-opsi berikut ini adalah salah, kecuali a. object di C++ dan Java adalah heap dynamic b. object di C++ dan Java adalah stack dynamic c. object di C++ adalah stack dynamic dan di Java adalah heap dynamic d. object di C++ adalah heap dynamic dan Java adalah stack dynamic Bina Nusantara University 38 LATIHAN B. SOAL URAIAN 1. Selain ADT dan dynamic binding (polymorphism), inheritance adalah salah satu komponen penting di OOP. Ada banyak utility baru yang berkaitan dengan inheritance di antaranya adalah reuseabality, extendability, dominating data dan overriding method. Pertanyaan buat kamu: – Definisikan, menggunakan contoh jika perlu, apa yang disebut dengan inheritance, single inheritance, multiple inheritance, reuseability, extendability, dominatinmg data dan overriding method. – Mengapa reuseability sukar diimplemnetasikan di ADT? – Bandingkan single inheritance yang berlaku di C++ dan Java. Jelaskan mengapa Java tidak mengenal multiple inheritance. 2. De-alokasi object yang ada di heap memory dilakukan secara implicit di SmallTalk, Java dan juga di C# tetapi secara eksplisit di C++. Bina Nusantara University 39 Ringkasan • POO meliputi tiga konsep dasar yaitu ADTs, inheritance dan pengikatan dinamik • Isu desain utama: eksklusivitas obyek, subclass dan subtype, pencekan tipe dan polimorfisme, single dan multiple inheritance, pengikatan dinamik, de-alokasi obyek ekspilsit dan implisit, dan nested classes • Smalltalk adalah POO murni • C++ mempunyai dua tipe sistem berbeda (hibrid) • Java bukan bahasa hibrid seperti C++; hanya mendukung POO • Basis C# adalah C++ dan Java • JavaScript bukan bahasa POO tetapi bahasa scripting Bina Nusantara University 40