Tuesday, 9 June 2015

28.Polymorphism

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):
  1. class cAudio:
  2.      def __init__(self,Filename):
  3.           if not Filename.endswith(self.ext):
  4.                raise Exception('file tidak dikenal sebagai audio file')
  5.           self.Filename=Filename

  6. class mp3File(cAudio):
  7.           ext='mp3'
  8.           def play(self):
  9.                print('playing {}.mp3'.format(self.Filename))

  10. class WavFile(cAudio):
  11.           ext='wav'
  12.           def play(self):
  13.                print('playing{}.wav'.format(self.Filename))

  14. class rmFile(cAudio):
  15.           ext='rm'
  16.           def play(self):
  17.                print('playing{}.rm'.format(self.Filename))

  18. class wmaFile(cAudio):
  19.           ext='wma'
  20.           def play(self):
  21.                print('playing{}.wma'.format(self.Filename))
bila kita input:
  1. >>> aa=mp3File('sss.mp3')
  2. >>> aa.play()
  3. playing sss.mp3.mp3
  4. >>> bb=rmFile('df.rm')
  5. >>> bb.play()
  6. playingdf.rm.rm
  7. >>> cc=mp3File('dfe.aaa')  # kita menggunakan ext file yang tidak sesuai
  8. Traceback (most recent call last):
  9.   File "<pyshell#4>", line 1, in <module>
  10.     cc=mp3File('dfe.aaa')
  11.   File "C:\Python34\PythonFiles\audio.py", line 4, in __init__
  12.     raise Exception('file tidak dikenal sebagai audio file')
  13. Exception: file tidak dikenal sebagai audio file
  14. >>> 
Kita bisa lihat pada contoh diatas, superclass cAudio bisa mengakses (__init__ metode) variable ext disetiap subclass.








Python 3 Object Oriented Programming
Harness the power of Python 3 objects
Dusty Phillips

No comments:

Post a Comment