Supponiamo che crei una struttura di serie ordinata e scelgo di implementarla come un albero binario. Dò un nome alla mia struttura OrderedSet
perché ritengo che la sua implementazione di base non sia necessariamente importante per l'utente, e vado avanti per la mia strada. Più tardi, torno al mio codice e decido che implementarlo come un albero rosso-nero potrebbe essere stato migliore. Tuttavia, ci sono alcuni utenti che, per una ragione particolare, preferiscono che il set rimanga implementato come un semplice albero binario. Questo mi lascerebbe con alcune opzioni come reimplementare la struttura originale in ogni caso o semplicemente creando una nuova struttura chiamata qualcosa come BalancedOrderedSet
. Tuttavia, questo intero problema avrebbe potuto essere evitato se inizialmente avessi dato alle mie strutture più nomi letterali come BinaryTree
e RedBlackTree
, sebbene il loro uso principale non sarebbe più ovvio (specialmente per i programmatori meno esperti).
Mi rendo conto che ci sono molte librerie (specialmente le librerie standard) che tendono a nominare le loro classi e strutture in base al loro scopo generale piuttosto che alla loro implementazione sottostante. Volevo discutere / chiedere dei pro e dei contro di ogni lato di questo spettro di nomi astratti / letterali e quando e dove sarebbe meglio orientarsi in un modo o nell'altro, in particolare nelle codebase di librerie generiche dove l'uso futuro delle strutture è sconosciuto e molto diffuso.