世界の人々はまだありいけないに使用javeのジェネリックを「普通のコーディングは。」私はC ++テンプレートでそれを信じることができますが、ジェネリックですか?学ぶことも使うことも難しくありません。真剣にJavaとC ++の最高の機能はそれぞれジェネリックとテンプレートです。
人々に物事を納得させる最善の方法は、説得力のある議論を行い、脅迫的でなく、正しいことです。
プログラミング言語としてテンプレートを使用するようなことをしていない限り、パラメトリック多相性(ジェネリック/テンプレート)はほぼ間違いなく優れています。
1.コードの重複を回避します。
これは明らかですが、多態性コードは一般的なコードです。それがジェネリックと呼ばれる理由です。
2.より良い静的チェックをサポートします。
パラメトリック多型がなければ、あなたは、のようなものを書いて終わるpublic Object clone()
か、public boolean equals(object b)
単に憎むべきものではありませんこれは、彼らが何をすべきかについての情報を提供しないタイプがあり、常にあらゆる場所に例外をスローに終わります。パラメトリック多型の代替は、あちこちにキャストされます
3.非パラメトリック多相性OOPコードは、基本的に「バイナリメソッド」を正しい方法で処理できません。
これらを頻繁に使用します。
4.ベストプラクティスです
Javaでは、ジェネリックの使用がベストプラクティスと見なされます(Josh BlochによるEffective Javaを参照)。SutterやAlexandrescuなどの主要なC ++思想家も、さまざまな問題を解決するためにテンプレートの使用を奨励しています。
5. OOパラダイムに適合します。
人々はしばしばこれに気付かないが、サブタイピングとジェネリックの組み合わせは、それらのうちの1つだけを備えたどのシステムよりもはるかに強力で表現力豊かでオブジェクト指向のシステムを生み出す。
Scalaのミックスインを検討してください。これらは、コンポーネントパーツからオブジェクトをまとめることができる便利な機能です。ジェネリックとテンプレートは、これらの利点の一部をシミュレートできます。たとえば、オブジェクトの1つがデータベースを使用しているとします。優れた設計では、データベースアクセスを別のクラスに抽象化する必要があります。これを正しく行うと、データストアをモックできるようになるだけでなく(テスト容易性の鍵)、新しいno-sqlデータベースなどの代替実装を追加できるようになります。ただし、ここで問題が発生する可能性があります。使用する実装に関係なく、ビジネスオブジェクトのさまざまな機能を取得できます。
ジェネリック医薬品の救助!
public class Business<S extends Datastore>{
private S store; ...
}
これで、Business
データベース固有の機能を使用する能力に基づいて、オブジェクトの静的な差別化を開始できます。いくつかのランタイムチェックとキャストが必要ですが、より優れたコードの構築を開始できます。
そして
6.通常のコードは存在しません。
プログラミングの世界には3つのことしかありません。
- ライブラリ、
- 構成、および
- 悪いコード。
コードをライブラリのように考えないと、プロジェクトの要件が変わったときに深刻な問題に直面します。アーキテクチャは(ほぼ間違いなく)優れたAPIを設計する技術です。
この態度は素晴らしいと思います。パラメーター化された型を使用したプログラミングに慣れた後、それらを使用しないと、すべてが苦痛になります。また、JavaとC ++には、改善に役立つ大まかなスポットがたくさんあります。