Es gibt immer noch Menschen in der Welt , die nicht Gebrauch jave Generika in „normaler Codierung.“ Ich kann es mit C ++ - Vorlagen glauben, aber mit Generika? Sie sind nicht einmal schwer zu erlernen / zu benutzen. Im Ernst, die besten Features von Java und C ++ sind Generics und Templates.
Der beste Weg, Menschen von Dingen zu überzeugen, besteht darin, ein überzeugendes Argument vorzulegen, nicht bedrohlich zu sein und Recht zu haben.
Solange Sie keine Vorlagen als Programmiersprache verwenden, ist der parametrische Polymorphismus (Generika / Vorlagen) mit ziemlicher Sicherheit gut.
1. Vermeidet das Kopieren von Code.
Dies ist offensichtlich, aber polymorpher Code ist allgemeiner Code. Deshalb nennt man es Generika.
2. Unterstützt eine bessere statische Überprüfung.
Ohne parametrischen Polymorphismus schreiben Sie Dinge wie public Object clone()
oder public boolean equals(object b)
die nicht nur Greuel sind, sondern Typen, die keine Informationen darüber liefern, was sie tun, und die unweigerlich überall Ausnahmen auslösen. Die Alternative zum parametrischen Polymorphismus ist überall zu finden
3. Nicht-parametrischer Polymorphismus OOP-Code ist grundsätzlich nicht in der Lage, "binäre Methoden" korrekt zu behandeln.
Sie verwenden diese oft.
4. Es ist eine bewährte Methode
In Java wird die Verwendung von Generika als Best Practice angesehen (siehe Effective Java von Josh Bloch). Große C ++ - Denker wie Sutter und Alexandrescu empfehlen auch die Verwendung von Vorlagen, um eine Vielzahl von Problemen zu lösen.
5. Es passt zum OO-Paradigma.
Die Leute bemerken dies oft nicht, aber die Kombination von Untertypisierung und Generika ergibt ein System, das VIEL aussagekräftiger und objektorientierter ist als jedes System mit nur einem von ihnen.
Betrachten Sie die Mixins von Scala. Dies ist eine nette Funktion, mit der Sie Ihre Objekte aus Bauteilen zusammenziehen können. Generika und Vorlagen können einige dieser Vorteile simulieren. Angenommen, eines Ihrer Objekte verwendet eine Datenbank. Gutes Design würde Sie den Datenbankzugriff in eine separate Klasse abstrahieren lassen. Wenn dies richtig gemacht wird, können Sie nicht nur Ihren Datenspeicher (Schlüssel zur Testbarkeit) verspotten, sondern auch alternative Implementierungen wie die neue No-SQL-Datenbank hinzufügen. Hier kann es jedoch zu Problemen kommen. Unabhängig davon, welche Implementierung Sie verwenden, erhalten Sie unterschiedliche Funktionen Ihres Geschäftsobjekts.
Generika zur Rettung!
public class Business<S extends Datastore>{
private S store; ...
}
Jetzt können Sie Ihre Business
Objekte statisch unterscheiden , basierend auf der Fähigkeit, datenbankspezifische Funktionen zu verwenden. Sie brauchen noch einige Laufzeitprüfungen und Casting, aber Sie können damit beginnen, VIEL besseren Code zu erstellen.
und
6. Normaler Code existiert nicht.
Es gibt nur drei Dinge im Programmieruniversum:
- Bibliotheken,
- Konfigurationen und
- schlechter Code.
Wenn Sie nicht über Ihren Code nachdenken, als wäre es eine Bibliothek, haben Sie ernsthafte Probleme, wenn sich die Anforderungen an Ihr Projekt ändern. Architektur ist (wohl) die Kunst, gute APIs zu entwerfen.
Ich finde diese Einstellung atemberaubend. Wenn Sie sich an das Programmieren mit parametrisierten Typen gewöhnt haben, macht es Ihnen einfach zu schaffen, sie nicht zu verwenden. Java und C ++ haben eine Reihe von rauen Stellen, die sie beseitigen können.