Il mio progetto può sopravvivere senza Orientamento agli oggetti?


9

Sto scrivendo un piccolo pacchetto MATLAB che risolverà alcuni problemi numerici di classe. Ci sono 3 fasi dell'algoritmo e l'utente ha 5 scelte per ogni fase. Ho implementato l'intero problema usando funzioni e 3 casi di commutazione (uno per ogni fase dell'algoritmo). Funziona bene ma sto pensando di fargli fare più cose (più di 5 scelte e un altro palco) e anche fare una porta Python (alcune persone sono interessate).20

Mi chiedevo se avrei dovuto convertirmi in un framework OOP (di cui non sono affatto bravo) o se dovrei attenermi al framework procedurale che ho (di cui sono bravo). Nel mio codice procedurale mi sono assicurato che nessuna funzione fa due cose e c'è una minima sovrapposizione (2 segmenti di codice non fanno quasi mai la stessa cosa).

Esegui la migrazione a SO se ritieni che sia più adatto al loro dominio.

Risposte:


6

Non è necessario convertirsi in un framework OOP, al fine di beneficiare dell'orientamento agli oggetti dove aiuta. Si noti che il numero di funzioni è inferiore a un indicatore della duplicazione del codice all'interno e tra queste funzioni o la lunghezza di queste funzioni. (Una funzione con più di 100 righe di codice sarebbe un'indicazione tipica del "potenziale di miglioramento".)

Se non dovessi essere in grado di individuare le parti in cui l'orientamento agli oggetti sarebbe di aiuto, la conversione in un framework OOP non sarebbe il primo passo migliore. Piuttosto chiedi a qualcuno che abbia familiarità con l'orientamento agli oggetti cosa potrebbe essere semplificato o migliorato, quindi cerca di capire perché si tratta di una semplificazione o di un miglioramento.

Se vuoi usare un framework come deal.II o PETSc, usali se la funzionalità che offrono è utile per te, non perché pensi che renderà il tuo codice migliore o più gestibile. Ma sei già all'interno del framework MATLAB, quindi è improbabile che tu voglia invece passare a un framework OOP C ++. (MATLAB offre pieno supporto OOP, come probabilmente già saprai.)

Per la porta Python, basta farlo sulla base delle tue conoscenze attuali per iniziare, e riprovare più tardi dopo aver appreso abbastanza per renderlo significativamente migliore.


Sono d'accordo con te sul fatto che la conversione in un framework qui sia eccessiva. Penso che le loro API e la loro architettura siano esempi di un buon design e che valga la pena usare come guida.
Geoff Oxberry,

3

Questa domanda potrebbe essere adatta per Stack Overflow. Penso che sia adatto anche perché è un problema comune nella scienza computazionale.

In termini di algoritmi di composizione, un buon esempio di una libreria che funziona bene è PETSc, se è possibile leggere il codice C. Lo stile di programmazione orientato agli oggetti può aiutare con l'incapsulamento dei dati, ma come semplice primo passo, potresti voler rendere ogni scelta per uno stage una funzione con un'interfaccia comune. Quindi, per il tuo algoritmo, passa una funzione per ogni stadio come input e chiedi all'algoritmo principale di chiamare la funzione per ogni stadio.


Sono incuriosito. Stai proponendo PETSc come una buona biblioteca da cui apprendere OOP o dalla codifica procedurale? Conosci qualche libreria leggibile che fa bene OOP?
Inchiesta

Penso che PETSc sia un buon esempio di software in generale, ed è generalmente ben documentato. Nella scienza computazionale, penso che PETSc, Trilinos, deal.II e FEniCS facciano un buon lavoro nell'essere ben documentati e tutti siano scritti in stile OOP. Esito a dire che dovresti imparare OOP da loro; probabilmente è meglio imparare prima da un libro di testo e poi guardare il codice del mondo reale.
Geoff Oxberry,

2

Non tutto è ben modellato dagli oggetti. Considerare , in genere un sistema OO tratterà s come oggetti e come un metodo , ma ciò non corrisponde alla nostra naturale interpretazione di come una funzione di infissione binaria ; introduce un'asimmetria innaturale tra il primo come l'oggetto per cui è definito il metodo , e il secondo che è l'argomento di quel metodo (questo dà origine a kludges come e in Python).1+11+1.plus(1)1+1plus(1,1)1plus__plus____rplus__

Quindi non pensare di dover forzare il piolo quadrato nel foro rotondo, se l'algoritmo sembra in buone condizioni procedurali, tienilo così. Se deve essere incluso in un sistema OO, puoi sempre inserire un'interfaccia OO nel tuo codice non OO. I programmatori C ++ lo fanno ogni giorno (e vengono persino pagati).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.