Baixe o app para aproveitar ainda mais
Prévia do material em texto
CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos CONTEÚDO PROGRAMÁTICO Unidade I - Conceitos Fundamentais de Programação Orientada a Objetos 1. – Histórico da linguagem Java; 2. – Definição de Classes e Objetos; 3. – Comandos básicos da linguagem Java. Unidade II - Classes e Objetos 1. – Definição e implementação de classes; 2. – Atributos e métodos; 3. – Membros privados e membros públicos; 4. – Criação de objetos como instâncias de classes. Unidade III - Métodos 1. – Métodos-membro, acessadores e modificadores (getters & setters); 2. – Funções construtoras; 3. – Sobrecarga. Unidade IV – Herança e Polimorfismo 1 – Derivação de classes; 2 – Relações entre classes-base e classes derivadas; 3 – Herança; 4 - Sobreposição de métodos; 5 – Classes abstratas; 6 – Interfaces de Objetos. Unidade V - Entrada e Saída 1 – Processamento de arquivos; 2 – Classes e objetos stream; 3 – Leitura e gravação em arquivos-texto e binário; 4 – Leitura e gravação de objetos. 1 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Unidade VI - Exceções 1 – Tratamento de erros 2 – Capturando exceções Unidade VII - Conceitos Avançados 1 – Assertions; 2 – Garbage Collection; 3 – Classes fundamentais do pacote java.lang; 4 – O framework Collections. Unidade VIII - Threads 1 – Classe Threads e Métodos; 2 – Ciclo de Vida de um Thread; 3 – Prioridades e Agendamentos; 4 – Sincronização; 5 – Relacionamento Produtor/Consumidor; 6 – Threads Daemon e a Interface Runnable; 7 – Multi-threads. 2 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos UNIDADE – I HISTÓRICO DA LINGUAGEM JAVA Na busca de Inovações tecnológicas a Sun em 1992 formou um time que, liderado por James Goslin trabalharam em um projeto para comunicar computadores com outros aparelhos eletrônicos. Criaram um interpretador para trabalhar com diversos aparelhos tais como: videocassete, TV e aparelhos de TV a cabo). Mas a ideia não funcionou pois exigia recursos avançados para a época. Com o aparecimento da Internet, a Sun resolveu usar sua ideia para rodar aplicações dentro dos browsers. • Grande quantidade de sistemas operacionais e browsers • Na época os browsers só renderizavam HTML • Criação das applets Assim: • O Java nasceu com um objetivo (Interoperabilide entre aparelhos eletrônicos) • Foi lançado com outro objetivo (Interoperabilide entre browsers e plataformas) • Firmou-se como tecnologia de desenvolvimento de aplicações no lado servidor (mais forte) • Em 2009 a Oracle comprou a Sun Microsystems e passou a cuidar do desenvolvimento da linguagem Java JAVA VIRTUAL MACHINE - JVM A Máquina Virtual é uma camada intermediária entre o sistema operacional e a aplicação. A aplicação se comunica apenas com a JVM e não com o sistema operacional, ou seja não ficam atreladas a um sistema operacional específico. 3 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos • Isolamento total da aplicação • Como tudo passa pela JVM, é possível obter métricas e trabalhar com otimização • Garbage collection • Princípio WORA – “Write Once, Run Anywhere” EVOLUÇÃO DAS VERSÕES DO JAVA • Java 1.0 e 1.1 – Primeiras versões • Java 2 (Java 1.2) – Aumento significativo no tamanho da API • Java 2 (Java 1.3 e 1.4) – Melhorias na API – Java 1.3.1, 1.4.1, 1.4.2, etc. • Java 5 (Java 1.5) – Diversas mudanças significativas 4 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos • Java 6 (Java 1.6) – Mais recursos na API – Muitas melhorias de performance da JVM • Java 7 – Novas APIs – Novos recursos na linguagem – Melhorias internas na JVM • Java 8 – Nova API de data e hora – Suporte a expressões lambda RAMIFICAÇÕES DO JAVA • Java SE (Standard Edition) – Base do Java – Ambiente de execução e bibliotecas comuns • Java EE (Enterprise Edition) – Aplicações corporativas e internet • Java ME (Micro Edition) – Dispositivos móveis 5 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos DEFINIÇÃO DE CLASSES E OBJETOS Classe é a representação de um tipo de dados, é uma estrutura. É definida pelo programador. Objeto é a instância de uma classe, ou seja é criado com base em uma estrutura (classe) COMANDOS BÁSICOS – Primeiro programa Programa simples que imprime a mensagem “Olá Mundo” j Ao ser executada, a máquina virtual (JVM) procura pelo bloco main declarado em sua classe. Esse é um bloco especial (ou método, como passaremos a chamar a partir de agora). Suas aplicações Java, em geral, vão possuir apenas um método main , um único ponto de partida. Quando rodamos o comando java passando o nome de nossa classe, dissemos para a JVM executar todo o conteúdo que estiver dentro do corpo (das chaves) desse método. Em nosso exemplo, foi uma simples instrução de impressão, o System.out.println("Olá Mundo") . Há ainda como passar argumentos para o método main ao executar um programa Java. O parâmetro String[] args que o método recebe dentro de seus parênteses será o responsável por armazenar esses argumentos para que possam ser acessados em nosso código. Mas, afinal, o que é esse String[] ? Um array de String em Java, porém, por enquanto não estamos interessados em entender um array e todos os seus detalhes, tudo o que precisamos saber é que ele vai armazenar uma multiplicidade de Strings. 6 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Vamos alterar a nossa classe para: COMANDOS BÁSICOS (Antes da OO e Utilizando a IDE Eclipse) Em java, toda variável tem um tipo e um nome Com isso a variável é declarada e passa a existir a partir desse momento, podendo ser utilizada, primeiro atribuindo valores. É possível fazer uso de operadores aritméticos: +, -, *, e / 7 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos 8 Tipos primitivos do java. Um tipo de dado primitivo é pré- definido pela linguagem e é chamado por uma palavra reservada. Operadores de comparação 8 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Operadores Lógicos utilizados em estrutura de repetição e de controle Operadores Importantes Operadores de Incremento e Decremento 9 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Casting – Alguns valores são incompatíveis se você tentar fazer uma atribuição direta. Enquanto um número real costuma ser representado em uma variável do tipo double, tentar atribuir ele a uma variável int não funciona. Ex: double d = 3.1415; int i = d; // não compila O mesmo ocorre no seguinte trecho: int i=3.1415; Nem o seguinte trecho compila double d=5; //double pode conter números inteiros int i=d; //não compila Casting Implícito 10 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Casting Implícito 11 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Casting Explícito Estrutura If-Else: - Sintaxe básicaif (<condição_booleana>) { <código_se_condição_verdadeira>; } - Opcionalmente, pode existir uma cláusula else if (<condição_booleana>) { <código_se_condição_verdadeira>; } else { <código_se_condição_falsa>; } A condição booleana pode ser qualquer expressão cujo resultado seja true ou false int x = 50; if (x > 30) { System.out.println("Número maior que 30"); } else { System.out.println("Número menor que 30"); } 12 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Outra possibilidade é utilizar o operador ternário para substituir o if- else: int x = 50; boolean r; if (x > 30) { r = true; } else { r = false; } --→>> int x = 50; boolean r; r = x > 30 ? true : false; Estruturas de Controle: switch int i = 1; switch (i) { case 1: System.out.println("Valor = 1"); break; case 2: System.out.println("Valor = 2"); break; default: System.out.println("Valor não reconhecido"); } Estruturas de Controle: while Repete determinado código enquanto uma condição for verdadeira A condição é testada no início do bloco int idade = 15; while (idade < 18) { System.out.println(idade); idade = idade + 1; } 13 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Estruturas de Controle: do-while Semelhante ao while A condição é testada no fim do bloco int contador = 10; do { System.out.println(contador); contador = contador + 1; } while (contador < 20); Estruturas de Controle: for Semelhante ao while , mas possui seção para declaração de variáveis para o loop for (int i = 0; i < 10; i++) { System.out.println(i); } break Permite forçar a saída de um loop for (int i = 0; i < 10; i++) { if (i == 5) { break; } System.out.println(i); } Estruturas de Controle: continue Força o loop a executar o próximo passo for (int i = 0; i < 10; i++) { if (i == 5) { continue; } System.out.println(i); } Comentando Código em Java Comentários em uma linha (//) //exemplo de comentário no código em apenas uma linha Comentários em múltiplas linhas (/* */) /* Exemplo de comentário no código onde mais de uma linha pode ser utilizada */ 14 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Exercício 1 - Um aluno tirou notas 8.5, 7.5 e 6.0 em provas que tinham peso 3, 2 e 5, respectivamente. Escreva um programa que imprima a média do aluno. 2 - Neste exercício, você deve completar 4 tarefas: a. Imprima todos os números inteiros de 10 a 25 utilizando uma estrutura de repetição. b. Imprima a soma dos números de 1 a 100, pulando de dois em dois (1, 3, 5, 7, etc.). c. Começando em 0, imprima os números seguintes, enquanto a soma dos números já impressos for menor que 100. d. Imprima a tabuada do 9 (até o décimo valor). 3 - Escreva um programa que imprime na saída os valores assumidos por x . Esta variável x deve iniciar com algum valor escolhido por você. Se x for par, x deve receber o valor dele mesmo somado com 5. Já se x for ímpar, x deve receber o valor dele multiplicado por 2. O programa termina assim que x for maior que 1000. Por exemplo, para x = 10 , a saída deve ser: 15, 30, 35, 70, 75, 150, 155, 310, 315, 630, 635, 1270 . Crie este programa primeiro usando a estrutura de controle if- else e depois usando a estrutura de controle switch . 4 - Verifique a validade de uma data e mostre uma mensagem na tela dizendo se a data é válida ou inválida. Deve haver três variáveis para armazenar esta data: uma para o dia, outra para o mês e outra para o ano. Considere que fevereiro pode ter somente 28 dias. 5 - Crie uma aplicação que possibilita a entrada via console de um conjunto de notas de um aluno. Assim que -1 for informado como nota, calcule a média das notas informadas anteriormente e mostre na tela. Caso a nota do aluno seja inválida, mostre uma mensagem na tela solicitando uma nova nota. A entrada via console deve ser feita utilizando a classe Console, fornecida pelo professor. Copie o arquivo Console.java para dentro do seu projeto e você poderá utilizá-la. Para ler uma nota do teclado, utilize o seguinte código: double nota = Console.readDouble(); Após a digitação da nota seguida de ENTER, o valor digitado será armazenado na variável nota. 15 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos UNIDADE – II ORIENTAÇÃO A OBJETOS Esse paradigma existe desde a década de 70, mas foi depois do surgimento do Java que ficou bastante famoso e que passou a ser levado mais a sério. Se você já está acostumado com algum outro paradigma, esse é o momento de abrir a sua mente. Repare que esse é um paradigma totalmente diferente, você precisará pensar de maneira diferente e escrever seu código de outra forma. Imagine escrever um programa que fará o tratamento das informações de um livro. Agora você quer saber quanto em livros você tem em estoque, ou ainda, você quer listar todas as informações dos livros como: ISBN, Titulo, Autor, Editora, Páginas, Valor, etc.. O grande problema do paradigma procedural é que não existe uma forma simples de conectar todos esses elementos, já na orientação a objetos podemos fazer isso de um jeito muito simples! Assim como no contexto real, podemos criar um objeto para representar tudo o que um livro tem e o que ele faz. A O.O vai te ajudar em muito em se organizar e escrever menos, além de concentrar as responsabilidades nos pontos certo, flexibilizando sua aplicação Programação Procedural – Problemas – Mudança de requisitos na aplicação – Mudança de desenvolvedor – Mesmo código em vários lugares Orientação a Objetos – Benefícios – Escrever menos código – Concentrar responsabilidades nos locais certos – Flexibilizar a aplicação – Encapsular lógica de negócio – Polimorfismo (variação do comportamento) Classes e Objetos Uma classe é apenas um molde. Uma especificação que define para a máquina virtual o que um objeto desse tipo deverá ter e como ele deve se comportar. Em uma livraria poderá ter milhares de livros (objetos), mas existirá apenas uma classe Livro (molde). Cada objeto que criarmos do tipo Livro terá seus próprios valores, ou seja, cada 16 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos livro terá o seu próprio nome, sua descrição, um valor e um número de ISBN. - Uma Classe representa um tipo de Dados. - É uma estrutura, é definida pelo programador. Possui Atributos, que são: suas características, representados por substantivos. Possui Métodos, que são: as operações que é capaz de realizar, representados por verbo 17 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Uma classe representa um tipo de dados, O objeto é a “instância” de uma classe; Declarar Classe no Java Declarar Métodos e Atributos 18 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos UML – Diagrama de Classe Assinatura de Um método Sobrecarrega de Método Sobrecarregar um método significa criar outros métodos com o mesmo nome, mas com assinatura diferente 19 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Criando e Manipulando Objetos Objetos e Referência - Uma variável cujo tipo é uma classe não guarda o objeto diretamente; - A variável guarda uma referência ao objeto; - Onew aloca uma área de memória e retorna a referência da área de memória alocada; - As variáveis declaradas em métodos são criadas numa área de memória chamada stack; - Os objetos são criados numa área de memória chamada heap; 20 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Como funciona a Stack Como funciona a Heap 21 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Garbage Collector - Serviço da JVM que executa em segundo plano; - Procura objetos no heap que não são mais utilizados pela aplicação e os remove; - Não pode ser controlado pelo desenvolvedor; Exemplo Cadastro de Livros 1 – Cadastro 2 – Teste na referência com Autor 3 – Teste na referência com dois objetos do tipo Autor 22 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Exercício 1 - Crie as classes Relogio e Ponteiro e escreva um método main() para treinar a chamada aos métodos e atributos. Atributos da classe Relogio: ponteiroHora (tipo Ponteiro) ponteiroMinuto (tipo Ponteiro) ponteiroSegundo (tipo Ponteiro) Métodos da classe Relogio: acertarRelogio(int, int, int): Acerta o relógio, posicionando adequadamente cada ponteiro do relógio. Os parâmetros passados são hora, minuto e segundo. lerHora(): retorna a hora atual do relógio. lerMinuto(): retorna o minuto atual do relógio. lerSegundo(): retorna o segundo atual do relógio. Atributos da classe Ponteiro: posicao(int): indica em qual posição está o ponteiro (1, 2, 3, 4, etc.) 2 - Crie a classe Fracao, que representa uma fração matemática. Esta classe deve ser capaz de armazenar o numerador e o denominador da fração. Ela ainda deve ter métodos que recebem uma fração como parâmetro, multiplicam ambas as frações, e retornam uma nova fração como resultado. Crie um programa simples que instancia duas frações, define seus valores, calcula o valor da multiplicação entre elas e mostra o resultado. 3 - Crie classes que representam as figuras geométricas: Triangulo, Quadrado, Circunferencia e Trapezio. Cada uma destas classes deve ter um método para calcular a sua área, com a seguinte assinatura: double calcularArea(). Note que o método calcularArea() não recebe parâmetros. Portanto todos os dados necessários devem ser armazenados no objeto da classe em forma de atributos para depois serem utilizados pelo método. 23 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos As fórmulas para p cálculo são as seguintes: 4 - Observe uma descrição sobre o que cada método de cada classe faz: Crie uma aplicação que instancia uma turma, três alunos na turma e as duas provas para cada aluno. Defina também notas para as provas. A aplicação deve mostrar mensagens informando a média de cada aluno e a média geral da turma. 24 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Para a definição das notas, utilize as seguintes informações: 25 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos UNIDADE – III Métodos Modificadores de Acesso Os modificadores são utilizados para restringir o acesso a elementos de uma classe, atributos e métodos. Inicialmente vamos estudar 2 modificadores: private: visível apenas para a classe que o declarada public: visível a todas as classes Visibilidade dos Atributos e Métodos Marcar um atributo ou método como private esconde o atributo de quem usa a classe. É interessante marcar métodos como private quando este é um método auxiliar da classe, que não deve ser acessível externamente Ex: – Atributos são declarados como private – Métodos são declarados como public • Esta abordagem faz sentido, já que o ideal é que objetos colaborem através de troca de mensagens (chamadas de métodos), e não através da manipulação direta de atributos 26 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Encapsulmento Encapsular é esconder detalhes de funcionamento do programa. Métodos Getters e Setters Quando os atributos são declarados como private , getters e setters podem ser usados Getters: usados para expor os valores de atributos. Setters: usados para alterar os valores de atributos. Protegem os atributos. Evitam a mudança de código em vários lugares. Não utilize getters e setters quando não for necessário 27 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Assinatura do Getters e Setters Construtores O construtor de uma classe é chamado toda vez que um objeto da classe é instanciado. O construtor possui o mesmo nome da classe. public class SalaDeAula { public SalaDeAula() { conteúdo } } //Invoca o construtor SalaDeAula s = new SalaDeAula(); Quando o construtor não é fornecido, o Java fornece um construtor padrão (sem parâmetros). Construtores podem receber parâmetros da mesma forma que métodos. public class SalaDeAula { private int numAlunos; public SalaDeAula(int numAlunos) { this.numAlunos = numAlunos; } } //Invoca o construtor SalaDeAula s = new SalaDeAula(20); 28 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Sobrecarga de Construtores Atributos e Métodos Estáticos • Algumas vezes, atributos e/ou métodos podem não estar atrelados a um objeto específico, mas sim à classe • Atributos ou métodos da classe são assim definidos através do modificador static . O acesso é feito utilizando diretamente a classe. Não é necessário criar um objeto: String banco = ContaBancaria.getBanco(); 29 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Criação de Constante Atributos estáticos são uma forma bastante usada para criar constantes no Java Bloco Static Uma classe pode ter um bloco static, o qual será executado quando a classe é referenciada pela primeira vez – Inicializar atributos estáticos – Executar um código antes que a classe seja utilizada 30 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Exercício 1 - Crie uma classe Lampada que possui um atributo ligada, o qual indica se a lâmpada está ligada ou desligada. Ao construir uma lâmpada, o estado dela (ligada ou desligada) deve ser fornecido. Para ligar e desligar a lâmpada, os métodos ligar() e desligar() devem ser chamados, respectivamente. Aliás, esta é a única forma de alterar o estado da lâmpada, já que o atributo ligada não deve ser visível fora da classe. A lâmpada também deve possuir um método imprimir(). Quando chamado, ele mostra as mensagens “ Lâmpada ligada ” ou “ Lâmpada desligada ”, dependendo do estado atual. Construa uma aplicação que cria uma lâmpada ligada, muda o estado dela e também imprime o estado atual após cada chamada aos métodos ligar() e desligar(). 2 - Crie uma classe Data que possui dois construtores. O primeiro recebe um dia, mês e ano. O segundo, além destas informações, recebe também uma hora, minuto e segundo (a hora fornecida deve estar entre 0 e 23). É importante que este segundo construtor invoque o primeiro para evitar a duplicação de código. Os construtores devem armazenar os dados fonecidos como parâmetrosem atributos privados. Estes atributos devem ter métodos getters associados, que irão expor os valores para códigos externos à classe. A classe Data deve ter também um método imprimir() utilizado para imprimir a data e a hora representados pelo objeto. Este método recebe como parâmetro o formato de hora que deve ser utilizado para imprimir as horas (12 ou 24h). Se o objeto foi construído sem informação de horário, este parâmetro não afeta a impressão. Os formatos da hora são do tipo int, mas devem ser representados por duas constantes na classe Data: FORMATO_12H e FORMATO_24H. Para entender melhor o funcionamento do método imprimir(), observe como ele deve se comportar em diversas situações: 31 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos UNIDADE IV A herança é um mecanismo que permite que uma classe possa herdar o comportamento de outra classe, ao mesmo tempo em que novos comportamentos podem ser estabelecidos A vantagem da herança é agrupar coisas comuns para poder reaproveitar código 32 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos O MODIFICADOR PROTECTED Sobrescrita De Métodos Técnica também conhecida como overriding Quando uma classe herda de outra, ela pode redefinir métodos da superclasse, isto é, sobrescrever métodos: – Os métodos sobrescritos substituem os métodos da superclasse – A assinatura do método sobrescrito deve ser mesma do método original 33 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos 34 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Usando o super O método que foi sobrescrito pode ser acessado pelo método que o sobrescreveu através da palavra-chave super class Orelhao extends Telefone { public void telefonar() { super.telefonar() // chama o método as superclasse } } Polimorfismo É a capacidade que um método tem de agir de diferentes formas, dependendo do objeto sobre o qual está sendo chamado. Quando ocorre a chamada de um método, a JVM decide qual método invocar dependendo do objeto instanciado na memória Ex: 35 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos 36 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos O Operador Instanceof Utilizado para verificar se um objeto pertence à determinada classe 37 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Atividade IV 1 - Crie a classe Figura que representa figuras geométricas, representadas pelas classes Quadrado e Retangulo. Uma figura pode ter sua área calculada a partir do método calcularArea(), que retorna a área calculada da figura em forma de um double. Crie também a classe FiguraComplexa. Uma figura complexa é também uma figura, mas a diferença é que ela é composta por várias figuras (quadrados, retângulos ou até outras figuras complexas). Para calcular a área de uma figura complexa, basta somar a área de todas as figuras que a compõem. Para executar a aplicação, crie a classe Calculador, que é responsável por criar uma figura complexa e calcular a sua área. Esta figura deve ser composta por: • 1 quadrado com 3 de lado • 1 quadrado com 10 de lado • 1 retângulo com lados 2 e 7 • 1 retângulo com lados 5 e 3 Dica: Perceba a diferença entre uma classe ser uma figura e ter uma ou mais figuras. A primeira relação é de herança, enquanto a segunda implica em uma composição. 2 - Crie duas classes: Ponto2D e Ponto3D. Ponto2D possui como atributos as coordenadas x e y, enquanto Ponto3D, além delas, também possui a coordenada z. Utilize a relação de herança para representar estas classes. A respeito dos construtores, Ponto2D deve ter apenas um construtor, que recebe os valores de x e y como parâmetros (tipo double). Já Ponto3D também deve ter apenas um construtor, que deve receber x, y e z como parâmetros (também do tipo double). Dica: Se a relação de herança e a declaração dos construtores foram feitas corretamente, você deverá, obrigatoriamente, chamar o construtor da superclasse explicitamente. Ambas as classes devem sobrescrever o método toString(), que é originalmente declarado na classe Object. Este método deve retornar uma representação do objeto em forma de String, indicando qual o valor de cada coordenada. É importante que Ponto3D tire proveito do método toString() de Ponto2D para mostrar os valores das coordenadas x e y. 38 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Classes Abstratas 39 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Métodos Abstratos 40 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Interfaces 41 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Interfaces 42 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Interfaces 43 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Métodos Default Java 8 • Uma interface pode definir métodos com o modificador default • Neste caso, o método é implementado diretamente na interface • Este recurso surgiu no Java 8 44 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Métodos Estáticos Java 8 45 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Classes Abstratas ou Interfaces? 46 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Atividade V 1 - Crie uma interface AreaCalculavel com um método calcularArea() e crie classes de figuras geométricas que implementam este método (como quadrado, circunferência e retângulo). Depois crie uma classe com um método main() para exercitar as chamadas aos métodos que calculam a área. 2 - Crie uma classe ContaBancaria, que representa uma conta bancária genérica e não pode ser instanciada. Esta classe deve ter um atributo saldo (visível apenas para ela e para as suas subclasses) e os métodos depositar(double), sacar(double) e transferir(double, ContaBancaria). Estes métodos devem depositar um valor na conta, sacar um valor da conta e transferir um valor da conta de origem para uma conta de destino, respectivamente. Além destes, ContaBancaria deve ter um método calcularSaldo(). Este método possui a regra do cálculo do saldo final (que pode ser diferente do saldo armazenado no atributo saldo) e deve ser obrigatoriamente implementado pelas subclasses de ContaBancaria, pois cada classe possui suas próprias regras de cálculo. Crie duas subclasses de ContaBancaria: ContaCorrente e ContaInvestimento. Cada uma deverá implementar suas regras para calcular o saldo (método calcularSaldo()). No caso de ContaCorrente, o saldo final é o saldo atual subtraído de 10%, referente a impostos que devem ser pagos. Já para a ContaInvestimento, o saldo final é o saldo atual acrescido de 5%, referente aos rendimentosdo dinheiro investido. Crie uma aplicação que instancia uma conta corrente e uma conta investimento e executa as operações de depósito, saque, transferência e cálculo de saldo. Verifique se os resultados obtidos são consistentes com a proposta do modelo e com as regras de cálculo estabelecidas. 3 - O Java possui uma interface chamada Cloneable, que pode ser implementada por classes que são capazes de gerar cópias de objetos. Esta interface não possui métodos, mas classes que a implementam devem sobrescrever o método clone(), definido na classe Object. Dentro deste método é implementada a lógica para criar um novo objeto com base no objeto original. Com base nisto, crie uma classe Porta que suporta a criação de novos objetos (cópia). Ela deve ter os atributos altura (double), largura (double) e aberta (boolean). Também deve possuir os métodos abrir(), fechar() e os métodos getters correspondentes aos atributos. 47 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Como uma porta pode criar outras cópias dela mesma, você deve sobrescrever o método clone(), o qual deve criar um novo objeto com os valores dos atributos copiados e retorná-lo. Dica: O método clone() lança uma exceção (CloneNotSupportedException). Não é preciso se preocupar com ela neste momento, então declare o método main() da sua aplicação da seguinte forma: public static void main(String[] args) throws CloneNotSupportedException { //... } 48 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Tratando Exceções Você precisa avisar quem chamou o método e informar que o método não executou como deveria. Como fazer? – As abordagens mais comuns são • Usar booleanos • Usar magic numbers Exceções representam algo estranho ao sistema que normalmente não ocorre • Em Java, o tratamento de exceções é feito por um código diferente do código executado quando não ocorre a exceção 49 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Classes Que Representam Exceções Exceções são representadas por classes • As classes devem herdar direta ou indiretamente de Exception • O Java tem classes que representam diversos tipos de exceção, mas o programador pode criar exceções específicas de acordo com a necessidade 50 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Checked Exceptions Herdam direta ou indiretamente de Exception, mas não podem herdar de RuntimeException Unchecked Exceptions Também chamadas de runtime exceptions Herdam direta ou indiretamente de RuntimeException 51 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Lançando Exceções • O lançamento de exceções é feito através do throw 52 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos 53 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Tratando Exceções 54 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos A API de I/O do Java Está localizada no pacote java.io • A API de I/O gerencia a entrada e saída de dados – Console, arquivos, sockets, etc. Todas as operações de I/O são baseadas em fluxo de dados ( streams ) – InputStream : fluxo de entrada – OutputStream : fluxo de saída A API usa polimorfismo para esconder detalhes de onde a informação vem e para onde ela vai Pelas streams, trafegam bytes – InputStream : é capaz de ler bytes de algum lugar – OutputStream : é capaz de escrever bytes em algum lugar Ex: 55 CURSO DE PÓS-GRADUAÇÃO EM LINGUAGEM DE PROGRAMAÇÃO JAVA Prof. JADIR RODRIGUES LIMA Programação Orientada a Objetos Projeto Criar um programa que grave e leia “itens” em um arquivo de texto. O programa deverá ter uma interface chamada Dados com os métodos: List<String> ler() throws IOException; PrintWriter criarPrinter() throws IOException; void listar(List<String> lista_dados); Uma classe chamada Arquivo irá implementar a interface Dados. A classe Arquivo possuirá uma constante responsável por indicar o arquivo onde os itens serão gravados. O método criarPrinter() utilizará a referida constante para instanciar um objeto do tipo PrintWriter. O método ler() será responsável por ler as informações contidas no arquivo texto. O método listar(List<String> lista_dados) será responsável por imprimir na telas a lista de itens cadastrados. Uma classe abstrata Menu deve ser criada com um método static void opcoes() que irá imprimir na telas as seguintes opções: 0) Sair 1) Listar 2) Inserir Contato As opções sugerem as regras de negócio do programa. 56
Compartilhar