Bagaimana cara menjelaskan konsep OOP kepada orang yang tidak teknis?

10

Saya sering mencoba untuk tidak memberi tahu orang bahwa saya seorang programmer karena sebagian besar waktu saya akhirnya menjelaskan kepada mereka apa artinya itu. Ketika saya memberi tahu mereka bahwa saya pemrograman di Jawa, mereka sering menanyakan pertanyaan umum tentang bahasa dan bagaimana perbedaannya dari x dan y. Saya juga tidak pandai menjelaskan hal-hal karena 1) Saya tidak punya banyak pengalaman di lapangan dan 2) Saya sangat benci menjelaskan hal-hal kepada orang-orang non-teknis.

Mereka mengatakan bahwa Anda benar-benar memahami hal-hal begitu Anda menjelaskannya kepada orang lain, dalam hal ini bagaimana Anda menjelaskan terminologi dan konsep OOP kepada orang yang tidak teknis?


sumber
Bisakah seseorang dengan akses menambahkan ini sebagai wiki komunitas? Terima kasih.
2
Saya telah melihat pertanyaan yang sama ini hampir kata demi kata beberapa kali sekarang.
1
@Michael, bisakah kamu memposting beberapa tautan?
1
Terkait atau digandakan: programmers.stackexchange.com/questions/4123/…
Maniero
Untuk memahami Pola Desain (dan juga OOP), lihat shop.oreilly.com/product/9780596007126.do buku yang paling intuitif tentang hal itu
cl-r

Jawaban:

27

Saya biasanya mencoba dan menggambarkan Pemrograman Berorientasi Objek dengan menggunakan contoh dunia nyata.

Sebagai contoh, saya dapat mengatakan bahwa kelas yang dipanggil Vehiclemenggambarkan hal-hal minimum yang dimiliki kendaraan. Saya akan meminta orang tersebut untuk memberi tahu saya apa pendapatnya tentang kendaraan. Terkadang mereka mengatakan hal-hal seperti "Yah, seperti mobil atau truk", dan saya akan mengangguk dan setuju dengan mereka. Lalu saya akan bertanya apa perbedaan antara mobil dan truk. Terkadang mereka menyebutkan ukuran, terkadang tujuan, dan hal lainnya.

Kemudian saya akan meminta mereka untuk melupakan mobil, atau truk dan hanya meminta mereka untuk terus menggambarkan kendaraan:

"Oh, baiklah itu bergerak"

"Ini memiliki operator, atau sopir"

dll ...

Segera, kita tahu apa itu Kendaraan dan saya katakan bahwa di OOP kita akan mendefinisikan kendaraan, dan demi argumen mengatakan itu bisa bergerak, dan memberikannya semacam pengemudi. Lalu saya akan bertanya, ok, jadi apa yang dimiliki mobil?

"Pintu"

"Windows"

Dan kemudian sebuah truk ....

"Pintu" "windows" "Roda Lebih Banyak!"

Segera, setelah banyak diskusi, orang lain umumnya telah mengidentifikasi:

1) Apa yang merupakan kendaraan

2) Apa yang dimaksud dengan mobil

3) Apa yang dimaksud dengan truk

4) Apa yang merupakan pesawat terbang.

Semua tanpa teknis. Kami membagi properti masing-masing ke area yang tepat. Mereka memahami warisan ("Ya, mobil adalah kendaraan, truk adalah kendaraan, tetapi mobil bukan truk, itu SEDERHANA, duh!").

Mereka bahkan memahami polimorfisme, "Tentu, pada dasarnya mereka melakukan hal yang sama, tetapi itu mungkin sedikit berbeda.". Kita dapat berbicara tentang perilaku dan di mana hal itu seharusnya hidup di pohon benda kita.

Bergantung pada pendidikan dan latar belakang mereka, beberapa orang mendapatkannya lebih cepat daripada yang lain. Tetapi ketika saya membandingkan OOP dengan objek kehidupan nyata, kebanyakan orang selalu mendapatkannya. Bahkan, saya telah menemukan dalam percakapan dengan orang-orang non-teknis hal-hal yang tidak pernah saya pikirkan. Kendaraan tidak harus diawaki, misalnya (drone), tetapi apakah seorang programmer akan menganggap operator kendaraan sebagai properti dari itu? Saya tidak mengatakan itu benar atau salah untuk memiliki operator yang disebutkan, tetapi itu membuat kita berpikir tentang apa yang kita modelkan dan apa yang kita coba capai ketika kita mengembangkan perangkat lunak.

Sekarang, spesialisasi sebagian template, di sisi lain .... :)

Jus Moo
sumber
3
LOL +1 untuk jawaban yang bagus, tetapi saya berharap saya bisa memberi Anda yang lain untuk spesialisasi template parsial! Saya cenderung menggunakan analogi binatang, karena warisan lebih alami dalam konteks itu. Sial, Anda bahkan bisa menjelaskan banyak (dua) warisan seperti itu!
Chinmay Kanchi
Semua orang menggunakan mobil sebagai contoh. Itu sebabnya sangat menyedihkan bekerja di basis kode yang tampaknya tidak mengerti OOP yang berhubungan dengan mobil.
Erik Reppen
14

Objek adalah kata benda, metode adalah kata kerja.

k rey
sumber
8
Cukup cepat, saya harus menjelaskan ini kepada programmer agak sering.
Wyatt Barnett
7
Tidak selalu. Sebagai contoh: Saya keberatan dengan metode Anda. ;)
Dan J
Dalam metode JavaScript juga fungsi, properti, kata benda, DAN kata kerja.
Erik Reppen
3

Ini adalah beberapa versi dari jawaban kalengan saya yang saya berikan kepada orang yang sangat non-teknis:

Pemrograman adalah upaya untuk membuat representasi realitas di komputer. Ada banyak alat dan perangkat yang sudah ada yang melakukan ini - pikirkan tentang bagaimana spreadsheet memudahkan kita untuk merepresentasikan akuntansi atau statistik, atau bagaimana presentasi Powerpoint memungkinkan kita untuk menyimpan dan menampilkan presentasi kita.

Terkadang kita perlu membangun representasi kustom realitas menjadi aplikasi baru atau yang sudah ada yang mencerminkan proses bisnis kita. Ada banyak cara untuk memprogram, dan salah satu cara yang paling umum untuk memprogram adalah pemrograman berorientasi objek, di mana kode yang kita bangun dirancang khusus untuk mereplikasi konsep realitas. "Benda" pada kenyataannya memiliki atribut dan perilaku. Sebagai contoh, seorang manusia sering memiliki lengan dan kaki, warna rambut, etnis, dan sering dapat Berbicara dan Berjalan.

Berbicara dan Berjalan dapat datang dalam varietas yang berbeda, seperti bahasa apa yang digunakan seseorang, atau kecepatan atau cara seseorang berjalan.

Makhluk Manusia sering berinteraksi dengan "benda" jenis lain, apakah itu binatang, manusia lain, organisme hidup lain, atau benda mati. Ada beberapa tema dalam kenyataan yang sering membutuhkan cara untuk diwakili, seperti interaksi antara "hal-hal", kategorisasi hal, dll. Pertimbangkan proses bisnis yang berlangsung dalam organisasi kita. Ada "logika bisnis" yang sangat rumit yang perlu diwakili dalam perangkat lunak yang digunakan organisasi kami.

Pemrograman Berorientasi Objek menyediakan sarana untuk secara akurat mewakili "konsep dunia nyata" dan "logika bisnis" ini.

-> Pernyataan ini biasanya cukup untuk mencegah keingintahuan mereka (atau mungkin membuat mereka menangis), tetapi jika mereka memiliki lebih banyak pertanyaan, pernyataan di atas (saya percaya) meletakkan dasar yang layak untuk ke mana pembicaraan dapat berlangsung. Saya tidak benar-benar berpikir bahwa orang non-teknis terlalu peduli dengan terminologi teknis seperti "Abstraksi," "Komposisi," "Polimorfisme," dll, tetapi jika ya, bahasa yang saya gunakan dalam pernyataan kalengan memungkinkan saya untuk menarik contoh berdasarkan itu.

Tim Claason
sumber
1

Saya selalu belajar OOP seperti ini:

Anda memiliki jam, dan ini menunjukkan waktu - yah, dalam pemrograman Anda meletakkan semua kode dan hal-hal yang harus Anda lakukan bersama-sama (terdengar cukup jelas, tetapi orang-orang tidak terbiasa melakukan hal ini pada masa-masa awal). Bagaimanapun, itu disebut enkapsulasi .

Sekarang Anda punya jam, Anda mungkin ingin jam alarm - yah, setelah Anda memiliki semua hal bersama Anda dapat menambahkan hal-hal untuk membuatnya lebih banyak - seperti mengatur alarm dan membuatnya berdering. Ini disebut warisan .

Juga, Anda melihat jam yang saya miliki di pergelangan tangan saya, tetapi Anda dapat melihat jam lain yang berbeda seperti jam kakek atau jam digital. Tampaknya berbeda, tetapi ini masih sebuah jam - yah, itu disebut polimorfisme .

Dan di sana Anda memiliki 3 sudut pemrograman berorientasi objek. Semua sisanya hanya coding.

gbjbaanb
sumber
1

Saya hanya akan memberitahu mereka untuk mendaftar kursus OOP jika mereka benar-benar ingin memahaminya.

Maksud saya, semua analogi seperti Car.startEngine (); adalah, mari kita hadapi itu - rap murni. Ketika saya pertama kali menjadi OOP bertahun-tahun yang lalu, saya menemukan ini hanya untuk abstrak domain lebih jauh.

Alih-alih hanya menjelaskan bahwa OOP adalah tentang mengelola kompleksitas bahasa prosedural, hampir 80% penulis buku pemrograman berasumsi bahwa programmer adalah idiot yang tidak mengerti yang perlu diucapkan dengan istilah yang sederhana (lihat ironi di sini?).

Ya, itu sangat normal untuk menjelaskan Daftar dan Vektor, karena itulah yang paling sering kami kerjakan, bukan Car.Engine dan PoliceMan. Arrest (kecuali jika Anda adalah pengembang game, tetapi sekali lagi, Anda masih harus memiliki bagian dari bekas).

Kembali ke topik, saya hanya akan memberi tahu mereka, saya membuat objek tidak berwujud yang murni ada dalam pikiran programmer, untuk keperluan pemrosesan penggajian / permainan game / navigasi pesawat ulang-alik, dll.

Jika mereka masih memiliki pertanyaan, berhentilah berdiskusi, karena itu tidak layak. Kebanyakan orang gagal membayangkan gagasan abstrak dan membutuhkan contoh untuk hampir semua hal (yang berarti penyederhanaan / spesialisasi topik yang sebenarnya).

Jas
sumber
+1 OO ditemukan di Xerox SPARC justru karena mereka pikir Car.startEngine()hal-hal akan membuat pemrograman menjadi sederhana untuk semua dan mudah untuk intuisi bagi non-programmer atau pemula. Yah jelas itu tidak berhasil sama sekali ...
Ericson2314
1

Saya berbicara tentang percakapan saya dengan istri saya tentang hal ini, dalam jawaban ini di sini: /software/45464/how-to-convince-non-programmer-his-notions-about- komputer-yang-salah / 45467 # 45467

EDIT: Pertanyaan yang saya jawab di sana dimoderasi, jadi saya akan mengulangi jawaban saya di sini.

Duduk di sebuah restoran bersama istri saya, dia bertanya kepada saya, "Apa yang dimaksud dengan Berorientasi Objek?"

Saya mulai membesar-besarkan tentang penggunaan kembali kode dan enkapsulasi dan polimorfisme, dan pada titik tertentu saya menyadari bahwa matanya telah ditutup-tutupi.

Jadi saya mengambil paket Splenda dari wadah. Saya berkata, "Ini sebuah objek. Apa propertinya?"

Dia berkata, "Ini berbentuk persegi panjang, terbuat dari kertas, mengandung splenda, biru, memiliki cetak di atasnya."

Saya mengambil sebungkus gula. "Apa kesamaannya dengan yang ini?"

Dia berkata, "Persegi panjang, kertas, yang ada cetak."

Saya berkata, "Bagaimana kalau mereka berdua mengandung sesuatu yang manis?"

Dia berkata, "Tentu."

Saya berkata, "Jadi ini adalah dua contoh dari apa yang kita sebut paket pemanis abstrak. Paket pemanis ideal platonis, jika Anda suka."

Dia berkata, "Tentu."

Saya berkata, "Dan masing-masing memiliki properti yang diwarisi dari paket abstrak, dan kemudian variasi yang spesifik untuk jenis barangnya."

Dia berkata, "Benar. Oh! Dan jika saya ingin membuat, seperti, paket Sakarin, saya akan mengambil yang generik, dan mengatur detail tentang hal itu untuk Sakarin, dan kemudian saya akan memilikinya!"

Saya berkata, "Bingo: Pemrograman Berorientasi Objek."

Anda dan saya tahu dia baru saja mengarahkan jalannya ke pola desain pabrik. Masa bodo. Ini menggambarkan warisan, enkapsulasi, identitas kelas objek ... Barang bagus.

Dan Ray
sumber
Drat. Jawaban yang ditautkan dihapus karena "alasan moderasi." Sangat ambigu tidak membantu! :-(
Ogre Psalm33
@ OgrePsalm33 - Kira-kira mengulangi jawaban saya.
Dan Ray
0

Pertanyaan ini sepertinya adalah kandidat untuk ditutup, namun ...

Seperti kebanyakan hal, OOP sebenarnya sangat sederhana untuk dijelaskan pada tingkat konseptual. Pemrogram memodelkan objek; dan:

  • objek memiliki status (bidang / anggota data)
  • benda memiliki aksi (metode / fungsi)
  • benda membangun satu sama lain (warisan)

Ini adalah ratusan detail yang lebih halus, tentu saja. Tetapi jika Anda hanya mencoba memberi seseorang gambaran 10 detik, saya pikir itu awal yang baik. Apakah ada konsep yang lebih spesifik yang Anda kesulitan menjelaskan?

Georgney
sumber
0

Contoh Ponsel:

Bayangkan Anda adalah pemilik pabrik, Anda ingin menggambarkan telepon umum

  • Langkah 1: Sebutkan properti ponsel generik ini misalnya: tinggi, berat, warna, dll
  • Langkah 2: Daftarkan fungsi-fungsi telepon umum ini mis: membuat panggilan, menerima panggilan, mengirim sms dll

Sekarang Anda sudah memiliki "cetak biru" generik buat saya ponsel berikut:

Telepon 1:

  • Tinggi-> 102mm

  • Berat -> 85g

  • Warna-> Merah Muda

Telepon 2:

  • Tinggi-> 125mm

  • Berat -> 96g

  • Warna-> Merah

Malam gelap
sumber
0

Saya pikir cara terbaik untuk menjelaskan kepada tipe non-teknis tentang OOP adalah dengan menghubungkannya dengan mereka.

Pada dasarnya OOD & OOP ingin Anda berpikir tentang sistem yang Anda rancang dan laksanakan sebagai dunia yang saling berinteraksi.

Jadi mari, demi argumen (yang tidak pernah berjalan dengan baik di internet), katakanlah Anda sedang menjelaskan kepada seorang kolektor sampah tentang OOD & P. Namanya adalah Bob. Kamu dulu pergi ke sekolah dengannya 15 tahun yang lalu, kamu pernah bertemu dengannya di sebuah bar, dan kamu berdua berpura-pura tertarik pada kehidupan masing-masing.

"Jadi, John, kamu bilang kamu programmer. Keponakanku suka omong kosong itu. Terus tentang pemrograman berorientasi objek, atau apalah. Tentang apa?" Perhatikan bahwa Bob adalah orang Inggris dari cara dia salah mengeja berorientasi.

"Yah, Bob," jawabmu, meringis pada orientasi. "Benar-benar sederhana. Kamu mengumpulkan sampah, kan? Apa, umumnya kamu dalam pekerjaanmu?"

"Yah, aku mengikuti van keliling kota mengambil sampah dan memasukkannya ke dalam van," jawab Bob, dengan heran.

dan Anda perlu mendengarkan untuk itu. Itu adalah perilaku kita. Pada dasarnya itulah yang Anda butuhkan untuk desain. Pemrograman berorientasi objek pada dasarnya adalah bagaimana Anda menerapkan desain. Ini berbeda dari bahasa ke bahasa. "

Bob tertidur di birnya. Kamu berjalan pergi.

Matt Ellen
sumber
1
Ah! Drive dengan down vote. Aneh dalam daya tariknya.
Matt Ellen
1
Cerita keren bro. Apakah Anda juga mengikat bawang ke ikat pinggang Anda?
Donal Fellows
Hanya yang kuning besar, karena perang.
Matt Ellen
0

Saya suka contoh mobil untuk menjelaskan warisan (saya cenderung menggunakan hewan daripada kendaraan tapi itu ide yang sama) tetapi untuk menjelaskan cara kerja program berorientasi objek, saya merujuk pada analogi yang pernah saya baca di situs web Chris Crawford: programnya seperti birokrasi yang sangat efisien. Semua objek yang berbeda dalam program seperti departemen yang berbeda dalam birokrasi; masing-masing departemen memiliki tugas yang ditentukan sendiri, mereka memiliki input yang jelas (siapa yang harus diajak bicara dan formulir apa yang harus diisi,) dan departemen lain sering tidak tahu banyak tentang apa yang terjadi di dalam. SDM itu seperti pabrik abstrak, TI adalah singleton, dll.

Mendapatkan pesan kesalahan karena Anda mengetik hal yang salah dalam program komputer sama seperti mengisi formulir yang salah untuk dikirim ke kantor.

jhocking
sumber
0

OOP adalah penyederhanaan besar jika sesuatu - sebuah abstraksi - dari proses pemikiran manusia dan pemahaman dunia untuk memproyeksikan fungsionalitas menjadi "kekosongan" digital untuk meniru proses dan klasifikasi yang dikenal secara digital. Ini, dalam banyak hal, lebih banyak tentang keadaan bahasa primitif kita daripada kita "berpikir lebih seperti komputer".

Jika pemrograman meniru realitas atau pemikiran manusia akan jauh lebih organik, kacau dan serampangan di alam - bahkan lateral. Alih-alih, kami menyederhanakan kenyataan menjadi langkah-langkah kecil, "logika 2 + 2", kategori kasar, alat kecil yang dapat digunakan kembali, dan penalaran prasejarah.

Kami masih berusaha mencari cara untuk mengunduh pikiran dan keinginan kami ke dalam protokol dan bahasa umum dan saya pikir sejarawan akan terpesona dengan kekasarannya yang canggih suatu hari nanti - seperti yang sekarang kita lihat hieroglif. Itu sama sekali bukan "pintar" - itu hanya menyoroti bagaimana kita tidak dapat dengan mudah menjelaskan bagaimana kita memutuskan atau memahami bahkan hal-hal yang paling sederhana. Komputasi masih pada tingkat "seekor anjing adalah seekor anjing karena itu bukan kucing" evolusi pemikiran - itu adalah ribuan tahun di belakang bahkan bahasa dasar yang diucapkan.

Glyn
sumber
0

Ada dua macam penyihir. Ada pria yang membuat hal-hal tertentu terjadi dengan kata-kata ajaib. Dia punya kata untuk memanggil api. Dia punya kata untuk membuat ayam beku muncul dari udara tipis. Dan kata lain untuk menciptakan pot kekuatan (saya lebih suka kekuatan saya hijau, bersinar, dan tembus pandang) penuh kebaikan friolating. Dengan penerapan kata-katanya yang tepat ia dapat menghasilkan ayam goreng.

Dan kemudian ada penyihir OOP. Yang baru saja memanggil seorang imp yang tahu cara pergi ke toko kelontong, membeli ayam (atau bahan untuk makanan lain yang Anda ingin dia siapkan), memasaknya, dan menyajikan makan malam untuk Anda. OOP Wizard tidak harus memberi tahu impnya bagaimana melakukannya. Dia hanya perlu memberi tahu dia apa yang dia inginkan yang dalam hal ini adalah ayam goreng. Tidak hanya itu, wizard OOP dapat memanggil pelayan lain untuk memberi tahu koki impnya apa yang harus dilakukan.

Jadi, mantera pria mengesankan di pesta-pesta tetapi penyihir OOP adalah yang Anda inginkan ketika Anda akan memulai restoran ajaib dengan banyak karakter (seperti, seorang pelayan unicorn yang kesal, dan manajer lantai troll) yang semuanya harus bekerja sama. Jika Anda mencoba memohon setiap langkah dari masalah "restoran" Anda dapat dengan mudah terlibat dalam detail dan itu sangat mudah untuk membuat kesalahan. Wizard OOP melakukan pra-pelatihan antek-anteknya untuk memilah-milah detail untuknya sehingga ia bisa fokus pada memecahkan masalah yang lebih besar dengan menyuruh orang-orangnya berinteraksi.

Belum lagi lebih mudah untuk menggunakan kembali chef-imp Anda untuk masalah kantin sekolah dasar Anda maka itu adalah untuk memisahkan semua sampah yang Anda mungkin atau mungkin tidak digunakan kembali ketika Anda melakukan semuanya satu langkah pada satu waktu dengan menelepon kata-kata dan kata-kata yang memanggil set kata lain (yang akan menjadi lebih banyak karena Anda harus menangani berbagai masalah yang lebih besar).

Agar adil, dengan aplikasi yang sangat, sangat hati-hati, wizard incantation dapat menyelesaikan semuanya secepat wizard OOP. Dia dapat memecah hal-hal dengan cara yang benar sehingga memanggil mantra yang tepat tidak membutuhkan lebih banyak pekerjaan daripada penyihir OOP. Tetapi pekerjaan itu jauh lebih sulit untuk dipahami atau diduplikasi dan jauh lebih sulit untuk menggunakan kembali sebagian besar karena semuanya terikat bersama untuk satu masalah kompleks tertentu.

Erik Reppen
sumber