Alcune ragioni sono
Encapsulation - Con il confezionamento di una serie di routine in un'altra libreria, sia come una libreria statica o un set di DLL, diventa una scatola nera. Perché sia una buona scatola nera, tutto ciò che devi fare è assicurarti di dare gli input giusti e ottenere le uscite corrette. Aiuta quando riutilizzi quella libreria. Applica anche alcune regole e impedisce la programmazione da parte degli hacker ('hmm ... renderò pubblica la funzione membro per ora')
Riduce il tempo di compilazione - la libreria è già stata rispettata; non è necessario ricostruirlo in fase di compilazione, basta collegarlo (supponendo che si stia facendo C++).
Disaccoppiamento: racchiudendo le classi in librerie indipendenti, è possibile ridurre l'accoppiamento e consentire di riutilizzare la libreria per altri scopi. Allo stesso modo, purché l'interfaccia della libreria non cambi, è possibile apportare modifiche alla libreria come preferisci e altre persone che si collegano ad essa o che fanno riferimento ad essa non hanno bisogno di modificare il loro codice. Le DLL sono utili in questo aspetto che non richiede alcuna ri-compilazione, ma può essere complicato lavorare se molte applicazioni installano versioni diverse delle stesse DLL. È possibile aggiornare le librerie senza influire sul codice del client. Mentre puoi fare lo stesso con solo le cartelle, non esiste un meccanismo esplicito per forzare questo comportamento.
Inoltre, praticando questa disciplina di avere diverse librerie, puoi anche assicurarti che ciò che hai scritto sia generico e disaccoppiato dall'implementazione.
Licensing/Commercialization - Beh, penso che questo sia abbastanza ovvio.
Ciò rende la proprietà del codice più esclusiva, che a mio parere è una cosa negativa. La proprietà esclusiva del codice richiede più comunicazioni (come hai notato) e la comunicazione è sempre difficile da ottenere. Richiede anche più cooperazione (se ho bisogno che il tuo codice sia cambiato, ora è molto più difficile farlo da solo) che è anche difficile da ottenere. In questo scenario, un giocatore di squadra cattivo può fottere le cose per tutti. – Imagist