Métodos

Computação II - Ciência da Computação


Prof.: Danilo S. Carvalho

Nessa aula, iremos enfim falar sobre o comportamento, capacidades, ou serviços oferecidos pelos objetos.


Ao fim da aula, saberemos como nos comunicar com os objetos para alterar o seu estado, ou deles obter informações.

Aprendemos na aula sobre objetos que eles representam o estado de uma entidade individual associada a um conceito (classe) no programa..

Como então acessamos e alteramos esse estado?

Isso é feito através dos métodos.

Em nossa classe Carro, por exemplo, a quantidade de combustível no tanque e a velocidade podem ser considerados atributos, pois representam o estado do carro,

Enquanto as ações de acelerar, curvar e reabastecer alteram o estado do carro, e portanto definimos como métodos.

Algumas ações, como medir o nível do óleo ou buzinar, podem não alterar o estado do carro, mas emitem informação sobre o mesmo: quantidade de óleo e localização, respectivamente.

Mas espere um pouco!
Os métodos que escrevemos até agora não estavam alterando o estado, nem emitindo informações sobre nenhum objeto. Certo?


Correto!
Isso ocorre porque os métodos que escrevemos até o momento eram static. Esses métodos não se aplicam a objetos, mas possuem uma característica especial que iremos aprender nas próximas aulas.

Podemos escrever nossa classe Carro da seguinte maneira:

Primeiro declaramos a nossa classe e colocamos os atributos.

Podemos definir o método reabastecer em função da quantidade de combustível que se deseje colocar no carro.

Podemos também acrescentar um atributo para indicar a capacidade do tanque de combustível.

Atualizamos então o método reabastecer para não deixar o tanque transbordar, e retornar quanto foi efetivamente abastecido.

A palavra chave this é uma variável automática que contém uma referência ao objeto no qual o método será executado.

O método acelerar pode ser definido em função da intensidade que o pedal do acelerador foi pisado.

Mas ao acelerar não aumentamos a velocidade do carro instantaneamente. Mudamos sua aceleração.

Colocamos então o atributo aceleração no carro.

E criamos um outro método para atualizar a velocidade do carro em função da sua velocidade anterior e da aceleração.

                        
                            public class Carro {
                                float quantCombustivel;
                                float velocidade;
                            }
                        
                    
                        
                            public class Carro {
                                float quantCombustivel;
                                float velocidade;

                                public void reabastecer(float quantidade) {
                                    this.quantCombustivel += quantidade;
                                }
                            }
                        
                    
                        
                            public class Carro {
                                float quantCombustivel;
                                float capacidadeCombustivel
                                float velocidade;

                                public void reabastecer(float quantidade) {
                                    this.quantCombustivel += quantidade;
                                }
                            }
                        
                    
                        
                            public class Carro {
                                float quantCombustivel;
                                float capacidadeCombustivel;
                                float velocidade;

                                public float reabastecer(float quantidade) {
                                    float abastecido = 0;
                                    if (this.quantCombustivel + quantidade <= this.capacidadeCombustivel) {
                                        this.quantCombustivel += quantidade;
                                        abastecido = quantidade;
                                    }
                                    else {
                                        abastecido = this.capacidadeCombustivel - this.quantCombustivel;
                                        this.quantCombustivel = this.capacidadeCombustivel;
                                    }
                                    
                                    return abastecido;
                                }
                            }
                        
                    
                        
                            public class Carro {
                                float quantCombustivel;
                                float velocidade;

                                public float reabastecer(float quantidade) {
                                    float abastecido = 0;
                                    if (this.quantCombustivel + quantidade <= this.capacidadeCombustivel) {
                                        this.quantCombustivel += quantidade;
                                        abastecido = quantidade;
                                    }
                                    else {
                                        abastecido = this.capacidadeCombustivel - this.quantCombustivel;
                                        this.quantCombustivel = this.capacidadeCombustivel;
                                    }
                                    
                                    return abastecido;
                                }

                                public void acelerar(float intensidadePedal) {

                                }
                            }
                        
                    
                        
                            public class Carro {
                                float quantCombustivel;
                                float velocidade;
                                float aceleracao;

                                public float reabastecer(float quantidade) {
                                    float abastecido = 0;
                                    if (this.quantCombustivel + quantidade <= this.capacidadeCombustivel) {
                                        this.quantCombustivel += quantidade;
                                        abastecido = quantidade;
                                    }
                                    else {
                                        abastecido = this.capacidadeCombustivel - this.quantCombustivel;
                                        this.quantCombustivel = this.capacidadeCombustivel;
                                    }
                                    
                                    return abastecido;
                                }

                                public void acelerar(float intensidadePedal) {
                                    this.aceleracao = intensidadePedal * 10;
                                }
                            }
                        
                    
                        
                            public class Carro {
                                float quantCombustivel;
                                float velocidade;
                                float aceleracao;

                                public float reabastecer(float quantidade) {
                                    float abastecido = 0;
                                    if (this.quantCombustivel + quantidade <= this.capacidadeCombustivel) {
                                        this.quantCombustivel += quantidade;
                                        abastecido = quantidade;
                                    }
                                    else {
                                        abastecido = this.capacidadeCombustivel - this.quantCombustivel;
                                        this.quantCombustivel = this.capacidadeCombustivel;
                                    }
                                    
                                    return abastecido;
                                }

                                public void acelerar(float intensidadePedal) {
                                    this.aceleracao = intensidadePedal * 10;
                                }

                                public void atualizarVelocidade() {
                                    this.velocidade += this.aceleracao;
                                }
                            }
                        
                    
                        
                            public class Carro {
                                float quantCombustivel;
                                float velocidade;
                                float aceleracao;

                                public float reabastecer(float quantidade) {
                                    float abastecido = 0;
                                    if (this.quantCombustivel + quantidade <= this.capacidadeCombustivel) {
                                        this.quantCombustivel += quantidade;
                                        abastecido = quantidade;
                                    }
                                    else {
                                        abastecido = this.capacidadeCombustivel - this.quantCombustivel;
                                        this.quantCombustivel = this.capacidadeCombustivel;
                                    }
                                    
                                    return abastecido;
                                }

                                public void acelerar(float intensidadePedal) {
                                    this.aceleracao = intensidadePedal * 10;
                                }

                                public void atualizarVelocidade() {
                                    this.velocidade += this.aceleracao;
                                }
                            }
                        
                    

Podemos agora definir ações que queremos associar aos nossos objetos, acessando ou alterando os seus estados.


Mas aquilo que podemos fazer com as classes está apenas começando...


Que tal definir métodos para a classe Livro?

Perguntas:

  1. Posso criar um método que altera o estado de outros objetos além do this? Como?
  2. Posso chamar um método de uma classe a partir de outro método da mesma classe?

Exercício:

  1. Crie uma classe para conta bancária simples, com as operações de depositar e retirar dinheiro.

Até a próxima aula!