Quale approccio all'organizzazione del codice sorgente consente di migliorare la modularità e la separazione API / implementazione?

3

Poche lingue sono restrittive quanto Java con gli standard di denominazione dei file e la struttura del progetto. In quella lingua, il nome del file deve corrispondere alla classe pubblica dichiarata nel file e il file deve vivere in una struttura di directory corrispondente al pacchetto di classi. Ho sentimenti contrastanti su questo approccio. Mentre non devo mai indovinare dove vive un file, ci sono ancora molte directory vuote e vincoli artificiali.

Ci sono diverse lingue che definiscono tutto su una classe in un file, almeno per convenzione. C #, Python (credo), Ruby, Erlang, ecc. La comunanza nella maggior parte di questi linguaggi è che sono orientati agli oggetti, anche se questa affermazione può probabilmente essere respinta (c'è già una lingua non OO nella lista).

Infine, ci sono alcuni linguaggi per lo più nella famiglia C che hanno un'intestazione e un file di implementazione separati. Per C penso che abbia senso, perché è uno dei pochi modi per separare l'interfaccia API dalle implementazioni. Con C sembra che la funzionalità sia utilizzata per promuovere la modularità. Tuttavia, con C ++ il modo in cui i file di intestazione e implementazione sono divisi sembra piuttosto forzato. Non si ottiene la stessa separazione API pulita che si fa con C, e si è costretti a includere alcuni dettagli privati nell'intestazione che si preferisce mantenere solo nell'implementazione.

Ci sono alcune lingue che hanno un concetto che si sovrappone a interfacce come Java, C #, Go, ecc. Alcuni linguaggi usano quello che sembra un trucco per fornire lo stesso concetto come C # usando pure classi astratte virtuali. Altri ancora non hanno un concetto di interfaccia e si affidano alla digitazione "duck", ad esempio Ruby. Ruby ha dei moduli, ma quelli sono più sulla falsariga del mescolare i comportamenti a una classe che non per definire come interagire con una classe. In termini OO, le interfacce sono un modo efficace per fornire una separazione tra un client API e un'implementazione API.

Quindi sbrigati e poni la domanda, dal punto di vista dell'esperienza personale:

  • La separazione tra intestazione e implementazione ti aiuta a scrivere codice più modulare o ti intralcia? (aiuta a specificare la lingua a cui ti riferisci)
  • Il nome rigoroso del nome nello schema del nome della classe di Java aiuta a mantenere la manutenzione, o è una struttura non necessaria a fini di struttura?
  • Che cosa proponesti per promuovere una buona separazione API / implementazione e la manutenzione del progetto, come preferiresti farlo?
posta Berin Loritsch 10.01.2011 - 15:48
fonte

1 risposta

7

Does separation of header and implementation help you write more modular code, or does it get in the way? (it helps to specify the language you are referring to)

Avendo scritto C, C ++, Java e Python, ho trovato che la formalità di Java e C ++ può aiutare a capire API e implementazione.

Il file .h fisicamente separato è un hack del compilatore che non sembra necessario. Java non ce l'ha e quelle persone sembrano far fronte bene. Python non ce l'ha e le cose funzionano abbastanza bene.

Does the strict file name to class name scheme of Java help maintainability, or is it unnecessary structure for structure's sake?

Avendo spostato da Java e C ++ a Python, trovo che la convenzione Java non ha alcun valore. In effetti, l'approccio di Python alla creazione di moduli in un singolo file sembra aiutare a chiarire la dipendenza e la riusabilità.

What would you propose to promote good API/Implementation separation and project maintenance, how would you prefer to do it?

Procedure dettagliate sul codice.

L'imballaggio fisico non può portare a un buon design. È anche possibile progettare Lousy in C ++ o Python.

L'unica cosa che porta a un buon design è la chiarezza, la precisione e il pensiero critico. Le procedure dettagliate del codice sono un modo convincente per ottenere un buon design.

    
risposta data 10.01.2011 - 16:22
fonte