Algo que eu realmente não tinha pensado antes (sintaxe AS3):
private var m_obj:Object;
protected function get obj():Object
{
return m_obj;
}
private var m_str:String;
protected function get str():String
{
return m_str;
}
Pelo menos as subclasses não poderão definir m_obj ou m_str (embora ainda possam modificar m_obj).
Minha pergunta: isso é apenas um exagero flagrante?
A pergunta deste programador: quando ou por que alguém deve usar getters / setters para propriedades de classe em vez de simplesmente torná-los propriedades públicas? foi sugerido como duplicado.
Essa pergunta é diferente porque aborda apenas propriedades públicas versus privadas e se uma propriedade deve ser agrupada com getters e setters. Para minha pergunta, estou focando nas variáveis protegidas e em como as classes herdadas interagem com essas variáveis.
Portanto, a implementação alternativa seria:
protected var m_obj:Object; //more accessible than a private variable with a protected getter
protected var m_str:String; //more accessible than a private variable with a protected getter
Minha pergunta é semelhante, porque estou falando sobre o uso de getters protegidos triviais para impedir que subclasses gravem nas variáveis, mas para permitir a todos os outros acessos.
Em idiomas como o AS3, isso permitirá que eles façam alterações em variáveis de objeto mutáveis, desde que as próprias referências não sejam modificadas.