È ragionevole scrivere un wrapper per usare una libreria OO in questo progetto procedurale?

1

Sto scrivendo un programma usando uno stile procedurale.

Al massimo ho alcuni moduli in cui è presente la logica (uno per recuperare i dati da, uno per visualizzare le informazioni, uno con la logica di salvataggio, ecc.), ma i miei dati sono in formato di oggetto semplice (sono formalmente classi , ma concettualmente sono strutture o tuple con nome)

Tutto va bene, ma devo usare questa libreria, che è strongmente orientata agli oggetti (mi offre oggetti personalizzati che devo usare, e devo creare sottoclassi e implementare interfacce per fare il mio lavoro).

Sarebbe un approccio ragionevole per "avvolgere" questa libreria in modo procedurale? O devo cambiare completamente lo stile del mio programma in "OOP" se uso una libreria OO nel mio programma?

    
posta Vito De Tullio 11.03.2016 - 11:13
fonte

1 risposta

4

Puoi facilmente scrivere un wrapper procedurale attorno a chiamate di metodi come object.doStuff(parameter) creando procedure globali come:

 void doStuffWith(object, parameter) {
        object.doStuff(parameter);
 }

Ma quando hai un'API che ti obbliga ad implementare interfacce e ad estendere superclassi per farne uso, non andrai in giro a scrivere classi proprie. Quando vuoi scrivere il minor numero possibile di codice orientato agli oggetti, potresti fare in modo che le implementazioni del metodo di queste classi facciano poco più che chiamare una funzione globale a cui passano i parametri del metodo e lo stato pertinente dell'oggetto.

 class MyStuffHandler implements StuffHandler {
      public Stuff stuff;
      public void doStuff(parameters) {
          doStuffWith(this.stuff, parameters);
      }
 }

Ma la domanda è "Vale la pena?" . E di solito la risposta è no. Non c'è molto errore nel mescolare codice procedurale e orientato agli oggetti. La maggior parte degli argomenti contro questo di solito si riduce agli argomenti contro la programmazione procedurale o orientata agli oggetti in generale.

    
risposta data 11.03.2016 - 14:29
fonte

Leggi altre domande sui tag