Türler küme değildir.
Görüyorsunuz, küme teorisinin türlere uygulanmayan birtakım özellikleri vardır ve bunun tersi de geçerlidir . Örneğin, bir nesnenin tek bir kanonik türü vardır. Birkaç farklı türün bir örneği olabilir, ancak bu türlerden sadece biri onu başlatmak için kullanıldı. Küme teorisinin "kanonik" kümeler nosyonu yoktur.
Alt kümeye neyin ait olduğunu açıklayan bir kuralınız varsa, Set teorisi anında alt kümeler oluşturmanıza olanak tanır . Tip teorisi genellikle buna izin vermez. En diller sahipken Number
türü veya benzer bir şey, onlar yok bir sahip EvenNumber
türü, ne de bir tane oluşturmak için basit olacaktır. Yani, türün kendisini tanımlamak yeterince kolaydır, ancak var Number
olan herhangi bir s sihirli bir şekilde EvenNumber
s'ye dönüştürülmeyecektir .
Aslında, alt kümeleri "oluşturabileceğinizi" söylemek biraz gariptir, çünkü kümeler tamamen farklı bir hayvan türüdür. Küme teorisinde, bu altkümeler zaten onları tanımlayabileceğiniz tüm sonsuz yollarla var olurlar. Tip teorisinde, genellikle herhangi bir zamanda sınırlı (büyükse) sayıda tiple uğraşmayı umuyoruz. Var olduğu söylenen tek tür, tanımlayabildiğimiz her tür değil, aslında tanımladığımız türlerdir.
Kümelerin doğrudan veya dolaylı olarak kendilerini içermesine izin verilmez . Python gibi bazı diller, (Python, daha az düzenli yapılarla türlerini sağlamak type
'ın kanonik türüdür type
ve object
bir örneğini kabul edilir object
). Öte yandan, çoğu dil, kullanıcı tanımlı türlerin bu tür bir hile yapmasına izin vermez .
Setlerin birbiri içine girmeden genellikle üst üste binmesine izin verilir. Bu, tür teorisinde nadirdir, ancak bazı diller onu çoklu kalıtım biçiminde desteklemektedir. Java gibi diğer diller, bunun yalnızca sınırlı bir biçimine izin verir veya tamamen izin vermez.
Boş tür vardır ( alt tür olarak adlandırılır ), ancak çoğu dil bunu desteklemez veya birinci sınıf tür olarak kabul etmez. "Diğer tüm türleri içeren tür" de vardır (buna üst tür adı verilir ) ve küme teorisinin aksine yaygın olarak desteklenir.
Not : Bazı yorumcular daha önce işaret ettikleri gibi (konu sohbete taşınmadan önce), set teorisi ve diğer standart matematiksel yapılarla türleri modellemek mümkündür. Örneğin, tür üyeliğini kümeler olarak modellemek yerine tür üyeliğini ilişki olarak modelleyebilirsiniz. Ancak uygulamada, set teorisi yerine kategori teorisi kullanıyorsanız bu çok daha basittir . Örneğin Haskell kendi tip teorisini böyle modeller.
"Alt tipleme" kavramı, "altküme" kavramından oldukça farklıdır. Eğer X
bir alt tipi olan Y
, biz anlamına gelir yerine örneklerini Y
örnekleri için X
ve çalışmaya devam programı "iş" Bir anlamda. Bu yapısal olmaktan ziyade davranışsaldır, ancak bazı diller (örneğin, Go, Rust, tartışmalı olarak C), ikincisini programcıya veya dil uygulamasına kolaylık nedenleriyle seçmiştir.
a
veb
bu türün üyeleri değil Myclass, alanlar ve türdeki kayıtlar için izomorfiktir ve - böyle bir kayıt alıp dönüştürebilirsiniz bir örneği .a
b
int
double
myclass