Каково различие между Абстрактным классом и Mixin?

Таким образом, мы можем добавить именованный элемент списка, выполнив

lapply(lst, function(x) c(x, p = 25))


#$m
#    p 
# 1 25 

#$n
#    p 
# 2 25 

#$o
#    p 
# 3 25 

#[[4]]
#[[4]]$m
#[1] 3

#[[4]]$n
#[1] 4

#[[4]]$o
#[1] 5

#[[4]]$p
#[1] 25
#...
#...

Или с purrr::map

purrr::map(lst, ~ c(., p = 25))

данными

[ 112]
15
задан eskatos 18 October 2016 в 13:12
поделиться

2 ответа

На агностическом языком уровне смешивание просто добавляет функциональность к классу и больше для удобства программиста и избегать дублирования кода. Абстрактный (основной) класс формирует - отношения и допускает полиморфизм. Одна причина, почему наследование злоупотребляется, состоит в том, что это - простой способ реализовать mixins, не пишущий шаблона на языках, которые действительно не поддерживают их. Проблема состоит в том, что Вы объявляете, что полиморфное - отношения как побочный эффект, делая Ваш API более сбивающим с толку и возможно добавляя неоднозначность. Следовательно, более новые языки как D и поддержка Ruby mixins как собственные функции, позволяя удобному способу добавить набор функциональности к классу, не объявляя полиморфное - отношения.

25
ответ дан 1 December 2019 в 02:55
поделиться

Mixin никогда не предназначается как одинокий класс. Они просто добавляют некоторую функциональность к классу, который Вы объявляете. В Python они могут быть легко применены декораторами класса. Например, Вы могли украсить свой класс смешиванием Singleton, делая Ваш класс одиночным элементом.

0
ответ дан 1 December 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: