Vamos a mais um importante conceito da POO, que são as classes e métodos estáticos. Elas são muito simples e seus nomes já são bastante sugestivos, mas antes de falarmos delas, vamos relembrar um pouco o conceito de classes.

Classes são a “receita” para a criação dos objetos, pois contém as instruções de todas as ações que eles poderão executar e ainda descrevem todos os atributos que o objeto possuirá. Então, sempre que instanciamos uma classe, geramos um novo objeto ativo na memória, e a partir disso podemos manipular seus atributos através de métodos. Vejam abaixo o exemplo de uma classe chamada "Carro", que contém dois atributos e métodos para inserir e ler o conteúdo destes.

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Nós podemos criar quantas instâncias desse objeto quisermos e, a cada nova instância, um novo objeto é gerado na memória, conforme a figura abaixo:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Muito bem, esse é o funcionamento de uma classe comum. O que diferencia uma classe estática de uma classe não estática é que a estática não pode ser instanciada, portanto não gera essas múltiplas instâncias dos objetos na memória.

Quando o programa que referencia uma classe estática é carregado, ela é alocada na memória automaticamente, sem a necessidade de se chamar um construtor através da palavra reservada new, como acontece com as classes não estáticas. Essa classe estática permanecerá na memória durante toda a execução do programa e, a partir de qualquer local do código que se tentar recuperar seus valores, eles serão sempre os mesmos para todos os requisitantes, já que estaremos lidando com uma mesma fonte de dados, e não com várias, como pode acontecer com as classes não estáticas. É como se no início da execução do programa um objeto dessa classe estática fosse instanciado e não mais permitisse a instanciação de nenhum outro. Ele será único durante todo o tempo em que o programa permanecer sendo executado.

Vejam o que acontece quando eu altero o tipo da classe Carro para static:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

A estrutura de uma classe estática é realmente diferente de uma não estática. A imagem acima mostra uma classe que tinha dois atributos, que eram a marca e o modelo, e métodos para acessá-los, seja para inserir essas informações ou para lê-las. Vejam como a estrutura de uma classe estática com as mesmas funções é mais simples:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Vale a observação de que os atributos da classe estática precisam ser estáticos também. Vejam o que acontece se eu tentar deixá-los não estáticos e compilar a aplicação:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Vou recolocar a palavra static depois do modificador de acesso public e demonstrar como é simples acessar esses atributos da classe estática "Carro".

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Agora vejam como o acesso a esse membro da classe estática é feito:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Aqui farei uma observação importante. Os membros estáticos podem, sim, ter seu valor alterado durante a execução da aplicação, vejam esse complemento do código acima:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Faço a inserção do valor “FIAT”, depois o exibo em uma caixa de mensagens, em seguida troco esse valor por “GM”, então faço a exibição novamente. Vejam:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

E, depois de clicar em OK:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Vejam que o valor foi alterado corretamente.

Agora vamos falar um pouco sobre os métodos estáticos. Eles, na verdade, possuem funcionamento igual ao de um método não estático. Nesse caso existe somente uma pequena mudança que se refere à classe, que agora não vai estar instanciada.

Criei, para usar de exemplo, um método chamado calculaPreco(int qtde), que recebe a quantidade de veículos vendidos por uma concessionária e, dependendo dessa quantidade, lhe fornece um desconto, retornando um preço final já com o desconto calculado, que pode ser de 2000 ou 4000 reais.

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Criei um Textbox para o usuário digitar a quantidade de veículos vendidos e um botão para retornar o preço final, conforme figura abaixo:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Para o retorno e exibição do valor, o código ficou da seguinte forma:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Exibição do valor:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Também poderíamos atribuir esse valor de retorno a uma variável, que é o que normalmente acontece quando utilizamos métodos estáticos. Segue um exemplo:

Classes e Métodos Estáticos - Programação Orientada a Objetos - POO

Dessa forma é que funcionam as classes e métodos estáticos. Eles são de enorme importância, mas devem ser usados com cautela. É preciso que se saiba claramente qual classe ou membro você quer que fique disponível para todas as outras classes (ou instâncias delas), pois no fundo esse é o papel dos componentes estáticos.

Fazendo uma comparação grosseira, é como se eles fossem variáveis globais da aplicação, pois serão alocados na memória logo que ela for executada pela primeira vez e permanecerão lá o tempo todo. Use-os somente quando não necessitar manipular valores de membros da instância.

Se por um lado o código fica mais simples, por outro ele ocupa espaço na memória o tempo todo. Também é importante lembrar que os dados armazenados em uma classe estática não possuem uma identidade única, como acontece com as classes não estáticas. Para estas últimas podemos criar várias instâncias, cada um com um identificador e colocar dados diferentes neles. Isso não é possível com componentes estáticos.

Enfim, espero que tenha ficado claro todas as diferenças entre classes e métodos estáticos e os não estáticos. Com este tópico encerramos o minicurso de POO. Na sequência temos o de C#, que fará uso de vários conceitos aprendidos aqui.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

O título Space Invaders, lançado em 1980, fez tanto sucesso em todo o mundo que as pessoas compravam o console Atari apenas para poderem jogá-lo em casa. Saiba mais sobre este incrível título clicando aqui.


O título Asteroids, do Atari, possui recorde de pontuação há 30 anos. Em 1982 um americano chamado Scott Safran atingiu a marca de 41.336.440. Atualmente ele faz parte de um minúsculo grupo de jogadores que conseguiram manter seus recordes por mais de 30 anos.


O título Tetris detém o recorde de jogo mais adaptado de todos os tempos. No total foram mais de 60 plataformas diferentes que receberam alguma versão do quebra-cabeças criado por Alexey Pajitnov. Conheça mais sobre este incrível jogo clicando aqui.


O primeiro computador a conseguir rodar o jogo Spacewar era o PDP-1, que custava 120 mil dólares e pertencia ao Massachusetts Institute of Technology. O jogo demorou 200 horas para ser desenvolvido, em 1962, e seu criador foi um cientista da computação chamado Steve Russel.


O filme Mortal Kombat, inspirado no jogo de mesmo nome, faturou 23 milhões de dólares apenas no fim de semana de estreia nos EUA. Ainda sobre este título de sucesso, outra cifra que impressiona é o faturamento ao longo do primeiro ano: 1 bilhão de dólares no mundo todo.


Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.


Utilizar seu notebook em camas, sofás ou qualquer superfície macia pode obstruir as entradas e saídas de ar, elevando a temperatura e provocando danos a diversos componentes. Utilize-o sempre sobre uma superfície rígida. Saiba mais aqui.


O personagem Mario surgiu pela primeira vez no mundo dos games em um jogo chamado Donkey Kong, lançado em 1981. Mario, que naquela época se chamava Jumpman, não era o personagem principal do jogo, mas ele se tornaria um dos mais famosos personagens do mundo dos games. Saiba mais.


Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.


A empresa Universal City Studios, detentora dos direitos autorais do King Kong, processou a Nintendo logo após o lançamento de Donkey Kong, pois segundo ela, o game violava os seus direitos. Ela venceu o processo e recebeu da Nintendo uma indenização de quase 2 milhões de dólares.


Instalar vários aplicativos com o mesmo propósito, como editores de texto, reprodutores de músicas ou vídeos e até programas antívirus sobrecarregam o seu sistema operacional e ainda ocupam espaço desnecessário em seu HD. Tenha apenas um bom programa para cada função.


Ao completar o nível 99 do jogo Duck Hunt, para Nintendo, o jogo retorna ao primeiro nível, mas um bug impede que se acerte os patos neste recomeço. Este é um exemplo do que é chamado no mundo dos games de "Kill Screen".


O mouse foi criado em 9 de dezembro de 1968, por um americano chamado Douglas Engelbart, que o batizou de "XY Position Indicator for a Display System". Conheça a história do mouse clicando aqui.


O épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.


O console Nintendo Entertainment System (NES), da Nintendo, detém o recorde de videogame mais clonado em todo o mundo. Já foram catalogados mais de 300 aparelhos diferentes capazes de reproduzir seus jogos! Saiba mais sobre ele aqui.


As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.