kraso4niy
@kraso4niy
fullstack

Почему в Ruby нет абстрактного класса?

Может кто знает? И действительно ли хорош такой способ эмулировать абстрактный класс?
class AbstractEmulate

def requiredMethod
    #abort() or throw Exception here
end

def requiredMethodTwo
    abort("Please define #{__method__.to_s}")
end

end

соотвественно после наследования если class MyClass < AbstracEmulate , если не определим методы , то получим ошибки. Кто нибудь так делает?
  • Вопрос задан
  • 4882 просмотра
Пригласить эксперта
Ответы на вопрос 4
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
stackoverflow.com/questions/715604/why-do-dynamic-...

По сути в ruby/python не нужны абстрактные классы. Во всяком случае так считали авторы языков, основываясь на идее, что в этих языках все проверки на существование методов происходят в рантайме, ну и можно в рантайме подменять методы и много чего еще творить с классами.
Ответ написан
Комментировать
viktorvsk
@viktorvsk
Может кто знает? И действительно ли хорош такой способ эмулировать абстрактный класс?


Обычно (хотя, возможно, и просто субъективное мнение и в таком подходе много плюсов) эмулировать фичу языка\фреймкорвка Х в языке\фреймворке Y, следуя против их конвенций - плохой вариант.
Ответ написан
Комментировать
mastedm
@mastedm
Можно использовать gem interface
Ответ написан
Комментировать
Rinz
@Rinz
Программист на С++,PHP,C#,Java,Lisp,Smaltak,Python
Ruby это язык который является чистым ООП, по этому все объекты которые существуют в нем уже дефакто являются абстрактными т.к. в каждый объект в руби(а в руби ВСЕ есть объект) можно дополнить в рантайме, изменить поведение, уничтожить метод, переопределить, дополнить и все что душе угодно, Руби как и Smalltalk чистый ОО язык и по этому весь мир для них и объект и абстракция одновременно т.к. каждый объект можно дополнить, могут существовать пустые объекты которые заполняются позже(та же работа абстракции в C# "abstract class")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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