So che in linea di principio è possibile trasformare anche linguaggi procedurali come C o MATLAB in oggetti orientati agli oggetti. Questa domanda è stata discussa abbastanza bene here e here.I principi orientati agli oggetti dovrebbero essere applicati nei linguaggi procedurali?
Quello che ho trovato mancante da queste discussioni e le referenze in esso contenute era un'esposizione sul fatto che uno dovrebbe applicare tali principi. C'è qualcosa di concreto da ottenere dal farlo? È chiaramente possibile, ma è consigliabile farlo? Ci sono esempi tra progetti open-source in cui questa pratica ha portato chiari vantaggi?
CHIARIMENTO
Forse un esempio è in ordine.
Ho ereditato del codice MATLAB che implementa un algoritmo di apprendimento automatico. C'è praticamente una singola funzione building_model
che, a seconda di una bandierina essere passato, sarà o addestrare un modello o usarlo per prevedere un valore futuro:
building_model('train', ...) % ... stands for the data with which the model is trained
e
Il modello stesso è implementato con Variabili persistenti MATLAB all'interno di building_model
.
Ho lacerato lo building_model
in due funzioni, una per l'allenamento e una per la previsione. Il modello che ha usato essere implementato come variabili persistenti è ora esternalizzata, per così dire:
model = new_model()
model = model_train(model, ...)
prediction = model_predict(model)
Questo è, grosso modo, per quanto ho potuto gestire emulare alcune caratteristiche della programmazione orientata agli oggetti in MATLAB. Il modulo del mio modello di edificio ora funziona come una classe, con un costruttore e due metodi model_train
e model_predict
. Ho raggiunto un certo grado di incapsulamento (sebbene nulla impedisca al chiamante di manipolare gli interni di model
) e in linea di principio il polimorfismo potrebbe anche essere accolto. Come bonus extra, ottengo la separazione Command/Query quasi gratis dal model_predict
non restituisce model
, e quindi non può alterare model
.
(i lettori più attenti faranno notare che MATLAB ha già un sistema orientato agli oggetti. Per vari motivi, tra cui prestazioni e la compatibilità con le versioni precedenti, non posso usarlo.)
ho potuto immaginare un meccanismo simile a C dove dovresti progettare una struttura dati e scrivere funzioni il cui primo argomento sarebbe un'istanza di quella struttura dati.
Quello che mi piacerebbe sapere è, fino a che punto posso spingere questo modo di programmazione? È un modello comunemente accettato (lì, ho detto la parola)? Ci sono problemi di prestazioni che dovrei fare attenzione?
Questo è qualcosa che spesso manca dalle discussioni sulle pratiche orientate agli oggetti in generale. Devi ancora decidere se OOP è il progetto giusto, se è incorporato nella lingua o semplicemente una metodologia di progettazione che cerchi di adottare senza l'aiuto della lingua. Gli stessi vantaggi (e svantaggi) si applicano in entrambi i modi. –