Polymorphism adalah kebiasaan yang berbeda, tergantung pada subclass mana yang digunakan, tanpa mengetahui subclass mana yang dibekerja. Seperti pada file-file audio misalnya dengan extension mp3 atau wav pada media player seperti vlc player untuk memutar video atau musik, kita tinggal pilih filenya (bisa video atau audio) lalu media player memutarkan file tersebut sesuai dengan extension filenya. Jika extension file-nya mp3 maka class audio yang akan digunakan, jika extension file-nya 3gp misalnya, maka class video yang akan digunakan. Pada programnya kita cukup menuliskan 'namaAudioFile.play()' seperti itu.
Bila kita gali lebih dalam, contohnya audio file saja, dengan extension wav yang disimpan dalam storage tanpa di compress, sedangkan mp3 merupakan file audio yang dikompress. file audio yang dikompres mp3 dan wma misalnya, memiliki kompresi algorithms yang berbeda, tapi dengan prinsip polymorphism setiap extension file menggunakan class yang berbeda-beda. Pada setiap class memiliki metode play() yang berbeda-beda, dan media play tersebut tidak perlu mengetahui subclass mana yang akan digunakan.
Kita lihat kerangka kasarnya (contoh dibawah tidak benar-benar menyalakan memutar musik, tapi hanya mengganti keterangan kondisinya saja):
- class cAudio:
- def __init__(self,Filename):
- if not Filename.endswith(self.ext):
- raise Exception('file tidak dikenal sebagai audio file')
- self.Filename=Filename
- class mp3File(cAudio):
- ext='mp3'
- def play(self):
- print('playing {}.mp3'.format(self.Filename))
- class WavFile(cAudio):
- ext='wav'
- def play(self):
- print('playing{}.wav'.format(self.Filename))
- class rmFile(cAudio):
- ext='rm'
- def play(self):
- print('playing{}.rm'.format(self.Filename))
- class wmaFile(cAudio):
- ext='wma'
- def play(self):
- print('playing{}.wma'.format(self.Filename))
- >>> aa=mp3File('sss.mp3')
- >>> aa.play()
- playing sss.mp3.mp3
- >>> bb=rmFile('df.rm')
- >>> bb.play()
- playingdf.rm.rm
- >>> cc=mp3File('dfe.aaa') # kita menggunakan ext file yang tidak sesuai
- Traceback (most recent call last):
- File "<pyshell#4>", line 1, in <module>
- cc=mp3File('dfe.aaa')
- File "C:\Python34\PythonFiles\audio.py", line 4, in __init__
- raise Exception('file tidak dikenal sebagai audio file')
- Exception: file tidak dikenal sebagai audio file
- >>>
Python 3 Object Oriented Programming
Harness the power of Python 3 objects
Dusty Phillips
Harness the power of Python 3 objects
Dusty Phillips
No comments:
Post a Comment