Per aggiungere ciò che dice @Robert, penso a questo come alla ricerca di una tecnica di parametrizzazione che permetta di scrivere il codice comune una sola volta (quindi può essere mantenuto in un posto) e poi riutilizzato invece di incollare.
Tuttavia, è necessario determinare il tipo di parametrizzazione che consente di scrivere la parte comune da scrivere una sola volta.
Spesso i parametri di funzione sono sufficienti, ma questo non è l'unico approccio.
Ci sono anche classi e metodi come dice @Robert. A volte utilizziamo le sostituzioni e / o le interfacce: penso alle sostituzioni e alle interfacce come una forma di parametrizzazione: l'uso della classe base o dell'interfaccia serve per esprimere un fascio di parametri formali e la sottoclasse concreta o l'implementazione dell'interfaccia serve al binding del bundle di effettivo i parametri.
Non dimenticare che in molte lingue (anche funzionali) possiamo avere funzioni di ordine superiore, il che significa che le funzioni possono assumere parametri che si riferiscono a funzioni, il che abilita altri casi d'uso. I metodi astratti e di interfaccia agiscono molto come i parametri di funzione, forse con un po 'più di struttura.
Un altro strumento fornito da alcune lingue è di tipo generico. A volte il codice comune non può essere espresso con parametri normali: ciò che differisce tra gli scenari è il tipo su cui si opera, anche se il codice è lo stesso in ogni caso. In quelle situazioni l'aiuto dei generici.
È possibile discutere alcuni pattern di progettazione in termini di parametrizzazione, come un pattern Observer e Visitor, che astrae la struttura di dati specifica o il suo attraversamento da un'azione da eseguire. Questi possono essere implementati con le tecniche OOP (utilizzando le sostituzioni o le interfacce) e anche con le funzioni di ordine superiore.
E tuttavia, altre tecniche (monadi) consentono di raccogliere altri tipi di codice comune in modo tale da essere scritti una sola volta. Sono in corso ricerche su altri tipi di parametrizzazione.
In generale, tuttavia, penso che si possa creare un collegamento mentale di molte delle tecniche per ridurre il codice copiato (incollato) alle variazioni sulla parametrizzazione.