Apa itu kelas pembungkus?

221

Apa itu kelas pembungkus?
Bagaimana kelas seperti itu bermanfaat?

Bhaskar
sumber

Jawaban:

171

Secara umum, kelas pembungkus adalah setiap kelas yang "membungkus" atau "merangkum" fungsi dari kelas atau komponen lain. Ini berguna dengan memberikan tingkat abstraksi dari implementasi kelas atau komponen yang mendasarinya; misalnya, kelas wrapper yang membungkus komponen COM dapat mengelola proses memanggil komponen COM tanpa mengganggu kode panggilan dengannya. Mereka juga dapat menyederhanakan penggunaan objek yang mendasarinya dengan mengurangi jumlah titik antarmuka yang terlibat; sering, ini membuat penggunaan komponen yang mendasarinya lebih aman.

Paul Sonier
sumber
15
Kelas wrapper (sebagai adaptor) digunakan ketika wrapper harus menghormati antarmuka tertentu dan harus mendukung perilaku polimorfik. Di sisi lain, fasad digunakan ketika seseorang ingin antarmuka yang lebih mudah atau lebih sederhana untuk bekerja dengannya.
Yadu
3
Dalam posting ini, diusulkan bahwa pembungkus bisa berguna untuk membuat proxy yang didefinisikan secara ketat untuk kelas akhir-terikat: Dapatkah saya menggunakan akhir mengikat ... . Apakah ini penggunaan tambahan yang valid untuk pembungkus di luar yang dijelaskan oleh Paul Sonier di atas?
Todd
1
@NirajanSingh Wrapper menggunakan kembali dua antarmuka yang sudah ada dan membuat satu bekerja dengan yang lain. Di sisi lain, fasad menciptakan antarmuka baru.
Alireza
67

Seperti apa kedengarannya: kelas yang "membungkus" fungsionalitas kelas lain atau API dalam API yang lebih sederhana atau hanya berbeda.

Lihat: Pola adaptor , Pola fasad

Shog9
sumber
Iya! Seringkali pola sinonim untuk Fasad. Dalam banyak dokumentasi kode saya melihat metode Facade jelas, dijelaskan sebagai "Wrapper to XX :: yy method" atau sedikit adiksi seperti "Wrapper to XX :: yy method dengan penanganan exception".
Peter Krauss
41

Kelas wrapper menyediakan cara untuk menggunakan tipe primitif sebagai objek. Untuk setiap primitif, kami memiliki kelas pembungkus seperti,

int Integer
byte Byte 

Integer dan Byte adalah kelas pembungkus dari int dan byte primitif. Ada waktu / batasan ketika Anda perlu menggunakan primitif sebagai objek sehingga kelas pembungkus menyediakan mekanisme yang disebut tinju / unboxing.

Konsep dapat dipahami dengan baik dengan contoh sebagai berikut

double d = 135.0 d;
Double doubleWrapper = new Double(d);

int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();

jadi begini caranya, kita bisa menggunakan tipe kelas wrapper untuk mengubahnya menjadi tipe primitif lainnya juga. Jenis konversi ini digunakan ketika Anda perlu mengkonversi tipe primitif ke objek dan menggunakannya untuk mendapatkan primitif lainnya juga. Meskipun untuk pendekatan ini, Anda perlu menulis kode besar. Namun, hal yang sama dapat dicapai dengan teknik casting sederhana karena potongan kode dapat dicapai seperti di bawah ini

double d = 135.0;
int integerValue = (int) d ;

Meskipun nilai ganda secara eksplisit dikonversi ke nilai integer juga disebut sebagai downcasting.

SBTec
sumber
1
Jawaban Anda menyiratkan kelas pembungkus hanya untuk objek primitif.
Guillaume F.
17

Kelas wrapper tidak perlu membungkus kelas lain. Mungkin fungsionalitas pembungkus kelas API misalnya file dll.

Sebagai contoh mungkin sangat berguna untuk membuat kelas wrapper dll, yang menangani semua inisialisasi dan pembersihan dll dan membuat metode kelas yang membungkus pointer fungsi yang dibuat dari mis GetProcAddress().

Bersulang !

ralphtheninja
sumber
8

Kelas pembungkus adalah kelas yang "membungkus" sesuatu yang lain, seperti namanya.

Definisi yang lebih formal adalah kelas yang mengimplementasikan Pola Adaptor . Ini memungkinkan Anda untuk memodifikasi satu set API menjadi bentuk yang lebih dapat digunakan dan dapat dibaca. Misalnya, dalam C #, jika Anda ingin menggunakan API Windows asli, ada baiknya membungkusnya dengan kelas yang sesuai dengan pedoman desain .NET.

Reed Copsey
sumber
2
Menurut pemahaman saya tentang pola adaptor, ini berbeda dari pembungkus: jika X membungkus Y, maka X harus merangkum keadaan Y, tetapi bukan identitasnya . Diberikan dua contoh X, keduanya membungkus Y, tidak boleh ada sarana yang dapat membuktikan bahwa kedua instance X membungkus Y yang sama. Sebaliknya, objek adaptor sering kali akan merangkum identitas tetapi tidak menyatakan; perubahan pada objek yang diadaptasi tidak akan dianggap sebagai perubahan pada adaptor itu sendiri.
supercat
7

Mungkin juga berharga untuk dicatat bahwa di beberapa lingkungan, sebagian besar dari apa yang kelas bungkus mungkin lakukan digantikan oleh aspek.

EDIT:

Secara umum pembungkus akan memperluas apa yang dilakukan wrappee, tanpa khawatir tentang implementasi wrappee, jika tidak tidak ada gunanya membungkus versus memperluas kelas yang dibungkus. Contoh khas adalah menambahkan informasi waktu atau fungsi logging di sekitar beberapa antarmuka layanan lain, sebagai lawan menambahkannya ke setiap implementasi antarmuka itu.

Ini kemudian menjadi contoh khas untuk pemrograman Aspect. Daripada melalui fungsi antarmuka dengan fungsi dan menambahkan logging boilerplate, dalam pemrograman aspek Anda mendefinisikan titik potong, yang merupakan semacam ekspresi reguler untuk metode, dan kemudian menyatakan metode yang ingin Anda jalankan sebelumnya, setelah atau sekitar semua metode yang cocok potongannya. Mungkin adil untuk mengatakan bahwa aspek pemrograman adalah semacam penggunaan pola Decorator, yang juga dapat digunakan oleh kelas wrapper, tetapi kedua teknologi memiliki kegunaan lain.

Jherico
sumber
7

Kelas wrapper adalah kelas yang membungkus kelas lain dan memberikan abstraksi antara klien dan kelas asli yang dibungkus.

Rakesh verma
sumber
5

kelas wrapper biasanya kelas yang memiliki objek sebagai properti pribadi. pembungkus mengimplementasikan objek pribadi itu API dan sehingga dapat dilewatkan sebagai argumen di mana objek pribadi akan.

katakanlah Anda memiliki koleksi, dan Anda ingin menggunakan semacam terjemahan ketika objek ditambahkan ke dalamnya - Anda menulis kelas pembungkus yang memiliki semua metode pengumpulan. ketika add () dipanggil, wrapper menerjemahkan argumen alih-alih hanya meneruskannya ke koleksi pribadi.

pembungkus dapat digunakan di mana saja koleksi dapat digunakan, dan objek pribadi masih dapat memiliki objek lain yang merujuk padanya dan membacanya.

Amir Arad
sumber
1
Setuju, pandangan pribadi saya tentang pembungkus adalah bahwa mereka terlihat dan terasa seperti jenis asli dan dapat mengimplementasikan antarmuka yang sama, pasti memiliki status instance yang dibungkus. Mereka ada sebagai cara untuk "mencegat" panggilan ke anggota.
Luke Puplett
3

Kelas wrapper adalah kelas yang digunakan untuk membungkus kelas lain untuk menambahkan lapisan tipuan dan abstraksi antara klien dan kelas asli yang sedang dibungkus.

Andrew Hare
sumber
3

Kelas wrapper adalah pembungkus di sekitar tipe data primitif. Ini mewakili tipe data primitif dalam instance kelas yang sesuai misalnya, tipe data boolean dapat direpresentasikan sebagai instance kelas Boolean. Semua kelas pembungkus primitif di Jawa tidak dapat diubah yaitu sekali diberi nilai ke instance kelas pembungkus tidak dapat diubah lebih lanjut.

David
sumber
3

Pemrograman Java menyediakan kelas wrapper untuk setiap tipe data primitif, untuk mengkonversi tipe data primitif ke objek yang sesuai dari kelas wrapper.

THOSEEF PASHA
sumber
1

Untuk membuat kelas pembungkus kesejahteraan bukanlah pekerjaan mudah. Untuk memahami kelas pembungkus bagaimana itu dirancang oleh beberapa orang lain juga bukan pekerjaan mudah. Karena itu ide, bukan kode. Hanya ketika Anda memahami ide tersebut, Anda dapat memahami bungkus.

Tony
sumber
0

Kelas Wrapper muncul untuk memenuhi kebutuhan dasar programmer - yaitu menggunakan nilai-nilai primitif di mana pun hanya Objek yang diizinkan. Seperti namanya, kelas wrapper membungkus nilai primitif dan menyimpan nilai dalam Object. Jadi, semua tempat di mana primitif tidak diizinkan - seperti generik, kunci-hashmap, Arraylists dll - programmer sekarang memiliki opsi untuk memberikan nilai-nilai primitif ini sebagai jenis pembungkus yang sesuai.

Selain itu jenis pembungkus ini memiliki sejumlah metode utilitas untuk mengkonversi dari jenis primitif ke jenis pembungkus yang sesuai dan kembali, dan juga dari Strings ke jenis pembungkus dan kembali.

Saya telah menulis artikel terperinci tentang kelas wrapper di blog saya yang menjelaskan konsep tipe wrapper secara mendalam - http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (Pengungkapan - Blog ini milik saya)

Dhruv Rai Puri
sumber
0

Saat ini saya menggunakan kelas pembungkus untuk proyek saya dan manfaat utama yang saya dapatkan (hanya satu manfaat untuk memperluas penjelasan topik):

Penanganan pengecualian: Kelas utama saya, yang dibungkus kelas lain, memiliki metode yang melempar pengecualian jika ada, jadi saya membuat kelas pembungkus yang menangani pengecualian dan segera mencatatnya. Jadi, dalam ruang lingkup utama saya, tidak ada penanganan pengecualian. Saya hanya memanggil metode dan melakukan sesuatu.

Penggunaan Mudah: Saya dapat dengan mudah memulai objek. Biasanya fase inisiasi dibangun dari banyak langkah.

Keterbacaan Kode: Ketika programmer lain membuka kode saya, kode itu akan tampak sangat jelas dan mudah dimanipulasi.

Menyembunyikan Detail: Jika Anda membuat kelas yang akan digunakan oleh programmer lain, maka Anda dapat membungkus detail seperti "penanganan kesalahan, penanganan pengecualian, mencatat pesan dan lain-lain ..." sehingga programmer tidak harus menangani kekacauan, hanya cukup menggunakan metode.

Bahadir Tasdemir
sumber
0

Kelas wrapper adalah kelas yang melayani tujuan tunggal memegang sesuatu dan menambahkan beberapa fungsionalitas ke dalamnya. Di Jawa karena primitif (seperti int, mengapung, karakter ...) bukan objek jadi jika Anda ingin memperlakukan mereka seperti satu maka Anda harus menggunakan kelas pembungkus. Misalkan Anda ingin membuat Vektor int, masalahnya adalah Vektor hanya menampung Objek bukan primitif. Jadi apa yang akan Anda lakukan adalah meletakkan semua int di bungkus Integer dan menggunakannya. Contoh:

int number = 5;
Integer numberWrapped = new Integer(number);
//now you have the int in an object.
//and this is how to access the int value that is being wrapped.
int again = numberWrapped.intValue();
Reza Baradaran Gazorisangi
sumber
Ini dikenal sebagai tinju primitif daripada pembungkus.
cyborg
-8

wrapper adalah kelas yang digunakan untuk berkomunikasi antara dua aplikasi berbeda antara platform yang berbeda

laxminarayan
sumber
Saya pikir Anda dapat menggunakannya untuk lebih dari satu kasus
Flexo
1
Memang, ini hanya satu kasus penggunaan kecil.
praseodym
Saya pikir ini adalah definisi dari layanan web
Bahadir Tasdemir