Bingung tentang definisi 'abstraksi' di OOP

16

Saya mencoba memahami definisi 'abstraksi' dalam OOP.

Saya telah menemukan beberapa definisi utama. Apakah semuanya valid? Apakah salah satunya salah? Saya bingung. (Saya menulis ulang definisi dengan kata-kata saya sendiri).

Definisi 1:

Abstraksi adalah konsep mengambil beberapa objek dari dunia nyata, dan mengubahnya menjadi istilah pemrograman. Seperti membuat Humankelas dan memberikan int health, int age, String name, dll properti, dan eat()metode lain.

Definisi 2:

Definisi yang lebih umum. Abstraksi adalah konsep yang terjadi di mana saja dalam sistem perangkat lunak di mana 'membuat sesuatu menjadi lebih umum / sederhana / abstrak' terlibat. Beberapa contoh:

  • Hirarki warisan, di mana kelas yang lebih tinggi lebih sederhana atau lebih umum, dan mendefinisikan implementasi yang lebih umum dan abstrak. Sementara kelas yang lebih rendah dalam hierarki lebih konkret dan mendefinisikan implementasi yang lebih rinci.

  • Menggunakan enkapsulasi untuk menyembunyikan detail implementasi kelas dari kelas lain, sehingga membuat kelas lebih 'abstrak' (lebih sederhana) ke dunia perangkat lunak luar.

Definisi 3

Definisi umum lainnya: Abstraksi adalah konsep pemindahan fokus dari perincian dan implementasi konkret hal, ke jenis hal (yaitu kelas), operasi yang tersedia (yaitu metode), dll, sehingga membuat pemrograman lebih sederhana, lebih umum, dan lebih abstrak. (Ini dapat terjadi di mana saja dan dalam konteks apa pun dalam sistem perangkat lunak). Ini terjadi misalnya ketika mengenkapsulasi, karena enkapsulasi berarti menyembunyikan detail implementasi dan hanya menunjukkan jenis hal dan definisi yang lebih umum dan abstrak. Contoh anotehr akan menggunakan Listobjek di Jawa. objek ini sebenarnya menggunakan detail implementasi dari suatu ArrayListatau LinkedList, tetapi informasi ini disarikan menggunakan nama yang lebih umum List.

Apakah ada dari definisi ini yang benar? (Saya mengacu pada definisi yang paling konvensional dan diterima ).

Aviv Cohn
sumber
Abstraksi mendefinisikan "sesuatu" menjadi TIPE tertentu (Hewan => Anjing) untuk mempersempitnya lebih jauh (Anjing => Pudel).
Christine

Jawaban:

22

Abstraksi adalah salah satu dari 3 pilar Object Oriented Programming (OOP). Secara harfiah berarti mempersepsikan suatu entitas dalam suatu sistem atau konteks dari perspektif tertentu. Kami mengambil perincian yang tidak perlu dan hanya fokus pada aspek yang diperlukan untuk konteks atau sistem yang sedang dipertimbangkan.

Inilah beberapa penjelasan yang bagus:

Anda sebagai pribadi memiliki hubungan yang berbeda dalam peran yang berbeda. Ketika Anda berada di sekolah, maka Anda adalah "Siswa" . Saat Anda di tempat kerja, Anda adalah "Karyawan" . Ketika Anda berada di lembaga pemerintah, Anda dapat dipandang sebagai "Warga Negara" . Jadi itu bermuara pada apa dalam konteks apa kita melihat entitas / objek. Jadi jika saya memodelkan Sistem Penggajian , saya akan melihat Anda sebagai Karyawan (PRN, Purna Waktu / Paruh Waktu, Penunjukan) . Jika saya membuat model Sistem Pendaftaran Kursus , maka saya akan mempertimbangkan aspek dan karakteristik Anda sebagai seorang Siswa (Jumlah Roll, Usia, Jenis Kelamin, Kursus yang Didaftar) . Dan jika saya memodelkan Sistem Informasi Jaminan Sosialmaka saya akan melihat detail Anda sebagai Warga Negara (seperti DOB, Gender, Negara Lahir, dll.)

Ingatlah bahwa Abstraksi (fokus pada detail yang diperlukan) berbeda dari Enkapsulasi (menyembunyikan detail dari dunia luar). Enkapsulasi berarti menyembunyikan detail objek dan menyediakan antarmuka yang layak untuk entitas di dunia luar untuk berinteraksi dengan objek atau entitas itu. Sebagai contoh, jika seseorang ingin tahu nama saya maka dia tidak bisa langsung mengakses sel-sel otak saya untuk mengetahui siapa nama saya. Sebaliknya orang itu akan menanyakan nama saya. Jika seorang pengemudi ingin mempercepat kendaraan maka ada antarmuka (pedal akselerator, roda gigi, dll) untuk tujuan itu.

Def pertama tidak begitu jelas. Def 2 baik tetapi cenderung membingungkan pemula karena mencoba menghubungkan Abstraksi dengan Enkapsulasi dan Warisan. Def 3 adalah yang terbaik dari 3 definisi karena definisi ini mendefinisikan dengan tepat apa itu Abstraksi.

Maxood
sumber
3
Jadi Anda akan mengatakan bahwa itu seperti generalisasi bukan spesifikasi?
Robert Rocha
1
@samyismyhero Tepat! Kami mencari atribut generik dan perilaku objek untuk abstraksi.
Maxood
[Hewan => Anjing] adalah abstraksi. Anda menentukan bagian apa yang mungkin dimiliki "Hewan" untuk membuat "Anjing." (Ekor, kaki, bulu, dll). Kemudian, Anda bisa menggunakan kelas "Anjing" untuk mendefinisikan Poodle, Pit Bull, dll. Jadi, Anda mendeklarasikan ras anjing berdasarkan kelas "Anjing" dan bukan "Hewan."
Christine
3

Definisi 1 jelas bukan abstraksi. Itu lebih dekat menggambarkan pemodelan .

Definisi 2 dan 3 menggambarkan hal yang sama. Dan keduanya adalah deskripsi abstraksi yang cukup bagus.

Euforia
sumber
Itulah yang saya pikir! abstract class Shapelol!
Robert Rocha
2

Masing-masing definisi ini baik-baik saja.

Abstraksi adalah tempat Anda berfokus hanya pada perincian yang penting untuk tujuan Anda.

Dalam kasus pertama, Anda (saat ini) tidak dapat memasukkan orang sungguhan dalam kode Anda; Anda fokus pada detail tertentu dari seseorang yang melayani tujuan Anda. Di program lain Anda mungkin perlu fokus pada detail yang berbeda. Ini akan menjadi abstraksi yang berbeda dari seseorang, dan masing-masing dapat sama-sama valid dalam konteksnya .

Definisi kedua dan ketiga melanjutkan ide ini, menerapkannya pada entitas perangkat lunak.

andy256
sumber