Come spiegare OOP a un programmatore matlab? [chiuso]

8

Ho molti amici che provengono da esperienze di ingegneria elettrica / fisica / meccanica, e sono curioso di sapere cos'è "OOP". Tutti conoscono bene Matlab, quindi hanno un background di programmazione di base; ma hanno difficoltà a cogliere un sistema di tipi complessi che può trarre beneficio dai concetti introdotti da OOP.

Qualcuno può proporre un modo in cui posso provare a spiegarglielo? Non conosco bene Matlab da solo, quindi ho difficoltà a trovare paralleli. Penso che l'uso di semplici esempi come forme o animali sia un po 'troppo astratto per quegli ingegneri. Finora ho provato a utilizzare un'interfaccia Matrix vs implementazioni basate su array / sparse / qualsiasi, ma non ha funzionato così bene, probabilmente perché i diversi tipi di matrice sono già ben supportati in Matlab.

    
posta Oak 19.04.2011 - 15:54
fonte

7 risposte

13

Dal 2008, Matlab supporta la programmazione orientata agli oggetti. Quindi, se vogliono scoprire OOP in un modo a loro familiare, potrebbero voler dare un'occhiata a documentazione di Matlab su OOP , in particolare gli esempi .

Un po 'di tempo fa, stavo introducendo alcuni dei miei colleghi che utilizza Matlab in OOP. Ecco alcuni esempi che ho usato.

Importante, tutto ciò che fai con OOP, puoi anche fare diversamente. Ciò che OOP consente è (1) creare strutture più straordinarie, (2) codice bundle e (3) semplificare la modularizzazione del codice e programmare più rapidamente.

  1. Strutture con campi che si aggiornano automaticamente. Ad esempio, si memorizza una coordinata in pixel (perché la si misura su un'immagine), ma per i calcoli della distanza, si desidera averla in micron. Memorizzare entrambi in una struttura è problematico, perché se ne cambia uno, non devi dimenticare di cambiare l'altro (e lo farai). Quindi, scegli di memorizzare tutte le coordinate in micron, il che significa che ogni volta che ne hai bisogno in pixel, devi convertire, che è fastidioso e potrebbe essere soggetto a errori.

    Con un oggetto, fai "coordinare in pixel" una proprietà dipendente, la conversione diventa automatica e non devi preoccuparti di aggiornare due coordinate contemporaneamente. Certo, puoi fare molto di più. Ad esempio, la tua struttura potrebbe avere un metodo "edit", che apre una GUI, in modo da poter modificare facilmente i valori. Oppure può avere un metodo di salvataggio che viene chiamato ogni volta che cambia un valore nella struttura.

  2. Puoi raggruppare le funzioni con la tua struttura dati. Ad esempio, puoi avere una funzione di stampa personalizzata per i tuoi dati che chiami plot(myDataStructure) . Allo stesso modo, puoi avere metodi personalizzati disp o anche i tuoi metodi di elaborazione dei dati da collegare ai tuoi dati.

risposta data 19.04.2011 - 16:18
fonte
4

Non cercare di trovare un esempio di bridging. OOP è adatto in aree completamente diverse rispetto al "codice in stile matlab" (e viceversa). Vorrei fare lo stesso tipo di spiegazione che darei a qualcuno che conosce un po 'di programmazione procedurale, ma non ha mai lavorato con strutture o strutture di dati simili.

    
risposta data 19.04.2011 - 16:02
fonte
2

Il codice MATLAB vettorizzato ha un senso dichiarativo strongmente funzionale, in cui le matrici sono spesso viste come campioni in alcuni spazi e le operazioni su quelle matrici come trasformazioni di quello spazio. Quando un fenomeno, processo o entità è modellato usando MATLAB (vettorializzato), esiste spesso una rappresentazione numerica esplicita che opera come intermediario tra la logica del programma e gli elementi concettuali dell'entità che viene modellata. Di conseguenza, le complessità nel dominio del problema tendono a essere riflesse come complessità numerica, piuttosto che complessità della logica del programma o del flusso di controllo.

Il paradigma orientato agli oggetti ha un aspetto molto diverso: è spesso usato in congiunzione con un approccio molto più diretto alla modellazione delle relazioni strutturali nel mondo. In molti casi, il programma OO è un modello diretto di un'entità, in cui la logica del programma costruisce a specchio, direttamente o indirettamente, attributi e proprietà del sistema che si sta modellando. Di conseguenza, la logica del programma OO tende ad avere una maggiore "profondità" strutturale (e possibilmente complessità), poiché riflette più direttamente le complessità del sistema sotto test.

Detto questo, ci sono molte situazioni in cui il paradigma di modellazione dell'oggetto è molto ben allineato con il modo in cui un particolare problema è compreso e descritto. Questo è particolarmente vero quando si tenta di modellare entità discrete con una gamma più ampia di attributi e comportamenti, in modo tale che considerare ciascuna entità individualmente e in isolamento sia più informativa rispetto alla considerazione di ciascuna proprietà individualmente, e le entità insieme come una popolazione. / p>

Con OOP passi il tempo a pensare alle singole entità e alle loro proprietà. Il comportamento collettivo è più difficile da visualizzare e amp; osservare. Strutture e relazioni tendono ad essere espresse esplicitamente nel codice.

Con MATLAB vettorializzato, passi il tempo a pensare alle popolazioni di entità. Il comportamento collettivo è più facile da osservare. Strutture e relazioni tendono ad essere espresse implicitamente nel codice.

    
risposta data 12.06.2012 - 17:51
fonte
1

La maggior parte dei programmatori ha familiarità con un aspetto importante della programmazione orientata agli oggetti, la struttura. Spiegherei che un oggetto è come una struttura, ma ha le sue chiamate di funzione per gestire i dati all'interno della struttura. Quindi aggiungi lentamente ulteriori dettagli, come ereditarietà, passaggio di funzioni, ecc.

    
risposta data 19.04.2011 - 16:01
fonte
1

They all know Matlab quite well

Quindi è abbastanza semplice: fagli provare simulink. I modelli Simulink sono nello spirito di OOP. Se capiscono come creare un modello simulink, e se sanno come funziona simulink, sanno già di cosa si tratta OO.

    
risposta data 27.02.2014 - 16:43
fonte
0

Matlab è solo una lingua. OOP è il concetto.

Prova a spiegare i concetti usando una spiegazione meno guidata dall'esempio. Gli ingegneri certamente comprendono diversi domini e unità (ad es .: l'aggiunta di temperatura alla distanza sarebbe dispari), quindi dovrebbero comprendere intuitivamente l'incapsulamento e il polimorfismo senza bisogno di esempi concreti in Matlab. Dovresti essere in grado di spiegare l'astrazione abbastanza facilmente. Eredità e composizione sarebbero più difficili da spiegare senza esempi, ma spiegare chiaramente il concetto e dovrebbero capire.

I generici contro la specificità del tipo dovrebbero essere motivati attraverso esempi tratti dal loro background matematico. La programmazione funzionale, le funzioni di passaggio e le lambda non sono OOP di per sé, ed è più difficile da spiegare senza un background matematico più astratto che tipicamente presentato agli ingegneri (avendo studiato sia ingegneria, software e matematica, ho alcune informazioni sulle loro diverse specializzazioni).

Potresti non essere in grado di fornire esempi usando Matlab direttamente, ma potresti certamente spiegare l'astrazione e l'incapsulamento usando esempi che includono strutture. Anche nelle lingue in cui non puoi incapsulare le tue funzioni (metodi) con i tuoi dati, puoi comunque spiegare in che modo determinate funzioni sono definite solo per determinati domini.

Considerando che molti sviluppatori apprezzano la composizione sull'ereditarietà, puoi spiegare l'ereditarietà, la composizione e i relativi meriti dei due.

Potresti motivare il polimorfismo in modo naturale esaminando la differenza tra numeri interi, razionali, reali e complessi, e poi spiegare come gli operatori aritmetici "normali" sono funzioni (metodi), ma anche se l'operatore (ex ' + ') ha lo stesso aspetto, è una funzione diversa se utilizzata con domini diversi.

Buona fortuna!

    
risposta data 28.02.2014 - 20:07
fonte
-1

Sono un ingegnere elettrico, ma ho più in comune con i programmatori CS rispetto ai programmatori EE. Nello specifico ho provato, senza successo, a persuadere i miei compagni di studio a scrivere almeno a metà il codice strutturato e modulare, per non parlare del codice orientato agli oggetti.

Quando ho provato a utilizzare le funzionalità OO di MATLAB, ho subito riscontrato problemi molto fastidiosi. Un metodo in una classe HA di prendere un oggetto di quella classe come primo argomento e HAS restituire l'oggetto se sta modificando l'oggetto. Questo rende il codice come

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

e utilizzo come

new_obj = objec.modi_object(some_piece_of_data);

Mi sono quasi arreso. Ti suggerisco di lasciarli da soli, fino a quando un discreto supporto OO va in MATLAB. Chiedigli invece di rinunciare a MATLAB e provare a usare Python o simili. Sto tentando (e fallendo) di farlo.

Per lo meno, MATLAB OO non è in alcun modo un buon gateway per imparare OO. Potresti semplicemente rimandarli a vita.

    
risposta data 27.02.2013 - 01:59
fonte

Leggi altre domande sui tag