Quanto l'architettura software dipende dalla lingua?

14

Mentre mi dedico all'architettura del software e ai modelli di progettazione, ho notato che nella maggior parte dei casi alcune caratteristiche linguistiche e specifiche del design sono implicite nella spiegazione.

es. praticamente qualsiasi articolo o libro su di esso illustrerà le idee usando classi e interfacce. Tutto ciò che si può facilmente trovare su questo argomento menzionerebbe oggetti e concetti OOP.

Cosa succede se la lingua in cui è scritto il sistema non ha affatto tali concetti? Per esempio. cosa succede se uso Python o Node, che sono tipizzati dinamicamente e non hanno una nozione di interfaccia? Cosa succede se uso TypeScript in cui un'interfaccia è un costrutto effimero, che non esiste in runtime? Cosa succede se sto cercando di abbracciare la programmazione funzionale? Dovrei ignorare ad es. SOLIDO e cerchi altri concetti, adatti alla mia lingua?

Se sì, quali sono quelli? Sfortunatamente tutti i paradigmi ben adottati (per quanto ne so) si riferiscono a concetti e tipi di OOP in qualche modo. Se no, quali regole dovrei seguire per adattare i principi generali dell'architettura e del design alla mia lingua e al mio caso d'uso?

In generale, come descriveresti la dipendenza tra l'architettura e il linguaggio?

    
posta Tristan Tzara 12.05.2018 - 21:01
fonte

4 risposte

11

Un'architettura software è molto simile all'architettura di una casa o di un ponte. Un ponte deve sostenere il peso di se stesso e dei veicoli che lo percorrono o le persone che lo percorrono. Deve resistere alle intemperie. I materiali che usi per costruirlo devono essere sia forti che relativamente leggeri.

Ci sono molti materiali che puoi usare per costruire una casa. Puoi usare mattoni o stucco. È possibile utilizzare travi in legno o in metallo. Ogni materiale ha le sue caratteristiche, in termini di peso, forza e così via. Tutte queste caratteristiche influenzano l'architettura.

Allo stesso modo, il linguaggio di programmazione che usi influenza il modo in cui costruisci la tua architettura. La tua architettura apparirà diversa in un linguaggio di programmazione che ha classi come C ++ rispetto a un linguaggio di programmazione che non lo è, come C.

I principi SOLID riguardano principalmente i linguaggi orientati agli oggetti (cioè le lingue hanno classi).

    
risposta data 12.05.2018 - 22:41
fonte
4

L'architettura dipende dalle capacità per raggiungere i suoi obiettivi. Le scelte linguistiche possono limitare le capacità. Qualsiasi linguaggio completo di Turing ha la capacità di completare qualsiasi attività di programmazione. Dopo quel punto si tratta di come il linguaggio umano consente alla soluzione di essere comprensibile.

Molti schemi di architettura software ti chiedono di rimuovere tutta la conoscenza delle scelte tecnologiche dalle regole aziendali del dominio principale. L'unica scelta tecnica che non puoi mai rimuovere dalla base è la lingua in cui hai scelto di esprimerla.

Quando i libri sull'architettura si limitano a raccontarti dei loro obiettivi, la lingua non conta finché è in grado di raggiungere l'obiettivo. Quando i libri ti dicono come raggiungere questi obiettivi la lingua inizia a mater.

    
risposta data 12.05.2018 - 22:26
fonte
1

L'architettura come termine ha un significato molto specifico che è molto correlato all'architettura nel mondo fisico e al suo interno riguarda l'arte e la pratica della costruzione di cose, di come le cose sono fatte e messe insieme. In questo modo, quando l'architettura è ben fatta, penso che la lingua sia molto legata all'architettura, proprio come un edificio ben architettato dovrebbe essere intimamente informato dal materiale da cui è costruito.

Nel software, le scelte architettoniche dovrebbero essere fatte in modo congruo con le proprietà del linguaggio. Se stai costruendo un sistema con un linguaggio orientato agli oggetti, allora mi aspetto che anche l'architettura del sistema sia orientata agli oggetti. Se stai costruendo un sistema con un linguaggio funzionale, mi aspetto che l'architettura di quel sistema sia anche funzionale.

Ha senso?

    
risposta data 12.05.2018 - 21:54
fonte
1

Direi, per iniziare, che anche la lingua in cui pensi ha una profonda influenza su ciò che puoi concepire. C'è un motivo per cui PASCAL è stato creato da Niklaus Wirth e C da Brian Kernighan e Dennis Ritchie.

A un livello superiore, la capacità di esprimere determinati concetti (e la mancanza di altri) dirigerà il tuo pensiero e ti farà arrivare a certe soluzioni che non sarebbero necessariamente la stessa altra persona, con uno sfondo diverso, emergerebbe con.

Infine, i concetti che menzioni possono essere tutti implementati in qualsiasi linguaggio generico. È solo che potrebbero non avere supporto sintattico e l'implementazione potrebbe essere complicata. Puoi scrivere codice assembly x86 orientato agli oggetti se sei sufficientemente impegnato (o abbastanza folle) come potresti con C. In realtà, le prime implementazioni di C ++ erano i preprocessori che compilavano il tuo codice C ++ in C (ei nomi dei simboli storpiati creati debug molto più divertente).

    
risposta data 16.05.2018 - 11:06
fonte

Leggi altre domande sui tag