Do Ruby ' ■ «Открытые классы» нарушают инкапсуляцию?

В Ruby программистам разрешено изменять предопределенные классы. Итак, действительно плохой программист мог бы сделать что-то вроде:

class String
  def ==(other)
    return true
  end
end

Очевидно, что почти никто не будет настолько тупым, но идея о том, что более тонкие изменения в предопределенном классе могут вызвать проблемы в уже работающем коде, мне кажется нарушением принципа инкапсуляции.

Четыре вопроса:

  1. Во-первых, нарушает ли это объектно-ориентированный принцип инкапсуляции?
  2. Во-вторых, есть ли способ, который я как программист могу гарантировать в мой код, с которым я работаю, с неизмененной версией класса?
  3. В-третьих, должен ли я когда-либо «открывать» классы в моем коде для любых причина?
  4. Наконец, как подобные вещи решаются в крупномасштабной производственной среде кодирования? Другими словами, действительно ли люди в индустрии программирования делают это в коде, который другие буду использовать? Или даже если они этого не сделают, как сделать так, чтобы некоторые автор плагина где-то не делает что-то подобное испортит существенную часть вашей программы?

Я знаю, что это несколько субъективный вопрос, но мне действительно хотелось бы знать, как широкое сообщество программистов думает об этом так называемом «обезьяньем патче».

9
задан Mark Thomas 15 November 2010 в 13:47
поделиться