Konsept (genel programlama) - Concept (generic programming)
Gelen jenerik programlama , bir kavram sentaks ve semantik içeren bir tiptir, üzerinde desteklenen operasyonların bir açıklamasıdır. Bu şekilde kavramlar soyut türlerle ilişkilendirilir, ancak kavramlar bir alt tür ilişkisi gerektirmez.
Dil kullanımı
Bu terim, şablonları yaygın olarak kullanan ilk kitaplıklardan biri olduğu için, STL için 1998 kadar erken bir tarihte kullanılıyordu. Konsept terimi (ve yaygınlaşması), STL'nin ana tasarımcısı Alexander Stepanov'a atfedilir.
In C ++ 1998 standardına, Konsept terim genellikle bir şablon parametresi olan belirli türü için gereksinimleri sadece basit bir tanım isim tanıtıldı. Dilde açıkça kodlanmadı - kavram yalnızca bu tür nesneler üzerinde hangi işlemlerin denendiği ve neyin çalışması (yani, doğru derleme) beklendiği ile ifade edildi. C++11'de kavramları açık bir dil özelliği olarak eklemek için bir teklif vardı , ancak "hazır değil" olarak reddedildi. C++20 sonunda konseptin rafine tasarımını kabul etti.
Java ve C#' daki jeneriklerin C++'ın şablonlarıyla bazı benzerlikleri olduğundan , buradaki kavramların rolü arayüzler tarafından oynanır . Bununla birlikte, kavramlar ve arabirimler arasında önemli bir fark vardır: belirli bir arabirimi uygulamak için bir şablon parametresi gerektiğinde, eşleşen tür yalnızca (açıkça) bu arabirimi uygulayan bir sınıf olabilir. Kavramlar daha fazla esneklik sağlar çünkü iki şekilde tatmin edilebilirler:
- bir kavram haritası kullanılarak açıkça tatmin edilmiş olarak tanımlanır (arayüzlerden farklı olarak türün kendisine ayrı olarak tanımlanır)
- Bu kullanım için önceden belirlenmemiş yerleşik türler ve diğer türler için de kullanılabilen "otomatik kavramlar" için örtük olarak tanımlanmıştır
Ancak C# dilinde, kullanılan türün açıkça tanımlanmış bir arabirim uygulaması gerekmediği, yalnızca ilgili kalıpla eşleşmesi gerektiği (ancak bu kalıplara kavram adı verilmez ) birkaç yapısı vardır. Örneğin, foreach
yineleme ifadesi, uygun bir GetEnumerator
yöntem uyguladığı sürece yinelenen nesnenin herhangi bir türden olmasına izin verir . ( Arayüzü using
uygulamak için kaynağa ihtiyaç duyan ifadeyle karşılaştırın System.IDisposable
.)
Kavramlara çok benzer bir şeyi uygulayan başka bir dil , özelliğin tür sınıfları olarak adlandırıldığı Haskell'dir .
Örnek
Bir tür, örneğin, I
tatmin C ++ Önemsiz Yineleyici kavramı ve i
tiptedir I
, aşağıdaki anlam karşılık gelen geçerli ifadeler şunlardır:
-
I i
varsayılan yapı. -
*i
bir türe dönüştürülebilir olmalıdırT
. -
i->m
varsa geçerlidir(*i).m
.