Download download

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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