JAVA Linguagem Ambiente de Desenvolvimento

Slides:



Advertisements
Apresentações semelhantes
Programação II Licenciatura de Ciências da Computação Padoca Calado
Advertisements

JAVA Orientação a Objetos
Recursividade Inhaúma Neves Ferraz
Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Capítulo 1 Introdução.
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTRODUÇÃO AOS APLICATIVOS JAVA Prof. Thiago Pereira Rique
Histórico do Java 1990 James Gosling (Sun Microsystems)
PRDS - Programa de Residência em Desenvolvimento de Software Laboratório de Engenharia de Software (LES) da PUC-Rio Carlos Lucena
Iniciação ao Java – Márcio F. Campos
Programação Concorrente
Rebeca Schroeder Linguagem Java Rebeca Schroeder
Alexandre Parra Site: Linguagem Java Alexandre Parra Site:
Capítulo 1 Conceitos Gerais.
PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001
JAVA ENUMS © 2009 by Jorge L. de Souza Leão março de 2009 PEE - COPPE/UFRJ.
Introdução a Programação JAVA
CRIANDO OBJETOS EM JAVA
JAVA: Conceitos Iniciais
Concorrência em Java Threads em Java.
Introdução a linguagem Python
Tipos Agregados Homogêneos e Listas
Unidade I: “Dê um mergulho rápido”
Introdução a Java: Classes, métodos e variáveis Eduardo Figueiredo 24 de Março de 2010 POOAula 05.
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Programação I Aula 2 (Métodos)
Linguagem técnica de programação I Java
Chamada Remota de Procedimentos
Linguagem de Programação JAVA
Introdução a aplicativos Java
Introdução à Linguagem Java
Cristiano Soares Rafael di Lego Roberto Nemirovsky Thiago Nascimento
Orientação a Objetos e Java Graduação em Ciência da Computação
Capítulo 1. static import  A importação estática pode ser utilizado quando queremos acessar métodos ou atributos estáticos de uma outra classe.  Através.
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
Aula 1 - Fundamentos Java SE Instituto Metodista Izabela Hendrix Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Gilmar Medeiros – Agosto/2009.
LPII Professora Lucélia. Pacotes Um pacote em Java é um diretório onde ficam armazenadas uma ou mais classes. Geralmente as classes com a mesma afinidade.
By Ducheno Kelly Centro de Formação São Domingos.
Programação Orientada a Objetos Curso de Engenharia da Computação Parte 03 – Conceitos Básicos III Prof. Fabricio Mota Oliveira
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
Implementação Orientada a Objetos – Aula 03
Laboratório I Mateus Raeder Material baseado nos originais da Profa. Denise Bandeira.
Tratamento de Exceções
Programação Orientada a Objetos - Java
Java Kickstart, day 2 Semelhanças com linguagem C.
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Polimorfismo.
+ Java Básico Aula 1 por Flávio Juvenal. + Histórico Green Project (1991) Desenvolver plataforma para eletrodomésticos inteligentes Tentaram usar C++
Funções Matemáticas e de String
Exceções Profa. Patrícia A. Jaques Alterada por Leandro Tonietto abr-15.
Utilizando UML e Padrões Prof. Fábio Botelho, MSc Redes e Sistemas Distribuídos Recife, Março de 2010.
JAVA Sintaxe.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Introdução JAVA Faculdade Mauricio de Nassau
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
Java Conexão com Baco de dados Saulo Bazzi Oberderfer Fonte:
Introdução a Programação Orientada a Objetos
Java Disciplina: Programação II Professora: Mai-Ly Vanessa.
Linguagem técnica de programação I Java
Igor Steinmacher, MSc. Java!!!!
Programação em Java Prof. Edvan Chaves.
Introdução Sintaxe Básica da Linguagem JAVA
Ferramentas para desenvolvimento Java
Laboratório de Programação II Método main Dados e Métodos de Classes.
Clojure  Instalando: Vá em Faça download de clojure_1.0.0.zip.
Implementação Orientada a Objetos – Aula 09 Pacotes Prof. Danielle Martin Universidade de Mogi das Cruzes
Prof. Cristian Rodrigo Dalcico. Linguagem de Programação Java Aula 1.
PROGRAMAÇÃO ORIENTADA A OBJETOS Carlos Marques
Introdução à plataforma Java. 2 A tecnologia Java Java: linguagem de programação e plataforma de desenvolvimento Criada pela Sun Microsystems Apoiada.
Implementação Orientada a Objetos – Aula 02 Introdução ao Java Prof. Danielle Martin Universidade de Mogi das Cruzes.
Transcrição da apresentação:

JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine Para muitos, a linguagem Java é conhecida primeiramente como uma ferramenta para criar applets para a World Wide Web. Applet é o termo que Java utiliza para uma miniaplicação que é executada dentro de uma página Web.

JAVA

Características Parecida com C++ Compilada Portável Orientada a objetos Segura Suporte a concorrência Suporte a sistemas distribuídos

Máquina Virtual Máquina emulada em software Java Specification Language Bytecodes JVM provê: conjunto de instruções, conjunto de registradores, formato dos bytecodes, gerenciamento automático de memória.

Ambiente de Runtime Carregador de Classes   O carregador de classe carrega todas as classes necessárias para a execução de um programa sejam elas locais ou da rede. As classes locais sempre serão carregadas primeiro. Uma vez que todas as classes estiveram carregadas, o código executável é determinado. Neste momento são nomeados endereços de memória específicos protegendo contra o acesso sem autorização nas áreas fora da JVM. Verificador de ByteCode O código Java passa em vários testes antes de ser executado em sua máquina. O JVM põe o código em um verificador de bytecode que testa o formato dos fragmentos de código e checa para não permitir violamento de ponteiros, direitos de acesso em objetos, ou tentar mudar o tipo do objeto. Verificando Processos O verificador de bytecode faz quatro passagens no código de um programa. Assegura que o código adere às especificações de JVM e não viola integridade de sistema. Se o verificador completar todas as quatro passagens sem devolver uma mensagem de erro, então o seguinte é assegurado: As classes aderem ao formato de arquivo de classe da especificação de JVM. Não há nenhuma violação de acesso a recursos restritos. O código não causa nenhum estouro de pilha. São conhecidos os tipos de parâmetros. Nenhuma ocorre nenhuma conversão ilegal de dados.

Programa Simples 1 //Exemplo de comentario 2 public class AloMundo { 3 public static void main (String args[ ]) { 4 System.out.println("Alo Mundo!"); 5 } 6 }

Exercício 1 //Exemplo de comentario 2 public class AloMundo { 3 public static void main (String args[ ]) { 4 System.out.println("Alo Mundo!"); 5 } 6 } Abra uma janela DOS na pasta do arquivo AloMundo.java. Compile com o javac AloMundo.java e execute com java AloMundo.

Classes e Pacotes Classe é um termo para um módulo que possui funcionalidade O Java possui várias classes que implementam diversas funções Pacote é um grupo de classes relacionadas Pacote java.lang String Math Integer Thread

Documentação JAVA API Em HTML e descreve: Hierarquia da classe Propósito geral Lista resumida de variáveis, construtores e métodos Lista detalhada com descrição de variáveis, contrutores e métodos

Declaração Uma linha de código terminada com ; x=5*i; if (x<50) resposta = "i é menor que 10"; for (int z=0;z<10;z++) a[z] = z;

Bloco Um grupo de declarações entre {} x=5*i; if (x<50) { resposta = "i é menor que 10"; } for (int z=0;z<10;z++) { a[z] = z; System.out.println(z);

Identificadores São nomes utilizados para identificar classes, variáveis e métodos 1 //Exemplo de comentario 2 public class AloMundo { 3 public static void main (String args[ ]) { 4 System.out.println("Alo Mundo!"); 5 } 6 }

Tipos Básicos boolean verdade = true; String texto = "aeiou"; char letra = ‘a’; int idade = 31; long premio = 200000; float peso = 80.5 double distancia = 1200.34

Convenções de código Classe: ContaBancaria, Curso Interface: Conta Métodos: saque(), adicioneCurso Variável: clienteAtual Constantes: VELOCIDADE_MAXIMA Use {} nas estruturas de controle Espaçamento

Variáveis Tipos primitivos Tipos de referência Locais: dentro de métodos Atributos ou variáveis membro: dentro da classe

Inicializando variáveis Nenhuma variável pode ser utilizada antes de ser inicializada. Variáveis locais devem ser inicializadas manualmente. Variáveis membro são iniciadas automaticamente.

Operadores + - * / % == != !(expressão lógica) && || + - * / % == != !(expressão lógica) && || < > <= >= (expressão lógica) ? valor1:valor2

Concatenação de Strings O operador + concatena Strings, criando uma nova String String saudacao = "Dr. "; String nome = "Pedro " + "Silva"; String titulo = saudacao + nome;

Casting int d long a a = d; // faz uma conversão implícita d = (int) (a); // precisa conversão explícita

Instruções Condicionais Comando if if (nota > 7 && falta < 18) { aprovado=true; } else { aprovado=false; }

Instruções Condicionais Comando switch switch (valor) { case 1: instruções; break; case 2: default: } A expr1 deve conter um valor do tipo int, byte, short, ou char. Não são permitidos pontos flutuantes, expressões do tipo long e referências de classes.

Instruções de Loop Permite a execução repetida de blocos for (int i=0; i<10; i++) { instrução ou bloco; }

Loop // testa antes de executar while (boolean) { instrução ou bloco; } // executa pelo menos uma vez do { } while (boolean test);

Controles Especiais break ou break com rótulo continue ou continue com rótulo

Exercício Crie um aplicação chamada Fatorial que imprima o fatorial de um numero. Para pedir um numero: int n = Integer.parseInt(JOptionPane.showInputMessage("digite um numero")); Faça um programa que peça um número ao usuário. O programa deve dizer se o número é par ou impar. Se o número for par, o programa deve mostrar os números pares menores. Faça um programa que peça um número ao usuário e diga se é um número primo. Números primos são divisíveis apenas por 1 e pelo próprio número.

Exercício Escreva o método main da classe Tabuada que imprime os valores multiplos de m menores que n. O usuário deve informar os valores de m e n. O valor de n deve ser maior que m. Por exemplo: Quais são os múltiplos de 2 (m) ate 8 (n)? Resposta: 0, 2, 4, 6 Escreva uma classe chamada AreaDoTrianguloRetangulo. Peça para o usuário digitar os valores da base e da altura do triângulo e mostre o valor da área e da hipotenusa. A área do triângulo é igual a base * altura / 2. A hipotenusa é igual a raiz quadrada da soma dos quadrados da base e altura (catetos). Dica: use a função Math.sqrt(n) para calcular a raiz.

Criando uma classe Definir um tipo que representa uma data class MinhaData { int dia; int mes; int ano; } Declarando uma variável deste tipo MinhaData meuNascimento, seuNascimento;

Criando um objeto Objetos são criados com a função new MinhaData meuNascimento; meuNascimento = new MinhaData( ); As variáveis que referenciam objetos servem para acessar sua estrutura meuNascimento.dia = 26; meuNascimento.mes = 11; meuNascimento.ano = 1960;

Exercício Um ponto pode ser caracterizado por uma coordenada x e y. Defina uma classe chamada Ponto que representa esta idéia. As coordenadas são valores inteiros. Escreva uma classe Main com o método main ( ) dentro da classe; declare duas variáveis do tipo Ponto. Chame as variáveis de inicio e fim. Crie os objetos usando new Ponto( ). Atribua o valor 10 a x e y do objeto inicio. Mostre seus valores do objeto inicio. Atribua o valor 20 para a variável x do objeto fim, e o valor 30 para y do objeto fim. Mostre os valores x e y do objeto fim.

Arrays Um array é uma coleção de variáveis do mesmo tipo. A coleção é acessada por índices Arrays podem ser de qualquer tipo primitivo ou classe char s[]; ou char[] s; Ponto p[]; ou Ponto[] p;

Criando Arrays Arrays são criados com a função new s = new char[20]; p = new Ponto[100]; Arrays de objetos não criam os objetos automaticamente. Os objetos são criados separadamente. p[0] = new Ponto(); p[1] = new Ponto();

Inicializando Arrays Ponto array[] = { new Ponto(), new Ponto() }; // equivalente ao código abaixo Ponto array[] = new Ponto[3]; array[0] = new Ponto(); array[1] = new Ponto(); array[2] = new Ponto();

Arrays Multi-dimensionais int twoDim [ ] [ ] = new int [4][ ]; // arrays de mesmo tamanho twoDim[0] = new int [5]; twoDim[l] = new int [5]; // ou arrays de tamanhos diferentes twoDim[0] = new int [2]; twoDim[1] = new int [4]; twoDim[2] = new int [6]; twoDim[3] = new int [8];

Tamanho e redimensionamento O tamanho de um array está no seu attributo length Você não pode alterar o tamanho de um array, mas pode usar a mesma variável para criar um novo e maior array.

Copiando Arrays Use o método arrayCopy da classe System int dados[ ] = { 1, 2, 3, 4, 5, 6 }; int contagem[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; System.arraycopy(dados, 0, contagem, 0, dados.length);

Exercício Crie uma classe chamada Media. No método main, declare uma variável chamada notas do tipo array de int para 5 notas. Após o usuário informar as notas, o programa deve calcular e mostrar a média. Faça uma classe para perguntar 5 questões ao usuário. As perguntas devem ser definidas como um array de String. As respostas devem ser salvas em um array de Strings também. Ao final das perguntas o programa deve mostrar as perguntas e respostas.

Classes e Objetos Princípios dos Objetos Organizar dados e algoritmos Encapsulamento Polimorfismo Herança

Classes e Objetos O elemento fundamental em Java é a classe Classe é um modelo para criar objetos Define a implementação dos métodos Todos os métodos tem que pertencer a uma classe As variáveis definidas na classe são chamadas membros (atributos)

Exemplo class EmpregadoInfo { String nome; String cargo; String departamento; } Para instanciar um objeto, crie e atribua valores aos membros: EmpregadoInfo emp = new EmpregadoInfo( ); emp.nome = "Marcos"; emp.cargo = "gerente"; emp.departamento = "RH";

Métodos Método mostra() implementado na classe EmpregadoInfo class EmpregadoInfo { String nome; String cargo; String departamento;   void mostra( ) { System.out.println(nome + " é " + cargo + " do " + departamento); }

Executando métodos Este método imprime os dados dos membros da classe quando o objeto foi criado e instanciado. EmpregadoInfo empregado = new EmpregadoInfo( ); emp.nome = "Marcos"; emp.cargo = "gerente"; emp.departamento = "RH"; empregado.mostra( ); A idéia que métodos compõe um objeto e podem interagir intimamente com seus dados é um conceito de orientação a objeto.

Definindo métodos Contém o código que manipula o estado do objeto Recebe um número de parâmetros Possue um tipo de retorno Sintaxe: <modificador> <tipo_retorno> <nome> ([<parâmetros>]) [throws <exception>] { .... }

Exemplos de métodos public class SalarioEmpregado { private double salario; public void aumentaSalario (double valor){ salario = salario + valor; } public double calculaImposto() { double imposto = 0; if (salario > 1200) { imposto = salario * 0.15; } else if (salario > 2900) { imposto = salario * 0.27; return imposto; } // fim da classe

Passagem por valor Toda passagem de argumentos é por valor, ou seja, uma cópia vai para o método chamado. Quando o argumento é um objeto, o valor do argumento é uma referência ao objeto. O método pode mudar o conteúdo do objeto, mas nunca a referência.

Referência this this é uma referência ao objeto corrente this acessa todas as variáveis membro e métodos do objeto corrente this é utilizado quando outro objeto precisa conhecer o objeto corrente

Exemplo usando this public class MinhaData { int dia, mes, ano; public void convidaAniversario( ) { Aniversario.envieConvite( this ); } public class Aniversario { public static void envieConvite ( MinhaData d ) { System.out.print( "Convido para meu aniversario " ); System.out.print( " será dia " + d.dia ); System.out.print( " mes " + d.mes ); System.out.print( " ano " + d.ano );

Ocultando Dados public class Data { private int dia, mes, ano; }   public class OutraClasse { public static void main(String args[ ]) { Data d = new Data( ); d.dia = 21; // ilegal!

Encapsulamento Protege os dados de um objeto de modificação imprópria, forçando o usuário a ter acesso aos dados por um método. Assegura que os dados sempre sejam tratados da mesma forma.

Sobrecarregando Métodos Cada método possui uma assinatura. A assinatura é composta pelo: Nome do método Número e tipo de seus argumentos Permite escrever vários métodos com o mesmo nome em uma classe que fazem o mesmo trabalho, mas recebem argumentos diferentes.

Sobrecarregando Métodos public void println(int i) public void println(float f) public void println( )

Exercício Crie uma classe chamada Lampada com um atributo boleano para indicar se ela está acesa ou apagada. Defina um método para ligar, um para apagar e outro para mostrar o estado da lampada. No método main crie um objeto para classe Lampada, ligue a lampada e mostre seu estado. Crie uma classe chamada ContaBancaria.java que represente atributos e operações de uma conta bancária. A conta deve ter os atributos cliente (String), número (int), saldo (double) e especial (boolean). A conta deve ter as operações depósito e saque. A operação depósito só pode aceitar valores positivos. A operação saque só pode aceitar valores menores que o saldo, mas se a conta for especial ela pode aceitar valores menores que o saldo mais 1000 reais.

Exercícios Crie uma classe chamada Terminal que no método main faça o seguinte: criar um objeto para classe ContaBancaria, definir valores para seus atributos, depositar 2000 reais, sacar 1200 reais, mostrar o saldo, sacar 1000 reais, definir como conta especial, sacar 1000 reais novamente e mostrar o saldo.

Construindo e Inicializando Objetos Utilizar a função new NomeDaClasse() O que acontece? Aloca espaço em memória para o objeto Inicializa as variáveis da classe Executa o construtor

Construindo e Inicializando Objetos

Construtores Métodos especiais Possuem o mesmo nome que a classe Recebem ou não argumentos Não possuem tipo de retorno Os argumentos são fornecidos entre os parenteses que seguem o nome da classe Toda classe tem um construtor

Exemplo de Construtores public class Empregado { private String nome; private int salario;   public Empregado(String n, int s) { nome = n; salario = s; } public Empregado(String n) { this(n, 0); public Empregado( ) { this("Não definido");

Usando diferentes construtores Empregado objeto1 = new Empregado("Pedro",1500); Empregado objeto2 = new Empregado("Paulo"); Empregado objeto3 = new Empregado();

Pacotes Pacote são grupos de classes relacionadas Use a declaração de pacote package para relacionar a classe a um pacote Use a declaração de importação import para indicar ao compilador onde achar as classes

Exercício Redefina a classe Lampada com um construtor que cria uma lampada no estado aceso (boleano igual a true). Redefina a classe Lampada no pacote auto.eletrico. Escreva a classe Carro no pacote auto com 2 atributos do tipo Lampada: um chamado farolEsquerdo e outro farolDireito. Defina métodos na classe Carro para acender e apagar os faróis e um método chamado mostra() que mostra se os faróis estão acesos ou não. No método main crie um objeto para classe Carro, execute o método que acende os faróis e execute o método mostra(). Compile e execute a classe Carro. Onde está a classe Carro e a classe Lâmpada em relação a pasta raiz?

O que é Herança? A partir de um modelo de uma classe criar uma versão especializada do modelo. Por exemplo, você tem um modelo para classe Empregado e quer criar um modelo para Gerente. O Gerente é um Empregado com características adicionais.

Modelo da Classe Empregado public class Empregado { String nome; Date admissao; Date nascimento; }

Modelo da Classe Gerente public class Gerente { String nome; Date admissao; Date nascimento; String cargo; int nivel; String departamento; Empregado surbordinados[ ]; } Este exemplo ilustra a duplicação de dados entre a classe Gerente e a classe de Empregado. Adicionalmente, poderia haver vários métodos que seriam aplicáveis a Empregado e a Gerente. Você precisa de uma maneira para criar uma classe nova a partir de uma classe já existente; chamada subclasse.

A palavra chave Extends public class Empregado { String nome; Date admissao; Date nascimento; } public class Gerente extends Empregado { String cargo; int nivel; String departamento; Empregado surbordinados[ ]; Neste exemplo, a classe de Gerente é definida para ter todas as variáveis e métodos que um Empregado tem. São herdados todas as variáveis e os métodos da definição da classe pai.

Herança Se Gerente estende a classe Empregado, ele tem todas as variáveis e métodos da classe Empregado. Qualquer operação válida para Empregado também é válida para Gerente

Herança Simples Java permite estender somente uma classe Herança simples torna o código menos confuso Você pode ter vários níveis na hierarquia Construtores não são herdados

Polimorfismo Criar uma classe a partir de outra com herança permite o polimorfismo do objeto, ou seja, manipular o objeto por classes diferentes. Um objeto tem só uma forma, mas pode ser referenciado pelas superclasses. Em Java a classe Object é a classe pai para todas as outras classes

Polimorfismo Object geral; geral = new String("texto"); geral = new Empregado();   Isso é possível, pois Empregado é uma subclasse de Object. public class Empregado extends Object public class Gerente extends Empregado Java permite referênciar um objeto com uma variável que é um dos tipos da classe pai. Empregado teste = new Gerente( );

Coleções Heterogêneas Empregado equipe[ ] = new Empregado [1024]; equipe[0] = new Gerente( ); equipe[l] = new Empregado( );

Polimorfismo de Argumentos // na classe Empregado public Imposto calculaImposto(Empregado e) { //calcula e retorna a faixa de imposto }   // em outra classe Gerente objeto = new Gerente( ); Imposto ir = calculaImposto (objeto);

Operador instanceof Esta função permite verificar se um objeto é um instância de determidada classe. public void method(Empregado emp) { if (emp instanceof Gerente) { // traz o salário } else if (emp instanceof Contratado) { // traz o valor da horas else { // empregado normal

Convertendo Objetos public void method(Empregado emp) { if (emp instanceof Gerente) { Gerente objeto = (Gerente)emp; System.out.println("This is the Gerente of " + objeto.departamento); } // resto da operação

Sobrescrevendo Métodos Permite redefinir o comportamento de um método herdado da classe pai Deve ter a mesma assinatura do método na classe pai

Sobrescrevendo Métodos public class Empregado { String nome; int salario;   public String getDetalhes( ) { return "Nome: " + nome + "\n" + "Salario: " + salario; } public class Gerente extends Empregado { String departamento; "Gerente de " + departamento;

Sobrescrevendo Métodos Empregado objetoEmpregado = new Empregado( ); Gerente objetoGerente = new Gerente( );   Ao invocar objetoEmpregado.getDetalhes( ) e objetoGerente.getDetalhes ( ), eles executarão, respectivamente, o método getDetalhes( ) da classe Empregado e getDetalhes ( ) da classe Gerente.

Sobrescrevendo Métodos Empregado objeto = new Gerente( ); objeto.getDetalhes ( )   o método a ser chamado será o da classe Gerente, pois você apenas criou uma variável do tipo Empregado, mas o objeto é um Gerente.

Regras para Sobrescrever Tipo de retorno deve ser igual ao pai Não pode ser menos acessível que o pai Não pode lançar exceções diferentes

Sobrescrevendo Métodos public class Pai { public void metodo ( ) { }   public class Filho extends Pai { private void metodo ( ) { // ilegal

Referência super Está disponível em todos os métodos não-estáticos e construtores. É uma referência ao objeto pelo modelo da superclasse. A execução de super.metodo() utiliza a implementação do método na superclasse.

super public class Gerente extends Empregado { private String departamento;   public String getDetalhes( ) { // chama metodo da superclasse return super.getDetalhes( ) + “ Departamento: " + departamento; }

Construtores da classe Pai Você pode construir parte ou todo objeto pelo modelo da classe pai. Invoque o construtor da classe pai com super na primeira linha do construtor da classe filho.

Construtor da classe Pai public class Empregado { String nome;   public Empregado(String n) { nome = n; } public class Gerente extends Empregado { String departamento; public Gerente(String s, String d) { super( s ); departamento = d;

Exercício 1. Redefina a abstração de uma conta corrente em duas classes: ContaSimples e ContaEspecial. A classe ContaSimples tem os atributos cliente, número e saldo. As operações são: public void deposito(double valor), public void saque(double valor), public boolean temSaldo(double valor) e public void mostraSaldo(). A classe ContaEspecial, além de ser uma conta simples, tem um limite que é uma variável do tipo double. A operação temSaldo da ContaEspecial deve levar em conta este limite. Faça uma classe chamada GerenciaConta, e no método main teste as classes ContaSimples e ContaEspecial.

Características da Linguagem Variáveis, métodos e código estáticos Orientado a objetos Classes, métodos e variáveis final Classes abstratas e interfaces Controle de acesso Classes internas e wrappers (envelopes)

Variáveis Estáticas Variáveis compartilhadas entre todas as instâncias de uma classe É semelhante a uma variável global em outras linguagens Se a variável não for private, ela pode ser acessada pelo nome da classe: NomeDaClasse.nomeDaVariavel

Variáveis Estáticas public class CEP { public static final int R_XV = 89200; public static final int R_AMERICA = 89201; }   public class Correio { public void metodo( ) { int x = CEP.R_XV;

Métodos Estáticos public class Quadrado { public static int calculaArea(int x, int y) { return x * y; }   public class Grafico { public static void main( String[] a) { int a = 9; int b = 10; int c = Quadrado.calculaArea(a, b); System.out.println("Area é igual a " + c);

Código Estático Uma classe pode conter blocos de código estático. Este código executa apenas uma vez quando a classe é carregada. Se houver mais que um bloco estático, eles são executados na ordem que aparecem na classe.

Exercícios Defina uma classe chamada Matemática com dois métodos estáticos: um método chamado maior(int x, int y) que retorna o valor do maior parâmetro e outro método chamado menor(int x, int y). Crie uma classe Compara onde o usuário informa dois valores e o programa mostra o valor maior e o menor usando os métodos da classe Matemática do exercício anterior.

Dados e métodos OO Um sistema OO consiste de objetos Objetos são criados a partir das classes Os atributos são definidos por variáveis O comportamento é definido pelos métodos Os objetos da mesma classe tem as mesmas características, mas cada objeto é diferente

Orientados a Objetos public class Carro { String cor; String modelo;   public Carro (String cor, String modelo) { this.cor = cor; this.modelo = modelo; } public void mostra( ) { System.out.println ("Isto é um " + modelo + cor + ".");

Orientados a Objetos Car vectra = new Car("Branco","Vectra"); Car corsa = new Car("Prata","Corsa");   A orientação a objetos é ilustrada pelo fato que ambos os objetos têm dados separados, embora ambos sejam carros. vectra.mostra( ) imprimirá "Isto é um Vectra Branco." corsa.mostra( ) imprimirá "Isto é um Corsa Prata."

Classes final Um classe final não pode ser extendida Não podemos declarar uma subclasse para uma classe final public final class Caixa { ... } public class Caixa2 extends Caixa { //ilegal

Métodos final Um método final de uma classe não pode ser sobrescrito nas suas subclasses Segurança Otimização public class Folha { public final double calculaSalario() {...} } public class FolhaModificada extends Folha{ public double calculaSalario(){...}//ilegal

Variáveis final Uma variável final é uma constante Qualquer tentativa de mudar o valor causa erro public final int CODIGO_BRASIL = 55;

Classes Abstratas Uma classe abstrata define apenas parte da implementação Não podemos criar objetos para uma classe abstrata Deixamos as subclasses fornecerem a implementação que falta da classe abstrata

Classes Abstratas public abstract class PecaXadrez { public abstract boolean movimentoValido(int x, int y); public void move(int x, int y) { if (movimentoValido(x,y)) { // faz movimento } else { // erro } A classe PecaXadrez declara a existência do método movimentoValido mas não o implementa.

Classes Abstratas Subclasses de classes abstratas têm que implementar todos os métodos abstratos declarados na classe pai. Caso contrário elas também serão classes abstratas.   public class Rainha extends PecaXadrez { public boolean movimentoValido(int x, int y){ // faz consistência do movimento para a Rainha } public class Rei extends PecaXadrez { // faz consistência do movimento para o Rei

Exercícios Defina uma classe Conta com os métodos saque e deposito (iguais ao da classe Conta Simples) e um método abstrato chamado boolean temSaldo(double valor). Redefina a classe ContaSimples com relacionamento de herança com a classe Conta. Implemente o código do método temSaldo na classe ContaSimples.

Interfaces Uma interface não tem implementação, todos os métodos são abstratos. Uma interface pode definir variáveis estáticas do tipo final (constantes) public interface Cor {   public int getCor( ); public void setCor(int cor); }

Múltiplas Interfaces A classe pode estender apenas uma classe, mas implementar múltiplas interfaces

Interfaces A classe que implementa uma interface deve definir os métodos da interface interface ObjetoSeguro { void abre(int segredo ); }   class Cofre implements ObjetoSeguro { void abre(int segredo ) { if (segredo == 1234) { System.out.println("Cofre Aberto");

Exercícios Defina uma interface chamada Bancaria, tendo três métodos: deposito, saque e mostraSaldo. Redefina a classe, Conta.java, usando a interface Bancaria para definir tipos de contas diferentes.

Controle de Acesso Java tem quatro níveis de acesso: public protected Default (quando é omitido) private

Controle de Acesso

Comparação Operador == compara tipos primitivos O método equals compara objetos

toString O método toString() faz parte de todos os objetos em java por ser um método da classe Object Sobrescrevendo o comportamento deste método podemos definir uma representação de um objeto como uma String

toString class Ponto { int x, y; public String toString() { return "Ponto(" + x + "," + y + ")"; }

Classes Internas Uma classe interna é uma definição de classe dentro de outra classe Defina uma classe como classe interna se ela não tem utilidade fora da classe que a contém.

Classes Wrappers Uma classe wrapper é uma representação de um tipo primitivo como um objeto Cada tipo primitivo possui seu wrapper Wrapper são úteis se você trabalha com classes e métodos que só aceitam objetos como argumentos

Wrappers int pInt = 500; Integer wInt = new Integer(pInt); int p2 = wInt.IntValue( );

Exercício Crie uma classe chamada SistemaSolar. No SistemaSolar crie a classe interna chamada Planeta com os atributos nome e distanciaDoSol. Defina um array de Planeta para o SistemaSolar. No construtor de SistemaSolar defina objetos para o array. Crie o método mostrePlanetas para o SistemaSolar. No método main crie um objeto da classe SistemaSolar e chame o método mostrePlanetas.

Exceções Mecanismo para tratar os erros durante a execução do programa. Exceções são classes que representam erros durante a execução de um programa java. Os objetos que representam as exceções podem ser “lançados”, capturados e manipulados.

Condições de Erro Tentar abrir um arquivo que não existe Tentar usar uma conexão de rede interrompida Tentar acessar posição de arrays fora da faixa Tentar carregar uma classe que não está no classpath

Exemplo public class Semaforo { public static void main (String args[ ]) { int i = 0; String semaforo [ ] = {"Verde", "Amarelo","Vermelho"}; while (i < 4) { System.out.println (sinais[i]); i++; } Ao executar o resultado é java Semaforo Verde Amarelo Vermelho java.lang.ArrayIndexOutOfBoundsException: 3 at Semaforo.main(Semaforo.java:12)

Instruções try e catch Conta c = new Conta(); try { c.saque(100); } catch (EstouroSaqueException e) { System.out.println("Erro: " + e.getMessage() ); } c.mostraSaldo();

Aplicando o try/catch public class Semaforo { public static void main (String args[ ]) { int i = 0; String semaforo [ ] = {"Verde", "Amarelo","Vermelho"}; while (i < 4) { try { System.out.println (sinais[i]); catch (Exception e) { break; } i++;

Instrução finally A instrução finally define um bloco de código que sempre será executado, mesmo que uma exceção seja lançada ou não: boolean transacaoOk = false; try { abreTransacao( ); debito.saque ( valor ); credito.deposito( valor ); transacaoOk = true; } finally { if ( transacaoOk ) fechaTransacao( ); else desfazTransacao( ); }

Instrução throw e clausula throws public void deposito(double valor) throws DepositoInvalidoException { if (valor > 0) { saldo = saldo + valor; } else { throw new DepositoInvalidoException("Este valor é invalido para depósito: " + valor); }

Categorias de Exceção Throwable Error Exception RuntimeException

Tratar ou lançar? O tratamento de exceções pode ser de 2 modos: Tratar dentro do próprio método usando try,catch e finally Lançar para quem chamou o método onde a exceção foi gerada usando a clausula throws

Criando Exceções public class DepositoInvalidoException extends Exception { public DepositoInvalidoException (String motivo) { // chama construtor da classe pai super(motivo); }

Exercício 1.Crie as seguintes exceções no pacote erros: a. EstouroSaqueException - Acontece quando é feita uma tentativa de tirar mais dinheiro do que a conta possui. b. DepositoInvalidoException – Acontece quando uma quantia inválida de dinheiro (quantia < zero) é depositada. 2.Reescreva as operações de saque e depósito para lançar estas exceções.

Calendário e Datas A classe java.util.Date representa uma data e a classe java.util.Calendar representa um calendário para trabalhar com as datas. Date hoje = new Date(); Calendar c = Calendar.getInstance();

Formatando Datas Para formatar datas em java use a classe java.text.SimpleDateFormat. Esta classe possui dois métodos básicos: parse(String) para converter um texto em uma data e format(Date) para formatar a data em um texto. Por exemplo: SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); String texto = sdf.format(new Date()); Date dia = sdf.parse("16/06/1971 23:00");

Calculando Datas A classe Calendar permite a definição de data com o método set e o cálculo de datas com o método add(int, int). Por exemplo:

Coleções O java tem um framework de coleções que inclui listas, conjuntos e mapas. As operações básicas ao usar as coleções são: adicionar objetos remover objetos verificar se existe um objeto recuperar um objeto percorrer os objetos um a um

Principais Interfaces As coleções se dividem em três categorias básicas: Listas: Listas de objetos Set: Conjuntos de objetos únicos Maps: Objetos com uma identificação única Coleções Ordered e Sorted

Principais Métodos List: add(Object value), get(int i) Set: add(Object value), contains(Object) Map: put(Object key, Object value) e get(Object key)

Exercícios Crie uma classe chamada Agenda que guarde o nome e o telefone de pessoas como objetos String em um HashMap, adicione 5 nomes e telefones e depois mostre o telefone de uma das pessoas. Cria uma classe chamada Equipes para armazenar nomes de equipes em um ArrayList. O programa deve pedir para o usuário digitar os nomes das equipes até o usuário digitar "fim". O programa então mostra os nomes das equipes digitados pelo usuário.