Pemrograman berorientasi objek
| English | Bahasa Indonesia |
|---|---|
| object/ˈɒbdʒekt/ | benda itu sendiri |
| encapsulation/ɪnˌkæpsjʊˈleɪʃn/ | enkapsulasi |
| class/klæs/ | kelas |
| instance/ˈɪnstəns/ | instansi |
| constructor/kənˈstrʌktə/ | konstruktor |
| inheritance/ɪnˈherɪtəns/ | warisan |
| subclass/ˈsʌbklæs/ | subclass |
| superclass/ˈsuːpəklæs/ | superclass |
| polymorphism/ˈpɒlɪmɔːfɪzəm/ | polimorfisme |
| abstraction/əbˈstrækʃn/ | abstraksi |
| containment/kənˈteɪnmənt/ | keanggotaan |
| aggregation/ˌæɡrɪˈɡeɪʃn/ | agregasi |
Perubahan di satu tempat yang dulunya berarti perubahan di lima puluh
- Sebuah program menyimpan saldo pelanggan sebagai angka publik. Dua puluh rutinitas membacanya dan lima belas menuliskannya. Sekarang saldo tidak boleh pernah negatif.
- Tanpa objek, aturan tersebut harus ditambahkan di十五 tempat, dan pada hari seseorang menambahkan penulis keenam belas, itu rusak lagi.
- Dengan objek, saldo bersifat privat dan satu-satunya cara untuk mengubahnya adalah melalui metode yang menerapkan aturan tersebut. Ada satu tempat untuk menambahkannya dan tidak ada jalan lain.
- Itu adalah enkapsulasi, dan itulah alasan mengapa pemrograman berorientasi objek ada. Pelajaran ini membahas tentang objek, kelas, dan empat pilar utama.
Objek dan kelas
- Sebuah objek menggabungkan atribut, yaitu datanya, dengan metode, yaitu operasi yang bekerja pada data tersebut. Ini adalah unit dari keadaan dan perilaku secara bersamaan.
- Sebuah kelas adalah cetak biru: ia mendefinisikan atribut dan metode apa saja yang akan dimiliki setiap objek dari jenis itu. Sebuah objek adalah instansi dari sebuah kelas, dengan nilainya sendiri.
- Satu
Taxikelas, dan setiap taksi aktual adalah sebuah objek dengan registrasi dan kapasitasnya masing-masing.

Atribut di atas, metode di bawah, dan visibilitas mereka ditandai
Makmal konsep pengaturcaraan
Sambungkan contoh kepada idea pengaturcaraan yang ditunjukkannya.
Sebuah objek menggabungkan:
Sebuah objek mengemas datanya (atribut) dengan operasi (metode) yang bekerja padanya.
Apa hubungan antara kelas dan objek?
Satu kelas Taksi mendefinisikan atribut dan metode; setiap taksi sebenarnya adalah objek dengan kapasitas dan nomor registrasi sendiri.
Konstruktor, getter dan setter
- Sebuah konstruktor adalah metode khusus yang berjalan ketika objek dibuat, untuk mengatur atributnya ke nilai awal yang valid.
- Karena atribut bersifat privat, sebuah kelas menyediakan method get untuk membaca nilai dan method set untuk mengubahnya. Method set adalah tempat di mana aturan seperti "tidak pernah negatif" diterapkan.
- Itulah yang membuat atribut pribadi berharga: aturan ditegakkan pada setiap perubahan, karena tidak ada rute lain menuju data tersebut.
CLASS Taxi
PRIVATE Capacity : INTEGER
PUBLIC PROCEDURE NEW(StartCapacity : INTEGER)
Capacity ← StartCapacity
ENDPROCEDURE
PUBLIC FUNCTION GetCapacity() RETURNS INTEGER
RETURN Capacity
ENDFUNCTION
ENDCLASS
Konstruktor adalah metode khusus yang:
Konstruktor menginisialisasi atribut objek baru saat pembuatan.
Pilar 1: enkapsulasi
- Enkapsulasi berarti data objek tersembunyi di balik metodenya. Atribut bersifat privat; kode eksternal menggunakan method publik.
- Dua manfaat, dan ujian menginginkan keduanya: objek dapat menerapkan aturannya sendiri pada setiap perubahan, dan representasi internal dapat diubah dengan aman nanti, karena tidak ada kode eksternal yang bergantung padanya.
- Simpan saldo dalam pon hari ini dan dalam sen besok: setiap pengguna kelas tetap memanggil
GetBalance()dan tidak ada yang rusak di luar.
Enkapsulasi berarti:
Enkapsulasi menyembunyikan data; kode luar menggunakan metode publik, sehingga bagian dalam dapat berubah dengan aman.
Apa keuntungan enkapsulasi? Pilih semua yang berlaku.
Enkapsulasi berkaitan dengan pemeliharaan dan kebenaran, bukan kecepatan. Data pribadi dengan metode publik adalah apa yang memungkinkan keduanya.
Pilar 2: pewarisan
- Pewarisan memungkinkan subkelas didefinisikan berdasarkan superkelas, mengambil semua atribut dan metodenya, lalu menambahkan miliknya sendiri atau menggantinya (override).
- Ini memodelkan hubungan "is-a": Manajer adalah Karyawan, jadi
Managermewarisi dariEmployeedan menambahkan departemen. - Manfaatnya adalah kode yang berbagi ditulis sekali di superkelas, dan perubahan terhadapnya mencapai setiap subkelas.

Bagian yang berbagi berada di atas; perbedaannya berada di bawah
Pewarisan memodelkan hubungan "is-a" (Seorang Manajer adalah Karyawan), sehingga subclass mewarisi dan memperluas superclass-nya.
Pewarisan adalah spesialisasi "is-a"; hubungan "has-a" dimodelkan melalui komposisi sebagai gantinya.
Pewarisan memodelkan hubungan "____ a", seperti seorang Manajer yang merupakan Karyawan.
Sebuah mobil memiliki mesin, yang merupakan komposisi bukan pewarisan. Memahami perbedaan ini adalah inti dari pertanyaan tersebut.
Pilar 3 dan 4: polimorfisme dan abstraksi
- Polimorfisme berarti objek berbeda merespons panggilan method yang sama dengan caranya masing-masing. Setiap
Shapememiliki methodArea();CircledanRectanglemengimplementasikannya berbeda-beda. - Nilainya: kode dapat melakukan loop melalui daftar bentuk dengan memanggil
Area()pada setiap objek, tanpa perlu tahu atau peduli jenis apa masing-masing. Tambahkan classTrianglekemudian, loop tersebut tidak memerlukan perubahan sama sekali. - Abstraksi berarti menampilkan antarmuka sederhana dan menyembunyikan kompleksitas di baliknya: Caller dari
Area()tidak perlu mengetahui geometri apa pun.
Polimorfisme memungkinkan:
Panggilan yang sama (misalnya Area()) berperilaku benar untuk setiap tipe — Caller tidak perlu mengetahui kelas yang tepat.
Susun konsekuensi polimorfisme secara berurutan, mulai dari definisi hingga manfaatnya.
Satu panggilan, beberapa implementasi, dan kode yang menggunakannya tidak pernah perlu tahu tentang implementasi baru tersebut.
Contoh terpecahkan: sebutkan pilar-nya
- Sebuah class
BankAccountmenyimpan saldonya secara privat dan menyediakan methodDeposit()danWithdraw()yang menolak membuatnya menjadi negatif. Enkapsulasi: datanya disembunyikan dan aturan diterapkan oleh satu-satunya jalur akses ke data tersebut. - Sebuah class
SavingsAccountdidefinisikan sebagaiBankAccountdengan penambahan suku bunga. Pewarisan: hubungan is-a, penggunaan ulang kode superkelas. - Loop memanggil
Print()pada setiap dokumen dalam daftar, dan setiap jenis mencetak dirinya sendiri dengan cara berbeda. Polimorfisme: satu panggilan, beberapa implementasi. - Sebutkan pilar dan fitur dari skenario yang menampilkannya.
Pasangkan setiap pilar OOP dengan maknanya.
Enkapsulasi = menyembunyikan; pewarisan = spesialisasi is-a; polimorfisme = antarmuka yang sama, perilaku yang beragam.
Contoh terpecahkan: mengapa OOP untuk sistem besar
- Berikan dua keunggulan menggunakan pemrograman berorientasi objek untuk sistem besar. [4]
- Enkapsulasi berarti detail internal setiap kelas dapat diubah tanpa mempengaruhi bagian program lainnya, sehingga sistem lebih mudah dipelihara dan tim dapat bekerja pada kelas secara paralel.
- Pewarisan berarti perilaku bersama ditulis sekali dan digunakan kembali, sehingga ada kurang kode duplikat dan perbaikan berlaku di mana-masa sekaligus.
- Polimorfisme berarti jenis baru dapat ditambahkan tanpa mengubah kode yang menggunakannya. Setiap jawaban adalah fitur dan konsekuensinya.
Tim memiliki pemain; tim itu sendiri bukan pemain
- Kontainmen berarti suatu objek memegang objek lain sebagai salah satu atributnya. Dalam agregasi, objek yang terkandung dapat ada secara independen: sebuah
Teammemegang referensi kePlayerobjek yang dapat berpindah ke tim lain. - Pilih berdasarkan hubungan: sebuah
GoalkeeperadalahPlayer, jadi gunakan pewarisan; sebuahTeammemiliki pemain, jadi gunakan agregasi. Tim yang mewarisi metodeKick()pemain merupakan kesalahan desain, meskipun tim tersebut ingin mengambil tendangan penalti.
A Team menyimpan referensi ke objek Player. Players tetap ada ketika tim dihapus. Hubungan mana yang sesuai?
Tim tersebut berisi objek Player yang independen. Inheritance mensyaratkan hubungan is-a.
Contoh terpecahkan: rancang tim tanpa menyalin pemainnya
- Diketahui: sebuah
Playermemiliki nama privat dan metodeGetName(). RancangTeamdengan koleksi privatMembersyang berisi referensi ke objekPlayerdan metodeAddPlayer(NewPlayer)yang menambahkan referensi. - Sebuah
Playerdapat ada sebelum tim, dan tim dapat dihapus sementara pemainnya tetap ada. Ini adalah agregasi. Mengubah nama pemain melalui metodenya sendiri terlihat oleh setiap objek yang memegang pemain tersebut; salinan string nama akan menjadi usang.
Player object: name = "Sam"
Team object: Members = [reference to Sam's Player object]
Goalkeeper class: inherits the Player attributes and methods
Dalam desain ini, menghapus Tim harus juga menghancurkan setiap Player yang dimilikinya.
Para Player ada secara independen. Menghapus tim akan menghapus referensinya, bukan necessarily objek Player-nya.
Cocokkan setiap desain dengan hubungannya.
Model pewarisan adalah is-a; agregasi adalah has-a dengan objek independen; enkapsulasi mengontrol akses ke data.
⟦⟧ Nilai yang sering terlewat
- Kelas adalah cetak biru, objek adalah instansinya. Jangan gunakan kata-kata ini secara bergantian.
- Enkapsulasi adalah menyembunyikan data di balik method, dan manfaatnya adalah penerapan aturan dan perubahan internal yang aman. "Lebih aman" terlalu samar.
- Pewarisan adalah hubungan is-a. Mobil memiliki mesin, yang merupakan komposisi, bukan pewarisan.
- Polimorfisme adalah panggilan yang sama berperilaku berbeda per kelas, inilah yang memungkinkan subclass baru ditambahkan tanpa mengubah kode yang sudah ada.
Anda telah memahaminya
- sebuah objek menggabungkan atribut dan metode; sebuah kelas adalah cetak biru dan objek adalah instansi, diatur oleh konstruktor
- enkapsulasi: data privat di balik method publik, sehingga aturan diterapkan pada setiap perubahan dan bagian internal dapat berubah dengan aman
- pewarisan: sebuah subkelas mengambil anggota superkelas dan menambahkan atau menggantinya (override), memodelkan is-a dan menulis kode bersama sekali
- polimorfisme: panggilan yang sama diimplementasikan berbeda per kelas, sehingga jenis baru tidak memerlukan perubahan pada kode yang sudah ada; abstraksi: antarmuka sederhana yang menyembunyikan kompleksitas