Mengapa menggunakan kelas? Karena itu membuat pekerjaan lebih mudah, dengan asumsi Anda tahu bagaimana melakukan pemrograman berorientasi objek, dan dengan asumsi Anda sedang menulis GUI non-sepele. Menggunakan objek memungkinkan Anda untuk dengan mudah membagi kode Anda menjadi unit modular yang mandiri, dan memodulasi kode Anda secara umum dianggap sebagai praktik terbaik.
Pemrograman GUI dengan mudah cocok dengan gaya berorientasi objek, karena GUI seluruhnya terdiri dari objek - label, tombol, bilah gulir, area teks, dll. Karena Anda sudah menggunakan objek, mengatur kode Anda menjadi objek yang lebih besar masuk akal . Bilah alat adalah objek, bilah status adalah objek, panel navigasi adalah objek, area utama adalah objek, setiap tab buku catatan adalah objek, dan sebagainya.
Bahkan ketika kode Anda tidak terlalu kompleks, dari sudut pandang yang lebih praktis itu memungkinkan Anda menentukan binding dan callback lebih awal dalam file daripada definisi fungsi yang Anda panggil, yang menurut saya masuk akal.
Misalnya, perhatikan contoh sederhana (dengan asumsi bahwa tkinter telah diimpor seperti import tkinter as tk
(python3) atau import Tkinter as tk
(python2):
def quit(event=None):
sys.exit()
root = tk.Tk()
label = tk.Label(root, text="Hello, world")
label.pack()
label.bind("<1>", quit)
root.mainloop()
Bagi saya, aliran kode itu semuanya salah. Saya harus mendefinisikan metode berhenti sebelum saya referensi, dan pembuatan jendela root dan panggilan ke mainloop dipisahkan oleh semua kode lainnya.
Namun, dengan menggunakan kelas, saya dapat menulis kode dengan urutan yang lebih alami:
class MyWindow(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Hello, world")
label.pack()
label.bind("<1>", self.quit)
def quit(self, event=None):
sys.exit()
root = tk.Tk()
MyWindow(root).pack()
root.mainloop()
Bagian utama GUI berada tepat di atas file, dan kode pendukung ada di bawahnya. Sekarang, tentu saja, Anda dapat menggunakan fungsi untuk mencapai banyak hal yang sama. Namun menurut saya, kelas membuat semuanya lebih mudah.
Keuntungan lain adalah sekarang saya dapat dengan mudah mengubah jendela yang berisi tanpa harus mengubah apa pun tentang jendela "utama" (dan sebaliknya). Yaitu, saya dapat menambahkan batas, atau bagian baru yang lengkap ke GUI utama, tetapi saya tidak harus menyentuh satu baris kode pun di dalam MyWindow. Bandingkan dengan kode prosedural di mana Anda mungkin harus mengubah label.pack()
pernyataan, dan pernyataan paket (atau kisi) semua widget lainnya di UI.
Semua yang dikatakan, bagaimanapun, menggunakan pendekatan berorientasi objek tidak perlu untuk menulis kode yang baik, bersih, dapat dipelihara. Ini bisa menjadi, tetapi juga dapat menyebabkan kode miskin. Pada akhirnya, pendekatan berorientasi objek hanyalah alat. Apakah Anda menggunakannya atau tidak, dan apakah Anda menggunakannya dengan benar atau tidak tergantung pada banyak faktor. Jadi mungkin sangat baik untuk Anda, dan untuk kode yang Anda tulis, gaya fungsional dapat diterima. Saya pikir Anda akan menemukan bahwa ketika program Anda menjadi lebih kompleks, pendekatan berorientasi objek akan membuatnya lebih mudah untuk mengatur dan memelihara kode Anda.