Bagaimana cara menjelaskan OOP ke programmer matlab? [Tutup]

8

Saya punya banyak teman yang berasal dari latar belakang teknik listrik / fisik / mekanik, dan ingin tahu tentang apa itu "OOP". Mereka semua mengenal Matlab dengan sangat baik, sehingga mereka memiliki latar belakang pemrograman dasar; tetapi mereka memiliki waktu yang sangat sulit memahami sistem tipe kompleks yang dapat mengambil manfaat dari konsep yang diperkenalkan OOP.

Adakah yang bisa mengusulkan cara yang bisa saya coba jelaskan kepada mereka? Saya sendiri tidak terbiasa dengan Matlab, jadi saya kesulitan menemukan persamaan. Saya pikir menggunakan contoh sederhana seperti bentuk atau hewan agak terlalu abstrak untuk para insinyur itu. Sejauh ini saya sudah mencoba menggunakan antarmuka Matrix vs implementasi berbasis array / jarang / apa pun, tapi itu tidak bekerja dengan baik, mungkin karena berbagai jenis matriks sudah didukung dengan baik di Matlab.

ek
sumber
1
Untuk keuntungan Anda, Anda dapat mengasumsikan bahwa matlab adalah sesuatu seperti C, kecuali ia memiliki pustaka yang lebih beragam, dokumentasi lebih mudah, dan sintaksis yang sedikit berbeda.
PearsonArtPhoto
3
Jika mereka penasaran, apa yang mencegah mereka sedikit googling dan membaca pengantar singkat? Saya tidak bisa membayangkan insinyur yang baik benar-benar ingin tahu tentang sesuatu dan tidak mengejar minat itu.
2
@Pear Saya pikir masalahnya bukan hanya bahasa itu sendiri, tetapi penggunaannya. Sebagai contoh, seperti yang saya pahami, mereka praktis tidak pernah mendefinisikan tipe baru. Namun, itu ringkasan pendek yang bagus :)
Oak
4
Melarikan diri! Melarikan diri!
Pekerjaan
3
Jangan merusaknya. Mereka akan jauh lebih baik tanpa OOP yang tidak berguna.
SK-logic

Jawaban:

14

Sejak 2008, Matlab mendukung pemrograman berorientasi objek. Jadi jika mereka ingin mencari tahu tentang OOP dengan cara yang mereka kenal, mereka mungkin ingin melihat dokumentasi Matlab pada OOP , terutama contohnya .

Beberapa waktu yang lalu, saya memperkenalkan beberapa rekan saya yang menggunakan Matlab ke OOP. Berikut adalah beberapa contoh yang saya gunakan.

Yang penting, semua yang Anda lakukan dengan OOP, Anda juga dapat melakukan sebaliknya. Yang memungkinkan OOP adalah (1) membuat struktur yang lebih hebat, (2) kode bundel, dan (3) membuatnya mudah untuk memodulasi kode dan memprogram lebih cepat.

  1. Struktur dengan bidang yang secara otomatis memperbarui diri. Misalnya, Anda menyimpan koordinat dalam piksel (karena Anda mengukurnya pada gambar), tetapi untuk perhitungan jarak, Anda ingin memilikinya dalam mikron. Menyimpan keduanya dalam suatu struktur bermasalah, karena jika Anda mengubah satu, Anda tidak boleh lupa untuk mengubah yang lain (dan Anda akan). Jadi, Anda memilih untuk menyimpan semua koordinat dalam mikron, yang berarti bahwa setiap kali Anda membutuhkannya dalam piksel, Anda harus mengonversi, yang menjengkelkan dan mungkin rentan kesalahan.
     
    Dengan sebuah objek, Anda menjadikan "koordinat dalam piksel" sebagai properti dependen, konversi menjadi otomatis, dan Anda tidak perlu khawatir memperbarui dua koordinat secara bersamaan. Tentu saja, Anda dapat melakukan lebih banyak lagi. Misalnya, struktur Anda dapat memiliki metode 'edit', yang muncul membuka GUI, sehingga Anda dapat dengan mudah mengedit nilai. Atau dapat memiliki metode simpan yang dipanggil setiap kali nilai dalam struktur berubah.

  2. Anda dapat menggabungkan fungsi dengan struktur data Anda. Misalnya, Anda dapat memiliki fungsi plot khusus untuk data yang Anda panggil plot(myDataStructure). Demikian pula, Anda dapat memiliki dispmetode khusus, atau bahkan metode pengolahan data Anda dilampirkan ke data Anda.

Jonas
sumber
Saya ingat dari 2008, bahwa OOP di Matlab sangat lambat.
quant_dev
@quant_dev: Semuanya menjadi lebih baik sekarang (2008 adalah pertama kalinya mereka menawarkan fitur; sudah ada beberapa optimasi sejak itu), meskipun masih ada overhead yang lebih besar ketika memanggil metode objek yang ditentukan pengguna dibandingkan dengan memanggil fungsi. Jika Anda tidak menjalankan OOP habis-habisan seperti yang mungkin Anda lakukan di C ++, tetapi mencampur OOP dan fungsi normal, di mana objek bertindak sebagai antarmuka antara pengguna dan fungsi yang melakukan pekerjaan aktual, sistem bekerja dengan cukup baik.
Jonas
Walaupun saya menyukai contoh Anda, mereka sebenarnya tidak terlalu bermanfaat kecuali Anda mencari penggunaan kembali yang besar (yang merupakan keunggulan OOP). Jika saya akan mengonversi dari piksel ke mikron banyak, dan belum pernah menggunakan OOP, memiliki pemanggilan fungsi mikron = convert_to_micron (piksel) akan tampak sama mudah dan lebih familier daripada membangun beberapa OOP utama yang menyusun struktur di sekitar panggilan kelas . Menggunakan abstraksi itu bagus, tetapi dengan mempelajari OOP dalam pengaturan yang lebih prosedural, perlu ada dorongan kuat mengapa proses pemikiran mereka harus berubah.
Jeff Langemeier
Saya punya pertanyaan serius. Mengapa mainan di Matlab disebut OOP tetapi di C itu bukan OOP? Bahasa AC structdengan metode jauh lebih menarik daripada yang ada di Matlab.
ar2015
@ ar2015: apakah Anda bertanya mengapa fitur apa pun di Matlab diperlakukan seolah-olah Matlab adalah bahasa pemrograman yang serius? Atau apakah Anda percaya structpada C memiliki fitur OOP mendasar yang tidak dimiliki oleh kelas Matlab?
Jonas
4

Jangan mencoba menemukan contoh penghubung. OOP sangat cocok di area yang sepenuhnya berbeda dari 'kode gaya matlab' (dan sebaliknya). Saya akan pergi untuk jenis penjelasan yang sama saya akan berikan kepada seseorang yang tahu sedikit tentang pemrograman prosedural tetapi tidak pernah bekerja dengan struct atau struktur data serupa.

blubb
sumber
2

Kode MATLAB yang di-vektor memiliki perasaan deklaratif yang sangat fungsional, di mana matriks sering dipandang sebagai sampel di beberapa ruang, dan operasi pada matriks tersebut sebagai transformasi ruang itu. Ketika suatu fenomena, proses atau entitas dimodelkan menggunakan (vectorized) MATLAB, sering ada representasi numerik eksplisit yang beroperasi sebagai perantara antara logika program dan elemen konseptual dari entitas yang dimodelkan. Akibatnya, kompleksitas dalam domain masalah cenderung tercermin sebagai kompleksitas numerik, bukan kompleksitas logika program atau aliran kontrol.

Paradigma Berorientasi Objek memiliki nuansa yang sangat berbeda: Paradigma ini sering digunakan bersama dengan pendekatan yang jauh lebih langsung untuk memodelkan hubungan struktural di dunia. Dalam banyak kasus, program OO adalah model langsung suatu entitas, di mana logika program membangun cermin, secara langsung atau tidak langsung, atribut dan properti dari sistem yang dimodelkan. Sebagai akibatnya, logika program OO cenderung memiliki "kedalaman" yang lebih struktural (dan mungkin juga kompleksitas), karena mencerminkan lebih langsung seluk-beluk sistem yang diuji.

Karena itu, ada banyak situasi di mana paradigma Object-Modeling sangat selaras dengan cara masalah tertentu dipahami dan dijelaskan. Hal ini terutama terjadi ketika seseorang mencoba untuk memodelkan entitas diskrit dengan berbagai atribut dan perilaku yang lebih beragam, sehingga mempertimbangkan masing-masing entitas secara individu dan dalam isolasi lebih informatif daripada mempertimbangkan setiap properti secara individual, dan entitas bersama sebagai populasi.

Dengan OOP Anda menghabiskan waktu untuk memikirkan entitas individual dan properti mereka. Perilaku kolektif lebih sulit untuk divisualisasikan & diamati. Struktur dan hubungan cenderung diekspresikan secara eksplisit dalam kode.

Dengan MATLAB vektor, Anda menghabiskan waktu memikirkan populasi entitas. Perilaku kolektif lebih mudah diamati. Struktur dan hubungan cenderung diekspresikan secara implisit dalam kode.

William Payne
sumber
1

Kebanyakan pemrogram akrab dengan satu aspek utama pemrograman berorientasi objek, yaitu struktur. Saya akan menjelaskan bahwa suatu objek seperti struktur, tetapi memiliki panggilan fungsinya sendiri untuk menangani data di dalam struktur. Kemudian secara perlahan tambahkan detail tambahan, seperti warisan, meneruskan fungsi, dll.

PearsonArtPhoto
sumber
Saya mencoba pendekatan "struktur dengan fungsi mereka sendiri", dan kemudian menjelaskan bahwa tergantung pada implementasi struktur, perilaku fungsi-fungsi tersebut dapat berubah. Itu membuat saya terlihat sangat "bagus untuk apa" ...
Oak
Jika mereka ahli matematika, gunakan kata "tuple" alih-alih "struktur".
Ingo
1
Matlab tidak berurusan dengan tupel, tapi ...
PearsonArtPhoto
1

Mereka semua mengenal Matlab dengan sangat baik

Maka itu cukup sederhana: biarkan mereka mencoba simulink. Model-model Simulink memiliki semangat OOP. Jika mereka mengerti cara membuat model simulink, dan jika mereka tahu cara kerja simulink, maka mereka sudah tahu tentang apa itu OO.

BЈовић
sumber
0

Matlab hanyalah sebuah bahasa. OOP adalah konsepnya.

Coba jelaskan konsepnya menggunakan penjelasan yang didorong oleh contoh yang kurang. Insinyur tentu memahami domain dan unit yang berbeda (mis: menambahkan suhu ke jarak akan aneh), sehingga mereka harus secara intuitif memahami enkapsulasi dan polimorfisme tanpa memerlukan contoh nyata di Matlab. Anda harus dapat menjelaskan abstraksi dengan cukup mudah. Warisan dan komposisi akan lebih sulit untuk dijelaskan tanpa contoh, tetapi jelaskan konsepnya dengan jelas dan mereka harus mengerti.

Generik versus spesifisitas jenis harus dimotivasi melalui contoh-contoh dari latar belakang matematika mereka. Pemrograman fungsional, fungsi passing dan lambda bukan OOP per se, dan itu lebih sulit untuk dijelaskan tanpa latar belakang matematika yang lebih abstrak yang biasanya disajikan kepada para insinyur (setelah mempelajari teknik, perangkat lunak, dan matematika, saya memiliki wawasan tentang spesialisasi mereka yang berbeda).

Anda mungkin tidak dapat memberikan contoh menggunakan Matlab secara langsung, tetapi Anda tentu bisa menjelaskan abstraksi dan enkapsulasi menggunakan contoh termasuk struktur. Bahkan dalam bahasa di mana Anda tidak dapat merangkum fungsi (metode) Anda dengan data Anda, Anda masih bisa menjelaskan bagaimana fungsi tertentu hanya didefinisikan untuk domain tertentu.

Mempertimbangkan bahwa banyak pengembang menilai komposisi lebih dari warisan, Anda dapat menjelaskan warisan, komposisi, dan manfaat relatif keduanya.

Anda dapat memotivasi polimorfisme secara alami dengan meninjau perbedaan antara bilangan bulat, rasional, real, dan bilangan kompleks, dan kemudian menjelaskan bagaimana operator aritmatika "normal" adalah fungsi (metode), tetapi meskipun operator (ex '+') terlihat sama, itu adalah fungsi yang berbeda saat digunakan dengan domain yang berbeda.

Semoga berhasil!

ChuckCottrill
sumber
-1

Saya seorang insinyur listrik, tetapi saya memiliki lebih banyak kesamaan dengan programmer CS daripada programmer EE. Secara khusus saya telah mencoba, tetapi tidak berhasil, untuk membujuk teman-teman saya untuk menulis setidaknya setengah kode terstruktur dan modular, apalagi kode berorientasi objek.

Ketika saya mencoba menggunakan fitur OO MATLAB, saya dengan cepat mengalami masalah yang sangat mengganggu. Suatu metode dalam suatu kelas harus mengambil objek dari kelas itu sebagai argumen pertama, dan HAS untuk mengembalikan objek jika itu memodifikasi objek. Itu membuat kode seperti

methods
     function obj_new = modi_object(obj,some_other_data)
     ...
     end
...
end

dan penggunaan suka

new_obj = objec.modi_object(some_piece_of_data);

Saya hampir menyerah. Saya sarankan Anda meninggalkan mereka sendirian, sampai beberapa dukungan OO yang layak masuk ke MATLAB. Minta mereka untuk menyerah MATLAB dan mencoba menggunakan Python atau sejenisnya. Saya mencoba (dan gagal) untuk melakukan itu.

Paling tidak, MATLAB OO sama sekali bukan gerbang yang bagus untuk mempelajari OO. Anda mungkin menunda mereka seumur hidup.

Milind R
sumber
mengapa downvote?
Milind R
Saya menyadari ini sudah tua, tetapi untuk apa nilainya, hal pertama yang Anda sebutkan adalah fitur , dan itu ada hubungannya dengan pengiriman dinamis . Yang kedua tidak perlu; jika Anda lebih suka bermutasi objek yang ada daripada menugaskan kembali, yang harus Anda lakukan adalah mewarisi dari superclass Handle. Adapun python, saya menemukan implementasi kelas jauh lebih buruk / jelek daripada matlab, tidak yakin mengapa Anda mengatakan itu.
Tasos Papastylianou