В Ruby программистам разрешено изменять предопределенные классы. Итак, действительно плохой программист мог бы сделать что-то вроде:
class String
def ==(other)
return true
end
end
Очевидно, что почти никто не будет настолько тупым, но идея о том, что более тонкие изменения в предопределенном классе могут вызвать проблемы в уже работающем коде, мне кажется нарушением принципа инкапсуляции.
Четыре вопроса:
- Во-первых, нарушает ли это объектно-ориентированный принцип инкапсуляции?
- Во-вторых, есть ли способ, который я как программист могу гарантировать в
мой код, с которым я работаю, с неизмененной версией класса?
- В-третьих, должен ли я когда-либо «открывать» классы в моем коде для любых
причина?
- Наконец, как подобные вещи решаются в крупномасштабной производственной среде кодирования? Другими словами, действительно ли люди в индустрии программирования делают это в коде, который другие
буду использовать? Или даже если они этого не сделают, как сделать так, чтобы некоторые
автор плагина где-то не делает что-то подобное
испортит существенную часть вашей программы?
Я знаю, что это несколько субъективный вопрос, но мне действительно хотелось бы знать, как широкое сообщество программистов думает об этом так называемом «обезьяньем патче».
задан Mark Thomas 15 November 2010 в 13:47
поделиться