Exercícios Resolvidos de Membros estáticos: static

Ver Teoria

Enunciado

Uma bateria é formada por várias células de energia. Para desenvolver o driver de controle de uma bateria crie uma classe chamada C e l u l a . Crie um atributo privado chamado c a r g a que inicia em 25 . Construa dois métodos públicos: c o n s u m i r que sempre que é chamado consome 5 da carga atual da célula, e c a r r e g a r que aumenta a carga em 5 do valor atual.

Para manter as células bem alinhadas crie um parâmetro compartilhado chamado c a r g a B a t e r i a que armazena a soma de carga de todas as células. Por segurança esse parâmetro deve ser privado.

Para testar o programa crie três células c e l 1 , c e l 2 e c e l 3 . Chame o método consumir uma vez nas células 1 e 2, e carregar na célula 3. Imprima a carga total da bateria.

Passo 1

Vamos lá pessoal, essa questão dá instruções para criar uma classe para as células de uma bateria. A primeira parte traz informações gerais da classe para criar o atributo c a r g a e os métodos c a r r e g a r e c o n s u m i r .

O detalhe na questão é que ela pede pra criar um parâmetro compartilhado chamado c a r g a B a t e r i a , que é uma forma de dizer que esse é um atributo estático.

Nota o seguinte, os métodos c a r r e g a r e c o n s u m i r deve alterar o valor do atributo c a r g a , mas para manter a bateria atualizada, será preciso atualizar o valor do atributo c a r g a B a t e r i a também.

Outra coisa, o atributo c a r g a B a t e r i a tem que começar em 0 . Então sempre que uma C é l u l a for adicionada vamos precisar atualizar o valor da carga da bateria. Ou seja, precisamos de um método construtor.

Um último detalhe, é que o atributo c a r g a B a t e r i a é estático e privado. Precisamos criar um método getter para acessar esse valor. Como este método só vai lidar com atributos estáticos, então poderá ser um método estático.

Pode parecer muita coisa, mas fica tranquilo que vamos fazer juntos. E pra começar, vamos fazer o cabeçalho do programa:

Passo 2

Então vamos começar criando a nossa classe chamada C e l u l a . Como descrito no enunciado temos que criar dois atributos privados c a r g a para armazenar a carga da célula, e c a r g a B a t e r i a para armazenar a caga de todas as células.

Note que c a r g a B a t e r i a é um atributo compartilhado, e por isso deve ser estático.

Sempre que uma nova célula for adicionada, a carga total da bateria tem que ser atualizada. Para que algo aconteça no momento da criação de um objeto nós usamos um método construtor: uma função sem tipo com o mesmo nome que a classe. Dentro do construtor vamos atualizar o valor de carga da bateria.

Vamos agora desenvolver o método de carregamento. Quando o método c a r r e g a r ( ) for invocado ele deve aumentar a carga da bateria em 5 . E por consequência a carga da bateria deve ser atualizada também.

De maneira semelhante temos que desenvolver o método c o n s u m i r ( ) , porém os atributos c a r g a e c a r g a B a t e r i a devem ser reduzidos em 5

Ainda dentro da nossa classe, precisamos definir um método para acessar o valor da carga da bateria. Vamos criar um método do tipo f l o a t chamado g e t C a r g a B a t e r i a ( ) que retorna o valor da carga da bateria.

Com isso a nossa classe está quase concluída e já podemos fechar a classe. Mas ainda precisamos definir o valor inicial da variável estática c a r g a B a t e r i a .

Para definir o valor do atributo fora da classe não usamos a palavra-chave s t a t i c , apenas usamos o tipo f l o a t seguido do nome da classe C e l u l a , do operador e então usamos o nome do atributo que estamos acessando c a r g a B a t e r i a

E com isso a nossa classe está complemente definida.

Passo 3

Pra finalizar a questão, vamos executar um teste.

Primeiro vamos criar os três objetos do tipo C e l u l a : c e l 1 , c e l 2 e c e l 3 ..

Em seguida vamos usar os objetos c e l 1 e c e l 2 para executar o método c o n s u m i r ( ) e depois usamos o objeto c e l 3 para executar o método c a r r e g a r ( )

E finalizamos a questão executando o comando c o u t para visualizar a carga total da bateria. Para isso vamos acessar o método estático g e t C a r g a B a t e r i a ( ) .

A gente pode acessar um membro estático através de qualquer um dos objetos c e l 1 , c e l 2 ou c e l 3 . Porém, uma boa prática e acessar os métodos estáticos através da própria classe usando a sintaxe:

n o m e C l a s s e ∷ n o m e M e m b r o E s t a t i c o

No nosso caso fica da seguinte forma:

E com isso vamos ter o seguinte resultado:

E finalizamos mais uma questão! Vlw flw!

Resposta