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, foreachyineleme ifadesi, uygun bir GetEnumeratoryöntem uyguladığı sürece yinelenen nesnenin herhangi bir türden olmasına izin verir . ( Arayüzü usinguygulamak 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, Itatmin C ++ Önemsiz Yineleyici kavramı ve itiptedir I, aşağıdaki anlam karşılık gelen geçerli ifadeler şunlardır:

  • I i varsayılan yapı.
  • *ibir türe dönüştürülebilir olmalıdır T.
  • i->mvarsa geçerlidir (*i).m.

Ayrıca bakınız

Referanslar

Dış bağlantılar