GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Qual a diferença entre atributo e variavel de instancia

Tem diferença? são a mesma coisa???
Variavel de instancia e atributo

Atributos e variáveis são a mesma coisa em questão de funcionalidade. Ambos são endereços de memória que tem um espaço ou tamanho definido de acordo com o tipo de dado que será guardado, por exemplo: caracter, número, número decimal, etc. Em Java, costumamos utilizar o termo atributo, que é nada além do que uma variável que está dentro de uma classe. Como tudo que fazemos em Java está contido dentro de uma classe, então usamos o termo atributo ao invés de variável.

Eu nunca li nenhum texto especificamente a este respeito, mas eu penso de maneira um pouco diferente. Um atributo de um objeto não precisa necessariamente estar armazenado em uma variável. Você pode ter um atributo que é obtido sempre a partir do resultado de um método. Vamos supor que exista um objeto que mantenha armazenado em suas variáveis de instância valores de peso e altura de um indivíduo. Se eu quiser obter o IMC pode ser interessante sempre realizar esse cálculo no objeto. O IMC pode ser um atributo desse objeto, mesmo que ele não esteja armazenado em uma variável de instância.

Abraço.

A grande diferença é que atributo é conceitual e variável de instancia é uma forma de implementar o conceito de atributo.

Bem, o que aprendi, concordo e entendo:

algumas linguagens tem as chamadas ‘variáveis globais’ e ‘variáveis locais’, nao importando o seu tipo (objeto ou primitivo).

As globais estão dispíveis para todos os métodos/funções/procedimentos (depende da linguagem) que estiverem presentes no mesmo arquivo-fonte (que em java é o *.java e, depois de compilado, o *.class).

As variáveis locais estão disponíveis unicamente dentro dos métodos/funções/procedimentos. Uma vez que o método chega ao fim, a variável local é decartada.

Portanto,
atributo são o correspondente a variáveis globais
variável de instancia corresponde a variável local.

Blz?
Abraços

[quote=berg.pb]Em outras palavras,
algumas linguagens tem as chamadas ‘variáveis globais’ e ‘variáveis locais’, nao importando o seu tipo (objeto ou primitivo). AS globais estão dispíveis para todos os métodos/funções/procedimentos (depende da linguagem). AS variáveis locais estão disponíveis unicamente dentro dos métodos/funções/procedimentos. Uma vez que o método chega ao fim, a variável local é decartada.

Portanto,
atributo são o correspondente a variáveis globais
variável de instancia corresponde a variável local.

Blz?
Abraços[/quote]

Não. O ponto não é este, veja o que escrevi antes. Além do mais a variável de instância em Java é mais ou menos o que você chamou de variável global. Uma variável de instância está disponível para os métodos de uma instância de um objeto. :smiley:

Falou.

É isso aí, Wagner. Eu estava errado. Obrigado.

[quote]

Uma variável de instância é uma variável cujo valor é específico ao objeto e não à classe. Uma variável de instância em geral possui uma valor diferente em cada objeto representante da classe.

Uma variável de classe é uma variável cujo valor é comum a todos os objetos representantes da classe. Mudar o valor de uma variável de classe em um objeto automaticamente muda o valor para todos os objetos instâncias da mesma classe. Um exemplo óbvio de uma variável de classe seria o número de instâncias desta classe que já foram criadas.

Uma variável é considerada como de instância por “default”. Para declarar uma variável de classe, acrescenta-se a palavra-chave static. Alias, outra expressão utilizada para indicar uma variável de classe é variável estática. Exemplo:

  static int nuhmeroDeInstahnciasDestaClasse; 

Fonte: http://www.if.ufrgs.br/~betz/jaulas/aula4.htm

Abraços

Puxa eu percebi que só tem fera, mas não Ficou Muito claro suas Definições a respeito da != entre : Objeto X Instância;

Tbm tinha essa dúvida, mas ficou claro agora com as respostas!! Vlw

[quote=faicoxim]Tem diferença? são a mesma coisa???
Variavel de instancia e atributo[/quote]

Na prática sim. Na teoria, não.

“Atributo” é o termo usado em OO em geral e nada tem que ver com a implementação. Vc diz que “O objeto tem um atributo”. Quando vc fala em atributos está usando uma linguagem mais geral que não depende da linguagem de implementação (seja, java, c#, python, etc)

“Variável de Instancia” é um conceito da linguagem de implementação. Em java vc pode ter variáveis de instancia nos objetos.

É comum que a maioria dos objetos implemente o padrão ProperyBag . Neste padrão o objeto só tem atributos e não tem métodos. A implementação em java é construir uma serie de variáveis de instancia privadas e métodos públicos que acessam e modificam estas variáveis. Este não é a única forma de implementar, mas é a mais comum.

Contudo um atributo pode ser não ser apenas publico. Neste caso os métodos acessores não são públicos, mas a variáveis de instancia é sempre privada. É uma má prática usar variáveis de instancia que não sejam privadas.

O atributo pode ainda ser read-only ou write-only e nesse caso o modificador ou o acessor , respectivamente, não existirão. O atributo pode ainda ser calculado. Neste caso o método assessor produz o resultado usando outros atributos do objeto.

Em OO “atributo” significa “propriedade”. E em certas linguagens existem construtos especiais para propriedades (como em C#) que podem ou não necessitar de variáveis de instancia explicitamente declaradas. Em C#, por exemplo, ao usar property, é possivel deixar o compilador se virar para criar a variável de instancia. Contudo ela é naturalmente necessária. Em javascript, por sua vez, não existe diferença entre método e atributo porque funções também são objetos e o conceito de 'propriedade" pode ser implementado usando uma função em vez de uma variável de instancia.

Vc deve usar o termo atributo durante o design geral e orientação a objetos. variáveis vc fala durante a implementação. Contudo é comum dizer “temos que criar um atributo no objeto” e as pessoas entenderem como isso se traduz para o código.

Quando cada objeto de uma classe mantém sua própria cópia de um atributo, o campo correspondente é conhecido como uma variável de instância.


[quote=reyson]Quando cada objeto de uma classe mantém sua própria cópia de um atributo, o campo correspondente é conhecido como uma variável de instância.
[/quote]

Hum… em java nenhum objeto mantém a cópia do atributo. O objeto mantém o valor da variável. A variável pode ou não ser de referencia.
O objeto nunca mantém a sua cópia de nada (não em java). A frase que vc escreveu não faz sentido.

Todas as viráveis de instancia pertencem ao objeto e não são cópias de nada. (não confunda variável de referencia com cópia).
Portanto todas as variáveis de um objeto são variáveis de instancia. Não ha outras.

Existem variáveis estáticas, que não pertencem ao objeto. Pertencem à classe do objeto. Logo, todo o objeto daquela classe tem acesso a essas variáveis.
Todas as variáveis que pertencem ao objeto, são de instancia, porque “instancia” é a mesma coisa que objeto. Não ha outro tipo de variáveis no objeto.

instancia -> armazenar dado ou objeto dentro de uma variavel ou atributo.

variavel/atributo -> 2 nomes para a mesma coisa… ha quem diga q não… mas isso só complica a cabeça ads pessoas.

uma classe possui atributos logo se uma variavel é setada dentro de um método e não saí daquele método então essa variavel não é um atributo.

atributos são todas as váriaveis contidas no escopo da classe.
variaveis são os espaços de memória para armazenamento de dados

bom isso é oque eu entendo sobre o assunto. posso estar errado ou não vlw abraço

[quote=sergiotaborda][quote=reyson]Quando cada objeto de uma classe mantém sua própria cópia de um atributo, o campo correspondente é conhecido como uma variável de instância.
[/quote]

Hum… em java nenhum objeto mantém a cópia do atributo. O objeto mantém o valor da variável. A variável pode ou não ser de referencia.
O objeto nunca mantém a sua cópia de nada (não em java). A frase que vc escreveu não faz sentido.

Todas as viráveis de instancia pertencem ao objeto e não são cópias de nada. (não confunda variável de referencia com cópia).
Portanto todas as variáveis de um objeto são variáveis de instancia. Não ha outras.

Existem variáveis estáticas, que não pertencem ao objeto. Pertencem à classe do objeto. Logo, todo o objeto daquela classe tem acesso a essas variáveis.
Todas as variáveis que pertencem ao objeto, são de instancia, porque “instancia” é a mesma coisa que objeto. Não ha outro tipo de variáveis no objeto.[/quote]

Ok sergiotaborda! Então tire suas conclusões com o livro do Deitel 8ªedição, pois a frase que informei consta no livro dele(pág 77)!
Abraços!