제이온

[Objek] 2. Pemrograman Berorientasi Objek

  • Bahasa Penulisan: Bahasa Korea
  • Negara Standar: Semua Negaracountry-flag
  • TI

Dibuat: 2024-04-28

Dibuat: 2024-04-28 13:46

Sistem Pemesanan Tiket Film


Melihat Persyaratan

  • Kami ingin mengimplementasikan sistem pemesanan tiket film online.
  • Film merepresentasikan informasi dasar tentang film.
    • Seperti judul, durasi pemutaran, informasi harga, dll.
  • Pemutaran merepresentasikan kejadian sebenarnya saat penonton menonton film.
    • Seperti tanggal pemutaran, waktu, nomor urut, dll.
  • Orang memesan film, tetapi sebenarnya harus dikatakan bahwa mereka memesan film yang sedangdiputar.
  • Kondisi Diskon
    • Ya atau tidaknya diskon harga.
    • Kondisi Urutan: Menggunakan nomor urut pemutaran untuk menentukan apakah ada diskon atau tidak.
    • Kondisi Periode: Menggunakan waktu mulai pemutaran film untuk menentukan apakah ada diskon atau tidak.
  • Kebijakan Diskon
    • Menentukan biaya diskon.
    • Kebijakan Diskon Nominal: Mendiskon jumlah tertentu dari biaya pemesanan.
    • Kebijakan Diskon Persentase: Mendiskon persentase tertentu dari harga normal.
  • Setiap film dapat menetapkan satu kebijakan diskon atau tidak sama sekali, dan kondisi diskon dapat mencampurkan beberapa kondisi diskon.
  • Jika kebijakan diskon diterapkan tetapi kondisi diskon tidak terpenuhi, atau jika kebijakan diskon tidak diterapkan, maka biaya tidak akan didiskon.


Menuju Pemrograman Berorientasi Objek

Kerjasama, Objek, Kelas

  • Pemrograman berorientasi objek berfokus pada objek.
    • Jangan berpikir tentang atribut dan metode apa yang dibutuhkan kelas setelah kelas ditentukan.
    • Anda harus memutuskan objek apa yang memiliki keadaan dan perilaku apa.
    • Objek harus dilihat bukan sebagai entitas independen, tetapi sebagai bagian dari komunitas yang bekerja sama.


Struktur Program yang Mengikuti Struktur Domain

  • Domain mengacu pada area tempat pengguna menggunakan program untuk menyelesaikan masalah.

<span class="image-inline ck-widget" contenteditable="false"><img src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe7d22a03-4a24-40e9-8068-bd03b9fd816b%2FUntitled.png?table=block&id=3f1931fc-8ef9-470a-8189-3727146638f6&spaceId=b453bd85-cb15-44b5-bf2e-580aeda8074e&width=2000&userId=80352c12-65a4-4562-9a36-2179ed0dfffb&cache=v2" alt="Untitled" style="aspect-ratio:2000/438;" width="2000" height="438"></span>

  • Secara umum, nama kelas harus sama atau setidaknya mirip dengan nama konsep domain yang sesuai.
  • Hubungan antar kelas juga harus dibuat seminimal mungkin mirip dengan hubungan yang terjalin antar konsep domain sehingga struktur program mudah dipahami dan diprediksi.


Mengimplementasikan Kelas

  • Kelas dibagi menjadi bagian internal dan eksternal, dan untuk merancang kelas yang hebat, Anda harus memutuskan bagian mana yang akan dipublikasikan ke luar dan bagian mana yang akan disembunyikan.
    • Atribut objek disembunyikan sebagai private, dan metode yang diperlukan untuk mengubah keadaan internal dibiarkan terbuka sebagai public.
  • Membedakan antara bagian internal dan eksternal kelas memastikan otonomi objek, yang pada gilirannya memberi programmer kebebasan dalam implementasi.


Objek Otonom

  • Objek harus berupa objek otonom yang memiliki keadaan dan perilaku.
  • Menggabungkan data dan fungsi ke dalam objek disebut enkapsulasi.
  • Kontrol akses harus dikurangi untuk mengurangi campur tangan eksternal sehingga objek dapat membuat keputusan sendiri tentang tindakannya.
  • Prinsip pemisahan antarmuka dan implementasi adalah prinsip utama yang harus diikuti dalam pemrograman berorientasi objek.
    • Antarmuka publik: Bagian yang dapat diakses dari luar.
    • Implementasi: Bagian yang hanya dapat diakses dari dalam.


Kebebasan Programmer

  • Peran programmer dibagi menjadi penulis kelas dan programmer klien.
    • Penulis kelas menambahkan tipe data baru.
    • Programmer klien menggunakan tipe data yang ditambahkan oleh penulis kelas.
  • Penghilangan Implementasi
    • Penulis kelas dapat menyembunyikan implementasi internal dengan hanya memberikan bagian yang diperlukan kepada programmer klien.
    • Programmer klien hanya perlu mengetahui antarmuka, sehingga dapat mengurangi jumlah pengetahuan yang dibutuhkan.


Komunitas Objek yang Bekerja Sama

  • Saat merepresentasikan uang, lebih baik membungkusnya dalam objek seperti Money daripada hanya mendeklarasikan variabel tipe Long. Dengan menggunakan objek, komunikasi menjadi lebih baik dan pemrosesan operasi yang berlebihan dapat dilakukan di satu tempat.
  • Interaksi yang terjadi antar objek untuk mengimplementasikan fungsi tertentu dalam suatu sistem disebut kolaborasi.


Kisah Singkat tentang Kolaborasi

  • Satu-satunya cara objek dapat berinteraksi dengan objek lain adalah dengan mengirim atau menerima pesan.
  • Metode mengacu pada cara unik objek untuk memproses pesan yang diterima.
  • Membedakan antara pesan dan metode itu penting, dan dari sinilah konsep polimorfisme dimulai.


Menghitung Biaya Diskon

Memulai Kolaborasi untuk Menghitung Biaya Diskon

  • Kelas Movie tidak berisi logika detail tentang kebijakan diskon, dan telah didelegasikan ke antarmuka DiscountPolicy. Penggunaan pewarisan, polimorfisme, dan abstraksi sangatlah penting.


Kebijakan Diskon dan Kondisi Diskon

<span class="image-inline ck-widget" contenteditable="false"><img src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F7b9b27a5-0dac-4ba7-9552-05b7f8fbdecd%2FUntitled.png?table=block&id=3264f189-6e12-4a55-94d2-75b851320c7a&spaceId=b453bd85-cb15-44b5-bf2e-580aeda8074e&width=2000&userId=80352c12-65a4-4562-9a36-2179ed0dfffb&cache=v2" alt="Untitled" style="aspect-ratio:2000/535;" width="2000" height="535"></span>


Pewarisan dan Polimorfisme

Ketergantungan Waktu Kompilasi dan Ketergantungan Waktu Eksekusi

  • Ketergantungan kode dan ketergantungan waktu eksekusi dapat berbeda.
  • Semakin besar perbedaan antara keduanya, semakin sulit untuk memahami kode, tetapi kode tersebut menjadi lebih fleksibel dan dapat diperluas.


Pemrograman Berdasarkan Perbedaan

  • Pewarisan memungkinkan Anda untuk dengan mudah dan cepat menambahkan kelas baru berdasarkan kelas yang ada, dan Anda dapat menggunakan kembali implementasi kelas induk.
  • Metode membuat kelas baru dengan hanya menambahkan bagian yang berbeda dari kelas induk disebut pemrograman berdasarkan perbedaan.


Pewarisan dan Antarmuka

  • Pewarisan membuat kelas anak mewarisi semua antarmuka yang disediakan oleh kelas induk.
  • Antarmuka mendefinisikan daftar pesan yang dapat dipahami oleh suatu objek.
  • Movie mengirim pesan calculateDiscountAmount ke DiscountPolicy. Dari sudut pandang Movie, tidak masalah instance kelas mana yang merespons, selama respons diberikan dengan benar.
  • Oleh karena itu, baik AmountDiscountPolicy maupun PercentDiscountPolicy dapat berkolaborasi dengan Movie sebagai pengganti DiscountPolicy.
  • Proses kelas anak menggantikan kelas induk ini disebut upcasting. Ini karena tampaknya kelas anak secara otomatis diubah tipe datanya ke kelas induk yang berada di atasnya.


Polimorfisme

  • Polimorfisme adalah kemampuan untuk merespons secara berbeda tergantung pada jenis objek saat menerima pesan yang sama.
    • Movie mengirim pesan yang sama, tetapi metode mana yang akan dieksekusi sebenarnya bergantung pada kelas objek mana yang menerima pesan tersebut.
  • Polimorfisme didasarkan pada fakta bahwa ketergantungan waktu kompilasi dan ketergantungan waktu eksekusi suatu program dapat berbeda.
  • Polimorfisme menentukan metode yang akan dieksekusi pada waktu eksekusi, sehingga disebut late binding atau dynamic binding.


Antarmuka dan Polimorfisme

  • Jika Anda tidak perlu berbagi implementasi dan hanya ingin berbagi antarmuka, Anda dapat menggunakan antarmuka alih-alih kelas abstrak.


Abstraksi dan Fleksibilitas

Kekuatan Abstraksi

  • Keuntungan Abstraksi
    • Dengan hanya melihat hierarki abstraksi, Anda dapat menggambarkan kebijakan persyaratan pada tingkat yang lebih tinggi.
    • Desain menjadi lebih fleksibel.


Desain Fleksibel

  • Abstraksi mencegah desain dari pengikatan ke situasi tertentu, sehingga memungkinkan desain yang fleksibel.


Trade-off Kelas Abstrak dan Antarmuka


  • Saat ini, NoneDiscountPolicy sebenarnya tidak masalah karena metode calculateDiscountAmount() dari DiscountPolicy mengembalikan 0 jika tidak ada kondisi diskon. Namun, dari sudut pandang pengguna, mereka harus memasukkan kebijakan None ke dalam Movie sebagai argumen, yang telah ditambahkan.
  • Oleh karena itu, kelas NoneDiscountPolicy membingungkan, jadi memodifikasinya seperti di bawah ini akan membuatnya lebih mudah dipahami.



  • Dengan cara ini, DiscountPolicy diabstraksi menjadi antarmuka, dan dibagi menjadi NoneDiscountPolicy, yang merupakan implementasi dari antarmuka tersebut, dan DefaultDiscountPolicy, yang merepresentasikan kebijakan diskon umum.

<span class="image-inline ck-widget" contenteditable="false"><img src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F712983a9-3937-4265-82fe-66a144c44a0f%2FUntitled.png?table=block&id=f5ca651c-d03c-4a6c-97e9-7443ee5649a0&spaceId=b453bd85-cb15-44b5-bf2e-580aeda8074e&width=2000&userId=80352c12-65a4-4562-9a36-2179ed0dfffb&cache=v2" alt="Untitled" style="aspect-ratio:2000/886;" width="2000" height="886"></span>

  • Anda mungkin berpikir bahwa menambahkan antarmuka hanya untuk NoneDiscountPolicy tidak efisien dibandingkan dengan peningkatan kompleksitas.
  • Sadarilah bahwa semua hal yang berkaitan dengan implementasi dapat menjadi sasaran trade-off dan perlu dirancang dengan hati-hati. Artinya, setiap baris kode yang Anda tulis harus memiliki alasan yang tepat.


Penggunaan Kembali Kode

  • Pewarisan dapat digunakan untuk menggunakan kembali kode.
  • Namun, untuk penggunaan kembali kode, lebih baik menggunakan komposisi daripada pewarisan.
  • Dalam kode saat ini, cara Movie menggunakan kembali kode DiscountPolicy adalah melalui komposisi.
  • Jika Movie ditempatkan sebagai kelas induk dan dibagi menjadi AmountDiscountMovie dan PercentDiscountMovie, itu akan menjadi penggunaan pewarisan.


Pewarisan

  • Kekurangan Pewarisan
    • Melanggar enkapsulasi.
      • Anda perlu mengetahui struktur internal kelas induk.
      • Ada kemungkinan besar kelas anak perlu dimodifikasi saat kelas induk diubah.
    • Membuat desain menjadi kurang fleksibel.
      • Hubungan antara kelas induk dan anak ditentukan pada waktu kompilasi.
      • Tidak mungkin untuk mengubah jenis objek pada waktu eksekusi.
      • Namun, komposisi memungkinkan Anda untuk mengganti instance pada waktu eksekusi melalui metode seperti chageDiscountPolicy() di sisi objek yang menggunakannya.


Komposisi

  • Metode menggunakan kembali kode hanya melalui pesan yang ditentukan dalam antarmuka disebut komposisi.
  • Memungkinkan Anda untuk mengimplementasikan enkapsulasi dan mempertahankan pengikatan longgar.
  • Untuk polimorfisme, Anda perlu menggunakan kombinasi pewarisan dan komposisi saat menggunakan kembali antarmuka.
    • Misalnya, antarmuka DiscountPolicy harus menggunakan pewarisan untuk mengimplementasikan sub-implementasinya.


Sumber

  • Objek

Komentar0