Abstraksi VS Menyembunyikan Informasi VS Enkapsulasi


167

Bisakah Anda memberi tahu saya apa perbedaan antara abstraksi dan menyembunyikan informasi dalam pengembangan perangkat lunak?

Saya bingung. Abstraksi menyembunyikan implementasi detail dan menyembunyikan informasi abstrak seluruh detail sesuatu.

Pembaruan: Saya menemukan jawaban yang bagus untuk ketiga konsep ini. Lihat jawaban terpisah di bawah ini untuk beberapa kutipan yang diambil dari sana .


"Enkapsulasi adalah teknik untuk mengemas informasi sedemikian rupa untuk menyembunyikan apa yang harus disembunyikan, dan membuat terlihat apa yang dimaksudkan untuk terlihat." ; mengingat enkapsulasi dicapai melalui penyembunyian informasi.
wulfgarpro


kutipan kink broken
Rishi Dua

Jawaban:


152

Pergi ke sumbernya! Grady Booch berkata (dalam Analisis dan Desain Berorientasi Objek, halaman 49, edisi kedua):

Abstraksi dan enkapsulasi adalah konsep pelengkap: abstraksi berfokus pada perilaku yang dapat diamati dari suatu objek ... enkapsulasi berfokus pada implementasi yang menimbulkan perilaku ini ... enkapsulasi paling sering dicapai melalui penyembunyian informasi, yang merupakan proses menyembunyikan semua rahasia objek yang tidak berkontribusi pada karakteristik esensialnya.

Dengan kata lain: abstraksi = objek secara eksternal; enkapsulasi (dicapai melalui penyembunyian informasi) = objek secara internal,

Contoh: Dalam .NET Framework, System.Text.StringBuilderkelas menyediakan abstraksi atas penyangga string. Abstraksi buffer ini memungkinkan Anda bekerja dengan buffer tanpa memperhatikan implementasinya. Dengan demikian, Anda dapat menambahkan string ke buffer tanpa memperhatikan bagaimana StringBuilderinternal melacak hal-hal seperti pointer ke buffer dan mengelola memori ketika buffer penuh (yang dilakukan dengan enkapsulasi melalui penyembunyian informasi).

rp


5
apakah Anda akan mengatakan bahwa, dengan cara yang sama abstraksi dan enkapsulasi saling melengkapi, enkapsulasi dan penyembunyian informasi juga saling melengkapi? Tentu, enkapsulasi dicapai melalui penyembunyian informasi, tetapi ... bukankah enkapsulasi mekanisme melalui mana penyembunyian informasi direalisasikan?
wulfgarpro

Contoh dunia nyata lain untuk definisi Booch tersedia di sini
lifebalance

Bisakah Anda memberi tahu saya jika akan benar untuk mengatakan bahwa Abstraksi paling baik dipahami melalui perspektif kode Klien sementara Enkapsulasi paling baik dipahami dari perspektif Service Code (yaitu kelas yang dienkapsulasi sendiri)?
user1338998

Contoh Dunia Nyata untuk definisi di atas dijelaskan di sini: stackoverflow.com/a/635755/3181500
user3181500

84

OP memperbarui pertanyaannya dengan beberapa kutipan yang ia temukan, yaitu dalam sebuah artikel oleh Edward V. Berard berjudul, "Abstraksi, Enkapsulasi, dan Menyembunyikan Informasi" . Saya memposting ulang versi pembaruan OP yang sedikit diperluas dan diformat ulang, karena itu harusnya menjadi jawaban sendiri.

(Semua kutipan diambil dari artikel yang disebutkan di atas.)

Abstraksi:

"Salah satu titik kebingungan mengenai abstraksi adalah penggunaannya baik sebagai proses maupun entitas. Abstraksi, sebagai proses, menunjukkan penggalian detail penting tentang suatu item, atau sekelompok item, sementara mengabaikan detail yang tidak penting. Abstraksi, sebagai entitas, menunjukkan model, tampilan, atau representasi terfokus lainnya untuk item yang sebenarnya. "

Menyembunyikan Informasi:

"Antarmuka atau definisinya dipilih untuk mengungkapkan sesedikit mungkin tentang cara kerja bagian dalamnya." - [Parnas, 1972b]

"Abstraksi dapat [...] digunakan sebagai teknik untuk mengidentifikasi informasi mana yang harus disembunyikan."

"Kebingungan dapat terjadi ketika orang gagal membedakan antara menyembunyikan informasi, dan teknik (misalnya, abstraksi) yang digunakan untuk membantu mengidentifikasi informasi mana yang harus disembunyikan."

Enkapsulasi:

"Itu [...] mengacu pada membangun kapsul, dalam hal penghalang konseptual, di sekitar beberapa koleksi benda." - [Wirfs-Brock et al, 1990]

"Sebagai suatu proses, enkapsulasi berarti tindakan melampirkan satu atau lebih item dalam wadah […]. Enkapsulasi, sebagai entitas, mengacu pada paket atau enklosur yang menampung (berisi, melampirkan) satu atau lebih item."

"Jika enkapsulasi 'sama dengan menyembunyikan informasi,' maka orang mungkin berpendapat bahwa 'segala sesuatu yang dienkapsulasi juga disembunyikan.' Ini jelas tidak benar. "

Kesimpulan:

"Abstraksi, penyembunyian informasi, dan enkapsulasi sangat berbeda, tetapi sangat terkait, konsep. Orang bisa berpendapat bahwa abstraksi adalah teknik yang membantu kami mengidentifikasi informasi spesifik mana yang harus terlihat, dan informasi mana yang harus disembunyikan. Enkapsulasi kemudian teknik untuk mengemas informasi sedemikian rupa untuk menyembunyikan apa yang harus disembunyikan, dan membuat terlihat apa yang dimaksudkan untuk terlihat. "


Penjelasan bagus praktis. akan lebih baik untuk memberikan contoh nyata di java. Tampaknya bagi saya bahwa setter / pengambil di java menyembunyikan implementasi, maka mencapai Information Hiding(atau implementasi menyembunyikan), sedangkan generik classmencapai enkapsulasi dan abstraksi dicapai melalui privateakses
abarik

57

Abstraction menyembunyikan detail implementasi dengan menyediakan lapisan atas fungsionalitas dasar.

Information Hidingmenyembunyikan data yang terpengaruh oleh implementasi itu. Penggunaan privatedanpublic berada di bawah ini. Misalnya, menyembunyikan variabel kelas.

Encapsulationhanya memasukkan semua data dan fungsi yang serupa ke dalam grup misalnya Classdalam pemrograman;Packetdalam jaringan.

Melalui penggunaan Kelas, kami menerapkan ketiga konsep - Abstraction, Information HidingdanEncapsulation


33

Tolong jangan menyulitkan konsep sederhana.

Enkapsulasi : Membungkus data dan metode menjadi satu unit adalah Enkapsulasi (mis. Kelas)

Abstraksi : Ini adalah tindakan yang hanya mewakili hal-hal penting tanpa menyertakan detail latar belakang. (mis. Antarmuka)

UNTUK CONTOH DAN INFO LEBIH BANYAK GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

Definisi yang disetujui di sini

PS: Saya juga ingat definisi dari buku bernama C ++ karya Sumita Arora yang kita baca di kelas 11;)


6

Arti abstraksi yang diberikan oleh Oxford English Dictionary (OED) yang paling dekat dengan makna yang dimaksudkan di sini adalah 'Tindakan berpisah dalam pikiran'. Definisi yang lebih baik mungkin 'Mewakili fitur-fitur penting dari sesuatu tanpa menyertakan latar belakang atau detail yang tidak penting.'

Penyembunyian informasi adalah prinsip bahwa pengguna komponen perangkat lunak (seperti kelas) hanya perlu mengetahui rincian penting tentang cara menginisialisasi dan mengakses komponen, dan tidak perlu mengetahui detail implementasi.

Sunting : Menurut saya, abstraksi adalah proses memutuskan bagian mana dari implementasi yang harus disembunyikan .

Jadi itu bukan abstraksi informasi VERSUS bersembunyi. Ini informasi yang menyembunyikan abstraksi VIA.


4

Abstraksi

Abstraksi adalah tindakan merepresentasikan detail essentail tanpa menyertakan detail latar belakang. Kelas abstrak hanya memiliki tanda tangan metode dan kelas implementasi dapat memiliki implementasinya sendiri, dengan cara ini detail kompleks akan disembunyikan dari pengguna. Abstraksi berfokus pada tampilan luar. Dengan kata lain, Abstraksi adalah pemisahan antarmuka dari implementasi aktual.

Enkapsulasi

Enkapsulasi menjelaskan pengikatan anggota dan metode data ke dalam satu unit. Penyembunyian informasi adalah tujuan utama enkapsulasi. Enkapsulasi dilakukan dengan menggunakan penentu akses seperti pribadi, publik, dilindungi. Variabel anggota kelas dibuat pribadi sehingga mereka tidak dapat diakses langsung ke dunia luar. Enkapsulasi berfokus pada pandangan batin. Dengan kata lain, Enkapsulasi adalah teknik yang digunakan untuk melindungi informasi dalam suatu objek dari objek lain.


3

Abstraksi menyembunyikan detail implementasi seperti yang Anda katakan.

Anda mengabstraksikan sesuatu ke titik yang cukup tinggi sehingga Anda hanya perlu melakukan sesuatu yang sangat sederhana untuk melakukan suatu tindakan.

Penyembunyian informasi menyembunyikan detail implementasi. Pemrogramannya sulit. Anda dapat memiliki banyak hal untuk ditangani dan ditangani. Mungkin ada variabel yang ingin / perlu Anda jaga. Menyembunyikan informasi memastikan bahwa tidak ada yang secara tidak sengaja merusak sesuatu dengan menggunakan variabel atau metode yang Anda publikasikan.

Kedua konsep ini sangat terkait erat dalam pemrograman berorientasi objek.


3

Abstraksi - Ini adalah proses mengidentifikasi karakteristik penting dari suatu objek tanpa menyertakan rincian yang tidak relevan dan membosankan.

Enkapsulasi - Ini adalah proses melampirkan data dan fungsi memanipulasi data ini menjadi satu unit.

Abstraksi dan Enkapsulasi adalah konsep yang terkait tetapi saling melengkapi.

  1. Abstraksi adalah prosesnya. Enkapsulasi adalah mekanisme dimana Abstraksi diimplementasikan.

  2. Abstraksi berfokus pada perilaku objek yang dapat diamati. Enkapsulasi berfokus pada implementasi yang memunculkan perilaku ini.

Menyembunyikan Informasi - Ini adalah proses menyembunyikan detail implementasi suatu objek. Ini adalah hasil Enkapsulasi.


2

Enkapsulasi: mengikat anggota data dan fungsi anggota bersama disebut enkapsulasi. enkapsulasi dilakukan melalui kelas. abstraksi: menyembunyikan detail implementasi dari penggunaan atau dari tampilan disebut abstraksi. mis .: int x; kita tidak tahu bagaimana int akan bekerja secara internal. tapi kita tahu int akan berhasil. itu adalah abstraksi.


2

Abstraksi: Abstraksi adalah konsep / teknik yang digunakan untuk mengidentifikasi apa yang seharusnya menjadi pandangan eksternal suatu objek. Hanya membuat antarmuka yang diperlukan tersedia.

Menyembunyikan Informasi: Ini adalah pelengkap Abstraksi, karena melalui penyembunyian informasi Abstraksi tercapai. Menyembunyikan segala sesuatu selain tampilan eksternal.

Enkapsulasi: Apakah pengikatan data dan fungsi terkait menjadi satu unit. Ini memfasilitasi Abstraksi dan menyembunyikan informasi. Mengizinkan fitur seperti akses anggota diterapkan pada unit untuk mencapai Penyembunyian Abstraksi dan Informasi


2

Lihat posting Joel tentang Hukum Abstraksi Leaky

JoelOnsoftware

Pada dasarnya, abstrak memberi Anda kebebasan untuk memikirkan konsep tingkat yang lebih tinggi. Analogi non-pemrograman adalah bahwa kebanyakan dari kita tidak tahu dari mana makanan kita berasal, atau bagaimana makanan itu diproduksi, tetapi kenyataan bahwa kita (biasanya) tidak perlu khawatir tentang hal itu membebaskan kita untuk melakukan hal-hal lain, seperti pemrograman.

Adapun menyembunyikan informasi, saya setuju dengan kemacetan.


2

Singkatnya

Enkapsulasi : - Menyembunyikan informasi

Abstraksi : - Implementasi persembunyian

Abstractionmemungkinkan Anda fokus what the object doessementara Enkapsulasi berartihow an object works


1

Abstraksi memungkinkan Anda untuk memperlakukan proses yang rumit sebagai proses yang sederhana. Sebagai contoh, abstraksi "file" standar memperlakukan file sebagai array byte yang berdekatan. Pengguna / pengembang bahkan tidak perlu memikirkan masalah cluster dan fragmentasi. (Abstraksi biasanya muncul sebagai kelas atau subrutin.)

Penyembunyian informasi adalah tentang melindungi abstraksi Anda dari pengguna jahat / tidak kompeten. Dengan membatasi kontrol beberapa negara (alokasi hard drive, misalnya) ke pengembang asli, penanganan kesalahan dalam jumlah besar menjadi mubazir. Jika tidak ada orang lain selain driver sistem file yang dapat menulis ke hard drive, maka driver sistem file tahu persis apa yang telah ditulis ke hard drive dan di mana. (Manifestasi biasa dari konsep ini adalah privatedan protectedkata kunci dalam bahasa OO.)


1

Untuk mengabstraksikan sesuatu, kita perlu menyembunyikan detailnya atau menyembunyikan detail dari sesuatu yang perlu kita abstraksi. Namun, keduanya bisa dicapai dengan enkapsulasi.

Jadi, menyembunyikan informasi adalah tujuan, abstraksi adalah proses, dan enkapsulasi adalah teknik.


Bisakah Anda memberikan contoh Java yang sama?
Chinmay

1

Abstraksi berarti teknik di mana hanya rincian penting dari perangkat lunak yang dibuat terlihat oleh pengguna untuk membantu pengguna untuk menggunakan atau mengoperasikan dengan perangkat lunak, sehingga rincian implementasi perangkat lunak tersebut tidak ditampilkan (dibuat tidak terlihat). Enkapsulasi adalah teknik yang memiliki paket yang menampung satu atau lebih item dan karenanya beberapa informasi (terutama detail program) menjadi terlihat dan beberapa tidak terlihat oleh pengguna, sehingga enkapsulasi dicapai melalui penyembunyian informasi. Singkatnya. Abstraksi adalah untuk perilaku yang dapat diamati (eksternal) dan enkapsulasi adalah untuk tembus pandang (internal) tetapi keduanya benar-benar saling melengkapi.


1

Hanya menambahkan rincian lebih lanjut di sekitar InformationHiding , ditemukan Tautan ini adalah sumber yang sangat bagus dengan contoh

InformationHiding adalah gagasan bahwa keputusan desain harus disembunyikan dari sistem untuk mencegah kopling yang tidak diinginkan. InformationHiding adalah prinsip desain. Penyembunyian Informasi harus menginformasikan cara Anda merangkum hal-hal, tetapi tentu saja tidak harus .

Enkapsulasi adalah fitur bahasa pemrograman.


1

Abstraksi dan Enkapsulasi adalah dua dari empat konsep OOP dasar yang memungkinkan Anda untuk memodelkan hal-hal dunia nyata menjadi objek sehingga Anda dapat mengimplementasikannya dalam program dan kode Anda. Banyak pemula bingung antara Abstraksi dan Enkapsulasi karena mereka berdua terlihat sangat mirip. Jika Anda bertanya kepada seseorang apa itu Abstraksi, ia akan mengatakan bahwa itu adalah konsep OOP yang berfokus pada informasi yang relevan dengan menyembunyikan detail yang tidak perlu, dan ketika Anda bertanya tentang Enkapsulasi, banyak yang akan mengatakan bahwa itu adalah konsep OOP lain yang menyembunyikan data dari dunia luar. Definisi ini tidak salah karena Abstraksi dan Enkapsulasi memang menyembunyikan sesuatu, tetapi perbedaan utamanya adalah pada niat.

Abstraksi menyembunyikan kerumitan dengan memberikan Anda gambar yang lebih abstrak, semacam tampilan 10.000 kaki, sementara Enkapsulasi menyembunyikan kerja internal sehingga Anda dapat mengubahnya nanti. Dengan kata lain, Abstraksi menyembunyikan detail pada level desain, sementara Enkapsulasi menyembunyikan detail di level implementasi.


0

Setelah membaca semua jawaban di atas satu per satu saya tidak bisa berhenti memposting itu

abstraksi melibatkan fasilitas untuk mendefinisikan objek yang mewakili "aktor" abstrak yang dapat melakukan pekerjaan, melaporkan dan mengubah keadaan mereka, dan "berkomunikasi" dengan objek lain dalam sistem.

Enkapsulasi cukup jelas dari atas ->

Istilah enkapsulasi mengacu pada penyembunyian perincian negara, tetapi memperluas konsep tipe data dari bahasa pemrograman sebelumnya untuk mengaitkan perilaku yang paling kuat dengan data, dan menstandardisasi cara berbagai tipe data berinteraksi, adalah awal dari abstraksi.

referensi wiki


0

Saya juga sangat bingung tentang dua konsep Abstraksi dan Enkapsulasi. Tetapi ketika saya melihat artikel abstraksi di myjavatrainer.com, menjadi jelas bagi saya bahwa Abstraksi dan Enkapsulasi adalah Apel dan Jeruk, Anda tidak dapat benar-benar membandingkannya karena keduanya diperlukan.

Enkapsulasi adalah bagaimana objek dibuat, dan abstraksi adalah bagaimana objek dilihat di dunia luar.


0

Enkapsulasi: mengikat data dan metode yang menanganinya. ini memungkinkan penyembunyian data dari semua metode lain di kelas lain. Contoh: MyListkelas yang dapat menambahkan item, menghapus item, dan menghapus semua item metode add, removedan removeAllbertindak atas daftar (array swasta) yang tidak dapat diakses langsung dari luar.

Abstraksi: menyembunyikan perilaku dan data yang tidak relevan. Bagaimana item sebenarnya disimpan, ditambahkan, atau dihapus disembunyikan (disarikan). Data saya dapat disimpan dalam array sederhana, ArrayList, LinkedList, dan sebagainya. Juga, bagaimana metode diimplementasikan tersembunyi dari luar.


0

Enkapsulasi - menegakkan akses ke data internal secara terkendali atau mencegah anggota diakses secara langsung.

Abstraksi - Menyembunyikan detail implementasi metode tertentu dikenal sebagai abstraksi

Mari kita pahami dengan bantuan contoh: -

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

Sekarang untuk abstraksi, tentukan metode yang hanya dapat diakses dan pengguna tidak tahu apa isi dari metode tersebut dan bagaimana cara kerjanya. Mari kita perhatikan contoh di atas, kita dapat mendefinisikan area metode yang menghitung luas persegi panjang.

 public int area()
 {
  return length*breadth;
 }

Sekarang, setiap kali pengguna menggunakan metode di atas dia hanya akan mendapatkan area bukan dengan cara bagaimana itu dihitung. Kita dapat mempertimbangkan contoh metode println () yang baru kita ketahui digunakan untuk mencetak dan kita tidak tahu bagaimana cara mencetak data. Saya telah menulis blog secara rinci, Anda dapat melihat tautan di bawah ini untuk info lebih lanjut abstraksi vs enkapsulasi


0

Perlu dicatat bahwa istilah-istilah ini memiliki standar, definisi IEEE, yang dapat dicari di https://pascal.computer.org/ .

abstraksi

  1. melihat objek yang berfokus pada informasi yang relevan dengan tujuan tertentu dan mengabaikan sisa informasi tersebut
  2. proses merumuskan pandangan
  3. proses menekan detail yang tidak relevan untuk membangun model yang disederhanakan, atau hasil dari proses itu

menyembunyikan informasi

  1. teknik pengembangan perangkat lunak di mana setiap antarmuka modul mengungkapkan sesedikit mungkin tentang pekerjaan dalam modul dan modul lainnya dicegah dari menggunakan informasi tentang modul yang tidak ada dalam spesifikasi antarmuka modul
  2. penahanan keputusan desain atau implementasi dalam satu modul sehingga keputusan tersebut tersembunyi dari modul lain

enkapsulasi

  1. teknik pengembangan perangkat lunak yang terdiri dari mengisolasi fungsi sistem atau sekumpulan data dan operasi pada data tersebut dalam suatu modul dan memberikan spesifikasi yang tepat untuk modul
  2. konsep bahwa akses ke nama, makna, dan nilai-nilai tanggung jawab kelas sepenuhnya terpisah dari akses ke realisasinya
  3. Gagasan bahwa sebuah modul memiliki bagian luar yang berbeda dari bagian dalamnya, bahwa ia memiliki antarmuka eksternal dan implementasi internal
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.