Olá Pessoal, tudo bom?
Uma duvida que muitas vezes surge quando somos inexperientes no mundo da linguagem de programação Java é se esta linguagem é puramente orientada a objetos. Como tudo na vida, muitas pessoas irão defender afirmativamente outras pessoas serão contra essa opinião. No artigo de hoje irei descrever um pouco sobre os atributos e métodos static (estáticos). Esse é um argumento algumas vezes utilizado para ir contra a afirmação de que o Java é puramente orientado a objetos. Esse post não dará a resposta final a isso, apenas irá abordar um dos motivos dessa discussão, existem inúmeros outros. Veja no post abaixo…
Java é puramente orientado a objeto?
Quando estava aprendendo as nuances de programação na época da faculdade muitas pessoas falavam que o Java segue puramente o paradigma orientado a objeto, pois tudo em Java é um objeto, inclusive Strings, (na linguagem de programação C é um array de char) e arrays em si. Apesar disso outras pessoas começavam a contrariar essa opinião afirmando que existe na linguagem Java atributos e métodos estáticos não pertencem a nenhum objeto.
Se você descer mais a fundo na especificação da linguagem Java verá que para cada Classe que ocorre uma instanciação a JVM cria dois objetos:
- A instância da classe propriamente dita
- Um Class Level Object ou arquivo .class
Assim caso você crie um objeto como no exemplo abaixo:
1 |
Endereco endereco = new Endereco(); |
A JVM irá alocar espaço em memória para a instância endereco ((Artigo sobre alocação de Memória no Java – link)) e na primeira vez que o Class Loader carregar a classe em memória, irá criar uma classe Endereco.class ((Artigo sobre Class Loader – link), que será uma classe Singleton ((Artigo sobre o padrão Singleton – link)) em memória.
A classe Class (API da classe java.lang.Class – link)) é a classe que representa classes e interfaces durante a execução de uma aplicação Java. Além disso essa instância singleton armazena todos os atributos e métodos estáticos (static) da classe em questão. Se dentro da classe Endereco tentássemos acessar um atributo static, a instância em questão iria apontar para a instância da classe Class, Endereco.class.
Dessa forma é por isso que ao alterarmos o valor de um atributo estático esse será “alterado” para todas as instâncias daquela classe Java, mesmo que estejamos apontando o atributo via instância de uma classe Endereco.
Assim podemos afirmar que a JVM insere todos os atributos e métodos dentro da uma classe, o que torna o argumento inicial inválido.
Java Puro 2 x 0 Java Não Puro 😀
finnaly{
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
GUSTAVO DE FARIA SILVA says
No entanto, vale ressaltar para que Java fosse de fato considerado puramente orientado a objetos, não deveriam existir tipos primitivos, como int ou char.
Mauda says
Olá Gustavo, tudo bem?
Concordo plenamente. Outro argumento é da herança multipla que não existe no Java. Por fim como disse no começo do artigo: ¨Esse post não dará a resposta final a isso, apenas irá abordar um dos motivos dessa discussão, existem inúmeros outros.¨
Obrigado pelo feedback e precisando estamos aqui!