100
Programa Programa çã çã o Orientada a Objetos o Orientada a Objetos em Java em Java Prof. Giuliano Prado de Morais Giglio, M.Sc. [email protected] http://www.giulianoprado.xpg.com.br A Plataforma Java A Plataforma Java Programação Orientada a Programação Orientada a Objetos em Java Objetos em Java OBJETIVOS DO CURSO n Fornecer uma visão geral da linguagem Java e apresentar suas potencialidades. n Capacitar os alunos a trabalhar com a linguagem de programação Java. n Introduzir as principais fundamentos de implementação de aplicações gráficas Java com pacote Swing.

A Plataforma Java Programação Orientada a Objetos em Java · Programação Orientada a Objetos em Java OBJETIVOS DO CURSO nFornecer uma visão geral da linguagem Java e apresentar

  • Upload
    doandan

  • View
    238

  • Download
    0

Embed Size (px)

Citation preview

ProgramaProgramaçãção Orientada a Objetos o Orientada a Objetos em Javaem Java

Prof. Giuliano Prado de Morais Giglio, [email protected]

http://www.giulianoprado.xpg.com.br

A Plataforma JavaA Plataforma JavaProgramação Orientada a Programação Orientada a

Objetos em JavaObjetos em Java

OBJETIVOS DO CURSO

n Fornecer uma visão geral da linguagem Java e apresentar suas potencialidades.

n Capacitar os alunos a trabalhar com a linguagem de programação Java.

n Introduzir as principais fundamentos de implementação de aplicações gráficas Java com pacote Swing.

ORGANIZAÇÃO DO CURSOü Introdução a linguagem JAVA;üEstrutura da Linguagem;ü Java e Orientação a Objetos;üClasses§ Objetos (Instanciação)§ Atributos§ Métodos§ Encapsulamento;§ Sobrecarga;

üHerança e Polimorfismo;üColeção de Objetos;üClasses especiais da API Java

Introdução a Linguagem JavaIntrodução a Linguagem Java

Prof. Giuliano Prado de Morais Giglio, M.Sc.

A Plataforma JavaA Plataforma JavaProgramação Orientada a Programação Orientada a

Objetos em JavaObjetos em Java

CONCEITOS DO JAVAJava Java éé::– Uma Linguagem de Programação– Um Ambiente de Desenvlvimento– Um Ambiente de Aplicativos

CONCEITOS DO JAVA

n J2SE– Contém as classes principais da plataforma

Java, e é chamado às vezes de Core Java Plataform.

n J2EE– É um conjunto de tecnologias que fornecem

APIs e um ambiente para desenvolvimento e execução de aplicações coorporativas.

n J2ME– É o Java para pequenos dispositivos, desde

palms até celulares.

INTRODUÇÃO AO JAVA

n Vantagens de Java como Linguagem de Programação:

vOrientada a Objetos (O.O)vcódigo sem bugs: mais fácil em Java que em

C++vdesalocação manual de memória não existevindependência de plataforma!

JAVA

nn SimplesSimplesüSintaxe similar a C / C++üNão possui os recursos “perigosos”, desnecessários

ou pouco usados:üAritmética de ponteiros (*--pt = vet+5)üEstruturas (struct)üDefinição de tipos (typedef)üPré-processamento (#define)üLiberação explícita de memória (free)üEliminação de 50% dos erros mais comunsü Interpretadores pequenos (256 Kb)

COLETOR DE LIXO

n A Linguagem Java realiza a liberação de memória, que antes era responsabilidade do programador.

JAVA

nn Orientada a ObjetosOrientada a Objetos

Utiliza tecnologia de objetos similar a de C++, com alguns acréscimos e

simplificações.

JAVA

nn DistribuDistribuíídada

Implementa os protocolos da arquitetura TCP/IP, tais como: HTTP, SMTP, TCP,

UDP, RTP, FTP, etc.

JAVA

nn RobustaRobusta

üPossui checagem em tempo de compilação e execução.üGerenciamento automático de memória

(“garbage collector” ).üAusência de recursos “perigosos”.üExtensiva verificação do código

JAVA

nn RobustaRobusta

üO fonte é compilado para um código intermediário (“bytecode”).üO interpretador funciona como uma

Máquina Virtual Java (JVM).

INDEPENDÊNCIA DE PLATAFORMA

JAVA

nn InterpretadaInterpretada

Os bytecodes são executados por um interpretador (JVM) embora existam

opções de compilação.

JVM - JAVA VIRTUAL MACHINE

nn Cabe ao interpretador Java de cada plataforma Cabe ao interpretador Java de cada plataforma de hardware especde hardware especíífica assegurar a execufica assegurar a execuçãção o do cdo cóódigo compilado para a JVM.digo compilado para a JVM.

AMBIENTE DE PROGRAMAÇÃO JAVA

n Java 2 Standard Developers Kit (J2SDK)

JVM mais todas as APIs, compilador eferramentas (tudo o que você precisapara escrever programas Java)

JVM mais as APIs (tudo o que vocêprecisa para executar programas Java)

Documentação das APIs (Application Programming Interface)

AMBIENTE DE PROGRAMAÇÃO JAVA

n Java 2 Standard Developers Kit (J2SDK)ØDisponível para download no Site Java da

Sun (java.sun.com) ØVersão atual (J2SDK 1.6.23) ØPrincipais aplicativos:§ javac (compilador)§ java (interpretador)§ applet viewer (visualizador de Applets)

AMBIENTE DE PROGRAMAÇÃO JAVA

n Documentação das APIs (Application Programming Interface)ØDescreve quais são as classes definidas

pela linguagem, o que fazem e como elas devem ser usadas nos programas.ØDisponível para download ou on-line no

Site Java da Sun (http://java.sun.com/docs/index.html)

AMBIENTE DE PROGRAMAÇÃO JAVA

n Existem editores (IDEs) específicos para o desenvolvimento de Aplicativos JavavSUN NetBeansvEclipsevBorland JBuildervJCreatorvBlueJ

INSTALAÇÃOn Fazer o download do J2SDK.n Instalar o arquivo jdk-6u23-windows-i586.exen Somente após o passo seguinte que poderá ser

instalado a IDE de sua preferência (JCreator)n Recomendado incluir as seguintes variáveis de

ambiente, porém, não obrigatório:Ø JAVA_HOME: apontará para o diretório onde o J2SDK foi

instalado = C:\Arquivos programas\Java\jdk1.6.23

Ø CLASSPATH:responsável por definir um caminho de pesquisa para as classes do J2SE = ;.JAVA_HOME

Ø PATH: responsável por definir um caminho de pesquisa para arquivos executáveis. Se está variável não for configurada, o processo de compilação dos programas feitos em Java somente poderá ser executado dentro da pasta “lib” do diretório de instalação do J2SE 6.0 JDK = C:\Arquivos programas\Java\jdk1.6.23\bin

PRIMEIRO PROGRAMA JAVA

Digite o programa “Teste.java”apresentado abaixo, utilizando o Bloco de Notas

/*** Primeiro Programa Java ***/

class Teste{

public static void main(String arg[]){

System.out.println(“Teste em Java”);}

}

PRIMEIRO PROGRAMA JAVA

Hello.java

PRIMEIRO PROGRAMA JAVA

n Compilar o Programa

n Se o programa foi compilado corretamente, um novo arquivo (Hello.class) será criado.

n Interpretar o programajava HelloWorldApp

javac Hello.java

AMBIENTE DE PROGRAMAÇÃO JAVA

ANATOMIA DO PROGRAMA

n Comentáriosn Os comentários em Java seguem a

mesma sintaxe de c.Ø /* texto */Ø // textoØ /*** Primeiro Programa Java ***/n O compilador ignora estas linhas

ANATOMIA DO PROGRAMA

n Definição de Classen É a unidade básica para uma

linguagem OO como Javan class nome {

...}

n class é a palavra reservada que marca o início da declaração de uma classe.

ANATOMIA DO PROGRAMA

n Delimitação de Blocos

Ø um bloco está sempre entre chaves { }ØEm Java as instruções terminam em

ponto-e-vírgula (;)

ANATOMIA DO PROGRAMA

MMéétodo todo mainmainn Toda aplicação java, exceto Applets e

Servlets, deve possuir o método main.public static void main (String args[ ]){

System.out.println("Teste em Java!");}n O método main indica o início de

execução de qualquer programa Java.

ANATOMIA DO PROGRAMA

Argumentos do MArgumentos do Méétodo todo mainmainØ public - é um qualificador do método que

indica que este é acessível externamente a esta classe.

Ø static - é um outro qualificador que especifica o método como sendo um método de classe.

Ø void - indica que não existe retorno a este método.

Ø main - é o nome do método.Ø String args[ ] - Armazena valores

passados por linha de comando.

ANATOMIA DO PROGRAMA

n System.out.println(“Hello World!”)üEscreve na tela o conteúdo nos

parêntesis.üChamada do método println para o

atributo out da classe System.üO argumento (“...”) é do tipo String.

ANATOMIA DO PROGRAMA

n System.out.println(sequência de escape)§ \n (nova linha)§ \t (tabulação horizontal)§ \r (retorno de carro)§ \\ (barra invertida)§ \” (aspas duplas)

DETALHES IMPORTANTES

n Programa fonte tem extensão ‘.java’n Programa compilado tem extensão

‘.class’n A linguagem é “case-sensitive”, letras

maiúsculas são diferentes de letras minúsculas

n Cada programa é uma classe

DETALHES IMPORTANTES

n Nome da classe no programa tem que ser igual ao nome do arquivo físico ‘.java’

n Sintaxe similar a linguagem C/C++n As classes podem estar agrupadas em

packagen Package é um subdiretório. Exemplo:

java.awt, java.mathn As classes podem ser compactadas (zip

ou jar)

ESTRUTURAS DE PROGRAMAÇÃO

nn IdentificadoresIdentificadoresØNomeiam variáveis, funções, classes e

objetosØPodem conter letras e/ou dígitos, “_” e “$”ØNão podem ser iniciados por dígitoØNão podem ser palavras reservadasØNão tem tamanho máximo

ESTRUTURAS DE PROGRAMAÇÃO

VÁLIDOSn Nomen NumDepenn total_geraln NOME

INVÁLIDOSn 1provan total geral

ESTRUTURAS DE PROGRAMAÇÃO

ESTRUTURAS DE PROGRAMAÇÃO

TextoTextonn charchar: representa um caracter Unicode de 16

bits (exemplos: ‘a’, ‘M’, ‘\t’, ‘\u02B1’)– retrocesso– tab– avanço de linha– retorno de carro– aspas– apóstrofo– barra invertida– indica o caracter unicode em hexadecimal

• \b• \t• \n• \r• \”• \’• \\• \u001B

ESTRUTURAS DE PROGRAMAÇÃO

TextoTextonn String:String: representa uma seqüência de

caracteres

String frase;frase = “Ordem e Progresso”;

char opcao;opcao = 'S';opcao = 'N';

ESTRUTURAS DE PROGRAMAÇÃO

nn InteiroInteirobyte 8 bits 27…27-1

short 16 bits 215..215-1

int 32 bits 231..231-1

long 64 bits 263..263-1

ESTRUTURAS DE PROGRAMAÇÃO

nn InteiroInteiro

byte index = 50;short soma = 2000;int num carros = 5;long valor = 0XDADAL;

ESTRUTURAS DE PROGRAMAÇÃO

nn Tipos Ponto FlutanteTipos Ponto Flutante (Real)(Real)• float 32 bits• double 64 bits

n – Representações:• 3.14• 6.02E23• 2.718F• 123.4E+306D

float pi = 3.1415f;double pi = 3.1415;

ESTRUTURAS DE PROGRAMAÇÃO

ESTRUTURAS DE PROGRAMAÇÃO

n Declarações e atribuições de variáveis• As declarações podem ser exibidas em

qualquer posição do código-fonte.int x, y;float z = 3.144f;double w = 3.1415;boolean verdade = true;char c, d;c = 'A';d = '\u0013';x = 6;y = 1000;

ESTRUTURAS DE PROGRAMAÇÃO

nn VariVariááveisveisn Inicialização padrão Java

• variáveis numéricas com zero• variáveis booleanas com false• outras variáveis com null

OPERADORES

nn LLóógicosgicos•• ComparaComparaçãção de valor: = = , !=, !, > e >o de valor: = = , !=, !, > e >• Junção de expressões: &, &&, |, ||• Comparação de objetos: instanceof()

OPERADORES

nn AritmAritmééticosticos• Soma ( + )• Subtração ( - )• Multiplicação ( * )• Divisão ( / )• Resto ( % )

OPERADORES

n Considere um operador @ qualquern Expressões do tipo X = X @ Z podem

ser substituídas por X @= Z

x = x + 3 x += 3

x = x * ( 9 + y ) x *= ( 9 + y )

OPERADORES

n Atenção (programadores C/C++):• O operador + não é apenas aritmético (por

ex. pode ser utilizado para inicialização e concatenação de strings)

• Existe o tipo booleano, logo os operadores relacionais e lógicos NÃO geram inteiros

• Não há conversões automáticas (por ex. real para inteiro)

OPERADORES

n Atenção (programadores C/C++):• int i, j;• float r;• i = r / j; // ERADO!• i = (int) r / j; // OK!

CONTROLE DE FLUXO

n Estrutura de Decisão - If / Elseif (expressão booleana){ instrução ou bloco de comandos }else{ instrução ou bloco de comandos }

if (cont >= 0){

System.out.Println(“Erro !!!”);}else{System.out.println(“Ok !”);}

CONTROLE DE FLUXO

nn Estrutura de DecisEstrutura de Decisãão o -- switchswitchswitch (expressão short, int, byte ou char){

case expressão2: comandos;break;

case expressão3: comandos;break;

default: comandos;break;

}

CONTROLE DE FLUXOnn Estrutura de DecisEstrutura de Decisãão o -- switchswitch

switch (opcao){

case 0:valor = a + b; break;

case 2:valor = (a * b) - c; break;

default:valor = a; break;

}n A instrução break (opcional) impede que o

fluxo de execução continue pelas opções seguintes

n A cláusula default é opcional

CONTROLE DE FLUXO

nn Estrutura de RepetiEstrutura de Repetiçãção o –– forforfor (expr_inicial; expr_booleana; expr_increm){ bloco de comandos }

for (int x=0; x<10; x++){

System.out.println(" Valor do X : " + x);}

CONTROLE DE FLUXO

nn Estrutura de RepetiEstrutura de Repetiçãção o -- whilewhilewhile (expr_booleana){ bloco de comandos }

int cont = 0while (cont < 100){

System.out.println(" contando " + cont);cont++;

}

CONTROLE DE FLUXO

nn Estrutura de RepetiEstrutura de Repetiçãção o -- do do whilewhiledo{ bloco de comandos }while (expr_booleana)

int x = 0;do {

x++;} while (x <10);

VETORES(Arrays)

nn DeclaraDeclaraçãçãoon Podem ser declarados arrays de quaisquer

dos tipos através dos símbolos “[” e “]”.n A declaração não cria o array, isto é, não

aloca memória. Isso é feito pela instrução new (arrays são objetos em Java).

n char s[ ]; // declaraçãon s = new char[3]; // Criaçãon s[0] = ‘A’; s[1] = ‘B’; s[2] = ‘C’; // atribuição

VETORES(Arrays)

nn DeclaraDeclaraçãçãoo• Os colchetes podem ser usados antes

ou depois da variável.• Exemplo:üchar s[ ];üchar [ ]s;

VETORES(Arrays)

n Declarando, criando e iniciando um array

n Em Java array é um objeto, mesmo quando é composto por tipos primitivos. Apenas a declaração não cria o objeto, sendo necessário o uso da palavra reservada new.

char s[ ] = {'A', 'B', 'C'};// declaração, criação e incialização

int p[ ] = new int[5];p[0] = 25;p[1] = 32;

VETORES(Arrays)n Alocação de Memória

n Quando um array é criado, todos os seus elementos são inicializados.

VETORES(Arrays)

n Arrays não podem ser dimensionados na definição:

n Arrays não podem ser utilizados sem a criação:

int vector[5]; //ERRADO!

int vector[];vector[0] = 4; //ERRADO!

VETORES(Arrays)

n Para determinarmos o seu tamanho podemos usar o método length:

int lista [] = new int [10];for (int j = 0; j < lista.length; j++){

System.out.println(lista[j]);}

VETORES(Matrizes)

nMulti-dimensionais

int lista [] = new int [10];int matriz [][] = new int[4][5];matriz [0][0] = 300;matriz [1][3] = 600;

For “aprimorado”

n Esse for permite percorrer um array ou um enum (ou ainda uma Collection –que só veremos láááá na frente) de forma mais simples

n Definimos o tipo que é retornado pelo array ou pelo enum, e pegamos a lista a percorrer

Pra usar o for com array

public class TestaFor {public static void main(String args[]) {

int a[] = {4,5,6,3,4,2,1};for (int i : a) {System.out.println(i);

}}

}

Java e Orientação a ObjetosJava e Orientação a Objetos-- Conceitos Principais Conceitos Principais --

Prof. Giuliano Prado de Morais Giglio, M.Sc.

A Plataforma JavaA Plataforma JavaProgramação Orientada a Programação Orientada a

Objetos em JavaObjetos em Java

Orientação a ObjetosnHistória da OO

• Programação sob demanda• Programação estruturada• Orientação a Objetos

nDiversos avanços foram realizados na área acadêmica ainda na década de 70nA partir da década de 80 começou a ser

adotada tomando seu espaço nos anos 90

Orientação a Objetosn O paradigma estruturado trata de funções

e procedimentos aplicados a dadosn O paradigma orientado a objetos trata de

dados e comportamentos

funções

dados

Paradigma Estruturado

dados

funções

Paradigma OO

Orientação a Objetos

PCuidado ! Orientação a Objetos não elimina a programação estruturada. Dentro dos métodos (que definem o comportamento de um objeto) usamos a programação estruturada.

Orientação a Objetosn Classes e Objetos – constituem a unidade

de representação de dados para esse paradigma. E mantém uma relação muito próxima entre si.

n Podemos pensar na Classe como a forma da peça ou do bolo, e nos objetos como peças prontas feitas de matéria prima.

Orientação a Objetos

Orientação a Objetosn Classes definem novos tipos de dados, tal

como structs de C ou registers de Pascal.n A partir de novos tipos de dados torna-se

mais fácil organizar a aplicação em questão.

n Um objeto é uma instância de uma classe, ou seja, um exemplar do conjunto de objetos que seguem os moldes daquela classe

Orientação a Objetosn Atributos – são os “campos” que contém

as informações daquela classe. Ao conjunto de atributos preenchidos de um objeto damos o nome de “estado do objeto”

n Existem atributos de classe e atributos de instância.

Orientação a ObjetosnMétodos – definem o comportamento dos

objetos definidos pela classe.n Por comportamento entendemos o

conjunto de reações ou atividades que os objetos podem desempenhar.

n Exemplo: Classe Avião, método decolar, método pousar, etc...

nMétodos podem ter parâmetros de entrada e retorno

Java e Orientação a ObjetosJava e Orientação a Objetos-- Implementação Implementação --

Prof. Giuliano Prado de Morais Giglio, M.Sc.

A Plataforma JavaA Plataforma JavaProgramação Orientada a Programação Orientada a

Objetos em JavaObjetos em Java

DEFINIÇÃO DE UM OBJETO

n Um objeto pode ser descrito por um conjunto de atributos (propriedades) e seu comportamento:

DEFINIÇÃO DE UM OBJETO

n Um cachorro possui um estado (nome, cor, raça) e um comportamento (latindo, mordendo, lambendo).

COMPORTAMENTO

DescansandoUivando

ATRIBUTOS

PlutoDouradoVira-latas

CLASSES DE OBJETOS

n “Grupo de objetos com os mesmos atributos e o mesmo comportamento pertencem à mesma classe.”

CLASSES DE OBJETOS

n Uma classe é um modelo ou protótipo que define as propriedades e métodos (comportamento) comuns a umconjunto de objetos.

n Classes são “moldes” que definem asvariáveis e os métodos comuns a todos os objetos de um determinado tipo.

CLASSES DE OBJETOS

n No mundo real existem vários objetos do mesmo tipo. Por exemplo, a sua bicicleta é uma das milhares que existem no mundo.

n Usando a terminologia de orientaçãoa objetos, o objeto sua bicicleta éuma instância da classe de objetos bicicleta.

CLASSES DE OBJETOS

nn Classes XClasses X ObjetosObjetosØUma classe é um “molde” a partir do

qual vários objetos são criados.

ORIENTAÇÃO A OBJETOS EM JAVA

n Programas em Java provavelmente irão criar diversos objetos de diversos tiposde classes.

n Os objetos interagem entre si através da troca de mensagens.

n Após o objeto ter realizado o trabalho proposto, o mesmo é eliminado através da “coleta automática de lixo”.

REPRESENTAÇÃO DE UMA CLASSE

Atributos

Métodos

Classe

ESTRUTURA DE UMA CLASSE EM JAVA

class BirthDate{int daya;int month;int year;

int getDay(){…

REFERÊNCIA A UMA CLASSE EM JAVA

BirthDate myBirthDate;

CLASSES EM JAVA

n Declaração:class Ponto {...}n Propriedades: dados que as instâncias da

classe conterão:class Ponto {float x, y;}

CLASSES EM JAVA

class Veiculo {// Propriedadesprivate float velocidadeMaxima;protected float capacidadeTanque, consumo;protected int potencia, ano;protected String marca, modelo, cor;public String chassis, placa;...// Métodos...public float autonomia ( ) {

return capacidadeTanque * consumo;}

}

CLASSE = “Molde de Objetos”

Objeto Carro:Instância 3

Classe:CarroEsportivo

Tempo de ExecuçãoTempo de Compilação

CRIAÇÃO DE OBJETOS(INSTANCIAÇÃO)

n Um objeto de uma classe é criado utilizando-se a palavra new.

Date mayBirthDate = new Date();

EXEMPLO

REFERÊNCIAS PARA OBJETOS

n Alocação de memória:

Ponto p1;// cria apenas a referência

Ponto p1 = new Ponto();// aloca memória e atribui// endereço à referência

DIFERENÇA COM TIPOS PRIMITIVOS

n Quando se declara variáveis de qualquer tipo primitivo (int, float, char, etc.), o espaço na memória é alocado como parte da operação.

n A declaração de uma variável de classe não aloca memória, somente quando a instrução new é chamada.

DIFERENÇA COM TIPOS PRIMITIVOS

REFERÊNCIA PARA OBJETOS

n Alocação de memória

Ponto p2 = p1;// cria outra referência// para o mesmo objeto

ATRIBUIÇÃO DE VALORES

n As propriedades dos objetos podem ser manipuladas diretamente pelo operador de ponto (.)Ponto p1 = new Ponto();p1.x = 1;p1.y = 2;

// p1 representa o ponto (1,2)Ponto p2 = new Ponto();p2.x = 3;p2.y = 4;

// p2 representa o ponto (3,4)p1 = p2;p1.x = 10;// p1 representa o ponto (10,4)// p2 representa o ponto (10,4)

OBTENÇÃO DE VALORES

n Os valores das propriedades podem ser obtidos facilmente

System.out.pritln("p1.x = " + p1.x + ".");System.out.pritln("p2.x = " + p2.x + ".");

// p1.x = 10.// p2.x = 10.

MÉTODOS

n Definem o comportamento da classe.n Declaração:

class Ponto {int x, y;void mover (int dx, int dy)

x += dx;y += dy;

}}

MÉTODOS

n Implementam as funções de uma classe

n Possuem sintaxe semelhante à sintaxe de definição das funções de um programa procedural

n Determinam o comportamento da classe e a troca de mensagens com outras classes

MÉTODOS

ASSINATURA DE UM MÉTODO

O tipo de retorno pode ser void

CHAMADAS DE MÉTODOS

n A troca de mensagens entre os objetos érealizada através da chamada de métodos com passagem de argumentos

n Exemplo...p1.mover(10,l0);//Deslocou p1 dez unidades, nos doiseixos....

EXEMPLO

class ProgramaPrincipal{

public static void main (String args[]) {

Funcionario func;func = new Funcionario(“Juca”,102);

}

MÉTODO “Main”

class ProgramaPrincipal {public static void main (String args[]){

Funcionario func;func = new Funcionario(“Juca”,102);

}}

PALAVRA RESERVADA “This”

n As vezes é necessário que o objeto se referencie.

n Existe uma palavra reservada this que significa uma referência ao próprio objeto

class Ponto {int x, y;void mover (int x, int y) {

this.x = x;this.y = y;

}}

PALAVRA RESERVADA “This”

n Quando o método é chamado, a palavra-chave ‘this’ refere-se ao objeto classStartDate

PASSAGEM DE ARGUMENTOS

n Tipos de argumentosn Objetos → passagem por referência.

• Originais são sujeitos a alterações dentro do método.

n Tipos primitivos → passagem por valor.• Originais não são sujeitos a alterações

dentro do método.

PASSAGEM DE ARGUMENTOS

n Tipos de argumentosclass Ponto {public int x, y;Ponto (int x, int y) {

this.x = x;this.y = y;

}public void teste (Ponto pt, int i) {

pt.x = 3;pt.y = 4;i = 1;

}

PASSAGEM DE ARGUMENTOS

n Tipos de argumentos...public static void main (String args[]) {

Ponto ponto = new Ponto(1,2);int i = 2;

// Antes, ponto=(1,2) e i = 2.ponto.teste(ponto,i);// Depois, ponto=(3,4) e i = 1.

}}

VARIÁVEIS LOCAIS

n Além das propriedades de um objeto, podem ser definidos outros tipos de variável, locais a um método ou a um bloco de operações.

float calculaMedia(float p1, float p2) {

float media = (p1 + p2)/2;return media;

}

VARIÁVEIS LOCAIS

...String alunos[];float listaAprovados() {

for (int i = 0; i < alunos.length;i++) {String nome = alunos[i];System.out.println(i + ": " + nome);

}}

CONSTRUTORES

n Devemos usar construtores quando queremos definir o estado inicial de objetos de uma classe (atribuir valores aos atributos de um objeto no momento de sua criação, por exemplo)

n Usados na criação de um objeto através do comando new

n Possuem o mesmo nome da classe e não têm tipo de retorno!

CONSTRUTOR PADRÃO

n A linguagem Java declara um construtor padrão, vazio, que não recebe nenhum parâmetro

Ponto p1 = new Ponto();n Quando declaramos um novo construtor,

esse construtor padrão deixa de existir e ésubstituído pelo novo construtor

class Ponto {int x; int y;Ponto () {}

}

CONSTRUTORES

n Podem receber parâmetros, que podem servir para inicialização dos atributos da classe

n Uma classe pode ter vários construtoresclass Ponto {

int x;int y;Ponto (int x, int y) {

this.x = x;this.y = y;

}}

CONSTRUTORES

n Deve ser usado no momento da criação do objeto:Ponto p1 = new Ponto(1,2);Ponto p2;

p2 = new Ponto(3,4);

Ponto p3 = new Ponto();

CONSTRUTORES

CONSTRUTORES

STRINGS

n Uma string não é um tipo primitivo, éuma classe pré-definida do Java. São seqüências de caracteres.

n Pode ser criado com ou sem a palavra new.

String e = ""; // uma string vaziaString alo = "Alo Pessoal";String nova;nova = "Sou nova";String nome = new String("Antonio");

STRINGS

n Operações com String new.

// ConcatenaçãoString nova = alo + ", tudo Ok ? ";

// EdiçãoString substr = alo.substring(0,3); // "Alo"

// Verificando tamanhoint tam = alo.length(); // tamanho = 11

MEMBROS DE CLASSE

n Pode-se definir numa classe membros que sejam compartilhados por todas instâncias daquela classe.

n Esses membros são chamados de “membros de classe”. Podem ser:• propriedades (variáveis)• métodos

n Todo membro de classe deve usar o qualificador static.

VARIÁVEIS DE CLASSE

n Exemplo:class Pessoa {

static int numPessoas = 0;int id;Pessoa () {

id = numPessoas;numPessoas++;

}...

}

VARIÁVEIS DE CLASSE

VARIÁVEIS DE CLASSE

n Exemplo:Pessoa joao = new Pessoa ();// joao.id = 0;// joao.numPessoas = 1;

Pessoa ana = new Pessoa();// ana.id = 1;// ana.numPessoas = 2;

n Fazer este exemplo, imprimindo (id) e (numPessoas).

VARIÁVEIS DE CLASSE

n Os membros de classe podem ser acessados diretamente, sem necessidade da existência de um objeto.

Pessoa.numPessoas = 100;// Próxima pessoa criada será 101

ESCOPO DE VARIÁVEIS

n Ao utilizar o nome de uma variável dentro de um método, Java procurará a sua definição na seguinte ordem:

blocobloco mais externométodovariável de instância ou classesuper-classe

MÉTODOS DE CLASSE

class Example {..

static int multiply10(int value) {..

}}

§ Exemplo:int value = "100";int new_value = Example.multiply10(value);System.out.println("n.v = " + new_value);

CONSTANTES

n Podem ser:• variáveis (de instância, de classe ou

locais)• métodos

n São declaradas com a palavra reservada final

CONSTANTES

class Teste {// Variáveis constantesfinal int ESQUERDA = 0;final int DIREITA = 0;

// Método constanteprivate final static void main (String args[]) {..}..

}

ENCAPSULAMENTO

n Através dos métodos podemos atingir uma das principais características da orientação a objetos. O encapsulamento, que é a capacidade de esconder do mundo exterior as estruturas internas de uma classe.

n O encapsulamento define que os atributos só são acessados através de métodos o que evita o acoplamento

ENCAPSULAMENTO

n É a forma de restringir o acesso aos métodos e propriedades de uma classe.

n Protege os dados de um objeto contra uma modificação imprópria.

n É necessário definir o controle de acesso aos métodos e propriedades de uma classe, de forma que não se interfira no seu funcionamento.

CONTROLE DE ACESSO

n Os membros de uma classe podem ser protegidos de acessos indevidos

nMétodos de acesso: public e private• public: membros podem ser acessados

livremente• private: membros só podem ser

acessados pela própria classe (necessário definir os accessor methods - get e set)

CONTROLE DE ACESSO

n Exemploclass Pessoa {

private nome;private idade;public obs;Pessoa (String nome, int idade){

this.nome = nome;}public imprimeNome() {

System.out.println(“Nome: ” + nome);}

}

CONTROLE DE ACESSO

n Exemplo

Pessoa p1 = new Pessoa("Joao",10);

p1.nome = "Raul";//ERRO DE COMPILAÇÃO!

p1.obs = "bom garoto"; //OK!

p1.imprimeNome(); //OK!// Nome: Joao

SOBRECARGA DE MÉTODOS

n Sobrecarregar um método significa definir dois ou mais métodos com o mesmo nome, porém com assinaturas diferentes.

n Assinatura diferente pode ser: tipo de retorno, número ou tipos de parâmetros diferentes.

SOBRECARGA DE MÉTODOS

n A sobrecarga pode ser feita igualmente aos métodos construtores

n Uma boa prática é usar a sobrecarga, somente, em métodos que possuam a mesma funcionalidade.

SOBRECARGA DE MÉTODOS

n Exemplo

SOBRECARGA DE MÉTODOS

n Exemploclass Ponto {...void mover (int dx, int dy) {

x += dx;y += dy;

}void mover (int raio, float ang) {

raio*Math.cos(ang);raio*Math.sen(ang);

}}

SOBRECARGA DE CONSTRUTORES

n Exemploclass Ponto {

int x;int y;Ponto () {}Ponto (int x, int y) {

this.x = x;this.y = y;

}...

}

SOBRECARGA DE CONSTRUTORES

n A sobrecarga de construtores visa definir formas diferentes de criar um objeto

n Exemplo:Ponto p1 = new Ponto();//p1 está em (0,0)

Ponto p2 = new Ponto(1,2);//P2 está em (1,2)

SOBRECARGA DE CONSTRUTORES

n Um construtor pode chamar outro construtor.

n Isso se chama “encadeamento de construtores”.

n Para isto é necessário usar a palavra reservada this.

n Uma chamada a outro construtor deveráser a primeira linha do construtor!

SOBRECARGA DE CONSTRUTORES

n Exemplo:class Ponto {

int x=0;int y=0;Ponto () {

this(0,0);}Ponto (int x, int y) {

this.y=y;}

}

O QUE É HERANÇA?

O QUE É HERANÇA?

n Herança é um mecanismo que permite a uma classe herdar todo o comportamento e os atributos de outra classe.

n Uma classe que herda de outra classe é chamada subclasse e a classe que fornece a herança é chamada superclasse.

O QUE É HERANÇA?

n A classe A é a superclasse de Bn A classe B é uma subclasse de An A classe B é a superclasse de C, D e En As classes C, D e E são subclasses de B

HERANÇA

n As superclasses definem atributos e métodos genéricos que são herdados pelas classes derivadas.

n Um método herdado de uma superclasse pode ser redefinido pela classe derivada, mantendo o mesmo nome mas agindo de forma diferente.

n Normalmente os atributos de um objeto sópodem ser consultados ou modificados através dos seus métodos (accessor methods).

HERANÇA EM JAVA

n Java adota o modelo de árvore

n A classe Object é a raiz da hierarquia de classes à qual todas as classes existentes pertencem;

n Quando não declaramos que uma classe estende outra, ela, implicitamente, estende Object

HERANÇA EM JAVA

n Uma classe Java estende apenas uma outra classe (herança simples ou única)

n Para criar uma sub-classe, usamos a palavra reservada extends

HERANÇA EM JAVAn Como os métodos são organizados em

uma hierarquia de classes:

HERANÇA EM JAVA

n Funcionamento quando uma subclasse define um método que possui o mesmo nome, tipo de retorno e argumentos que um método definido em uma superclasse.

HERANÇA EM JAVA

EXEMPLO DE HERANÇA EM JAVA

SOBRECARGA E ANULAÇÃO

n Sobrecarga de Métodos (overloading)• Definir mais de um método com mesmo nome

mas com assinaturas (parâmetros) diferentes.n Anulação de Métodos (overriding)

• Definir um novo método com mesmo nome e assinatura de outro de uma superclasse.

n Métodos final não podem ser sobrepostos.

EXEMPLO DE SOBRECARGA E ANULAÇÃO

THIS e SUPER

n Usados quando for necessário referenciar explicitamente a instância (this) ou a superclasse (super).

CONTROLE DE ACESSO:‘PROTECTED’

n Java permite declararmos um membro (método ou atributo) que, embora não seja acessível por outras classes, é herdado por suas sub-classes

n Para isso usamos o modificador de controle de acesso protected

RESUMO DE VISIBILIDADE

n Resumindo:• private: membros que são vistos só pela própria

classe e não são herdados por nenhuma outra• public: membros são vistos e herdados por qualquer

classe• protected: membros que são vistos pelas classes do

pacote e herdados por qualquer outra classe• package: membros que são vistos e herdados pelas

classes do pacote

ESPECIALIZAÇÃO X EXTENSÃO

n Uma classe pode herdar de outra para especializá-la redefinindo métodos, sem ampliar sua interface

n Uma classe pode herdar de outra para estendê-la declarando novos métodos e, dessa forma, ampliando sua interface.

n As duas coisas podem acontecer simultaneamente

POLIMORFISMO

nPolimorfismo – as definições clássicas (e confusas) de polimorfismo são:A - “Capacidade que uma operação [método]

assumir mais de uma implementação em classes diferentes”

eB - “Capacidade de um determinado atributo

referenciar objetos de diferentes tipos, assumindo assim várias formas”

POLIMORFISMO

n A situação “A” significa que se considerarmos uma hierarquia de classes as diferentes subclasses podem redefinir um determinado método da classe pai (ou base).

n A situação “B” significa que podemos ter um atributo (ou variável) definido como do tipo base, mas referenciando objetos das subclasses.

POLIMORFISMO

n A importância do polimorfismo está no fato de que, em determinadas circunstâncias, podemos ter um atributo (ou variável) do tipo base referenciado objetos das classes derivadas [B] e executaremos um método definido na classe base porém redefinido nas subclasses [A].

POLIMORFISMO

n É a capacidade de um objeto tomar várias formas

n A capacidade polimórfica decorre diretamente do mecanismo de herança

n Ao estendermos ou especializarmos uma classe, não perdemos compatibilidade com a superclasse

POLIMORFISMO

n Exemplo• Veículo é uma superclasse

n Automóvel é subclasse de veículo• class Veiculo{...}• class Automovel extends Veiculo {...}

n Sempre que precisarmos de um Veículo, podemos usar um Automóvel, ou um Caminhão, ou Ônibus em seu lugar

POLIMORFISMO

n Podemos criar um vetor de Veículos. Este poderá conter Automóveis:

Veiculo [ ]veiculos = new Veiculo[5];Veiculos[0] = new Veiculo();Veiculos[1] = new Automovel(“JKL5098”);

POLIMORFISMO

n Exemplo:– public class Employee {}– public class Manager extends Employee– { private String department;}

– Employee e = new Manager(); (OK)– e.department = “Financeiro”; (ERRADO)

POLIMORFISMO

n Polimorfismo é o nome formal para o fato de que, quando precisamos de um objeto de determinado tipo, podemos usar uma versão mais especializada dele. Esse fato pode ser bem entendido analisando-se a árvore de hierarquia de classes.

OPERADOR ‘INSTANCEOF’

n Java mantém informações de tipo em tempo de execução e nos permite consultá-las através do comando instanceof

Veiculo vc = new Veiculo( );boolean b = vc instanceof Automovel;// b = false

OPERADOR ‘INSTANCEOF’n Utilizado para saber o real tipo do objeto

usado.

CONVERSÃO DE TIPOSn Exemplos:

STRING STRING ⇒⇒ VALOR NUMVALOR NUMÉÉRICORICOString str = "34";

int num_int = Integer.parseInt(str);float num_float = Float.parseFloat(str);double num_double = Double.parseDouble(str);

VALOR NUMVALOR NUMÉÉRICO RICO ⇒⇒ STRING STRING Integer.toString(num_int);

String valor_str = Float.toString(num_float);Double.toString(num_double);

CLASSES ABSTRATAS

n Ao criarmos uma classe para ser estendida, às vezes, codificamos alguns métodos para os quais não sabemos dar uma implementação, ou seja, um método que só subclasses saberão implementar.

n Uma classe deste tipo não pode ser instanciada pois sua funcionalidade estáincompleta. Tal classe é dita abstrata.

CLASSES ABSTRATAS EM JAVA

n Java suporta o conceito de classes abstratas: podemos declarar uma classe abstrata usando o modificador abstract.

n Métodos podem ser declarados abstratos para que suas implementações sejam adiadas para as subclasses. Da mesma forma, usamos o modificador abstract e omitimos a implementação desse método.

CLASSES ABSTRATAS EM JAVA

INTERFACES

n Java não permite herança múltipla com herança de código

n Java implementa o conceito de interfacen É possível herdar múltiplas interfacesn Em Java, uma classe estende uma outra

classe e implementa zero ou mais interfaces

n Para implementar uma interface em uma classe, usamos a palavra implements

INTERFACES

INTERFACES

n Uma vez que uma interface não possui implementação, devemos notar que:• seus campos devem ser públicos, estáticos e

constantes• seus métodos devem ser públicos e abstratos

n Como esses qualificadores são fixos, não precisamos declara-los (note o exemplo anterior)

Enumerações

n enum• Permitem criar um novo tipo de dado

parecido com um primitivo que recebe um conjunto de constantes ordenadas e separadas por “,”

• Exemploüenum Meses { Jan, Fev, Mar, Abr, Mai, Jun,

Jul, Ago, Set, Out, Nov, Dez };

Enumerações

n “Tá, mas... Pra que eu quero isso ??”n Enumerações simplificam o trabalho de

criar certos domínios que não precisam estar em banco de dados, como por exemplo constantes que definem mensagens do sistema, status de objetos, entre outros.

Enumerações

n Quando usamos enumerações não precisamos comparar com números inteiros, o próprio nome da constante definida é utilizado.

n Exemplo:• if ( mes == Meses.Jan) ...

Enumerações

nMas não é só isso ! Em Java você ainda recebe uma incrível forma de criar enumerações com objetos ! É isso mesmo! Com direito a atributos e métodos!

n Ligando agora você ainda recebe esse incrível kit compilador, ele até flutua na água !

Enumerações

public enum Mes {Jan(“Janeiro”, “01”), Fev(“Fevereiro”, “02”),Mar(“Março” , “03”), Abr(“Abril”, “04”),Mai(“Maio”, “05”), Jun(“Junho”, “06”);

private final String nome;private final String numero;

Mes(String n, String num) {nome = n;numero = num;

}public String getNome() { return nome; }public String getNumero() { return numero; }

}

Enumerações

public class TestaMes {public static void main(String args[]) {

for (Mes m : Mes.values()) {System.out.println(m + “ ” +

m.getNome() + “ ” +m.getNumero());

}}

}

nMas que for é esse ??

Collections

n É um conjunto de classes e interfaces do pacote java.util que fornecem inúmeras facilidades para trabalhar com coleções de objetos

n Existem vários algoritmos de ordenação e detalhes no uso de Collections. Vamos ver as principais características para o uso de coleções.

Collections

n Collections é uma interface que conta com os seguintes métodos :• isEmpty() – indica se a coleção está vazia• contains(Object o) – true/false para o caso

da coleção conter o objeto• iterator() – retorna o objeto para iteração

pela coleção

Collections –percorrendo

import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;

public class TesteCollections {

public static void main(String[] args) {ArrayList a = new ArrayList();percorre(a);

}

private static void percorre(Collection c) {Iterator i = c.iterator();

while(i.hasNext()) {System.out.println(i.next());

}}

}

Collections – ArrayList

n Permite a criação de um “Array” que funciona como uma lista. A grande vantagem é que pode aumentar o tamanho de forma automática, não é estático como os arrays tradicionais.

n Além disso, é recomendado para criarmos uma Lista de objetos de um determinado tipo.

Collections – ArrayList

n Principais métodos:• add(Object o) – adiciona o objeto passado• add(int i, Object o) – adiciona o objeto na posição

indicada.• clear() – limpa o arraylist• get(int i) – retorna o objeto na posição passada• remove(int i) – remove o objeto na posição

indicada• size() – retorna o tamanho do arraylist

ArrayList - Exemplo

List<Funcionario> list = new ArrayList <Funcionario>( );

list.add(new Funcionario(nome,endereco,telefone,estado) );

Funcionario f;for (int i = 0; i < list.size(); i++){

f = list.get(i);f.aumentarSalario(30);

}

Collections – HashMap

n Permite criar um hash onde teremos pares de chave/valor.

n Podemos incluir objetos com suas chaves e as chaves não serão repetidas. Além disso aceita null como chave.

n Permite retornar um iterator para percorrermos tanto chaves quanto valores.

Collections – HashMap

n Principais métodos:• containsKey(Object o) – verifica se o objeto

passado é uma chave• containsValue(Object o) – verifica se o objeto

passado é um valor• get(Object key) – retorna o valor da chave

passada• put(Object key, Object val) – insere na chave key

o valor val.• values() – retorna uma Collection com os valores• keySet() – retorna um Set com as chaves (permite

o iterator)

Collections –percorrendo

import java.util.Collection;import java.util.HashMap;import java.util.Iterator;

public class TesteHashMap {

public static void main(String[] args) {HashMap hm = new HashMap();hm.put("primeiro", 1);hm.put("segundo", 2);System.out.println("containsKey(primeiro)" + hm.containsKey("primeiro"));System.out.println("containsValue(segundo)" + hm.containsValue("segundo"));System.out.println("get(primeiro)" + hm.get("primeiro"));System.out.println("put(terceiro, 3)" + hm.put("terceiro",3));Collection c = hm.values();percorre(c);Collection c2 = hm.keySet();percorre(c2);

}

private static void percorre(Collection c) {Iterator i = c.iterator();while(i.hasNext()) System.out.println(i.next());

}}

Tratamento de Exceções

n O tratamento de exceções é uma importante etapa do desenvolvimento de software.

n Em outras linguagens esse mecanismo é complexo e/ou confuso.

n Em Java usamos um bloco try/catch que “tenta” executar um conjunto de instruções e caso aconteça uma exceção ele a “pega” e provê o tratamento adequado.

Tratamento de Exceções

n Os blocos try/catch são complementados pelos blocos finally (que são opcionais).

n Blocos finally são *sempre* executados, somente uma instrução System.exit() pode impedir um bloco finally de executar.

n Usamos blocos finally para executar instruções de “limpeza” tal como fechar statements, resultsets e conexões a banco.

Tratamento de Exceções

public int getInteiro() {

int i = 0;try {

String str = JOptionPane.showInputDialog(“digite um numero”);

i = Integer.parseInt(str);} catch (NumberFormatException e) {

System.out.println(“string nao pode ser convertida”);i = -1;

} finally {System.out.println(“esta e a ultima parte”);

}return i;

}

Java – Datas

n Usamos as seguintes classes:• Calendar• Date• DateFormat

n As datas são contadas a partir de January 1, 1970 00:00:00.000 GMT (Gregorian) baseado no padrão POSIX

n Procurem na Internet – problemas com o ano 2038...

Java – Datasn A classe Calendar não pode ser

instanciada diretamente, para isso usamos o método getInstance() como a seguir :

n Com esta instancia em mãos temos a representação do instante em que o código foi executado e podemos referenciar data e hora

Calendar c = Calendar.getInstance();

Java – Datasn Uma atividade comum é usar o método

getTimeInMillis() para recuperar o instante atual em milissegundos para contabilizar quanto tempo uma certa atividade tomou:

n Se fizermos isso antes e depois de uma determinada tarefa, podemos subtrair os tempos obtidos, mas medir uma única instrução pode não gerar diferença.

long l = c.getTimeInMillis();

Java – Datas

n Na classe Calendar ficam definidas várias constantes que permitem acessar as informações relativas a dia, mês, ano, hora, minutos, segundos entre outros.

Calendarpublic static void main (String args[]) {

Calendar c = Calendar.getInstance();System.out.println(c.get(Calendar.DAY_OF_MONTH));System.out.println(c.get(Calendar.DAY_OF_WEEK)); System.out.println(c.get(Calendar.DAY_OF_WEEK_IN_MONTH));System.out.println(c.get(Calendar.DAY_OF_YEAR));System.out.println(c.get(Calendar.HOUR));System.out.println(c.get(Calendar.HOUR_OF_DAY));System.out.println(c.get(Calendar.MINUTE));System.out.println(c.get(Calendar.MILLISECOND));System.out.println(c.get(Calendar.MONTH));System.out.println(c.get(Calendar.SECOND));System.out.println(c.get(Calendar.WEEK_OF_MONTH));System.out.println(c.get(Calendar.WEEK_OF_YEAR));System.out.println(c.get(Calendar.YEAR));

}

Java – DateFormater

n Para formatar uma String como Date ou converter um Date para String usamos a classe DateFormater.

DateFormaterpublic static void main (String args[]) {

Calendar c = Calendar.getInstance();DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);

// podemos usar FULL, LONG, MEDIUM ou SHORTSystem.out.println(df.format(c.getTime()));try {

df = DateFormat.getDateInstance(DateFormat.SHORT);c.setTime(df.parse("05/05/2007"));c.set(Calendar.HOUR,13); c.set(Calendar.MINUTE,15);

df = DateFormat.getDateInstance(DateFormat.SHORT);System.out.println(df.format(c.getTime()));System.out.println(df.parse("05/05/2006"));

df = DateFormat.getTimeInstance(DateFormat.SHORT);System.out.println(df.format(c.getTime()));System.out.println(df.parse("10:10 pm"));

df = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT);System.out.println(df.format(c.getTime()));System.out.println(df.parse("05/05/2006 10:34 am"));

} catch (ParseException e) {e.printStackTrace();

}}

Exercício

n Escreva um programa que receba uma data de nascimento (formato americano) através de um JOptionPanee calcule a idade em segundos.