Rabu, 23 September 2009

tugas 3

Overriding
Berbeda dengan overloading. Kalo overloading, kita boleh menuliskan method yang sama namun dengan jumlah parameter yang berbeda dan nilai kembalian harus sama. Nah, kalau overriding konsepnya sama dengan overloading yaitu menulis kembali method. Namun, caranya overriding menulis kembali method sama persis. Sama mulai dari nama method dan isinya dan mengimplementasi kembali di sub classnya. Overriding dipakai saat kita menggunakan method yang sama tapi berbeda implementasinya. Jadi overriding method mempunyai nama method yang sama, jumlah parameter dan tipe parameter serta nilai kembalian (return) method yang di override. Jika method memiliki modifier akses public, method overridenya juga harus public.
Contoh:
class Kendaraan {
..............
public String getJenis() {
System.out.println(“Harga BBM turun”);
}
}
class Motor extends Kendaraan {
..............
public String getJenis() {
System.out.println(“Harga BBM premium 4000 rupiah”);
}
}
NB:
• class motor mengextends class kendaraan
• class motor melakukan override method di kendaraan namun berbeda implementasi
Kesimpulan:
• Override method merupakan method yang sama persis dengan method yang sudah ada di super kelasnya, biasanya perbedaannya adalah pada implementasi (program body)
• Overidding tidak bisa dilakukan dalam kelas itu sendiri
• Jadi Overidding kerat kaitannya dengan inheritance (pewarisan)
Contoh lain:
class Lingkaran {
double r;

Lingkaran(double r) {
this.r = r;
}
double Luas() {
return Math.PI*this.r*this.r;
}
double Luas(double r) {
this.r = r;
return Math.PI*this.r*this.r;
}
}
class Tabung extends Lingkaran {
double h;

Tabung() {
//konstruktor kelas turunan, ada super() dan diisi nilai awal
super(0);
}
double Luas(double r) {
//overriding (method and parameter sama)
this.r = r;
return Math.PI * this.r * this.r * this.h;
}
}
NB:
• Class lingkaran melakukan overloading method Luas (beda signature)
• Class tabung mengextends class lingkaran
• Class tabung meng-override method Luas hasil dari overload. Jadi kita juga biosa mengoverride method hasil overloading juga


Destructor
Destructor adalah anggota class (member function) yang berfungsi melepas memori pada
saat suatu obyek sudah tidak diperlukan lagi. Fungsi destructor kebalikan constructor.
Destructor tidak mempunyai atau memerlukan argumen. Destructor juga tidak
mengembalikan nilai apapun (tidak mempunyai return type). Seperti halnya constructor,
compiler dapat menambahkan sebuah destructor jika sebuah class tidak mempunyai
destructor.
virtual Destructor
Sebuah destructor dapat berupa fungsi virtual. Hal ini menjadi keharusan jika class B,
•merupakan base class.
•class D yang menggunakan B sebagai base class mempunyai anggota berupa
data dengan alokasi memori dinamik (pointer).
class B
{
public:
B();
~B();
};
class D : public B
{
mfachrz@gmail.com
Copyright@PIK-Unsri Maret 2006
34
public:
D() : p(new char[256]) {}
~D()
{
delete[] p;
}

private:
char *p;
};
Pada contoh tersebut destructor base class B bukan fungsi virtual. Dalam C++ umumnya
obyek class D digunakan secara polimorphic dengan membentuk obyek class D (derived
class) dan menyimpan alamat obyek tersebut dalam pointer class B (base class) seperti
pada contoh berikut ini,
void main(void)
{
B *pB=new D();
delete pB;
}
Dalam standar C++ menghapus obyek D (derived class) melalui pointer class B (base
class) sedangkan destructor base class non-virtual mempunyai efek yang tidak menentu
(undefined behaviour). Apabila standard C++ tidak menetapkan apa yang seharusnya
berlaku, maka terserah kepada pembuat compiler menentukan perilaku program pada
kondisi semacam ini. Umumnya pembuat compiler mengambil langkah untuk tidak
memanggil destructor class D (derived class). Dengan demikian, pada saat menjalankan
perintah delete, destructor class D tidak dieksekusi karena destructor base class B
mfachrz@gmail.com
Copyright@PIK-Unsri Maret 2006
35
nonvirtual. Akibatnya lokasi memori dinamik yang digunakan class D tidak pernah
dilepas. Hal ini adalah contoh lain terjadinya pemborosan memori (memory leak) oleh
suatu program. Jalan keluarnya adalah membuat destructor base class B virtual,
class B
{
public:
B();
virtual ~B();
}
Tidak seperti destructor, tidak ada virtual constructor atau virtual copy constructor. Pada
saat membentuk obyek, tipe obyek harus diketahui terlebih dahulu, apakah membentuk
obyek class A, B, C dsb. Tidak ada aspek bahasa C++ untuk mewujudkan virtual
constructor secara langsung, menempatkan virtual pada deklarasi constructor
merupakan kesalahan yang terdeteksi pada proses kompilasi. Efek virtual constructor
bukan tidak mungkin dicapai, C++ memungkinkan membuat idiom virtual constructor
yang bertumpu pada fungsi virtual dalam kaitannya dengan hubungan antara sebuah
class dengan base classnya.
Ringkasan
Sejauh ini pembahasan artikel masih belum menyentuh aspek praktis pemrograman,
namun demikian dalam menterjemahkan suatu desain maupun memahami program
yang ditulis orang lain sangatlah penting mengetahui aturan dasar sesuai standarisasi
C++.

Teori Destructor
Constructor dipanggil  Ada space di memori yang terpakai  Bebaskan memori setelah selesai Destructor

Fungsi & sifat destructor
• Fungsi : membebaskan memori yang digunakan variabel dinamis.
• Sifat :
otomatis dijalankan pada saat objek dilenyapkan.
tdk terdapat argumen (parameter)/void.
nama destructor = ~nama class

Contoh :
// example on constructors and destructors
#include
class CRectangle {
int *width, *height;
public:
CRectangle (int,int);
~CRectangle ();
int area (void) {return (*width * *height);}
};
CRectangle::CRectangle (int a, int b) {
width = new int;
height = new int;
*width = a;
*height = b;
}
CRectangle::~CRectangle () {
delete width;
delete height;
}
int main () {
CRectangle rect (3,4), rectb (5,6);
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
return 0;
}

Keterangan :
Program diatas menggunakan constructor untuk memberi nilai variable height dan width.
Constructornya adalah sbb:

CRectangle::CRectangle (int a, int b) {
width = new int;
height = new int;
*width = a;
*height = b;
}

Karena nantinya space memori yang ditempati height dan width akan dibebaskan setelah selesai maka keduanya dideklarasikan sebagai dynamic variable (pointer). Hanya dynamic variable yang dapat dihilangkan dari memori. Pembebasan memori menggunakan destructor sbb :
CRectangle::~CRectangle () {
delete width;
delete height;
}

Jumat, 04 September 2009

  Pemrograman berorientasi objek


 Pemrograman berorientasi objek (Inggris: object-oriented programming disingkat OOP) merupakan paradigma pemrograman yang berorientasikan kepada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek. Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya.Model data berorientasi objek dikatakan dapat memberi fleksibilitas yang lebih, kemudahan mengubah program, dan digunakan luas dalam teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah dikembangkan dan dirawat.

Konsep dasar dari Pemrograman Berorientasi Objek

 Pemrograman orientasi-objek menekankan konsep berikut:
kelas — kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh 'class of dog' adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi object. Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.
Objek - membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek
Abstraksi - Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari "pelaku" abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.
Enkapsulasi - Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
Polimorfisme melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan "gerak cepat", dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.
Inheritas- Mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada - objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpa haru mengimplementasi ulang perilaku tersebut (bahasa berbasis-objek tidak selalu memiliki inheritas.)
Dengan menggunakan OOP maka dalam melakukan pemecahan suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita memiliki sebuah departemen yang memiliki manager, sekretaris, petugas administrasi data dan lainnya. Misal manager tersebut ingin memperoleh data dari bag administrasi maka manager tersebut tidak harus mengambilnya langsung tetapi dapat menyuruh petugas bag administrasi untuk mengambilnya. Pada kasus tersebut seorang manager tidak harus mengetahui bagaimana cara mengambil data tersebut tetapi manager bisa mendapatkan data tersebut melalui objek petugas adminiistrasi. Jadi untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.

Bahasa pemrograman yang mendukung OOP antara lain:
1.Visual Foxpro
2.Java
3.C++
4.Pascal (bahasa pemrograman)
5.Visual Basic.NET
6.SIMULA
7.Smalltalk
8.Ruby
9.Python
10.PHP
11.C#
12.Delphi
13.Eiffel
14.Perl

Dua contoh penting dari bahasa OOP adalah C++ dan Java.

C++ : tanda plus menadakan “lebih dari C” C++ mengkombinasikan bahasa pemrograman C tradisional dengan kapabilitas berorientasi objek. C++ diciptakan oleh Bjarne Stroustrup. Dengan C++, programmer dapat menuliskan kode standar tanpa fitur berorientasi objek atau memadukan keduanya.

Java : bahasa pemrograman level tinggi yang dikembangkan oleh Sun Microsystems pada tahun 1995, java, juga sebuah bahasa beroerienatasi objek, digunakan untuk menulis program-program yang compact yang bisa didownload melalui internet dan dengan segera dieksekusi pada banyak komputer. Java sama seperti C++, namun lebih sederhana untuk menghapus fitur bahasa yang menyebabkan kesalahan pemrograman yang umum.

File kode sumber java (file dengan ekstensi .java) dikompilasi ke dalam format yang disebut bytecode (file dengan ekstensi .class), yang nantinya bisa dieksekusi oleh sebuh penerjemah (interpreter) Java. Kode Java yang telah dikompilasi bisa berjalan pada sebagian besar komputer karena penerjemah Java dan lingkungan untuk menjalankanya, disebut Java Virtual Machines (VMs), telah tersedia di sebagian besar sistem operasi, termasuk Unix, siste operasi Macintosh, dan Windows.
Aplikasi Java yang kecil disebut applet. Applet bisa di-download dari server web dan dijalankan pada komputer Anda dengan browser web yang kompatibel dengan Java, seperti Netscape Navigator atau Microsoft Internet Explorer. Applet Java membuat situs web lebih interaktif dan atraktif, menambahkan fitur seperti animasi dan kalkulator-namun hanya jika browser tersebut mendukung Java. Pengguna juga bisa men-download secara gratis applet Java dari berbagai situs di internet.

Class

 Python merupakan salah satu bahasa pemograman
berorientasi objek (OOP). Konsep OOP sangat membantu
dalam membuat aplikasi terutama yang berskala besar.
Pada bagian pembuatan aplikasi kita akan banyak
menerapkan konsep OOP dalam hal ini class. Disini akan
dijelaskan mengenai hal-hal umum mengenai OOP pada
python dimana menurut penulis lebih sederhana daripada
di Java ataupun C++. Bentuk umum class di python adalah:
class :
doc
data
fungsi
Doc mengacu pada dokumen string yang menjelaskan
suatu class dan bersifat opsional. Data dan fungsi mungkin
sudah dapat pembaca pahami. Aga lebih mudah
memahami kita langsung saja pada contoh berikut:
>>> class profile:
... 'bagian ini hanya sebuah komentar'
... nama='rido'
... umur=21
... kampus='amikom'
... def f1(self):
... print 'fungsi1 di dalam class'
... def f2(self,n,u,k):
... print n,u,k
...
>>> instanprofile=profile()
>>> dir(instanprofile)
['__doc__', '__module__', 'f1', 'f2', 'kampus',
'nama', 'umur']
>>> instanprofile.nama
'rido
>>> instanprofile.f1()
fungsi1 di dalam class
>>> instanprofile.f2('eva',21,'amikom')
eva 21 amikom
Kata self berarti mengacu pada referensi suatu objek
itu sendiri, dalam contoh di atas adalah class profile beserta
anggota datanya. Objek hasil instansiasi, seperti
instanprofile, bisa ditambahkan anggota datanya setelah
proses instansiasi dimana tidak akan akan mengubah datadata
pada class sumber. Perhatikan contoh berikut:
>>> class C:
... x=''
... def f1(self,s):
... self.x=s
...
>>> c=C()
>>> c.x
''
>>> c.f1('rido')
>>> c.x
'rido'
>>> instanprofile.a='tambahan'
>>> instanprofile.b=4400
>>> dir(instanprofile)
['__doc__', '__module__', 'a', 'b', 'f1', 'f2',
'kampus', 'nama', 'umur']
>>> dir(profile)
['__doc__', '__module__', 'f1', 'f2', 'kampus',
'nama', ‘umur']
Bagi yang sudah mengenal OOP, pasti tahu adanya
data public dan private. Data public bisa diakses di setiap
objek hasil instansiasi suatu class. Sedangkan data private
hanya bisa diakses oleh anggota classnya sendiri.
Pendeklarasian data private di python diawali 2 underscore
dan diakhiri maksimal 1 underscore. Berikut contohnya:
>>> class oop:
... data1='data ini bersifat public'
... __data2='data ini bersifat private'
...
>>> x=oop()
>>> x.data1
'data ini bersifat public'
>>> x.data2
Traceback (most recent call last):
File "", line 1, in ?
AttributeError: oop instance has no attribute 'data2'
Tampak objek (x) hasil instansiasi class oop tidak
dapat mengakses anggota data class yang bersifat private
yakni __data2. Sebenarnya di python tidak ada anggota
private, yang ada hanyalah pengalihan nama untuk
anggota data tersebut. Python melakukan pengalihan nama
suatu data yang seolah-olah bersifat private, contoh
__data2, menjadi _oop__data2. Untuk mengetahuinya
lakukan perintah dir().
>>> dir(oop)
['__doc__', '__module__', '_oop__data2', 'data1']
>>> dir(x)
['__doc__', '__module__', '_oop__data2', 'data1']
>>> x._oop__data2
'data ini bersifat private'
Kadang kita menginginkan beberapa class dengan
kondisi yang mirip dengan 1 class sebagai class utama. Hal
ini berhubungan dengan konsep penurunan class atau
inheritance pada oop. Penurunan class akan membuat
semacam class anak yang akan mewarisi anggota class
utama atau orang tua serta bisa mengganti beberapa
anggota data atau membuat baru sehingga class anak ini
lebih spesifik. Hal-hal yang bisa dijadikan pedoman dalam
penurunan class adalah:
· Class orang tua disebutkan dalam tanda kurung
nama class anak
· Class anak akan mengambil semua anggota data
class orang tua yang berhak diambilnya bila class
orang tua masih memiliki orang tua juga
· Penurunan class bisa dilakukan dari banyak orang
tua secara berjenjang dengan dipisah oleh tanda
koma
· Bila class orang tua dan anak memiliki nama
anggota data yang sama, maka anggota class
anaklah yang berlaku.
>>> class oop:
... xoop='anggota oop'
... def foop(self):
... print xoop
...
>>> class oop1(oop):
... xoop1='anggota oop1'
... def foop1(self):
... print xoop1
...
>>> a=oop()
>>> b=oop1()
>>> dir(a)
['__doc__', '__module__', 'foop', 'xoop']
>>> dir(b)
['__doc__', '__module__', 'foop', 'foop1', 'xoop',
'xoop1']
>>> class oop2():
... xoop2='anggota oop2'
... def foop2(self):
... print xoop2
...
>>> class oop3(oop,oop2):
... def foop3(self):
... print 'hasil penurunan berjenjang'
...
>>> dir(oop2)
['__doc__', '__module__', 'foop2', 'xoop2']
>>> dir(oop3)
['__doc__', '__module__', 'foop', 'foop2', 'foop3',
'xoop', 'xoop2']
>>> class anak(oop3):
... def foop3(self):
... print 'fungsi di class anak'
...
>>> dir(anak)
['__doc__', '__module__', 'foop', 'foop2', 'foop3',
'xoop', 'xoop2']
>>> c=anak()
>>> c.foop3()
fungsi di class anak
Bagaimana membuat constructor dan destructor class
pada python? Dalam hal ini kita akan mengenal beberapa
operator overloading di python. Operator overloading
adalah mengubah tugas suatu operator dengan tugas baru,
misalkan tanda + akan bertugas menjumlahkan pada suatu
operasi bilangan kemudian pada operasi string akan
bertugas sebagai penggabungan. Berikut tabel operator
overloading yang berhubungan dengan class:
Operator Keterangan
__init__
__del__
__add__
__sub__
__or__
__repr__
__call__
__getattr__
__getitem__
__setitem__
__getslice__
__len__
constructor
destructor
penjumlahan
pengurangan
bitwise or
konversi ke string dengan pasangan `` atau
pencetakan
pemanggilan dalam fungsi
pengambilan atribut
pengambilan indeks
assignment pada indeks
irisan
nilai panjang
Operator Keterangan
__cmp__
__radd__
perbandingan
penjumlahan objek di sebelah kanan
Contoh:
>>> class oop:
... def __init__(self):
... print 'constructor class oop'
...
>>> class oop1(oop):
... def __init__(self):
... print 'constructor class oop1'
... oop.__init__(self)
...
>>> anak=oop1()
constructor class oop1
constructor class oop
Fungsi __init__ akan dijalankan secara otomatis ketika ada
proses instansiasi. Bila terdapat penurunan class, maka
constructor yang akan dipanggil adalah dari class anak.
Agar constructor bisa dipanggil semua kita harus
memanggilnya secara explisit pada class anak.
>>> class oop:
... def __del__(self):
... print 'proses dealokasi data dari
memori'
...
>>> a=oop()
>>> dir(a)
['__del__', '__doc__', '__module__']
>>> del a
proses dealokasi data dari memori
>>> dir(a)
Traceback (most recent call last):
File "", line 1, in ?
NameError: name 'a' is not defined
Fungsi ini akan dijalankan secara otomatis ketika suatu
class dihancurkan/dealokasi dari memori. Contoh di atas
mengilustrasikan suatu objek a (hasil instansiasi class oop)
yang dihancurkan dari memori dengan perintah del, maka
akan memanggil fungsi __del__ yang berfungsi sebagai
destructor class.
>>> class oop:
... jml=0
... def __add__(self,data):
... self.jml=self.jml+data
... print 'hasil penjumlahan=',self.jml
...
>>> anak=oop()
>>> anak+10
hasil penjumlahan=10
>>> class oop:
... jml=0
... def __sub__(self,data):
... self.jml=self.jml-data
... print 'hasil pengurangan=',self.jml
...
>>> anak=oop()
>>> anak-10
hasil pengurangan=-10
Fungsi __add__ dan __sub__ akan dipanggil ketika suatu
objek instansiasi diberi operasi penjumlahan dan
pengurangan.
>>> class oop:
... data1=0
... def __or__(self,data2):
... self.data1=self.data1|data2
... print 'nilai data=',self.data1
...
>>> anak=oop()
>>> anak|10
nilai data=10
Fungsi ini akan melakukan bitwise or pada objek yang
dikenai operasi |.
>>> class oop:
... data=10
... def __repr__(self,data):
... return `self.data
...
>>> anak=oop()
>>> anak.__repr__()+' hari'
'10 hari'
>>> anak.data+6
16
>>> anak
10
Tampak bahwa fungsi ini akan melakukan konversi ke tipe
data string dan melakukan pencetakan.
>>> class oop:
... data=10
... def __call__(self):
... print self.data
...
>>> anak=oop()
>>> anak
<__main__.o>
>>> anak()
10
Pemanggilan class dilakukan layaknya pemanggilan fungsi
karena ada operator overloading __call__.
>>> class oop:
... def __getattr__(self,x):
... if x='atribut':
... print 'atribut class'
... else:
... print 'bukan atribut class'
...
>>> anak=oop()
>>> anak.f
bukan atribut class
>>> anak.atribut
atribut class
Fungsi ini akan dipanggil ketika kita mengakses nilai suatu
atribut class.
>>> class oop:
... data='hallo'
... def __getitem__(self,x):
... return self.data[x]
...
>>> anak=oop()
>>> for i in anak:
... print i,
...
h a l l o
Fungsi ini akan dipanggil setiap kita melakukan
pengambilan indeks pada suatu objek.
>>> class oop:
... data=[]
... def __setitem__(self, indeks, nilai):
... self.data.append(nilai)
...
>>> anak=oop()
>>> anak.data
[]
>>> anak[0]=1
>>> anak[1]=2
>>> anak.data
[1, 2]
>>> oop.data
[1, 2]
Dengan adanya fungsi __setitem__, suatu objek seolah-olah
memiliki indeks dan kita bisa melakukan assignment pada
indeks objek tersebut.
>>> class oop:
... data='hallo'
... def __getslice__(self,i,j):
... return self.data[i:j]
...
>>> anak=oop()
>>> anak[1:3]
'al'
Operator __getslice__ berguna untuk melakukan irisan
dengan mengambil nila indeks dari data suatu objek.
>>> class oop:
... data='hallo'
... def __len__(self):
... return len(self.data)
...
>>> anak=oop()
>>> len(anak)
5 >>> class oop:
... data=10
... def __cmp__(self,x):
... return cmp(self.data,x)
...
>>> anak=oop()
>>> anak<0
False
>>> anak==10
True
>>> class oop:
... jml=0
... def __radd__(self,x):
... return self.jml+x
...
>>> anak=oop()
>>> 5+anak
5 >>> anak+10
Traceback (most recent call last):
File "", line 1, in ?
TypeError: unsupported operand type(s) for +:
'instance' and 'int'
Penjelasam fungsi __len__, __cmp__, __radd__ mungkin
cukup jelas dari contoh yang diberikan. Sebenarnya
kegunaan __add__ dan __radd__ adalah sama yakni untuk
penjumlahan. Perbedaan keduanya adalah letak objek yang
dikenai operasi penjumlahan. Jika __add__ objeknya terletak
di sebelah kiri operator +, sedangkan __radd__ terletak di
sebelah kanan operator +.