Есть два фундаментальных механизма для построения новых классов из существующих: наследование и агрегация. Есть смысл унаследоваться от существующего класса Vehicle при определении класса Car, потому что автомобиль - это транспортное средство. Класс Vehicle имеет несколько частей, поэтому имеет смысл определить композитный объект (composite object) класса Vehicle, который бы образовывал одно целое из объектов классов Engine, Axle, и GearBox из которых делается транспортное средство.
Показаны сообщения с ярлыком наследование. Показать все сообщения
Показаны сообщения с ярлыком наследование. Показать все сообщения
Наследование в Haskell
Механизм расширения классов типов слегка похож на наследование в объектно-ориентированных языках. Речь идет не о наследовании реализации, а о наследовании интерфейса, поскольку классы типов являются некоторым эквивалентом интерфейсов.
{- Класс типов Ord параметризован типовым параметром a и имеет в рамках класса типов контекст. Класс типов Ord расширяет класс типов Eq. -} class (Eq a) => Ord a where (<), (<=), (>=), (>) :: a -> a -> Bool -- сигнатуры функций сравнения max, min :: a -> a -> a compare :: a -> a -> Ordering -- более тщательное сравнение двух значений {- Minimal complete definition: either compare or <= -}
Тип Ordering устроен довольно просто.
Prelude> :i Ordering data Ordering = LT | EQ | GT -- Defined in ‘GHC.Types’ instance Bounded Ordering -- Defined in ‘GHC.Enum’ instance Enum Ordering -- Defined in ‘GHC.Enum’ instance Eq Ordering -- Defined in ‘GHC.Classes’ instance Ord Ordering -- Defined in ‘GHC.Classes’ instance Read Ordering -- Defined in ‘GHC.Read’ instance Show Ordering -- Defined in ‘GHC.Show’ instance Monoid Ordering -- Defined in ‘GHC.Base’
В нем определены три конструктора. В типе Bool определены два конструктора True и False. А в типе Ordering определены три конструктора: LT, EQ и GT. Таким образом это перечисление, которое содержит ровно три элемента.
Подписаться на:
Сообщения (Atom)

