Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

Ini adalah postingan yang diterjemahkan oleh AI.

제이온

[Objek] Bab 2. Pemrograman Berorientasi Objek

  • Bahasa penulisan: Bahasa Korea
  • Negara referensi: Semua negara country-flag

Pilih Bahasa

  • Bahasa Indonesia
  • English
  • 汉语
  • Español
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Teks yang dirangkum oleh AI durumis

  • Dokumen ini membahas cara mengimplementasikan sistem pemesanan tiket film menggunakan pemrograman berorientasi objek, menjelaskan konsep seperti objek, kelas, kolaborasi, dan antarmuka.
  • Secara khusus, dokumen ini secara rinci memperkenalkan cara menggunakan pewarisan, polimorfisme, dan abstraksi untuk mengimplementasikan kebijakan diskon dan kondisi diskon, dan menunjukkan contoh implementasi fungsi inti dari sistem pemesanan tiket film.
  • Dokumen ini membandingkan dan menganalisis perbedaan antara pewarisan dan komposisi, menekankan keuntungan komposisi untuk penggunaan kembali kode dan pentingnya abstraksi untuk desain yang fleksibel.

Sistem Pemesanan Tiket Film


Melihat Kebutuhan

  • Kami ingin membangun sistem pemesanan tiket film secara online.
  • Film merepresentasikan informasi dasar tentang film.
    • Judul, durasi pemutaran, informasi harga, dll.
  • Penayangan merepresentasikan acara di mana penonton benar-benar menonton film.
    • Tanggal pemutaran, waktu, nomor antrian, dll.
  • Orang-orang memesan tiket film, tetapi sebenarnya mereka memesan tiket film tertentu yang akanditayangkan.
  • Kondisi diskon
    • Apakah harga didiskon atau tidak
    • Urutan kondisi: Gunakan nomor antrian untuk menentukan apakah ada diskon atau tidak
    • Kondisi waktu: Gunakan waktu mulai pemutaran film untuk menentukan apakah ada diskon atau tidak
  • Kebijakan diskon
    • Tentukan biaya diskon
    • Kebijakan diskon jumlah: Diskon harga tiket tertentu
    • Kebijakan diskon persentase: Diskon harga tertentu dari harga normal
  • Setiap film dapat diberi satu kebijakan diskon atau tidak sama sekali, dan kondisi diskon dapat menggabungkan beberapa kondisi diskon.
  • Jika kebijakan diskon diterapkan tetapi kondisi diskon tidak terpenuhi, atau jika kebijakan diskon tidak diterapkan, maka harga tidak akan didiskon.


Menuju Pemrograman Berorientasi Objek

Kerjasama, Objek, Kelas

  • Pemrograman berorientasi objek berorientasi pada objek.
    • Setelah kelas ditentukan, jangan khawatir tentang atribut dan metode apa yang dibutuhkan kelas tersebut.
    • Tentukan objek apa yang memiliki keadaan dan perilaku apa.
    • Lihat objek bukan sebagai entitas independen, tetapi sebagai bagian dari komunitas yang bekerja sama.


Struktur Program yang Mengikuti Struktur Domain

  • Domain adalah bidang di mana pengguna menggunakan program untuk menyelesaikan masalah.

Untitled

  • 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 lebih mudah dipahami dan diprediksi.


Menerapkan Kelas

  • Kelas dibagi menjadi bagian internal dan eksternal, dan untuk merancang kelas yang baik, Anda perlu memutuskan bagian mana yang akan dipublikasikan dan bagian mana yang akan disembunyikan.
    • Atribut objek disembunyikan sebagai private, dan metode yang diperlukan untuk mengubah keadaan internal dipublikasikan sebagai public.
  • Memisahkan bagian internal dan eksternal kelas memastikan otonomi objek, sehingga memberi programmer kebebasan dalam implementasi.


Objek Otonom

  • Objek harus menjadi objek otonom dengan keadaan dan perilaku.
  • Menggabungkan data dan fungsi ke dalam objek disebut enkapsulasi.
  • Kontrol akses harus digunakan untuk meminimalkan gangguan eksternal, sehingga objek dapat memutuskan tindakannya sendiri.
  • 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
  • Penyembunyian implementasi
    • Penulis kelas dapat menyembunyikan implementasi internal dari programmer klien dengan hanya memberikan bagian yang diperlukan.
    • Programmer klien hanya perlu mengetahui antarmuka, sehingga mengurangi jumlah pengetahuan yang diperlukan.


Komunitas Objek yang Bekerja Sama

  • Saat merepresentasikan uang, lebih baik untuk membungkusnya sebagai objek, seperti Uang, daripada hanya mendeklarasikan variabel tipe Panjang. Menggunakan objek membuat makna lebih mudah dipahami, dan operasi berulang dapat dilakukan di satu tempat.
  • Interaksi yang terjadi antara objek untuk mengimplementasikan fungsi sistem tertentu disebut kolaborasi.


Kisah Pendek tentang Kolaborasi

  • Satu-satunya cara objek dapat berinteraksi satu sama lain adalah dengan mengirim atau menerima pesan.
  • Metode disebut sebagai cara unik untuk menangani pesan yang diterima.
  • Penting untuk membedakan antara pesan dan metode, dan di sinilah konsep polimorfisme dimulai.


Mendapatkan Biaya Diskon

Memulai Kolaborasi untuk Menghitung Biaya Diskon

  • Kelas Film tidak memiliki logika detail tentang kebijakan diskon, dan itu didelegasikan ke antarmuka KebijakanDiskon. Penggunaan pewarisan, polimorfisme, dan abstraksi sangat penting.


Kebijakan Diskon dan Kondisi Diskon

Untitled


Pewarisan dan Polimorfisme

Ketergantungan Waktu Kompilasi dan Waktu Eksekusi

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


Pemrograman Berdasarkan Perbedaan

  • Pewarisan memungkinkan Anda untuk menambahkan kelas baru dengan cepat dan mudah 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 memastikan bahwa kelas anak mewarisi semua antarmuka yang disediakan oleh kelas induk.
  • Antarmuka mendefinisikan daftar pesan yang dapat dipahami oleh objek.
public class Movie {

    public Money calculateMovieFee(Screening screening) {
        return fee.minus(discountPolicy.calculateDiscountAmount(screening));
    }
  • Film mengirim pesan calculateDiscountAmount ke KebijakanDiskon. Film tidak peduli tentang kelas instans mana yang merespons, selama merespons dengan benar.
  • Oleh karena itu, KebijakanDiskonJumlah dan KebijakanDiskonPersentase keduanya dapat berkolaborasi dengan Film sebagai ganti KebijakanDiskon.
  • Proses di mana kelas anak menggantikan kelas induk disebut dengan upcasting. Ini karena kelas anak tampaknya secara otomatis diubah ke tipe kelas induk.


Polimorfisme

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


Antarmuka dan Polimorfisme

  • Jika Anda tidak perlu berbagi implementasi tetapi hanya ingin berbagi antarmuka, gunakan antarmuka alih-alih kelas abstrak.


Abstraksi dan Fleksibilitas

Kekuatan Abstraksi

  • Keuntungan abstraksi
    • Hanya dengan melihat hierarki abstraksi, Anda dapat menggambarkan kebijakan kebutuhan di tingkat tinggi.
    • Membuat desain lebih fleksibel.


Desain Fleksibel

  • Abstraksi mencegah desain menjadi terikat pada situasi tertentu, sehingga memungkinkan desain fleksibel.


Pertukaran Kelas Abstrak dan Antarmuka

public abstract class DiscountPolicy {

    private List conditions;

    public DiscountPolicy(DiscountCondition... conditions) {
        this.conditions = Arrays.asList(conditions);
    }

    public Money calculateDiscountAmount(Screening screening) {
        for (DiscountCondition condition : conditions) {
            if (condition.isSatisfiedBy(screening)) {
                return getDiscountAmount(screening);
            }
        }
        return Money.ZERO;
    }

    abstract protected Money getDiscountAmount(Screening screening);
}

public class NoneDiscountPolicy extends DiscountPolicy {

    @Override
    protected Money getDiscountAmount(Screening screening) {
        return Money.ZERO;
    }


  • Saat ini, KebijakanDiskonTidak ada masalah karena metode calculateDiscountAmount() dari KebijakanDiskon mengembalikan 0 jika tidak ada kondisi diskon. Namun, dari sudut pandang pengguna, Anda harus memasukkan kebijakan Tidak ada kebijakan ke Film sebagai argumen.
  • Oleh karena itu, lebih mudah untuk dipahami jika diubah seperti di bawah ini.


public interface DiscountPolicy {

    Money calculdateDiscountAmount(Screening screening);
}

public abstract class DefaultDiscountPolicy implements DiscountPolicy {

    private List conditions;

    public DefaultDiscountPolicy(DiscountCondition... conditions) {
        this.conditions = Arrays.asList(conditions);
    }

    public Money calculateDiscountAmount(Screening screening) {
        for (DiscountCondition condition : conditions) {
            if (condition.isSatisfiedBy(screening)) {
                return getDiscountAmount(screening);
            }
        }
        return Money.ZERO;
    }

    abstract protected Money getDiscountAmount(Screening screening);
}

public class NoneDiscountPolicy implements DiscountPolicy {

    @Override
    public Money calculateDiscountAmount(Screening screening) {
        return Money.ZERO;
    }
}

public class PercentDiscountPolicy extends DefaultDiscountPolicy {

    private double percent;

    public PercentDiscountPolicy(double percent, DiscountCondition... conditions) {
        super(conditions);
        this.percent = percent;
    }

    @Override
    protected Money getDiscountAmount(Screening screening) {
        return screening.getMovieFee().times(percent);
    }
}

public class AmountDiscountPolicy extends DefaultDiscountPolicy {

    private Money discountAmount;

    public AmountDiscountPolicy(Money discountAmount, DiscountCondition... conditions) {
        super(conditions);
        this.discountAmount = discountAmount;
    }

    @Override
    protected Money getDiscountAmount(Screening screening) {
        return discountAmount;
    }


  • Dengan cara ini, KebijakanDiskon diabstraksikan menjadi antarmuka, dan dibagi menjadi KebijakanDiskonTidak Ada yang mengimplementasikannya dan KebijakanDiskonDefault yang mewakili kebijakan diskon umum.

Untitled

  • Anda mungkin berpikir bahwa menambahkan antarmuka hanya untuk KebijakanDiskonTidak Ada tidak efisien dibandingkan dengan peningkatan kompleksitas.
  • Sadarilah bahwa semua yang berkaitan dengan implementasi merupakan objek dari pertukaran. Artinya, setiap kode yang Anda tulis harus memiliki alasan yang tepat.


Penggunaan Kembali Kode

  • Pewarisan dapat digunakan untuk menggunakan kembali kode.
  • Namun, lebih baik menggunakan komposisi daripada pewarisan untuk menggunakan kembali kode.
  • Saat ini, cara Film menggunakan kembali kode KebijakanDiskon adalah melalui komposisi.
  • Jika Film adalah kelas atas dan dibagi menjadi FilmDiskonJumlah dan FilmDiskonPersentase, maka ini akan menjadi penggunaan pewarisan.


Pewarisan

  • Kekurangan pewarisan
    • Melanggar enkapsulasi.
      • Anda perlu memahami struktur internal kelas induk.
      • Ada kemungkinan tinggi bahwa kelas anak juga perlu diubah saat kelas induk diubah.
    • Membuat desain menjadi tidak fleksibel.
      • Hubungan antara kelas induk dan anak ditentukan pada waktu kompilasi.
      • Tidak mungkin mengubah jenis objek pada waktu eksekusi.
      • Namun, komposisi memungkinkan Anda untuk mengganti instans pada waktu eksekusi melalui metode seperti changeDiscountPolicy() 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 menjaga kopling yang longgar.
  • Saat menggunakan kembali antarmuka untuk polimorfisme, Anda harus menggabungkan pewarisan dan komposisi.
    • Misalnya, antarmuka KebijakanDiskon harus menggunakan pewarisan untuk mengimplementasikan sub-implementasi.


Sumber

  • Objek
제이온
제이온
제이온
제이온
[Objek] Bab 1. Objek, Desain Dalam pengembangan perangkat lunak, kemudahan perubahan dan komunikasi sangat penting, dan untuk ini, desain berorientasi objek harus diterapkan. Objek adalah entitas otonom yang mengelola datanya sendiri, dan desain yang baik adalah mengelola dependensi

28 April 2024

[Efektif Java] Item 1. Pertimbangkan Metode Pabrik Statis Sebagai Pengganti Konstruktor Metode pabrik statis adalah cara yang fleksibel dan efisien untuk membuat instance alih-alih konstruktor. Mereka dapat diberi nama, mengembalikan instance yang sesuai dengan kondisi tertentu, dan meningkatkan kinerja melalui caching. Tidak seperti pola si

27 April 2024

[Efektif Java] Item 6. Hindari Pembuatan Objek yang Tidak Diperlukan Panduan tentang cara mengurangi pembuatan objek yang tidak diperlukan di Java. String, Boolean, dan objek tak berubah lainnya lebih baik menggunakan literal, dan ekspresi reguler lebih baik menggunakan instance Pattern yang di-cache. Selain itu, autoboxin

28 April 2024

Pemodelan Data Konseptual Pemodelan data konseptual adalah proses memisahkan entitas dan menyatakan hubungan antar entitas dalam ERD. Entitas adalah unit informasi independen, dan atribut adalah data yang dimiliki entitas. Pengidentifikasi secara unik mengidentifikasi entitas, dan
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 April 2024

Siapa yang harus Anda dukung di dalam organisasi? Gambar ini merupakan ringkasan menarik yang menunjukkan lapisan dan pengaruh dalam pengambilan keputusan organisasi, secara visual menampilkan kesadaran pemimpin, kemampuan inti, struktur permainan kekuasaan, dan strategi.
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

21 Mei 2024

[Non-Majors, Survive as Developers] 13. Wawancara Teknis Pengembang Pemula Artikel ini memperkenalkan 7 pertanyaan yang sering diajukan dalam wawancara teknis pengembang pemula dan tips untuk mempersiapkannya. Pelajari tentang pertanyaan dan strategi jawaban untuk berbagai bidang seperti OOP, database, jaringan, dan algoritma. S
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

1 April 2024

3 Hal yang Ingin Saya Katakan kepada Investor Perorangan yang Baru Memulai Saham Ini adalah saran tentang strategi investasi nilai dan sikap positif untuk investor perorangan yang baru memulai investasi saham. Investasi nilai adalah strategi untuk membeli saham yang kemungkinan besar akan salah dalam jangka pendek dan menunggu sampai
고집스런가치투자
고집스런가치투자
고집스런가치투자
고집스런가치투자

3 April 2024

Pemodelan Data Logika Pemodelan data logika adalah proses mengubah pemodelan data konseptual menjadi paradigma basis data relasional berdasarkan aturan pemetaan, menangani relasi 1:1, 1:N, N:M, dan memastikan integritas data melalui normalisasi. Melalui 1NF, 2NF, dan 3NF, tabe
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 April 2024

Pemodelan Data Logis Proyek Kanbanboard 2 Artikel ini menjelaskan langkah demi langkah bagaimana melakukan pemodelan data logis berdasarkan ERD pemodelan data konseptual, serta memberikan solusi untuk mengatasi kesulitan yang dihadapi selama proses normalisasi. Khususnya, artikel ini akan membaha
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 April 2024