Информация об изменениях

Сообщение Re[7]: проектирование от 20.07.2017 13:22

Изменено 20.07.2017 13:27 dmz

Re[7]: проектирование
dmz>>История про пушку выглядит надуманной.

F>вот сейчас было обидно ._.



Нет, ну правда — отрисовка двухствольной пушки как-то отличается
от одноствольной? Казалось бы, и то, и другое — либо спрайт, либо
векторная модель в том или ином виде.

Просто постановка до боли напомнила замшелые задачки для собеседований — типа кто от
кого наследует — квадрат от прямоугольника или наоборот. Или построить иерархию
наследования для геометрических фигур.


Определение похожего поведения для разных типов обычно решается
тайпклассами или явной диспетчеризацией (PM) или совмещением
обоих подходов.

Может, лучше какие-то кейсы привести? Так-то:

class Drawable a where
   draw :: Canvas -> a -> Canvas

data GunOneBarrel = GunOneBarrel GunAttributes

instance Drawable GunOneBarrel where
  draw _ (GunOneBarrel{..}) = undefined

data GunTwoBarrels = GunTwoBarrels GunAttributes

instance Drawable GunTwoBarrel where
  draw _ (GunTwoBarrels{..}) = undefined
Re[7]: проектирование
dmz>>История про пушку выглядит надуманной.

F>вот сейчас было обидно ._.



Нет, ну правда — отрисовка двухствольной пушки как-то отличается
от одноствольной? Казалось бы, и то, и другое — либо спрайт, либо
векторная модель в том или ином виде.

Просто постановка до боли напомнила замшелые задачки для собеседований — типа кто от
кого наследует — квадрат от прямоугольника или наоборот. Или построить иерархию
наследования для геометрических фигур.


Определение похожего поведения для разных типов обычно решается
тайпклассами или явной диспетчеризацией (PM) или совмещением
обоих подходов.

Может, лучше какие-то кейсы привести? Так-то:

class Drawable a where
   draw :: Canvas -> a -> Canvas

data GunOneBarrel = GunOneBarrel GunAttributes

instance Drawable GunOneBarrel where
  draw _ (GunOneBarrel{..}) = undefined

data GunTwoBarrels = GunTwoBarrels GunAttributes

instance Drawable GunTwoBarrels where
  draw _ (GunTwoBarrels{..}) = undefined