Modul Praktikum Pemrograman Berorientasi Obyek II
Oleh: Bambang Purnomosidi D. P., S.E., Ak., S.Kom., MMSI
SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER AKAKOM YOGYAKARTA
MODUL I Class dan subclassing I.1 Maksud dan Tujuan I.1.1 Maksud Modul ini membahas tentang konstruksi class serta pewarisan (inheritance) dari class lain. I.1.2 Tujuan 1. Mahasiswa memahami bagaimana suatu class dibuat 2. Mahasiswa memahami dan bisa mempraktikkan pembuatan class dengan mengembangkan sendiri dari awal ataupun melalui pewarisan dari class yang sudah ada. I.2
Dasar Teori Suatu class merupakan suatu template (cetakan) yang digunakan untuk mendefinisikan suatu obyek secara umum. Sebagai contoh, “manusia” adalah suatu class sedangkan “Zaky” adalah instance dari manusia. Hal ini berarti “Zaky” mempunyai atribut serta perilaku sebagai “manusia” tetapi mempunyai atribut serta perilaku khusus. “manusia”
“Zaky”
Mempunyai mata
Mempunyai mata (dan matanya berwarna hitam)
Berlari
Bisa berlari (cepat)
Mempunyai hidung
Mempunyai hidung (mancung)
...
...
Suatu class bisa didefinisikan dengan beberapa cara: 1. Membuat class dari awal 2. Membuat class dari class yang sudah ada (disebut sebagai subclassing). Pada beberapa bahasa pemrograman lain, proses ini disebut sebagai inheritance. Berikut ini adalah kedua cara yang telah disebutkan di atas: Membuat class dari awal class
: [“teks untuk dokumentasi class”]
Subclassing class [(class dasar 1, class dasar 2, ...)]:
Modul Praktikum PBOII – hal 2 dari 23
[“teks untuk dokumentasi class”]
I.3
Praktik
1. Buatlah file mahasiswa.py yang berisi source code Python berikut ini: class mahasiswa: default_umur = 20 def __init__(self, umur): self.default_umur = umur class mahasiswaBaru(mahasiswa): “Class untuk mahasiswa baru” def __init__(self, umur=20): self.default_umur = umur
2. Kerjakan perintah di bawah ini pada shell Python: >>> import mahasiswa >>> zaky = mahasiswa.mahasiswaBaru(18) >>> zaky.default_umur 18 >>>
3. Jelaskan masingmasing baris pada praktik nomor 2 di atas! 4. Dari praktik nomor 1 dan 2 di atas, manakah yang disebut sebagai object (atau class), instance, constructor, method, subclass, serta property? 5. Ubahlah file mahasiswa.py menjadi seperti berikut ini: class mahasiswa: default_umur = 20 default_kompetensi = "" def __init__(self, umur): self.default_umur = umur class mahasiswaBaru(mahasiswa): "Class untuk mahasiswa baru" def __init__(self, umur=20): self.default_umur = umur class mahasiswaKA(mahasiswa): """ Class untuk mahasiswa KA Mewarisi class induk yaitu mahasiswa """ def __init__(self, kompetensi='SIA, PBO, Linux'): self.default_kompetensi = kompetensi
Modul Praktikum PBOII – hal 3 dari 23
Jelaskan maksud dari perubahan di atas dan buatlah satu contoh cara menggunakan class baru di atas.
Modul Praktikum PBOII – hal 4 dari 23
MODUL II Class Browser II.1 Maksud dan Tujuan II.1.1 Maksud Modul ini membahas tentang fasilitas yang terdapat pada Python untuk melihat class. II.1.2 Tujuan 1. Mahasiswa memahami caracara untuk melihat struktur class. 2. Mahasiswa memahami dan bisa menggunakan tools yang ada di Python untuk melihat struktur class. II.2
Dasar Teori Bahasa pemrograman yang mendukung PBO biasanya mempunyai tools yang bisa digunakan untuk melihat struktur dari class. Beberapa contoh diantaranya adalah Python, Smalltalk, Java, dan lainlain. Class browser merupakan suatu fasilitas yang digunakan untuk membantu pekerjaan developer dalam membuat program. Dengan fasilitas tersebut, seorang developer bisa melihat struktur suatu class. Pada dasarnya, Python mempunyai dua tools yang bisa digunakan: 1. Dengan modul pyclbr Dengan modul ini, bisa dibaca suatu paket class sehingga bisa diketahui struktur dari class yang bersangkutan. Method yang digunakan untuk membaca class / file adalah readmodule dan readmodule_ex. Hasil dari method tersebut adalah dictionary. 2. Menggunakan IDLE Dengan IDLE, anda bisa menggunakan menu File – Class Browser. Anda harus membuka file yang ingin anda lihat stuktur classnya di IDLE. II.3 Praktik 1. Kerjakan perintah berikut ini pada shell Python: >>> import pyclbr >>> m = pyclbr.readmodule("pyclbr") >>> m {'Function': , 'Class': } >>> m = pyclbr.readmodule_ex("pyclbr") >>> m {'Function': , '_main': , '_getname': , '_getnamelist': , 'readmodule_ex': , '_readmodule': , 'Class': , 'readmodule': }
Modul Praktikum PBOII – hal 5 dari 23
>>>
Dari langkah yang telah anda lakukan di atas, apakah perbedaan antara method readmodule dengan readmodule_ex? 2. Bukalah IDLE, dengan menggunakan Path Browser, bukalah library Python berikut ini:
Setelah BaseHTTPServer.py muncul, aktifkanlah Class Browser dari menu File. Jelaskan hasil dari perintah tersebut! 3. Dengan cara yang sama dengan nomor 2, carilah 3 buah file library Python lainnya kemudian jelaskan!
Modul Praktikum PBOII – hal 6 dari 23
MODUL III Encapsulation III.1 Maksud dan Tujuan III.1.1 Maksud Modul ini membahas tentang encapsulation (pengkapsulan) yang merupakan definisi atribut dari suatu obyek. III.1.2 Tujuan 1. Mahasiswa memahami konsep encapsulation 2. Mahasiswa mampu mengaplikasikan konsep encapsulation menggunakan bahasa pemrograman Python. 3. Mahasiswa memahami perbedaan implementasi encapsulation pada Python dengan bahasabahasa pemrograman lain. III.2 Dasar Teori 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. Dalam kehidupan nyata bisa digambarkan sebagai berikut: Nama obyek : Mobil Atribut : bisa diakses : kemudi kopling gas persnelling rem tidak bisa diakses : mesin busi accu radiator Catatan: Contoh di atas adalah contoh tentang obyek mobil dan bagaimana mobil tersebut berinteraksi dengan obyek lain (pengemudi) pada saat digunakan. Pada saat mobil berjalan, pengemudi hanya berinteraksi dengan kemudi, gas, persnelling, Modul Praktikum PBOII – hal 7 dari 23
rem. Pada diagram class, obyek tersebut digambarkan sebagai berikut:
Jenisjenis akses Pada dasarnya ada tiga jenis akses: 1. Public, bisa diakses oleh class lain. 2. Private, tidak bisa diakses oleh class lain, bahkan oleh turunan dari class tersebut. 3. Protected, tidak bisa diakses class lain tetapi bisa diakses oleh turunan dari class tersebut. Encapsulation pada Python Python mempunyai cara yang longgar untuk pengkapsulan. Pada dasarnya setiap deklarasi atribut pada Python adalah public. Python tidak mendukung selain public tetapi hanya melakukan proses yang disebut sebagai name mangling yaitu memberi atauran penamaan khusus untuk atribut yang dimaksudkan sebagai atribut private. Untuk keperluan tersebut, setiap atribut yang dimaksudkan sebagai atribut private harus diawali dengan double underscores (__). Name mangling tersebut tidak sepenuhnya bisa digunakan untuk menyembunyikan atribut karena atribut tersebut tetap bisa diakses dengan menggunakan _namaKelas__namaAtribut. III.3 Praktik 1. Kerjakan praktik dibawah ini pada shell Python: >>> ... ... ... ... ... >>> >>> 1 >>>
class hitungan: __angkaRahasia = 0 def tampilkanHitungan(self): self.__angkaRahasia += 1 print self.__angkaRahasia hitung = hitungan() hitung.tampilkanHitungan() hitung.tampilkanHitungan()
Modul Praktikum PBOII – hal 8 dari 23
2 >>> hitung.tampilkanHitungan() 3 >>> hitung.__angkaRahasisa Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: hitungan instance has no attribute '__angkaRahasisa' >>>
2. Jelaskan praktik di atas dalam kaitannya dengan encapsulation! 3. Dari shell Python setelah mengerjakan praktik nomor 1, kerjakan: >>> hitung._hitungan__angkaRahasia 3 >>>
4. Apa yang dapat anda simpulkan dari praktik nomor 3?
Modul Praktikum PBOII – hal 9 dari 23
MODUL IV Multiple Inheritance IV.1 Maksud dan Tujuan IV.1.1 Maksud Python memungkinkan untuk mengembangkan suatu class berdasarkan lebih dari satu class yang sudah ada. Hal ini disebut dengan multiple inheritance dan merupakan bahan pembahasan modul ini. IV.1.2 Tujuan 1. Mahasiswa memahami konsep pembuatan class melalui penurunan lebih dari satu class induk. 2. Mahasiswa mempu mengaplikasikan konsep tersebut menggunakan Python. IV.2
Dasar Teori Seperti yang telah dijelaskan dan dipraktikkan pada modul I, pada dasarnya kita bisa membuat suatu class baru berdasarkan class yang sudah ada. Bagian inilah yang merupakan kekuatan dari pemrograman berorientasi obyek karena memungkinkan terjadinya sifat reusable, artinya suatu obyek akan bisa digunakan terus dan jika diinginkan obyek baru pemrogram bisa membuat class baru berdasarkan class yang sudah ada. Contoh: Makhluk Hidup > Mamalia > Manusia > Bule > mr. X Pembuatan class baru tersebut pada dasarnya bisa menggunakan lebih dari satu atribut class induk. Contoh: Makhluk Hidup > Mamalia > Manusia > Bule
Profesi > Teknologi Informasi > Software > Analis Sistem
mr. X
Multiple Inheritance pada Python Definisi class berdasarkan lebih dari satu class induk pada Python bisa dilakukan dengan sintaksis berikut ini: class [(class dasar 1, class dasar 2, ...)]: [“teks untuk dokumentasi class”]
IV.3 Praktik 1. Ketikkan perbaikan dari file mahasiswa.py pada modul I berikut ini kemudian simpan dengan nama file modul4.py: class manusia: default_asal_negara = "Indonesia"
Modul Praktikum PBOII – hal 10 dari 23
def setAsalNegara(self, negara): self.default_asal_negara = negara class mahasiswa: default_umur = 20 default_kompetensi = "" default_nama = "" def __init__(self, umur): self.default_umur = umur def setNama(self, namaMhs): self.default_nama = namaMhs class mahasiswaKA(manusia, mahasiswa): """ Class untuk mahasiswa KA Mewarisi class induk yaitu mahasiswa """ def __init__(self, kompetensi='SIA, PBO, Linux'): self.default_kompetensi = kompetensi def tampilkanIdentitas(self): print self.default_umur print self.default_nama print self.default_asal_negara print self.default_kompetensi
2. Jalankan perintahperintah berikut pada shell Python: >>> import modul4 >>> zaky = modul4.mahasiswaKA() >>> zaky.tampilkanIdentitas() 20 Indonesia SIA, PBO, Linux >>> zaky.setNama("Zaky Ahmad Aditya") >>> zaky.tampilkanIdentitas() 20 Zaky Ahmad Aditya Indonesia SIA, PBO, Linux >>>
3. Buatlah kesimpulan dari praktik 1 dan 2 di atas, terutama berkaitan dengan multiple inheritance!.
Modul Praktikum PBOII – hal 11 dari 23
MODUL V Polymorphism V.1 Maksud dan Tujuan V.1.1 Maksud Modul ini membahas tentang method yang mempunyai lebih dari satu tipe argumen (multiple argument type). V.1.2 Tujuan 1. Mahasiswa memahami konsep dari polymorphism dalam pemrograman berorientasi obyek. 2. Mahasiswa memahami bagaimana Python menangani konsep ini serta perbedaannya dengan bahasa lain. V.2
Dasar Teori 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!' ...
Modul Praktikum PBOII – hal 12 dari 23
>>> 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! >>>
V.3 Praktik 1. Jalankan script pada contoh pertama di atas pada shell Python. Apa yang dimaksud dengan tipe 'None'? Mengapa harus ada tipe 'None'? 2. Jalankan script pada contoh kedua di atas pada shell Python. Mengapa pada pembuatan instance pertama (jelasKeliru) terdapat error, sedangkan pada instance yang kedua tidak terjadi error? 3. Dari praktik nomor 2 di atas, apa yang dapat anda simpulkan tentang urutan method yang akan dikerjakan? bisakah satu method menghapus method yang telah di definisikan sebelumnya?
Modul Praktikum PBOII – hal 13 dari 23
MODUL VI Serialisasi Obyek (Object Persistence) VI.1 Maksud dan Tujuan VI.1.1 Maksud Modul ini membahas tentang penggunaan Python untuk menangani obyek yang bisa disimpan atau diambil kembali untuk keperluan pemrosesan pada program. VI.1.2 Tujuan 1. Mahasiswa memahami konsep dari object serialization (serialisasi obyek). 2. Mahasiswa memahami manfaat dari object serialization. 3. Mahasiswa mempu mengaplikasikan konsep dan manfaat tersebut menggunakan bahasa pemrograman Python. VI.2
Dasar Teori Instance dari suatu obyek secara normal akan hilang atau dihancurkan pada saat program selesai dijalankan atau pada saat kita keluar dari shell Python. Pada kasuskasus tertentu, pemrogram biasanya juga menginginkan suatu instance disimpan untuk penggunaan di proses yang akan datang. Contoh dari hal ini bisa dilihat pada berbagai aplikasi web khususnya pada aplikasi yang memerlukan penyimpanan kondisi tertentu. Misalnya pada aplikasi untuk belanja online, kondisi instance setelah pemrosesan belanja akan disimpan untuk keperluan pemrosesan berikutnya. Penyimpanan serta pemulihan instance suatu class ini sering disebut dengan object serialization atau object persistence atau pickling and unpickling atau marshalling atau flattening. Tiga istilah terakhir adalah istilah yang lazim digunakan pada bahasa Python. Python mempunyai beberapa cara untuk menangani hal ini tetapi disini akan dibahas modul pickle. Untuk menangani serialisasi ini, pemrogram harus melakukan import modul pickle, membuat instance dari class pickle kemudian menggunakan method dump dari class tersebut. Untuk mengambil instance yang tersimpan ke dalam file (atau sering disebut deserialize data stream), buat instance dari class pickle kemudian gunakan method load. Berikut ini adalah contoh gambaran penggunaannya: import pickle object = someClass() file = open(filename, 'w') pickle.dump(object, file) file = open(filename, 'r') object = pickle.load(file)
VI.3
# membuat external file # menyimpan object ke file # mengambil instance
Praktik Catatan: contoh pada praktik ini diambil dari buku manual Python.
Modul Praktikum PBOII – hal 14 dari 23
1. Ketikkan dan simpan script di bawah ini dengan nama TextReader.py: class TextReader: """Print and number lines in a text file.""" def __init__(self, file): self.file = file self.fh = open(file) self.lineno = 0 def readline(self): self.lineno = self.lineno + 1 line = self.fh.readline() if not line: return None if line.endswith("\n"): line = line[:-1] return "%d: %s" % (self.lineno, line) def __getstate__(self): odict = self.__dict__.copy() # copy the dict since we change it del odict['fh'] # remove filehandle entry return odict def __setstate__(self,dict): fh = open(dict['file']) count = dict['lineno'] while count: fh.readline() count = count - 1 self.__dict__.update(dict) self.fh = fh
# reopen file # read from file... # until line count is restored
# update attributes # save the file object
Menurut anda, apa fungsi dari class di atas? 2. Kerjakan perintahperintah berikut ini pada shell Python dan buat kesimpulan berkaitan dengan modul pickle tersebut: >>> import TextReader >>> obj = TextReader.TextReader("TextReader.py") >>> obj.readline() '1: class TextReader:' >>> obj.readline() '2: """Print and number lines in a text file."""' >>> obj.readline() '3: def __init__(self, file):' >>> import pickle >>> pickle.dump(obj,open('modul6.p', 'w')) >>> [bpdp@localhost pbo-2]$ ls -la modul6.p -rw-rw-r-- 1 bpdp bpdp 83 Sep 27 05:34 modul6.p [bpdp@localhost pbo-2]$ python Python 2.3.3 (#1, May 7 2004, 10:31:40)
Modul Praktikum PBOII – hal 15 dari 23
[GCC 3.3.3 20040412 (Red Hat Linux 3.3.3-7)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import pickle >>> reader = pickle.load(open('modul6.p')) >>> reader.readline() '4: self.file = file' >>> reader.readline() '5: self.fh = open(file)' >>>
3. Berdasarkan praktik di atas, dimanakah instance dari TextReader tersebut disimpan? Apa isi dari file hasil penyimpanan tersebut?
Modul Praktikum PBOII – hal 16 dari 23
MODUL VII Class untuk Penanganan Error VII.1 Maksud dan Tujuan VII.1.1 Maksud Modul ini membahas tentang class untuk penanganan error yang merupakan class yang hampir ada pada setiap bahasa pemrograman berorientasi obyek. Modul ini juga membahas tentang bagaimana membuat class sendiri sebagai turunan (subclass) dari class untuk penanganan error tersebut. VII.1.2 Tujuan 1. Mahasiswa memahami penggunaan class untuk menangani error. 2. Mahasiswa memahami dan mampu menggunakan class untuk penanganan error serta membuat class sendiri untuk memperluas kemungkinan penanganan error. VII.2 Dasar Teori Python mempunyai class yang bisa digunakan untuk menangani error. Class tersebut secara otomatis akan diaktifkan oleh Python tanpa perintah import. Jika pemrogram tidak mendefinisikan penanganan error maka Python akan menangani error tersebut dalam bentuk traceback message. Berikut ini adalah contoh penanganan oleh Python: >>> myFile = open("tidakada.txt") Traceback (most recent call last): File "<stdin>", line 1, in ? IOError: [Errno 2] No such file or directory: 'tidakada.txt' >>>
Pada dasarnya, kondisi tidak normal (error, warning) pada Python atau bahasa pemrograman lain, disebut dengan istilah exception. Exception muncul pada saat terjadi kesalahan atau kemungkinan peringatan. Untuk menangani exception ini, Python menyediakan blok perintah try ... except dan try ... finally. Untuk dua modul ini kita akan membahas tentang try ... except karena kemungkinan penerapan ke try ... finally juga tidak jauh berbeda. Sintaksis dari try ... except adalah sebagai berikut: try: <statements> except [<exception_name> [, ]]: <exception handling statements> [else: <statements executed only when no exception is raised>]
Modul Praktikum PBOII – hal 17 dari 23
Pada pembuatan try ... except ini, terdapat istilah raise. Istilah ini digunakan untuk menunjukkan kondisi error atau warning tertentu yang muncul. Jadi, jika terjadi error atau warning maka akan muncul (raise) suatu exception. Berikut ini adalah contoh penanganan exception tanpa instance serta dengan menggunakan instance: Tidak menggunakan instance: >>> try: ... myFile = open('tidakada.txt') ... except IOError: ... print "File 'tidakada.txt' tidak ada pada system!" ... File 'tidakada.txt' tidak ada pada system! >>>
Menggunakan instance: >>> try: ... myFile = open('tidakada.txt') ... except IOError, IOInstance: ... print IOInstance.args ... (2, 'No such file or directory') >>> print IOInstance[0] 2 >>> print IOInstance[1] No such file or directory >>>
Berikut ini adalah struktur class Exception: Exception | +-- SystemExit +-- StopIteration +-- StandardError | | | +-- KeyboardInterrupt | +-- ImportError | +-- EnvironmentError | | | | | +-- IOError | | +-- OSError | | | | | +-- WindowsError | | +-- VMSError | | | +-- EOFError | +-- RuntimeError | | |
Modul Praktikum PBOII – hal 18 dari 23
| | +-- NotImplementedError | | | +-- NameError | | | | | +-- UnboundLocalError | | | +-- AttributeError | +-- SyntaxError | | | | | +-- IndentationError | | | | | +-- TabError | | | +-- TypeError | +-- AssertionError | +-- LookupError | | | | | +-- IndexError | | +-- KeyError | | | +-- ArithmeticError | | | | | +-- OverflowError | | +-- ZeroDivisionError | | +-- FloatingPointError | | | +-- ValueError | | | | | +-- UnicodeError | | | | | +-- UnicodeEncodeError | | +-- UnicodeDecodeError | | +-- UnicodeTranslateError | | | +-- ReferenceError | +-- SystemError | +-- MemoryError | +---Warning | +-- UserWarning +-- DeprecationWarning +-- PendingDeprecationWarning +-- SyntaxWarning +-- OverflowWarning +-- RuntimeWarning +-- FutureWarning
Membuat Exception Sendiri Python mengijinkan pemrogram untuk membuat exception sendiri dengan cara melakukan subclassing exception standar dari Python. Berikut ini adalah contohnya (diambil dari Python Developer's Handbook – Andre Lessa):
Modul Praktikum PBOII – hal 19 dari 23
>>> import exceptions >>> class ConfigError (exceptions.Exception): ... def __init__(self, arg=None): ... self.args = arg ... >>> try: ... raise ConfigError("Kesalahan konfigurasi!") ... except ConfigError, e: ... print e.args ... Kesalahan konfigurasi! >>>
VII.3 Praktik 1. Pada prompt Python, ketikkan perintah berikut kemudian jelaskan 3 class dari seluruh class yang ada!: >>> help('exceptions')
2. Ketikkan perintah berikut kemudian jelaskan arti dari Traceback tersebut!: >>> myFile = open("tidakada.txt") Traceback (most recent call last): File "<stdin>", line 1, in ? IOError: [Errno 2] No such file or directory: 'tidakada.txt' >>>
3. Apa perbedaan try ... except dengan try ... finally? 4. Ketikkan perintahperintah berikut: Tidak menggunakan instance: >>> try: ... myFile = open('tidakada.txt') ... except IOError: ... print "File 'tidakada.txt' tidak ada pada system!" ... File 'tidakada.txt' tidak ada pada system! >>>
Menggunakan instance: >>> ... ... ... ... (2, >>> 2
try: myFile = open('tidakada.txt') except IOError, IOInstance: print IOInstance.args 'No such file or directory') print IOInstance[0]
Modul Praktikum PBOII – hal 20 dari 23
>>> print IOInstance[1] No such file or directory >>>
Menurut anda, mana yang sebaiknya digunakan? apa alasan anda? 5. Ketikkan perintah berikut: >>> a = 1/0 Traceback (most recent call last): File "<stdin>", line 1, in ? ZeroDivisionError: integer division or modulo by zero >>>
Setelah itu dengan menggunakan try ... except, gantilah agar pesan error yang keluar adalah “Anda tidak boleh membagi dengan angka nol!”. 6. Buatlah class baru yang merupakan subclass dari exceptions untuk menangani error karena tidak boleh memasukkan suatu nilai integer!
Modul Praktikum PBOII – hal 21 dari 23
MODUL VII Obyek Terdistribusi VIII.1 Maksud dan Tujuan VIII.1.1 Maksud Modul ini membahas tentang implementasi obyek terdistribusi menggunakan protokol XMLRPC yang merupakan modul standar dari Python mulai Python 2.2. VIII.1.2 Tujuan 1. Mahasiswa memahami pengertian obyek terdistribusi 2. Mahasiswa memahami manfaat obyek terdistribusi serta mampu menggunakan pengetahuannya untuk menyelesaikan masalah dengan obyek terdistribusi. 3. Mahasiswa memahami dan mampu menggunakan class xmlrpclib untuk menyelesaikan masalah obyek terdistribusi. VIII.2 Dasar Teori Obyek terdistribusi merupakan teknik pemrograman yang mendistribusikan class ke lebih dari suatu lokasi fisik. Teknik ini biasanya melibatkan pembuatan class pada beberapa lokasi dan antar pemrogram bisa mengakses class yang masingmasing dibuat oleh masingmasing pemrogram. Untuk bisa mengakses class yang tidak berada pada satu tempat secara fisik itu, diperlukan suatu protokol. Protokol merupakan seperangkat aturan yang digunakan untuk mendefinisikan cara berkomunikasi. Dalam kasus obyek terdistribusi, berarti merupakan seperangkat aturan untuk mendefinisikan cara berkomunikasi antar obyek. Terdapat banyak sekali protokol untuk keperluan tersebut, diantaranya adalah XMLRPC, SOAP, CORBA, dan lainlain. XMLRPC merupakan protokol yang diimplementasikan oleh Python dan telah ada di Python mulai versi 2.2. Protokol lainnya juga didukung meskipun menggunakan third party libraries. XMLRPC merupakan suatu spesifikasi dan sekumpulan implementasi yang memungkinkan software yang berjalan pada berbagai platform bisa melakukan pemanggilan prosedur melalui Internet. XMLRPC menggunakan HTTP untuk transport dan XML untuk pengkodean pesan. Skema cara kerja XMLRPC bisa digambarkan berikut ini: Data yang akan dikirimkan antar obyek yang terdistribusi di Internet terlebih dahulu dikodekan dalam suatu format terbuka yang disebut XML (Extensible Markup Language). Setelah dikodekan, pesan dan data tersebut akan dikirimkan ke obyek yang dituju melalui media Internet dan protokol transportasi HTTP. Setelah diterima, obyek yang dituju tersebut akan mendekodekan pesan dan data tersebut kemudian memproses permintaan tersebut dan mengirimkan hasilnya ke pemanggil setelah dikodekan juga ke dalam bentuk XMLRPC. Modul Praktikum PBOII – hal 22 dari 23
Berikut ini adalah contoh script disisi client untuk mengakses suatu obyek di tempat lain (server). Untuk server yang terletak di komputer yang sama bisa digunakan localhost. # server = ServerProxy("http://localhost:8000") # local server server = ServerProxy("http://betty.userland.com") print server try: print server.examples.getStateName(41) except Error, v: print "ERROR", v
Berikut ini adalah contoh dari definisi class yang dibuat di server class MyFuncs: def div(self, x, y) : return x // y
server = SimpleXMLRPCServer(("localhost", 8000)) server.register_function(pow) server.register_function(lambda x,y: x+y, 'add') server.register_introspection_functions() server.register_instance(MyFuncs()) server.serve_forever()
VIII.3 Praktik 1. Implementasikan contoh server di atas, kemudian coba juga untuk membuat program clientnya. 2. Jelaskan jawaban pada pertanyaan nomor 1 di atas. 3. Buat sendiri class di sisi server untuk manajemen list (membuat, menambah, menghapus list) serta contoh program di client untuk mengakses class tersebut. Gunakan kreativitas anda!
Modul Praktikum PBOII – hal 23 dari 23