Orientação a Objetos Paradigma Revisão • Dúvidas da aula passada? – Características de Java – Compilador vs. Interpretador. – Hello World – Tipos Primitivos – Operadores – Casts • Ok? Davi Pires {[email protected]} Trabalhando com Objetos • • • • • • Classes Métodos Atributos Construtores Objetos Pacotes Davi Pires {[email protected]} Classes • “Fôrmas” de objetos. • Define propriedades comuns a um conjunto de objetos pertencentes à classe. Classe Instanciação Davi Pires {[email protected]} Objetos ou Instâncias Classes Definindo uma classe class [NomeDaClasse] { //aqui vem o corpo da classe. } [ modificadores ] class [NomeDaClasse] { //aqui vem o corpo da classe. } Davi Pires {[email protected]} Classes • Devem estar definidas em arquivos com o mesmo nome da classe. • Tudo que você fará em Java estará dentro de uma classe. • Acostume-se com elas! Davi Pires {[email protected]} O que tem no corpo da classe? • Atributos – “Características” de um objeto daquela classe. • Construtores – Inicializadores de objetos. • Métodos – Ações passíveis de serem executadas sobre os objetos daquela classe. Davi Pires {[email protected]} Atributos • Também chamados de variáveis de instância. • Variáveis que pertencem a cada objeto. • Todo objeto tem, com valores possivelmente diferentes. • Podem ter valores padrão. Conta 1234 0,50 numero 3456 saldo 10,00 Davi Pires {[email protected]} Conta c1 Conta c2 Atributos • Exemplos: – Atributos1.java – Conta.java Davi Pires {[email protected]} Métodos • Ações passíveis de serem executadas sobre objetos de uma classe. • Podem receber parâmetros para executar sua computação. • Podem retornar valores para quem chamou o método. • Exemplo: dado o objeto c1, do tipo Conta: – c1.getSaldo(): não tem parâmetros e deve retornar o saldo da conta c1 (que é um double). – c1.creditar(3.0): credita $3,00 na conta c1. Não precisa retornar nada (a princípio). Davi Pires {[email protected]} Métodos • Assinatura de Métodos. Tipo de Retorno nomeDoMetodo ( lista de parâmetros ) Exemplo: double getSaldo () void creditar ( double valorASerCreditado ) void transferir ( double valorASerTransferido, Conta destino ) Davi Pires {[email protected]} Métodos • Lista de parâmetros – Pode ser vazia double getSaldo () • Tipo de retorno – Tipo void: indica que não o método não retorna nada. void creditar ( double valorASerCreditado ) • Parâmetros só são visíveis dentro dos métodos. • Variáveis locais. Davi Pires {[email protected]} O comando ‘return’ • Em métodos com tipo de retorno diferente de void, precisamos retornar um valor. • O valor retornado é especificado usando o comando return; • Após atingir a cláusula return, a execução do método é interrompida. Davi Pires {[email protected]} Como é mesmo o corpo de uma classe? • Já temos bastante coisa para preencher o corpo de uma classe agora. • Veja em ContaComMetodos.java o que você já sabe fazer. • Faça os 2 exercícios mostrados no arquivo. • Compilem o arquivo [use o comando javac] para checar se há erros. Davi Pires {[email protected]} Enfim, Objetos! • Java é Orientada a Objetos. – O que é isso? • O que é um paradigma? •pa.ra.dig.ma: s. m. –1. Modelo, protótipo. –2. Gram. Conjunto de fórmulas de palavras variáveis que servem de modelo para as demais do mesmo grupo mórfico. Davi Pires {[email protected]} Objetos • Programação orientada a objetos (POO) – quer dizer que tudo que você fará serão objetos. – Classes são tipos. – Objetos são variáveis desse tipo. – Abstrações de objetos do mundo real são obtidas através da instanciação de objetos de classes que representem esses objetos. – É a maneira como você analisa um problema real. – É uma maneira de ver o mundo. Davi Pires {[email protected]} Orientação a Objetos • “Numa biblioteca são guardados livros. Uma (ou mais) bibliotecárias organizam os livros em prateleiras. Os usuários podem alugar os livros. Ao fim do prazo estabelecido, devem retorna-lo à Biblioteca entregando-o à bibliotecária. Usuários VIP podem alugar mais de 3 livros por mês.” Davi Pires {[email protected]} Composição • Objetos como atributos de objetos. class Data { int dia, mes, ano; } class Usuario { // ... Data dataDeNascimento; } Davi Pires {[email protected]} Composição • Permite reutilização de código. • Modularização. • Escreve e testa – se funcionar, pode ser usado em outras partes do projeto. • Isolamento dos bugs em partes separadas do projeto facilita manutenção. • Enfim, ALTA QUALIDADE DE SOFTWARE PODE SER ATINGIDA COM POO. Davi Pires {[email protected]} Instanciando objetos • O comando new: – Cria um novo objeto da classe especificada e inicializa seus atributos. – Pode receber parâmetros, desde que definido dentro da classe. • Construtores – Métodos especiais dentro das classes especificando como devem ser inicializados os atributos. Davi Pires {[email protected]} Construtores • Não têm tipo de retorno. • Têm o mesmo nome da classe. class Data { int dia, mes, ano; Data (int a, int b, int c) { dia = a; mes = b; ano = c; } } Davi Pires {[email protected]} Instanciando objetos • Exemplo: – Usando um construtor padrão: • ContaExemplo.java – Usando um construtor específico. • ContaExtendida.java Davi Pires {[email protected]} A palavra this • Refere-se sempre ao objeto sobre o qual o método foi chamado. • Num construtor, refere-se ao objeto que está sendo instanciado. Davi Pires {[email protected]} A palavra this • Geralmente é dispensável, mas facilita a leitura do código. class Data { int dia, mes, ano; Data (int a, int b, int c) { this.dia = a; this.mes = b; this.ano = c; } } Davi Pires {[email protected]} A palavra this • Exemplo – ContaThis.java Davi Pires {[email protected]} O valor null • Variáveis cujos tipos são objetos são por default inicializadas com valor null. • Não é permitido acessar métodos ou atributos de objetos null. • NullPointerException! Davi Pires {[email protected]} Sobrecarga de Construtores • Classes podem ter vários construtores. • Cada um com uma lista diferente de parâmetros. • Exemplos: – ContaConstrutores.java Davi Pires {[email protected]} E agora, o corpo da classe...? • A nossa classe Conta agora pode ser extendida para incluir construtores. • Assim ela poderá ser propriamente instanciada. • Já é uma boa classe para ser incluída num projeto real. – Teste antes! Davi Pires {[email protected]} Exercício • Escolha um restaurante que você visite com alguma freqüência. Imagine como você modelaria um software para este restaurante. • Quanto maior a automatização, mais $! • E também maior a complexidade! • Cuidado! Davi Pires {[email protected]} Exercício • Escrevam essa modelagem da forma que quiserem – Caixas e setas, texto, UML... • Duplas, se quiserem. • Escrevam pelo menos 2 classe em Java • Pensem em Objetos! -djfskjdf -jkbsdkfjsjdfksbdfksdjfsfksjdbks fbdksjfskkjfsgjdsfkgbjdslçkfjgbç sdkfjgbçdksjfbgçkdfsjgbsdkç -kjdbfsk -sdjsfkgbdlçsifgbdfgjsdfkgsgfkd sfgbdslkfjgbldskjfgbsdkljjgbdkfj gbdkfjgbdfjgbsçfogbsdçfkgjsdç gksdffsdlfknsdlfsfd Davi Pires {[email protected]} Este trabalho está licenciado sob uma Licença Creative Commons Atribuição-Uso Não-Comercial-Compatilhamento pela mesma licença. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nc-sa/2.0/br/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.