JavaRush /Java Blog /Random-ID /Konsep Pemrograman Berorientasi Objek JAVA
shabnahm
Level 18

Konsep Pemrograman Berorientasi Objek JAVA

Dipublikasikan di grup Random-ID
JAVA didasarkan pada konsep pemrograman berorientasi objek, yang memungkinkan Anda berpindah ke tingkat abstraksi yang lebih tinggi untuk menyelesaikan masalah apa pun dengan cara yang realistis. Pendekatan berorientasi objek mengonseptualisasikan solusi suatu masalah dalam bentuk objek dunia nyata yang lebih mudah digunakan kembali dalam suatu aplikasi. Misalnya Chair(kursi), Fan(kipas angin), Dog(Anjing), Computer(komputer) dan sebagainya. Di JAVA, kelas adalah tata letak, templat, atau prototipe yang mendefinisikan perilaku umum suatu objek dengan tipe tertentu. Sebuah instance adalah implementasi terpisah dari sebuah kelas, dan semua instance dari suatu kelas memiliki properti yang sama, yang dijelaskan dalam definisi kelas. Misalnya, Anda dapat mendefinisikan kelas bernama Rumah dengan jumlah ruangan sebagai atributnya dan membuat instance kelas tersebut seperti rumah dengan dua kamar, rumah dengan tiga kamar, dan seterusnya. Konsep Pemrograman Berorientasi Objek JAVA - 1Keuntungan: Di bawah ini tercantum beberapa keuntungan pengembangan perangkat lunak berorientasi objek.
  • Mengurangi biaya dukungan perangkat lunak, terutama karena dilakukan secara modular.
  • Penggunaan kembali kode yang ditingkatkan melalui fitur seperti pewarisan, menghasilkan pengembangan perangkat lunak yang lebih cepat.
  • Peningkatan keandalan dan fleksibilitas kode.
  • Kemudahan pemahaman karena simulasi dunia nyata.
  • Abstraksi yang lebih baik di tingkat objek.
  • Mengurangi kompleksitas transisi dari satu fase pembangunan ke fase pembangunan lainnya.
Ada empat karakteristik utama OOP:
  • Enkapsulasi
  • Warisan
  • Polimorfisme
  • Abstraksi

Enkapsulasi

Enkapsulasi bertindak sebagai kontrak untuk suatu objek apa yang harus disembunyikan dan apa yang harus dibuka untuk diakses oleh objek lain. Di JAVA, kami menggunakan pengubah akses privateuntuk menyembunyikan metode dan membatasi akses ke variabel dari dunia luar. JAVA juga memiliki berbagai pengubah akses: public, default, protected, private, yang digunakan untuk membatasi visibilitas pada tingkat yang berbeda. Namun tujuan utamanya adalah merangkum hal-hal yang tidak boleh diubah. Pendekatan yang paling berhasil adalah bahwa suatu kelas hanya boleh memiliki satu alasan untuk berubah, dan enkapsulasi membuat rancangan “satu alasan” tersebut menjadi kenyataan. Pendekatan enkapsulasi yang benar adalah menyembunyikan hal-hal yang sering berubah untuk menghindari kerusakan pada kelas lain. Manfaat: Berikut adalah beberapa manfaat enkapsulasi:
  • Kita dapat melindungi keadaan internal suatu objek dengan menyembunyikan atributnya.
  • Hal ini meningkatkan modularitas kode karena mencegah objek berinteraksi dengan cara yang tidak terduga.
  • Meningkatkan kegunaan kode.
  • Ini mendukung hubungan kontraktual suatu entitas tertentu.
  • Enkapsulasi membuat perangkat lunak lebih mudah dipelihara.
  • Perubahan pada kode dapat dilakukan secara independen satu sama lain.

Polimorfisme

Polimorfisme dalam pemrograman adalah kemampuan untuk menyediakan antarmuka yang sama untuk berbagai bentuk dasar (tipe data). Ini berarti bahwa kelas-kelas yang memiliki fungsi berbeda berbagi antarmuka yang sama dan dapat dipanggil secara dinamis dengan meneruskan parameter melalui referensi. Contoh klasiknya adalah kelas Shape(bentuk) dan semua kelas yang mewarisinya: square(persegi), circle(lingkaran), dodecahedron(dodecahedron), irregular polygon(poligon tak beraturan), splat(gumpalan), dan seterusnya. Dalam contoh ini, setiap kelas akan memiliki metodenya sendiri Draw()dan kode klien dapat melakukan:
Shape shape = new Shape();
Shape.area()untuk mendapatkan perilaku yang benar dalam bentuk apa pun Keindahan polimorfisme adalah bahwa kode, yang bekerja dengan kelas yang berbeda, tidak perlu mengetahui kelas mana yang digunakan, karena semuanya bekerja berdasarkan prinsip yang sama. Proses yang digunakan oleh bahasa pemrograman berorientasi objek untuk mengimplementasikan polimorfisme dinamis disebut pengikatan dinamis. Catatan: Polimorfisme adalah kemampuan untuk memilih metode yang lebih spesifik untuk dieksekusi bergantung pada objeknya. Polimorfisme terjadi ketika kelas abstrak tidak dilibatkan. Keuntungan:
  • Membuat kode yang dapat digunakan kembali. Artinya, setelah sebuah kelas dibuat, diimplementasikan, dan diuji, kelas tersebut dapat digunakan secara bebas tanpa khawatir tentang apa sebenarnya yang tertulis di dalamnya.
  • Hal ini memungkinkan kode yang lebih umum dan digabungkan secara longgar.
  • Waktu kompilasi berkurang, yang mempercepat pengembangan.
  • Tautan dinamis.
  • Antarmuka yang sama dapat digunakan untuk membuat metode dengan implementasi berbeda.
  • Seluruh implementasi dapat diganti dengan menggunakan metode tanda tangan yang sama.
Metode penggantian sebagai bagian dari polimorfisme. Override berinteraksi dengan dua metode: metode di kelas induk dan metode di kelas turunan. Metode-metode ini memiliki nama dan tanda tangan yang sama. Override memungkinkan Anda melakukan operasi yang sama dengan cara berbeda untuk tipe objek berbeda. Misalnya:
while(it.hasNext()) {
Shape s = (Shape) it.next();
totalArea += s.area(dim); //будет применен полиморфизм и вызван нужный метод для каждого an object.
}
Konsep Pemrograman Berorientasi Objek JAVA - 2Kelebihan metode atau polimorfisme ad-hoc atau polimorfisme statis Kelebihan beban berinteraksi dengan beberapa metode dari kelas yang sama yang memiliki nama yang sama tetapi memiliki tanda tangan metode yang berbeda. Memuat ulang memungkinkan Anda mendeskripsikan operasi yang sama dengan cara berbeda untuk data berbeda. Kadang-kadang disebut polimorfisme statis, namun sebenarnya bukan polimorfisme. Ini tidak lebih dari sekedar memiliki dua metode dengan nama yang sama, tetapi daftar argumen yang berbeda. Reboot tidak ada hubungannya dengan pewarisan dan polimorfisme. Dan metode yang kelebihan beban sama sekali tidak sama dengan metode yang ditimpa. Polimorfisme Parametrik melalui Generasi di JAVA Saat mendeklarasikan kelas, bidang nama dapat dikaitkan dengan tipe yang berbeda, dan nama metode dapat dikaitkan dengan parameter dan tipe kembalian yang berbeda. JAVA mendukung polimorfisme parametrik dengan menggunakan obat generik.
List<String> list = new ArrayList<String>();
Mengapa kita tidak bisa mengganti metode statis di JAVA? Penggantian tergantung pada keberadaan sebuah instance dari kelas. Ide polimorfisme adalah Anda dapat membuat subkelas, dan objek yang diimplementasikan oleh subkelas tersebut akan berperilaku berbeda dengan metode yang sama dari kelas induk (ditimpa di subkelas). Metode statis tidak terkait dengan instance kelas mana pun, sehingga konsep penggantian itu sendiri tidak dapat diterapkan. Pencipta JAVA dipandu oleh dua pertimbangan yang mempengaruhi pendekatan ini. Pertama, ada masalah eksekusi kode: ada banyak kritik terhadap Smalltalk karena lambat (pengumpulan sampah dan polimorfisme adalah bagian dari masalah ini), dan JAVA dirancang untuk menghindari hal ini. Pertimbangan kedua adalah keputusan bahwa target audiens JAVA adalah pengembang C++. Memiliki metode statis yang bekerja dengan cara ini sangat familiar bagi pemrogram C++, dan juga mempercepat karena tidak perlu naik hierarki kelas untuk mencari tahu metode mana yang harus dipanggil. Anda langsung menuju kelas dan memanggil metode tertentu.

Warisan

Warisan adalah tindakan menggabungkan perilaku (yaitu metode) dan keadaan (yaitu variabel) dari kelas dasar ke dalam kelas turunan sehingga tersedia di kelas turunan tersebut. Keuntungan utama dari pewarisan adalah menyediakan mekanisme formal untuk penggunaan kembali kode dan menghindari duplikasi. Kelas yang diwarisi memperluas fungsionalitas aplikasi dengan menyalin perilaku kelas induk dan menambahkan fungsionalitas baru. Ini membuat kode tersebut sangat berpasangan. Jika Anda ingin mengubah superclass, Anda harus mengetahui semua detail subclass agar tidak merusak kode. Warisan adalah bentuk penggunaan kembali perangkat lunak di mana kelas baru (subkelas) dibuat dari kelas yang sudah ada (superkelas) yang memperluas fungsinya dan menggunakan beberapa properti superkelas. Jadi jika Anda memiliki kelas induk dan kemudian kelas anak muncul, anak tersebut mewarisi semua hal yang dimiliki induknya. Keuntungan:
  • Peningkatan penggunaan kembali kode.
  • Hubungan logis “adalah” (adalah seseorang, sesuatu) terbentuk. Misalnya: Anjing adalah binatang n . (Seekor anjing adalah binatang).
  • Modularisasi kode.
  • Pengulangan tidak termasuk.
Kekurangan:
  • Berpasangan erat: Sebuah subkelas bergantung pada implementasi kelas induk, sehingga membuat kodenya berpasangan erat.
Apa lagi yang harus dibaca:

Grup Pengembang Java:

Abstraksi

Abstraksi berarti merancang kelas berdasarkan antarmuka dan fungsionalitasnya, tanpa memperhitungkan detail implementasi. Kelas abstrak mewakili antarmuka tanpa menyertakan implementasi sebenarnya. Ini membedakan implementasi suatu objek dari perilakunya. Abstraksi menyederhanakan kode dengan menyembunyikan detail yang tidak penting. Keuntungan:
  • Dengan menggunakan abstraksi, kita dapat memisahkan apa yang dapat dikelompokkan menjadi beberapa jenis.
  • Properti dan metode yang sering dimodifikasi dapat dikelompokkan ke dalam tipe tersendiri, sehingga tipe utama tidak akan mengalami perubahan. Hal ini memperkuat prinsip OOP: “Kode harus terbuka untuk Ekstensi, namun tertutup untuk Perubahan . ”
  • Abstraksi menyederhanakan representasi model domain.
Perbedaan antara abstraksi dan enkapsulasi Enkapsulasi adalah strategi yang digunakan sebagai bagian dari abstraksi. Enkapsulasi mengacu pada struktur suatu objek: objek merangkum propertinya dan menyembunyikannya dari akses luar. Pengguna suatu kelas berinteraksi dengannya menggunakan metodenya, namun tidak memiliki akses langsung ke struktur kelas. Dengan cara ini, detail implementasi abstrak kelas terkait dengan desainnya. Abstraksi adalah istilah yang lebih umum. Hal ini juga dapat dicapai, antara lain, dengan menggunakan subkelas. Misalnya, kelas List(daftar) di perpustakaan standar adalah abstraksi untuk rangkaian elemen, yang diindeks menurut tempatnya dalam daftar. Contoh spesifik dari daftar Listadalah ArrayListatau LinkedList. Kode yang berinteraksi dengan daftar Listmengabstraksi rincian daftar mana yang digunakannya. Seringkali abstraksi tidak mungkin dilakukan tanpa menyembunyikan keadaan yang mendasarinya menggunakan enkapsulasi. Jika suatu kelas memperlihatkan struktur internalnya, ia tidak dapat mengubah operasi internalnya, dan oleh karena itu tidak dapat diabstraksi. Apa itu kelas abstrak dan metode abstrak? Kebetulan selama pengembangan Anda ingin kelas dasar hanya menyediakan antarmuka ke kelas turunannya. Artinya, Anda tidak ingin siapa pun membuat instance kelas dasar. Anda perlu menggunakan antarmuka sedemikian rupa sehingga Anda hanya melemparkan objek ke dalamnya (ini adalah pemeran implisit yang memungkinkan perilaku polimorfik). Hal ini dicapai dengan membuat kelas ini abstrak menggunakan kata kunci abstract. Hal ini memberlakukan beberapa batasan, seperti ketidakmampuan untuk membuat instance kelas abstrak; saat menggunakan kelas abstrak, metode abstrak perlu diimplementasikan. Ini memastikan polimorfisme. Kelas abstrak dapat berisi metode abstrak dan konkrit. Jika setidaknya satu metode dalam suatu kelas dinyatakan abstrak, seluruh kelas juga harus dinyatakan abstrak. Namun, aturan yang berlawanan arah tidak harus dipatuhi. Jika suatu kelas dideklarasikan abstrak, kelas tersebut mungkin tidak berisi metode abstrak. Sebuah metode yang hanya mendefinisikan tanda tangannya dan tidak menyediakan implementasi disebut abstrak. Implementasi sebenarnya diserahkan kepada subkelasnya, yang memperluas kelas abstrak. Metode abstrak tidak dapat digunakan oleh suatu objek, hanya kelas lain yang dapat memperluasnya. Kapan sebaiknya Anda menggunakan kelas abstrak? Kelas abstrak memungkinkan Anda menentukan beberapa perilaku default dan memiliki subkelas yang menyediakan perilaku spesifik apa pun. Misalnya: List(daftar) adalah antarmuka, yang pada gilirannya AbstractListmendefinisikan perilaku dasar Daftar, yang dapat digunakan sebagaimana adanya atau disempurnakan dalam subkelas, misalnya, dalam ArrayList(array daftar). Apa itu antarmuka? Konsep antarmuka adalah kelas abstrak, namun antarmuka (didefinisikan dengan kata kunci interface) melangkah lebih jauh. Ini mencegah implementasi metode atau fungsi apa pun. Anda hanya dapat mendeklarasikan metode atau fungsi, namun tidak dapat menyediakan implementasinya. Kelas yang mengimplementasikan antarmuka harus menangani implementasi sebenarnya. Antarmuka sangat berguna dan banyak digunakan dalam OOP. Karena mereka berbagi antarmuka dan implementasinya, mereka memberikan banyak keuntungan dalam penggunaannya:
  1. Warisan berganda .
  2. Kopling longgar . Ada abstraksi operasinya, seperti layering, dan implementasi konkritnya bisa apa saja: JDBC, JPA, JTA, dll.
  3. Program antarmuka tidak diimplementasikan .
  4. Polimorfisme pengikatan dinamis : Antarmuka pemrograman suatu objek diekspos tanpa mengungkapkan implementasi sebenarnya.
  5. Level abstrak , pemisahan fungsionalitas.
Perbedaan antara antarmuka dan kelas abstrak.
  • Antarmuka adalah hubungan kontraktual dengan kelas yang mengimplementasikan antarmuka ini, yang menyatakan bahwa implementasi terjadi sesuai dengan cara yang ditentukan oleh antarmuka. Ini adalah shell kosong dengan metode yang dideklarasikan.
  • Kelas abstrak mendefinisikan beberapa perilaku umum dan meminta subkelasnya untuk mendefinisikan perilaku yang tidak lazim atau spesifik untuk kelasnya.
  • Metode dan anggota kelas abstrak dapat ditunjuk dengan pengubah akses apa pun; pada gilirannya, semua metode antarmuka harus bersifat publik.
  • Saat mewarisi kelas abstrak, kelas turunannya harus mendefinisikan metode abstrak, sedangkan antarmuka dapat mewarisi antarmuka lain tanpa harus mendefinisikan metodenya.
  • Kelas turunan hanya dapat memperluas satu kelas abstrak, tetapi sebuah antarmuka dapat memperluas atau suatu kelas dapat mengimplementasikan banyak antarmuka lainnya.
  • Kelas turunan dapat mendefinisikan metode abstrak dengan pengubah akses yang sama atau kurang ketat, namun kelas yang mengimplementasikan antarmuka harus mendefinisikan metode dengan tingkat visibilitas yang sama.
  • Antarmuka tidak mengandung konstruktor, sedangkan kelas abstrak mengandung konstruktor.
  • Variabel yang dideklarasikan di antarmuka Java bersifat final secara default. Kelas abstrak dapat berisi variabel yang belum final.
  • Semua anggota antarmuka Java adalah public. Anggota kelas abstrak mampu menjadi public, protecteddll.

Komposisi

Penggunaan kembali kode dapat dilakukan dengan menggunakan pewarisan dan komposisi. Namun penggunaan komposisi memberikan tingkat enkapsulasi yang lebih tinggi daripada pewarisan, karena perubahan pada kelas back-end tidak serta merta mempengaruhi kode yang dimiliki kelas front-end. Komposisi adalah teknik desain yang menggunakan hubungan “has-a” (memiliki, mencakup) di kelas. Warisan java dan komposisi objek dapat digunakan untuk menggunakan kembali kode. Hakikat komposisi adalah untuk mengungkapkan “memiliki” hubungan antar objek. Pikirkan tentang kursi. Kursi itu memiliki tempat duduk. Kursi itu memiliki sandaran. Sebuah kursi mempunyai jumlah kaki tertentu. Ungkapan “memiliki” menunjukkan suatu hubungan di mana kursi tersebut memiliki, atau setidaknya menggunakan, objek lain. Inilah tepatnya hubungan “memiliki-a”, yang menjadi dasar komposisi. Keuntungan:
  • Kontrol visibilitas
  • Implementasinya dapat diganti pada saat run-time
  • Kopling longgar, karena kelas antarmuka tidak bergantung pada implementasi.
Perbedaan komposisi dan pewarisan
TIDAK. Komposisi (memiliki / memiliki) Warisan (adalah / adalah)
1 Mendukung polimorfisme dan penggunaan kembali kode. Mendukung polimorfisme dan penggunaan kembali kode.
2 Objek run-time telah dibuat. Objek dibuat secara dinamis pada waktu kompilasi.
3 Implementasinya dapat diganti pada saat run-time. Implementasinya dapat diubah pada waktu kompilasi.
4 Sebuah subkelas tidak bergantung pada kelas induknya, yang mendukung kopling longgar (terutama di bawah kendali antarmuka). Subclass bergantung pada implementasi kelas induk, sehingga pengikatannya dianggap kuat.
5 Penggunaan: Rumah memiliki Kamar Mandi. Salah jika mengatakan Rumah adalah Kamar Mandi. Warisan bersifat searah: Rumah adalah Bangunan. Tapi bangunan itu bukanlah rumah.
Catatan: Jangan gunakan warisan hanya untuk memastikan kode digunakan kembali. Jika tidak ada relasi “is a” (is), komposisi digunakan untuk tujuan ini. Perbedaan antara komposisi dan agregasi terletak pada hubungan objek. Agregasi adalah hubungan di mana satu kelas dimasukkan ke dalam suatu koleksi. Ini adalah bagian dari keseluruhan hubungan, di mana suatu bagian bisa ada tanpa keseluruhannya. Hubungan seperti itu jauh lebih lemah. Tidak ada ketergantungan siklik. Misalnya: pesanan dan produk. Komposisi adalah hubungan di mana satu kelas dimasukkan ke dalam suatu koleksi. Ini adalah bagian dari keseluruhan hubungan di mana bagian tersebut tidak dapat ada tanpa keseluruhannya. Jika keseluruhannya hancur, maka seluruh komponennya juga akan hancur. Ini adalah hubungan yang lebih kuat. Misalnya: poligon dan simpulnya, ordo dan komponennya.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION