За последние 6 с половиной лет программирования на Ruby мне не нужно нужен абстрактный класс один раз.
Если вы думаете, что вам нужен абстрактный класс, вы слишком много думаете на языке, который их предоставляет / требует, а не на Ruby как таковом.
Как и предполагали другие, миксин больше подходит для вещей, которые должны быть интерфейсами (как их определяет Java), а переосмысление вашего дизайна больше подходит для вещей, которые "нуждаются" в абстрактных классах из других языков, таких как C ++.
Обновление 2019: мне не нужны абстрактные классы в Ruby за 16 с половиной лет использования. Все, что говорят все, кто комментирует мой ответ, решается путем изучения Ruby и использования соответствующих инструментов, таких как модули (которые даже дают вам общие реализации). В командах, которыми я управлял, есть люди, которые создали классы, у которых базовая реализация не работает (например, абстрактный класс), но в основном это пустая трата кода, потому что NoMethodError
даст тот же результат, что и AbstractClassError
в рабочей среде. .