PROGRAMAÇÃO ORIENTADA A OBJETOS COMPORTAMENTOS - Observações •O próprio objeto realiza operações de consulta ou alteração dos valores dos seus atributos •Essas operações são definidas em seus métodos •Os métodos também são utilizados para interações entre os objetos de uma aplicação (TROCA DE MENSAGENS) •Por exemplo, quando um cliente requisita um saque através de um caixa eletrônico do banco, o objeto que representa o caixa eletrônico deve interagir com o objeto que representa a conta do cliente •NÃO ESQUEÇA: AS TAREFAS DE UM OBJETO SÃO DEFINIDAS EM SEUS MÉTODOS PROGRAMAÇÃO ORIENTADA A OBJETOS COMPORTAMENTOS (MÉTODOS) – COMO FUNCIONAM Considere uma aplicação simples que possui 03 classes: A classe principal (Principal.java), Recibo.java e Cheque.java. A classe principal “chama” as outras duas classes, que são utilizadas para imprimir, respectivamente, recibos e cheques que, além de outras informações, imprimirão o valor informado por extenso. No entanto, o programador não necessita codificar duas vezes a mesma rotina para escrever o valor por extenso para essas duas classes. Basta escrever uma vez (em algum lugar) e referenciar o mesmo código para imprimir os respectivos valores por extenso. Assim, pode-se utilizar um método que verifica o valor informado e retorna esse valor por extenso em uma String. Observe a ilustração a seguir: Recibo.java Principal.java d c a b a b extenso(); c d Cheque.java PROGRAMAÇÃO ORIENTADA A OBJETOS COMPORTAMENTOS (MÉTODOS) – COMO FUNCIONAM (cont.) Assim, o método extenso() deverá ficar em alguma classe específica. Essa classe, então é referenciada pelas classes Recibo.java e Cheque.java. Esse método pode estar definido na classe principal ou em outra classe. Considerando que esse método esteja em outra classe, denominada de Util.java, então temos: class Util { String extenso(float valor) Tipo do método extenso { //codigo do método extenso ...... String retornoExtenso=“.......”; Retorno do método extenso return retornoExtenso; } Note que o método extenso possui um tipo String na sua declaração (a String retornoExtenso). A String retornada é a variável retornoExtenso, definida dentro do método Quando um método não retorna nenhum conteúdo, ele terá o tipo void e não terá nenhum comando return em seu interior. Exemplo: Possui 2 parâmetros, void soma (int a, int b) {............} separados por vírgula O método soma não tem retorno, pois seu tipo é void PROGRAMAÇÃO ORIENTADA A OBJETOS COMPORTAMENTOS (MÉTODOS) – COMO FUNCIONAM (cont.) Assim, as classes Recibo.java e Cheque.java acessam o método extenso() da classe Util.java. Observe a ilustração apenas com a classe Recibo.java. Class Recibo{ float valorEmReal= ..... //Recebe digitação do valor //usuário digita valor e este é armazenado na variável // valorEmReal Util u = new Util(); String valorExtenso = u. extenso(valorEmReal) ; //trecho de codigo que imprime o recibo usando a variável valorExtenso } class Util { String extenso(float valor) { //codigo do método extenso ...... String retornoExtenso=“.......”; return retornoExtenso; } PROGRAMAÇÃO ORIENTADA A OBJETOS COMPORTAMENTOS (MÉTODOS) – COMO FUNCIONAM (cont.) Um método pode ter ou não parâmetros. O método extenso() possui um parâmetro do tipo float. Assim, ele recebe um valor (que também deve ser do mesmo tipo). O método Extenso() retorna uma String porque ele foi definido como String extenso(...); Por isso, quando um método é definido com o tipo void, como void nome_metodo, ele não efetua nenhum retorno. Class Recibo{ float valorEmReal= .....// Recebe digitação do valor //usuário digita valor e este é armazenado na variável // valorEmReal Util u = new Util(); String valorExtenso = u. extenso(valorEmReal) ; //trecho de codigo que imprime o recibo usando a variável valorExtenso } class Util { String extenso(float valor) { //codigo do método extenso ...... String retornoExtenso=“.......”; return retornoExtenso; } PROGRAMAÇÃO ORIENTADA A OBJETOS COMPORTAMENTOS (MÉTODOS) – COMO FUNCIONAM (cont.) Para que a classe Recibo.java acesse o método da classe Util.java é necessário instanciar Util.java na classe Recibo.java. Assim, criou-se o objeto u que é uma instância da classe Util.java. Util u = new Util(); Class Recibo{ float valorEmReal= .....// Recebe digitação do valor //usuário digita valor e este é armazenado na variável // valorEmReal Util u = new Util(); String valorExtenso = u. extenso(valorEmReal) ; //trecho de codigo que imprime o recibo usando a variável valorExtenso } class Util { String extenso(float valor) { //codigo do método extenso ...... String retornoExtenso=“.......”; return retornoExtenso; } Objeto u acessa o método extenso PROGRAMAÇÃO ORIENTADA A OBJETOS Exercícios 1. Elabore uma aplicação que, através de orientação a objetos, solicite pelo teclado o nome e as três notas de dois alunos, sendo que cada objeto deve efetuar e escrever o cálculo da média aritmética das três notas informadas. 2. Elabore uma aplicação que, através de objetos específicos, solicite pelo teclado a altura e a largura de três retângulos, sendo que cada objeto deve calcular e escrever a sua respectiva área e seu respectivo perímetro. Nota: Os métodos devem ser específicos em cada objeto: um método para entrada de dados, outro cada cálculo e outro para escrita dos resultados PROGRAMAÇÃO ORIENTADA A OBJETOS INSTANCIANDO OBJETOS •Um método construtor possui o mesmo nome da classe •O nome do método construtor se inicia com letra maiúscula •Um método construtor é responsável por criar objetos Instanciação de objetos – Formato nomeDaClasse identificador = new métodoConstrutor() • Quando uma classe não possui um método construtor, a linguagem Java utiliza o método construtor da classe “responsável” por todas as classes Java, denominada de Object. Neste caso, todos os atributos da classe são inicializados com valores padrão (tipos numéricos com zero (0), String com null, booleanos com false). PROGRAMAÇÃO ORIENTADA A OBJETOS INSTANCIANDO OBJETOS – cont. public INDICA QUE O ELEMENTO PODE SER ACESSADO POR QUALQUER CLASSE DE UMA APLICAÇÃO. É UM TERMO USADO PARA DAR VISIBILIDADE AOS MÉTODOS E ATRIBUTOS DE UMA CLASSE. visibilidades Public Private protected A LINGUAGEM JAVA PERMITE A CRIAÇÃO DE VÁRIOS MÉTODOS COM O MESMO NOME, DESDE QUE TENHAM OU PARÂMETROS DE TIPOS DIFERENTES, OU QUANTIDADE DIFERENTE DE PARÂMETROS PROGRAMAÇÃO ORIENTADA A OBJETOS INSTANCIANDO OBJETOS – cont. public INDICA QUE O ELEMENTO PODE SER ACESSADO POR QUALQUER CLASSE DE UMA APLICAÇÃO. É UM TERMO USADO PARA DAR VISIBILIDADE AOS Denomina-seMÉTODOS de E ATRIBUTOS DE UMA SOBRECARGACLASSE DE . MÉTODOS quando se tem mais de um método com o mesmo nome em uma classe visibilidades Public Private protected A LINGUAGEM JAVA PERMITE A CRIAÇÃO DE VÁRIOS MÉTODOS COM O MESMO NOME, DESDE QUE TENHAM OU PARÂMETROS DE TIPOS DIFERENTES, OU QUANTIDADE DIFERENTE DE PARÂMETROS PROGRAMAÇÃO ORIENTADA A OBJETOS Método Construtor •O método construtor é responsável pela criação de objetos de uma classe •Quando uma classe permite a criação de objetos ela poderá ter um, nenhum ou vários métodos construtores •O método construtor possui o mesmo nome da classe, iniciando-se com letra maiúscula •Caso um objeto seja criado de uma classe sem método construtor, a criação do objeto se dará pelo método construtor da classe que é a super classe de todas as classes, que é a classe Object •Portanto, a classe Object é a super classe de todas as classes •Assim, se uma classe não possuir um método construtor, os seus objetos serão criados através da classe Object •Neste caso, não esqueça que os valores dos atributos serão os valores padrões: 0 para numéricos, null para String e false para boolean PROGRAMAÇÃO ORIENTADA A OBJETOS Método Construtor - Exemplo Carro objCarroX = new Carro(1500); Carro objCarroY = new Carro(1600,”GM”); EXEMPLO DE INSTÂNCIAS EXEMPLO EM UM PROGRAMA INSTANCIANDO UM OBJETO PROGRAMAÇÃO ORIENTADA A OBJETOS Exercício - Metódos Crie um novo projeto e acrescente nele a classe Carro do exercício de fixação. Em seguida, insira o atributo velocidade na classe Carro, do tipo int. Crie dois métodos na classe Carro: a)O primeiro método, com o nome alterarVelocidade, deve possuir um parâmetro inteiro, sem retorno. Deve aumentar a velocidade do carro com o valor passado como parâmetro. A velocidade não deve ultrapassar 250 km/h. Caso isso ocorra, ela deve retornar a 60. Caso a velocidade final seja negativa, esta também deve retornar a 60; b)O segundo método, com o nome retornarVelocidade, sem parâmetro, com retorno inteiro, deve retornar o valor da velocidade. Copie o mesmo programa Principal do exercício de fixação para esse novo projeto e altere-o de tal forma que ele possa, no seu final, antes da apresentação dos resultados, chamar o método alterarVelocidade, várias vezes (preferencialmente), passando valores para o objeto Carro. Acrescente a apresentação do valor da velocidade no final do programa. PROGRAMAÇÃO ORIENTADA A OBJETOS EXERCÍCIO DE FIXAÇÃO Considere o domínio de uma universidade, onde se tem o aluno como uma de suas diversas entidades. Assim, elabore um programa Java que permita criar quatro objetos da classe Aluno [atributos: nome, cpf(String), matrícula(int), curso(int), local de nascimento(String)] sendo que cada um deve ser criado com um construtor distinto, sendo que o código do curso dependerá do local do nascimento informado. Tem-se, no mínimo, 5 locais de nascimento para os alunos que frequentam a respectiva universidade. Escrever cada um dos atributos de cada um desses quatro objetos. PROGRAMAÇÃO ORIENTADA A OBJETOS HERANÇA SIMPLES Mecanismo que permite a uma classe, denominada de SUBCLASSE ou CLASSE FILHA, herdar todos os atributos e métodos de outra classe, denominada de SUPERCLASSE ou CLASSE MÃE PROGRAMAÇÃO ORIENTADA A OBJETOS HERANÇA SIMPLES – cont. A subclasse pode ter outros atributos e outros métodos, tornando-a uma ESPECIALIZAÇÃO. A superclasse é uma GENERALIZAÇÃO PROGRAMAÇÃO ORIENTADA A OBJETOS HERANÇA SIMPLES – cont. ESQUEMA PROGRAMAÇÃO ORIENTADA A OBJETOS HERANÇA SIMPLES – cont. EXEMPLO PROGRAMAÇÃO ORIENTADA A OBJETOS HERANÇA SIMPLES – cont. EXEMPLO Essa estrutura de classes é denominada de HIERARQUIA DE CLASSES PROGRAMAÇÃO ORIENTADA A OBJETOS HERANÇA SIMPLES – CODIFICAÇÃO JAVA Representa a herança no código PROGRAMAÇÃO ORIENTADA A OBJETOS HERANÇA SIMPLES – CODIFICAÇÃO JAVA Note que Gerente tem gratificação Logo, salário de Gerente é diferente: É composto por salário + gratificação Note o import java.util.Date PROGRAMAÇÃO ORIENTADA A OBJETOS HERANÇA SIMPLES – CODIFICAÇÃO JAVA getSalario chama a si mesmo infinitas vezes PORQUE? Crie (SOBRESCREVA) um outro método getSalario em Gerente Também não é a solução. ERRO Nota: salario é private PORQUE? Solução ? PROGRAMAÇÃO ORIENTADA A OBJETOS HERANÇA SIMPLES – CODIFICAÇÃO JAVA O QUE FAZER ENTÃO? O IDEAL Usar super(). Se for usado, super deve ser a primeira instrução do construtor SOLUÇÃO Observe o valueOf PROGRAMAÇÃO ORIENTADA A OBJETOS HERANÇA – NÃO ESQUEÇA!! Toda subclasse tem um relacionamento É UM com sua superclasse Exemplos: Um Caminhão É UM tipo de Transporte Um Funcionario É UM tipo de Pessoa