Ci sono ancora persone nel mondo che non usano i generici di jave in "ordinaria codifica". Posso crederci con i modelli C ++, ma i generici? Non sono nemmeno difficili da imparare / usare. Seriamente le migliori caratteristiche di Java e C ++ sono rispettivamente generici e modelli.
Il modo migliore per convincere le persone di cose è fare un argomento convincente, non essere minaccioso e avere ragione.
Se non stai facendo qualcosa come usare i template come linguaggio di programmazione, il polimorfismo parametrico (generici / modelli) è quasi certamente buono.
1. Evita la duplicazione del codice.
Questo è ovvio, ma il codice polimorfico è codice generale. Questo è il motivo per cui è chiamato generici.
2. Supporta un controllo statico migliore.
Senza il polimorfismo parametrico finisci per scrivere cose come public Object clone()
o public boolean equals(object b)
che non sono solo abomini, hanno tipi che non forniscono informazioni su ciò che fanno e invariabilmente finiscono per lanciare eccezioni ovunque. L'alternativa al polimorfismo parametrico è un cast dappertutto
3. Polimorfismo non parametrico Il codice OOP è fondamentalmente incapace di gestire "metodi binari" in modo corretto.
Li usi spesso.
4. È una buona pratica
In Java, l'uso di generici è considerato la migliore pratica (vedi Java efficace di Josh Bloch). I pensatori di C ++ come Sutter e Alexandrescu incoraggiano anche l'uso di modelli per risolvere una serie di problemi.
5. Si adatta al paradigma OO.
Spesso le persone non lo notano, ma la combinazione di sottotipi e generici produce un sistema MOLTO più potente espressivo e orientato agli oggetti di qualsiasi sistema con solo uno di essi.
Considera i mixin di Scala. Queste sono una bella funzionalità che ti consente di estrarre i tuoi oggetti dalle parti dei componenti. Generici e modelli possono simulare alcuni di questi benefici. Ad esempio, supponi che uno dei tuoi oggetti utilizzi un database. Un buon design ti farebbe astrarre l'accesso al database in una classe separata. Se fatto bene, questo non solo ti permette di prendere in giro il tuo data-store (la chiave della testabilità) significa anche che puoi aggiungere implementazioni alternative come il nuovo database no-sql. Qui però potresti avere un problema, a prescindere dall'implementazione che utilizzerai, otterrai diverse funzionalità del tuo oggetto business.
Generici in soccorso!
public class Business<S extends Datastore>{
private S store; ...
}
Ora puoi iniziare a differenziare in modo statico gli oggetti Business
in base alla possibilità di utilizzare funzionalità specifiche del database. Hai ancora bisogno di alcuni controlli runtime e casting, ma puoi iniziare a creare un codice MUCH migliore.
e
6. Il codice normale non esiste.
Ci sono solo tre cose nell'universo di programmazione:
- librerie,
- configurazioni e
- codice errato.
Se non pensi al tuo codice come se fosse una biblioteca, sei seriamente in difficoltà quando cambiano i requisiti per il tuo progetto. L'architettura è (discutibilmente) l'arte di progettare buone API.
Trovo che questa attitudine sia sorprendente. Dopo esserti abituato a programmare con i tipi parametrizzati, non usarli rende tutto un po 'doloroso. E, Java e C ++ hanno un sacco di punti difficili che aiutano a rimediare.