Tip sınıflarını anladığımı sanmıyorum. Bir yerde, tip sınıflarını bir tipin uyguladığı “OO'dan” (“OO”) arayüzler olarak düşünmenin yanlış ve yanıltıcı olduğunu okudum. Sorun şu ki, onları farklı bir şey olarak görme konusunda sorun yaşıyorum ve bunun nasıl yanlış olduğunu.
Örneğin, bir tür sınıfım varsa (Haskell sözdiziminde)
class Functor f where
fmap :: (a -> b) -> f a -> f b
Arayüzden [1] farklı (Java sözdiziminde)
interface Functor<A> {
<B> Functor<B> fmap(Function<B, A> fn)
}
interface Function<Return, Argument> {
Return apply(Argument arg);
}
Aklıma gelebilecek bir fark, belirli bir çağrıda kullanılan tip sınıfı uygulamasının tanımlanmadığı, ancak çevreden belirlendiği, yani bu tür bir uygulama için mevcut modülleri inceleyerek olduğu. Bu, bir OO dilinde ele alınabilecek bir uygulama eseri gibi görünüyor; gibi derleyici (veya çalışma zamanı) türünde gerekli arayüzü ortaya çıkaran bir sarmalayıcı / genişletici / maymun yamalı için tarama yapabilir.
Neyi kaçırıyorum?
[1] f a
Argümanın fmap
bir OO dili verildiğinden beri kaldırıldığını unutmayın, bu yöntemi bir nesnede çağırırsınız. Bu arayüz, f a
argümanın çözüldüğünü varsayar .