Dünyada insanlar hala var yok kullanım jave jenerikleri "sıradan kodlama." C ++ şablonları ile inanıyorum, ama jenerikler? Öğrenmesi / kullanması bile zor değil. Cidden Java ve C ++ 'ın en iyi özellikleri sırasıyla jenerikler ve şablonlardır.
İnsanları bir şeylere ikna etmenin en iyi yolu, zorlayıcı bir tartışmada bulunmak, tehdit edici olmamak ve haklı olmaktır.
Programlama diliniz olarak şablonları kullanmak gibi bir şey yapmadığınız sürece, parametrik polimorfizm (jenerikler / şablonlar) neredeyse kesinlikle iyidir.
1. Kod çoğaltmasını önler.
Bu açıktır, ancak polimorfik kod genel koddur. Bu yüzden jenerikler denir.
2. Daha iyi statik kontrolü destekler.
Parametrik polimorfizm olmadan , sadece iğrençlik gibi public Object clone()
veya public boolean equals(object b)
olmayan şeyler yazıyorsunuz , ne yaptıkları hakkında hiçbir bilgi sağlamayan türlere sahipler ve her yerde istisnalar atıyorlar. Parametrik polimorfizme alternatif her yerde dökümdür
3. Parametrik olmayan polimorfizm OOP kodu temel olarak "ikili yöntemleri" doğru bir şekilde işleyemez.
Bunları sık sık kullanıyorsunuz.
4. en iyi uygulama
Java'da jeneriklerin kullanımı en iyi uygulama olarak kabul edilir (Josh Bloch'un Etkili Java'sına bakın). Sutter ve Alexandrescu gibi büyük C ++ düşünürleri de çeşitli sorunları çözmek için şablonların kullanılmasını teşvik eder.
5. OO paradigmasına uyar.
İnsanlar genellikle bunu fark etmezler, ancak alt yazım ve jeneriklerin kombinasyonu, bunlardan sadece birine sahip olan herhangi bir sistemden çok daha güçlü bir ifade ve nesne yönelimli bir sistem üretir.
Scala'nın karışımlarını düşünün. Bunlar, nesnelerinizi bileşen parçalarından bir araya getirmenizi sağlayan güzel bir özelliktir. Jenerikler ve şablonlar bu avantajlardan bazılarını simüle edebilir. Örneğin, nesnelerinizden birinin bir veritabanı kullandığını varsayalım. İyi tasarım, veritabanı erişimini ayrı bir sınıfa özetlemenizi sağlar. Doğru yapılırsa, bu sadece veri deponuzu (test edilebilirliğin anahtarı) taklit etmenize izin vermekle kalmaz, aynı zamanda bu yeni sql veritabanı gibi alternatif uygulamalar da ekleyebileceğiniz anlamına gelir. Ancak burada, hangi uygulamayı kullandığınızı dikkate alarak bir sorunla karşılaşabilirsiniz, iş nesnenizin farklı yeteneklerini elde edersiniz.
Kurtarma jenerikleri!
public class Business<S extends Datastore>{
private S store; ...
}
Artık Business
veritabanına özgü özellikleri kullanma yeteneğine göre nesnelerinizi statik olarak farklılaştırmaya başlayabilirsiniz . Hala çalışma zamanı denetimlerine ve dökümüne ihtiyacınız var, ancak çok daha iyi kod oluşturmaya başlayabilirsiniz.
ve
6. Normal kod mevcut değil.
Programlama evreninde sadece üç şey vardır:
- kütüphaneler,
- yapılandırmalar ve
- hatalı kod.
Kodunuzu bir kütüphane gibi düşünmüyorsanız, projenizin gereksinimleri değiştiğinde ciddi bir sorunla karşılaşırsınız. Mimari (tartışmalı olarak) iyi API'ler tasarlama sanatıdır.
Bu tutumu çarpıcı buluyorum. Parametreli türlerle programlamaya alıştıktan sonra, bunları kullanmamak her şeyi bir acı haline getirir. Ve Java ve C ++, düzeltmeye yardımcı oldukları bir grup kaba noktaya sahiptir.