В настоящее время я пытаюсь изучить Ruby, и я пытаюсь понять, что он предлагает в плане инкапсуляции и контрактов.
В С# контракт может быть определен с использованием интерфейса. Класс, который реализует интерфейс, должен выполнять условия контракта, предоставляя реализацию для каждого метода и свойства (и, возможно, других вещей). Индивидуальный класс, реализующий интерфейс, может делать все, что ему нужно, в рамках методов, определенных контрактом, если он принимает те же типы аргументов и возвращает один и тот же результат.
Есть ли способ принудительного использования такого рода вещей в Ruby?
Спасибо
Простой пример того, что я имею в виду в С#:
interface IConsole { int MaxControllers {get;} void PlayGame(IGame game); } class Xbox360 : IConsole { public int MaxControllers { get { return 4; } } public void PlayGame(IGame game) { InsertDisc(game); NavigateToMenuItem(); Click(); } } class NES : IConsole { public int MaxControllers { get { return 2; } } public void PlayGame(IGame game) { InsertCartridge(game); TurnOn(); } }