在关于编程语言的课程中,我的教授引用mixins作为脆弱基类问题的解决方案之一.维基百科也习惯列出(Ruby)mixins作为脆弱基类问题的解决方案,但前段时间有人删除了对mixins的引用.我仍然怀疑,对于脆弱的基类问题,它们可能在某种程度上优于继承.否则,为什么教授会说他们有所帮助?
我举一个可能的问题的例子.这是一个简单的Scala实现(Java)问题,教授给我们解释了这个问题.
考虑以下基类.假设这是列表的一些非常有效的特殊实现,并且在其上定义了更多操作.
class MyList[T] {
private var list : List[T] = List.empty
def add(el:T) = {
list = el::list
}
def addAll(toAdd:List[T]) : Unit = {
if (!toAdd.isEmpty) {
add(toAdd.head)
addAll(toAdd.tail)
}
}
}
Run Code Online (Sandbox Code Playgroud)
还要考虑以下特征,它应该添加size到上面的列表中.
trait CountingSet[T] extends MyList[T] {
private var count : Int = 0;
override def add(el:T) = {
count = count + 1
super.add(el)
}
override def addAll(toAdd:List[T]) = {
count = count + toAdd.size;
super.addAll(toAdd);
}
def size : Int …Run Code Online (Sandbox Code Playgroud)