Aula 4

Propaganda
UC –
Prog. Orientada a Objetos
Docente: André Luiz Silva de Moraes
3º sem – Análise e Desenvolvimento de Sistemas
Programação Orientada a Objetos - 3º semestre
Prof. André Moraes
6
AULA 04
COMPORTAMENTO DOS OBJETOS
Sabe-se que os objetos possuem um estado e comportamento, representados pelas variáveis de instância e
também os métodos. Mas ainda estão faltando alguns detalhes de como é estado e o comportamento estão
relacionados. Vimos em exemplos anteriores que as instâncias podem ter seus próprios valores exclusivos para
as variáveis de instância.
Vimos em exemplos anteriores um comportamento da classe cachorro onde cães de nomes diferentes que tinham
um método latido() , e o som do latido a ser emitido pode ser diferente de acordo com a altura ou idade do
cachorro que está latindo. Em outras palavras, vimos que os métodos usam os valores das variáveis de instância
para poderem ser executados.
O fato é que podemos enviar valores para um método, no caso do Cachorro, poderíamos enviar como parâmetro
latido(4) e o mesmo seria executado 4 vezes. Porém sabemos que o método não exige que seja enviado
argumento algum.
6.1
PARÂMETROS E ARGUMENTOS
Dependendo da formalidade de alguns livros e/ou cursos relacionados a Ciência da Computação, é comum o uso
do termo argumentos ou parâmetros para valores que são passados para um método. Embora sejam distinções
formais na informática, precisaremos convencionar estes termos:
Um método usa parâmetros, um chamador usa argumentos. Ou seja, argumentos serão os valores que serão
passados aos métodos, podendo ser um valor como 2, ou uma string A, B, C; ou até mesmo uma referência que
aponte para um objeto. Estes argumentos serão inseridos em um parâmetro, que por sua vez não passa de
uma variável local. Uma variável com um tipo e um nome, que poderá ser usada dentro do corpo do método.
Poderíamos realizar uma pequena alteração na classe Cachorro3, para que o método latido() possua parâmetros,
referentes a quantidade de latidos a serem executados. Vejamos o exemplo:
6.1.1
EXEMPLO 1 – MODIFICANDO A CLASSE CACHORRO3 PARA POSSUIR PARÂMETROS DE LATIDOS Modificaremos as classes Cachorro3 para possuir parâmetros da quantidade de latidos a aceitar e
TestaCachorro3 para que possa enviar a quantidade de latidos a ser executada.
P á g | 25
Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004.
No exemplo anterior da classe cachorro, utilizávamos o método latido() para fazer com que uma das instâncias
criadas (Cachorro x = new Cachorro()) pudessem chamar o método e executar o latido.
UC –
Prog. Orientada a Objetos
Docente: André Luiz Silva de Moraes
3º sem – Análise e Desenvolvimento de Sistemas
Chamaremos a classe agora de Cachorro4.java
Visualizando:
OBSERVAÇÕES:
•
Na classe testadora (TestaCachorro4) chamamos o método latido() na variável de referência cao1 e
passamos como argumento do método um valor qualquer, neste caso para cada variável de referência
cao um valor de latidos;
•
Os valores informados serão os argumentos que foram passados para o método latido();
•
Por sua vez, o método latido(), em sua estrutura, possui parâmetros da quantidade de latidos, que deverão
ser sempre inteiros;
P á g | 26
Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004.
Salve a classe testadora como TestaCachorro4.java
UC –
Prog. Orientada a Objetos
Docente: André Luiz Silva de Moraes
3º sem – Análise e Desenvolvimento de Sistemas
6.2
PASSANDO MAIS VARIÁVEIS PARA MÉTODOS E RETORNANDO VALORES
Métodos retornam valores. Todos os métodos são declarados com um tipo de retorno, mas até agora foram
criados todos os métodos com um tipo de retorno void, significando que não retornam nada.
Aqui, o método está trabalhando com valores inteiros, o que significa que o chamador também deverá ser inteiro e
esperar que sejam retornados valores inteiros. Exemplificando:
6.2.1
EXEMPLO 2 – PASSANDO MAIS DE UMA VARIÁVEL PARA UM MÉTODO Criaremos duas novas classes simulando uma conta utilizando algumas variáveis. Estas variáveis trocarão valores
por cópia, típico do Java, e veremos como as duas trocam informações em sua execução.
Salve esta classe como TestaSomaNumeros.java
Resultado:
OBSERVAÇÕES:
•
Desta vez criamos uma classe SomaNumeros.java e declaramos apenas um método onde foram criadas
duas variáveis inteiras (x e y) como parâmetros.
•
Ainda, internamente foi declarada uma variável z recebendo o valor de x e y somados, note que estes
valores serão informados pelo chamador que enviará os números a serem utilizados;
P á g | 27
Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004.
Salve esta classe com o nome SomaNumeros.java
UC –
Prog. Orientada a Objetos
Docente: André Luiz Silva de Moraes
3º sem – Análise e Desenvolvimento de Sistemas
•
Ainda, o retorno deste método é apenas uma impressão de tela contendo o valor de z, que é a soma de x
e y;
•
Na classe testadora TestaSomaNumeros.java, foram declaradas duas variáveis inteiras (com nomes
diferentes), criamos uma variável de referência t ao objeto SomaNumeros e chamamos o método
somatorio;
•
O método somatorio() exige que sejam informadas as variáveis de argumento que são esperadas como
inteiros, elas serão recebidas pelos parâmetros x e y do método, calculadas e retornados com o valor
atribuído a z, visível ao usuário;
Alguns detalhes a mais:
1. Os métodos podem usar variáveis de instância para que objetos do mesmo tipo possam se comportar
diferentemente;
2. Um método pode ter parâmetros, o que significa que podemos passar um ou mais valores para ele;
3. A quantidade e o tipo dos valores que forem passados devem corresponder à ordem e tipo dos
parâmetros declarados pelo método;
5. Se um método declarar um tipo de retorno que não seja void, deve retornar um valor compatível com o
tipo declarado.
6.3
UTILIZANDO MELHOR OS PARÂMETROS E TIPOS DE RETORNO
Agora que sabemos que os parâmetros e tipos de retorno podem ser utilizados, podemos fazer uma outra
abordagem sobre o uso deles. Existem métodos comumente utilizados no Java que são denominados como
Getter e Setter, podemos visualizá-los como acessadores e modificadores.
Em outras palavras, métodos Getter (captura) e Setter (configuração), permitirão que capturemos e configuremos
normalmente valores de variáveis de instância dos objetos. A única finalidade de um método de captura é enviar,
como valor de retorno, o valor do que quer que esse método de captura específico capture.
Um exemplo disto seria:
GuitarraEletrica
cor
numCordas()
defineUso
getCor()
setCor()
getNumCordas()
setNumCordas()
getDefineUso()
setDefineUso()
Aqui estamos seguindo a convenção de nomes do Java.
Os gets e sets trabalham as informações da classe e
podem “setar” e “recuperar” os valores das variáveis.
P á g | 28
Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004.
4. Um método deve declarar um tipo de retorno, um tipo de retorno void significa que o método não retorna
nada;
UC –
Prog. Orientada a Objetos
Docente: André Luiz Silva de Moraes
3º sem – Análise e Desenvolvimento de Sistemas
6.3.1
EXEMPLO 3 – ELABORANDO UMA PROTEÇÃO AOS SEUS DADOS DE UMA CLASSE Criaremos uma classe GuitarraEletrica, esta será composta pelas variáveis de instância cor, numCordas e
defineUso. E desta vez teremos uma série de métodos, utilizados para efetuar o tráfego dos dados das suas
variáveis.
Salve a classe testadora como TestaGuitarraEletrica.class
OBSERVAÇÕES:
•
Agora o que estamos fazendo chama-se Encapsulamento. Significa que estamos ocultando o acesso
direto às informações existentes na classe.
•
Por exemplo, não mais permitiremos que os dados sejam acessados diretamente com o operador ponto
como:
P á g | 29
Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004.
Salve esta classe como GuitarraEletrica.class
UC –
Prog. Orientada a Objetos
Docente: André Luiz Silva de Moraes
3º sem – Análise e Desenvolvimento de Sistemas
o
•
dadosPessoa.altura = 0;
O que acontece é que estamos construindo métodos de configuração para todas as variáveis de instância
e encontrando uma maneira de forçarmos os outros códigos a chamarem estes métodos em vez de
acessar os dados diretamente.
6.4
ENCAPSULAMENTO COM OS MODIFICADORES PUBLIC E PRIVATE
O que precisamos fazer agora é ocultar e proteger os dados.Fazemos isto com os modificadores de acesso
public e private, o public foi utilizado em todos os métodos main até agora e em quase todas as classes que
foram desenvolvidas.
Para todos os efeitos, podemos proteger as variáveis de instância da classe através do modificador private, e com
o modificador public deixarmos acesso somente aos métodos que modificam ou recuperam as informações das
variáveis de instância.
O encapsulamento permite que possamos definir os limites de valores que são apropriados de serem
atribuídos as variáveis de instância.
P á g | 30
Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004.
Ainda assim, se tentarmos acessar os dados com o operador ponto na classe GuitarraEletrica será possível:
UC –
Prog. Orientada a Objetos
Docente: André Luiz Silva de Moraes
3º sem – Análise e Desenvolvimento de Sistemas
6.4.1
EXEMPLO 4 – MODIFIQUE A CLASSE GUITARRAELETRICA Agora a classe testadora não mais conseguirá acessar diretamente os valores das variáveis de instância utilizando
o operador ponto.
Praticamente todas as classes devem proteger as suas informações, sob pena de serem utilizados valores
inválidos para elas ou corrermos o risco de serem alteradas com valores fora do normal. Por exemplo, uma conta
de banco onde o saldo da conta for zerado, ou aumentado sem a devida situação.
P á g | 31
Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004.
Se tornarmos as variáveis da classe GuitarraEletrica privadas, veremos que ao tentar compilar a classe testadora
teremos o seguinte erro (parte dele):
UC –
Prog. Orientada a Objetos
Docente: André Luiz Silva de Moraes
3º sem – Análise e Desenvolvimento de Sistemas
6.4.2
EXEMPLO 5 – ENCAPSULANDO A CLASSE CACHORRO Agora faremos o mesmo com a classe cachorro, encapsularemos suas informações para que possam ser
validadas para serem modificadas ou acessadas externamente pelo código de outras classes:
Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004.
Esta é a classe Cachorro5.java
Esta é a classe testadora TestaCachorro5.java
OBSERVAÇÕES:
•
Qualquer local onde um valor específico puder ser usado, uma chamada de método que retorne esse tipo
poderá ser empregada;
P á g | 32
UC –
Prog. Orientada a Objetos
Docente: André Luiz Silva de Moraes
3º sem – Análise e Desenvolvimento de Sistemas
o
ƒ
Int x = 3 _+ 24;
ƒ
Int x = 3 + um.getSize();
Ainda que métodos não adicionem realmente uma nova funcionalidade, o interessante é que você pode
mudar de idéia posteriormente e mudar para tornar o método de privado para público e vice versa.
Faculdade de Tecnologia SENAC PELOTAS - Credenciado pela Portaria nº. 3.071, de 01 de outubro de 2004.
•
Ex:
P á g | 33
Download