Questão

2 respostas
G

Uma operação de instância pode referir-se a uma variável (atributo) de classe. Entretanto, em um ambiente verdadeiramente orientado a objeto, uma operação de classe não pode, diretamente, referir-se a uma variável (atributo) de instância no interior de um objeto. Por que não? O que seria necessário para que uma operação de classe possa referir-se a um atributo de um objeto?

Seria porque em um ambiente orientado a objeto seria necessario o uso de encapsulamento?

2 Respostas

ViniGodoy

Por “operação de classe” você está se referindo a método estáticos?

Métodos estáticos não fazem exatamente parte do contexto do objeto.
Por isso, se eles acessar o objeto diretamente, é como ter uma entidade externa violando o encapsulamento.

Isso tudo é muito purista, claro. Se você tiver um método fábrica dentro de sua própria classe, não vejo qual seja o grande mau de fazer acesso aos membros privados de seu objeto num método estático.

E

gustavo.rotondo:
Uma operação de instância pode referir-se a uma variável (atributo) de classe. Entretanto, em um ambiente verdadeiramente orientado a objeto, uma operação de classe não pode, diretamente, referir-se a uma variável (atributo) de instância no interior de um objeto. Por que não? O que seria necessário para que uma operação de classe possa referir-se a um atributo de um objeto?

Hum… provavelmente quem formulou esta questão está pensando em algo parecido com isto:

class Teste {
    private String atributoDoObjeto;
    private static String atributoDaClasse;
    public static void operacaoDeClasse () {
        System.out.println (atributoDaClasse); // ele consegue referir-se a um atributo de classe...
        System.out.println (atributoDoObjeto); // <-- a que objeto ele está se referindo? Aqui vamos até ter um erro de compilação
    }
    public void operacaoDeInstancia () {
        System.out.println (atributoDaClasse); // ele consegue referir-se a um atributo de classe...
        System.out.println (atributoDoObjeto); // não há problemas porque o objeto ao qual a operação está se referindo é this
    }
}

Para que uma operação de classe se refira a um atributo de um objeto, é necessário acessar um objeto, é claro:

class Teste {
    private String atributoDoObjeto;
    private static String atributoDaClasse;
    public static void operacaoDeClasse (Teste teste) {
        System.out.println (teste.atributoDoObjeto); // Só assim ele consegue se referir a um atributo de objeto, mas passado explicitamente
    }
}
Criado 13 de março de 2013
Ultima resposta 13 de mar. de 2013
Respostas 2
Participantes 3