Aula de Java 1 Conceitos Básicos

Documentos relacionados
AULA DE JAVA 1 - CONCEITOS BÁSICOS

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Java na Prática. Célio Silva Aula 3

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Introdução à orientação a objetos

Simulado de Linguagem de Programação Java

Introdução à Programação de Computadores Parte I

Criar a classe Aula.java com o seguinte código: Compilar e Executar

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais

Programação Orientada a Objeto Java

Lição 9 Trabalhando com bibliotecas de classes

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

BC-0505 Processamento da Informação

A Linguagem Java. Alberto Costa Neto DComp - UFS

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Conteúdo programático

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

2 Orientação a objetos na prática

JAVA. Fabrício de Sousa

Sintaxe Básica de Java Parte 1

Programação Orientada a Objetos! Java - Fundamentos. Prof. Sérgio Almagro! sergio.ricardo.almagro@gmail.com

Orientação a Objetos

insfcanceof new public switch transient while byte continue extends for int null

Desenvolvimento Web TCC Turma A-1

Linguagens de. Aula 02. Profa Cristiane Koehler

LINGUAGEM JAVA - RESUMO

Técnicas de Programação II

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Programação por Objectos. Java

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

CURSO DE PROGRAMAÇÃO EM JAVA

Fundamentos de Programação. Diagrama de blocos

INF1007: Programação 2 9 Tipos Abstratos de Dados. (c) Dept. Informática - PUC-Rio 1

Programação de Computadores - I. Profª Beatriz Profº Israel

Java Como Programar, 8/E

Aula 11: Desvios e Laços

Módulo 06 Desenho de Classes

Java. Marcio de Carvalho Victorino

Lógica de Programação. Profas. Simone Campos Camargo e Janete Ferreira Biazotto

Fundamentos de Sistemas Operacionais

BSI UFRPE Prof. Gustavo Callou

Técnicas de Programação II

Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads.

Programação Orientada a Objetos (DPADF 0063)

Organização de programas em Java. Vanessa Braganholo

UNIVERSIDADE DO TOCANTINS TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PRÁTICA EM PROGRAMAÇÃO DE SISTEMAS

JavaScript 2.0X X

Herança. Prof. Leonardo Barreto Campos 1

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da

Desenvolvimento OO com Java 3 Estruturas de Controle e Programação Básica

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

JAVA. Introdução. Marcio de Carvalho Victorino. Page 1 1/40 2/40

Prof. Esp. Adriano Carvalho

Programação Orientada a Objetos

MDS II Aula 04. Concepção Requisitos Diagrama de Casos de Uso (Use Cases)

Faculdade Instituto Educare - FIED Curso: Sistemas de Informação Disciplina: Linguagem de Programação I Prof.: Rhyan Ximenes rxbrito@gmail.

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

DEFINIÇÃO DE MÉTODOS

Curso C: Ponteiros e Arrays

Programação Orientada a Objetos em java. Polimorfismo

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Características de Java

Linguagem de Programação

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Algoritmos APRENDENDO A PROGRAMAR COM C#

Utilizem a classe Aula.java da aula passada:

FastCube 2.0 Programmer Manual

Programação por Objectos. Java

Redes de Computadores

Noções sobre Objetos e Classes

Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.1/26

Projeto de Software Orientado a Objeto

LINGUAGEM DE PROGRAMAÇÃO JAVA

Programação por Objectos. Java

Informática I. Aula Aula 19-20/06/06 1

Inteligência Artificial

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

ESTRUTURA BÁSICA DE UM PROGRAMA JAVA

Universidade Federal de Uberlândia

Java 1 visão geral. Vitor Vaz da Silva

Revisão OO Básico. Orientação a Objetos em Java

POO Programação Orientada a Objetos. Classes em Java

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Módulo 07 Características Avançadas de Classes

TUTORIAL MATLAB Victor Breder 2016

Programação 2009/2010 MEEC - MEAer Laboratório 5 Semana de 26 de outubro de 2009

3 Classes e instanciação de objectos (em Java)

FBV - Linguagem de Programação II. Um pouco sobre Java

Sobre o Professor Dr. Sylvio Barbon Junior

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Transcrição:

Aula de Java 1 Conceitos Básicos DAS 5316 Integração de Sistemas Corporativos Saulo Popov Zambiasi popov@gsigma.ufsc.br

Roteiro Introdução Fases de um programa Java Strings Entrada e Saída Arrays Classes Atributos Métodos Construtores Herança Packages Interfaces 05/12/06 2

Java Java é um ambiente de execução completo, não apenas a linguagem de programação. Programas Java são compilados para bytecode, ou seja, um código assembly independente de arquitetura; O bytecode é interpretado na Java Virtual Machine (JVM); Compilação JIT (Just in Time) A medida que a JVM detecta que um trecho de código será executado diversas vezes, este é convertido, e passa a executar na CPU real. 05/12/06 3

Fases de um programa Java Edição package br.ufsc.gsigma; Editor class Program public static void ma System.out.printl Disco 05/12/06 4

Fases de um programa Java Compilação package br.ufsc.gsigma; class Program public static void ma System.out.printl Compilador Bibliotecas bytecode 1110010100101010101010100 1001010010101001010101001 0101101101010111001010010 1010101010100100101001010 1001010101001010110110101 0111001010010101010101010 0100101001010100101010100 1010110110101011110010100 1010101010101001001010010 1010010101010010101101101 0101111001010010101010101 0100100101001010100101010 1001010111010101111001010 0101010101010100100101001 0101001010101001010110110 1010110010100101010010101 0100101011101010111100101 0010101010101010010010100 Disco javac <nome do arquivo>.java 05/12/06 5

Fases de um programa Java Carregamento 1110010100101010101010100 1001010010101001010101001 0101101101010111001010010 1010101010100100101001010 1001010101001010110110101 0111001010010101010101010 0100101001010100101010100 1010110110101011110010100 1010101010101001001010010 1010010101010010101101101 0101111001010010101010101 0100100101001010100101010 1001010111010101111001010 0101010101010100100101001 0101001010101001010110110 1010110010100101010010101 0100101011101010111100101 0010101010101010010010100 Disco JVM Carregador - Verificador Bibliotecas... Memória java <nome da classe> 05/12/06 6

Fases de um programa Java Interpretação JVM... Interpretador - Compilador JIT Memória 05/12/06 7

Um Exemplo Simples public class Exemplo public static void main(string[] args) System.out.println("Alô, mundo"); 05/12/06 8

public class Exemplo public static void main(string[] args) Um Exemplo Simples class: Indica a declaração de uma classe. Tudo em Java deve ficar dentro de uma classe, não existem variáveis ou funções globais System.out.println("Alô, mundo"); 05/12/06 9

public class Exemplo public static void main(string[] args) Um Exemplo Simples System.out.println("Alô, mundo"); public static void main(string[] args) Método main, ponto de entrada do programa 05/12/06 10

public class Exemplo public static void main(string[] args) Um Exemplo Simples System.out.println("Alô, mundo"); Chamada de método Chamadas de métodos são feitas seguindo a forma: <objeto>.<método>(<parâmetros>) Neste caso, o objeto é System.out, o método é println, e o parâmetro é a string "Alô, mundo" 05/12/06 11

Comentários Java suporta três tipos de comentário: De linha (//) System.out.println("Alô, mundo"); //Que função legal... De bloco (/*... */) /* Esse comando serve pra fazer isso, depois de chamado, vai acontecer aquilo */ De documentação (/**... */) /** Esse método calcula xyz, baseado em abc @param abc o abc usado no cálculo */ public void metodox(int abc)... 05/12/06 12

Tipos de Dados Inteiros byte 1 byte, 128 a 127 short 2 bytes, 32.768 a 32.767 int 4 bytes, 2.147.483.648 a 2.147.483.647 long 8 bytes, 9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 Ponto Flutuante float 4 bytes, ~ ±3.40282347E+38 double 8 bytes, ~ ±1.79769313486231570E+308 Caracter char 2 bytes, '\u0000' a '\uffff' Booleano boolean true ou false 05/12/06 13

Variáveis Todas as variáveis precisam ter um tipo associado Variáveis são declaradas indicando primeiramente o tipo, e em seguida o nome Pode-se opcionalmente inicializar uma variável durante sua declaração Usar uma variável antes de atribuir um valor a ela é um erro de programação double salario; int diasdefolga = 30; boolean completo; completo = false; 05/12/06 14

Strings Strings são seqüências de caracteres Java não possui um tipo específico para representar strings, em vez disso elas são encapsuladas pela classe String Até mesmo strings literais (delimitadas por aspas), são instâncias da classe String Strings podem ser criadas a partir de literais, ou pela concatenação de strings com outras variáveis String str = "Alô"; int x = 30; String str2 = str + " " + x; //str2 == "Alô 30" 05/12/06 15

Comparando Strings Para comparar a igualdade de duas strings deve-se usar o método equals: if ( str.equals("alô") )... if ( "Alô".equals(str) )... Caso se queira comparar strings sem levar em conta a diferença entre maiúsculas e minúsculas, pode-se usar o método equalsignorecase: if ( str. equalsignorecase("alô") )... NÃO se deve comparar strings com == 05/12/06 16

Conversão de Strings Para converter tipos simples para string existe o método valueof(), da classe String: String str1 = String.valueOf(23); String str2 = String.valueOf(50.75); Para a conversão de strings para tipos simples também existem métodos: int x = Integer.parseInt("42"); float f = Float.parseFloat("3.14159"); Se a conversão não for possível, uma exceção é lançada. 05/12/06 17

String: Alguns Métodos int length() Comprimento da string char charat(int index) Retorna o caracter na posição requerida int indexof(string str) Retorna a posição onde str fica na string, ou -1 se não encontrar String substring(int beginindex, int endindex) Cria uma substring, com os caracteres contidos entre beginindex e endindex int compareto(string other) Compara com outra string, e retorna 0 se forem iguais, -1 e esta for menor que a outra, ou 1 em caso contrário 05/12/06 18

Entrada e Saída A leitura e a escrita de dados com o usuário é feita, respectivamente, pelos objetos: System.in System.out Os principais métodos de System.out são print(...) Imprime o conteúdo de uma variável ou expressão println(...) Imprime o conteúdo de uma variável ou expressão, e uma quebra de linha 05/12/06 19

Entrada e Saída A partir da versão 5.0 (1.5), Java provê a classe java.util.scanner para leitura de dados de System.in import java.util.scanner; public class InputTest public static void main(string[] args) Scanner entrada = new Scanner(System.in); System.out.print("Qual é seu nome? "); String nome = entrada.nextline(); System.out.print("Quantos anos você tem? "); int idade = entrada.nextint(); System.out.println("Olá, " + nome + ". Sua idade é: " + idade); 05/12/06 20

Arrays Arrays são estruturas de dados que armazenam uma seqüência de tamanho fixo de valores de um mesmo tipo. int[] numeros; //array de int String[] nomes; //array de String Assim como qualquer variável, arrays precisam ser inicializados antes de serem usados, e isso é feito: Usando o operador new, e o tamanho desejado Fornecendo os valores diretamente String[] nomes = new String[1024]; int[] numeros; numeros = new int[100]; char[] abc = 'a', 'b', 'c' ; 05/12/06 21

Arrays, acessando elementos Após a inicialização, valores podem ser atribuídos a íncides do array, ou pode-se ler o valor atribuído a um índice Índices começam em 0 O tamanho de um array sempre pode ser obtido pelo atributo (de apenas leitura) length nomes[0] = "Arthur"; nomes[1] = "Ford"; int tamanho = nomes.length; String ultimo = nomes[nomes.length-1]; 05/12/06 22

Iterando sobre Arrays Pode-se iterar sobre arrays de duas formas Acessando os elementos por seus índices String[] array =...; for (int i = 0; i<array.length; i++) String str = array[i]; //Usa str Navegando diretamente pelos elementos for (String str : array) //Usa str 05/12/06 23

Arrays multidimensionais Java não possui uma construção explícita para arrays multidimensionais. Porém, é permitido criar arrays de arrays, o que é equivalente Além disso, há uma sintaxe especial para inicializar estes arrays int[][] tabuleiro = new int[3][3]; String dados[][][] = new String[300][10][50]; 05/12/06 24

Enumerações Uma enumeração é um tipo cujos valores possíveis pertencem a um conjunto limitado, pré-definido enum Naipe Espadas, Ouros, Copas, Paus Naipe n = Naipe.Espadas; Tipos enumerados podem ser usados em switches switch (n) case Espadas:... break;... 05/12/06 25

Enumerações Uma enumeração é um tipo cujos valores possíveis pertencem a um conjunto limitado, pré-definido enum Naipe Espadas, Ouros, Copas, Paus Naipe n = Naipe.Espadas; Sempre que se for usar um dos possíveis valores de uma enumeração, deve-se qualificá-lo com o nome da enumeração. switch (n) Usa-se case Naipe.Espadas, Espadas: e não simplesmente Espadas Tipos enumerados podem ser usados em switches... Isso acontece break; porque mais de uma enumeração pode ter o valor Espadas. (Ex.: Armas.Espadas)... 05/12/06 26

Enumerações Em switches, entretando, o compilador sabe, pelo tipo da Uma enumeração é um tipo cujos valores possíveis variável n, a qual enum este Espadas pertence. Então pertencem a um conjunto limitado, pré-definido não é necessário indicar o tipo. enum Naipe Espadas, Ouros, Copas, Paus Aliás, estranhamente, é proibido qualificar um valor de enumeração em Naipe um n switch. = Naipe.Espadas; O compilador gera um erro nestes casos Tipos enumerados podem ser usados em switches switch (n) case Espadas:... break;... 05/12/06 27

Classes em Java A unidade básica da Linguagem Java é a Classe; Programas Java são compostos de objetos que interagem entre si trocando mensagens (invocando métodos). 05/12/06 28

Exemplo public class Motor //Atributos private int marcha = 0; private int rotação = 0; //Construtores public Motor(int marcha) this.marcha = marcha; public Motor() //Métodos public void sobemarcha() marcha++; public void descemarcha() marcha--; public int getmarcha() return marcha; //Outros métodos... 05/12/06 29

Classes O corpo de uma classe pode conter: Atributos; Métodos; Construtores. 05/12/06 30

Atributos Atributos são variáveis que expressam o estado de um objeto; Como qualquer variável, podem ser de tipos simples (int, float, boolean, etc.), um tipo referência (classe ou interface), ou ainda um array. Ex: private int x; private boolean[] b; private Motor motor1; private Acelerável[] ac; Atributos podem ser inicializados em sua declaração. Ex: private int x = 20; private Motor motor1 = new Motor(); private Acelerável[] ac = new Bicileta[5]; 05/12/06 31

Atributos (cont) Diferentemente de variáveis em blocos de código, atributos não inicializados explicitamente acabam recebendo um valor default; Tipos numéricos 0 boolean false Referências null É recomendável que atributos sejam declarados como private, garantindo assim o encapsulamento dos dados; 05/12/06 32

Métodos Métodos são ações que objetos podem executar; Podem possuir parâmetros, que assim como atributos podem ser de qualquer tipo simples, tipo referência, ou array; Métodos podem executar operações que retornam ou não resultados. No primeiro caso seu tipo de retorno deve ser indicado, no segundo ele deve ser declarado como void. public void fazcoisa(int param)... public int calculavalor(int p1, float p2)... Métodos podem ter o mesmo nome, desde que tenham número e/ou tipo de parâmetros diferentes entre si. 05/12/06 33

Métodos (cont.) Dentro de métodos pode-se usar a palavra chave this para fazer referência ao objeto sobre o qual o método foi chamado Métodos que retornam algum valor devem fazê-lo utilizando a palavra-chave return seguida do valor a ser retornado. Métodos void podem também utilizar return para encerrar sua execução a qualquer momento; Métodos em geral são declarados como public, para que sejam acessíveis externamente. Mas métodos que são apenas utilizados internamente devem ser declarados como private. 05/12/06 34

Exemplo public class Motor public void sobemarcha() marcha++; public void mudamarcha(int marcha) if (rotaçãoadequada()) this.marcha = marcha; public int getmarcha() return marcha; private boolean rotaçãoadequada() // 05/12/06 35

Construtores Um construtor é um tipo especial de método; Um contrutor não tem tipo de retorno (nem mesmo void) e pode possuir quantos parâmetros forem necessários; Um objeto pode possuir vários construtores. public class Motor private int marcha = 0; private int rotação = 0; public Motor(int marcha) this.marcha = marcha; public Motor() 05/12/06 36

Construtores (cont.) Se nenhum for declarado, um construtor padrão, vazio, é criado implicitamente; Dentro dos contrutores pode ser feita a inicialização de atributos e qualquer outra operação necessária para o objeto; O ideal é que depois de contruído, o objeto esteja pronto para operar; Objetos são criados usando a palavra chave new, seguida do nome da classe e dos parâmetros do construtor. public class Carro private Motor motor; public Carro() motor = new Motor(); 05/12/06 37

Métodos Estáticos Métodos estáticos são métodos que não operam em objetos double x = Math.pow(3.5, 2); int[] array =...; Arrays.sort(array); String x = String.valueOf(2341); São definidos pela palavra chave static public static int max(int a, int b) return a > b? a : b; Médotos estáticos não podem acessar atributos, pois estes são relativos a uma instância da classe, que não existe neste contexto 05/12/06 38

Método Main O método main é um método estático especial, usado como ponto de partida de um programa Java; Deve ser declarado como: public static void main(string[] args) //comandos... O array de strings é a lista de argumentos de linha de comando; Pode-se declarar métodos main em qualquer classe, sendo isto muito usado para testar classes individualmente 05/12/06 39

Herança Para declarar uma classe derivada de outra utiliza-se a palavra chave extends: Uma subclasse enxerga tudo o que não foi declarado como private na superclasse public class Carro private int velocidade; public int getvelocidade() return velocidade; public class Formula1 extends Carro public int calculoqualquer() return getvelocidade() * 20; 05/12/06 40

Herança Para declarar uma classe derivada de outra utiliza-se a palavra chave extends: Uma subclasse enxerga tudo o que não foi declarado como Caso private se tentasse acessar na superclasse diretamente o atributo velocidade, ocorreria um erro public class Carro de compilação private int velocidade; public int getvelocidade() return velocidade; public class Formula1 extends Carro public int calculoqualquer() return getvelocidade() * 20; 05/12/06 41

Herança (cont.) Uma subclasse pode redefinir um método da superclasse, se ele não for private; Esta característica é chamada de polimorfismo: diferentes objetos podem ter comportamentos diferentes em relação a um mesmo método. Por exemplo, a classe Carro pode calcular seu deslocamento de uma certa forma. A classe Formula1 precisa levar mais dados em consideração, como a pressão aerodinâmica em seus aerofólios. Então ela reimplementa o método para o cálculo do deslocamento; Pode-se usar a palavra chave super para chamar métodos e construtores da superclasse. 05/12/06 42

Exemplo super public class Carro... public Carro(Motor m)... public int deslocamento() return motor.getaceração() * 20; public class Formula1 extends Carro... public Formula1(Motor m, float inclaerofólio) super(m);... public int deslocamento() return motor.getaceração() * inclaerofólio; 05/12/06 43

Protected A palavra-chave protected é um meio termo entre public e private, para a declaração de membros Eles são, em geral, vistos como se fossem private Mas para subclasses eles são como public Exeto em casos muito especiais, deve-se evitar o uso de protected, pois ele quebra o encapsulamento da superclasse 05/12/06 44

Vinculação Dinâmica A criação de hierarquias de classes permite que se trate, de forma abstrata, objetos de classes especializadas como se fossem de classes mais gerais Pode-se fazer: Carro[] carros = new Carro[2]; carros[0] = new Carro(); carros[1] = new Formula1(); for (Carro c : carros) int desloc = c.deslocamento(); System.out.println( desloc ); Quando um método é chamado, não importa o tipo declarado da variável, a máquina virtual invoca o método com base do tipo real dela 05/12/06 45

Vinculação Dinâmica A criação de hierarquias de classes O ambiente permite de que execução se trate, de sabe forma que abstrata, neste objetos de classes especializadas como se fossem de classes mais gerais ponto, se o Carro em questão for um Formula1, ele deve chamar a versão do Pode-se fazer: método definida nesta classe, e não a versão Carro[] carros mais = geral, new Carro[2]; definida na classe Carro carros[0] = new Carro(); carros[1] = new Formula1(); for (Carro c : carros) int desloc = c.deslocamento(); System.out.println( desloc ); Quando um método é chamado, não importa o tipo declarado da variável, a máquina virtual invoca o método com base do tipo real dela 05/12/06 46

Coerção de Objetos Suponha que o seguinte método seja adicionada à classe Formula1: String[] getpatrocinadores()... Caso se queira chamar esse método a partir de uma variável do tipo Carro, é preciso informar ao compilador explicitamente que aquela variável guarda um Formula1 mesmo, e não um carro qualquer Carro[] carros =...; //erro de compilação String[] p = carros[0].getpatrocinadores(); //Compilador aceita Formula1 f = (Formula1) carros[0]; String[] p = f.getpatrocinadores(); 05/12/06 47

Coerção de Objetos Suponha que o seguinte método seja adicionada à classe Formula1: String[] getpatrocinadores()... Caso se queira chamar esse método a partir de uma variável do tipo Carro, é preciso informar ao compilador explicitamente que aquela variável guarda um Formula1 mesmo, e não um carro qualquer Carro[] carros =...; //erro de compilação String[] p = carros[0].getpatrocinadores(); Typecast, ou coerção //Compilador aceita Formula1 f = (Formula1) carros[0]; String[] p = f.getpatrocinadores(); 05/12/06 48

Coerção de Objetos Suponha que o seguinte método seja adicionada à classe Formula1: String[] getpatrocinadores()... Caso se queira chamar esse método a partir de uma variável do tipo Carro, é preciso informar ao compilador explicitamente que aquela variável guarda Erro um em Formula1 tempo de mesmo, execução e caso não um carro qualquer carros[0] não seja um Formula1 Carro[] carros =...; //erro de compilação ClassCastException String[] p = carros[0].getpatrocinadores(); //Compilador aceita Formula1 f = (Formula1) carros[0]; String[] p = f.getpatrocinadores(); 05/12/06 49

Checagem de tipos Para se certificar que um objeto é mesmo de um dado tipo, e assim evitar erros, pode-se checar em tempo de execução o real tipo de um objeto. Pode-se checar explicitamente se a classe de um objeto é uma dada classe, ou usar o operador instanceof. if ( carros[0].getclass() == Formula1.class ) Formula1 f = (Formula1)carros[0]; if ( carros[0] instanceof Formula1 ) Formula1 f = (Formula1)carros[0]; 05/12/06 50

Checagem de tipos Para se certificar que um objeto é mesmo de um dado tipo, e assim evitar erros, pode-se checar em tempo de execução o real tipo de um objeto. Pode-se checar explicitamente se a classe de um objeto é uma dada classe, ou usar o operador instanceof. if ( carros[0].getclass() == Formula1.class ) Formula1 f = (Formula1)carros[0]; Checa se o objeto é desta classe if ( em carros[0] específico instanceof Formula1 ) Formula1 f = (Formula1)carros[0]; 05/12/06 51

Checagem de tipos Para se certificar que um objeto é mesmo de um dado tipo, e assim evitar erros, pode-se checar em tempo de execução o real tipo de um objeto. Pode-se checar explicitamente se a classe de um objeto é uma dada classe, ou usar o operador instanceof. if ( carros[0].getclass() == Formula1.class ) Checa se Formula1 o objeto é f desta = (Formula1)carros[0]; classe, ou de uma classe descendente if ( carros[0] instanceof Formula1 ) Formula1 f = (Formula1)carros[0]; 05/12/06 52

Packages Packages criam escopos para declaração de classes; package instrumentos; public class Teclado void tocar(); package perifericos; public class Teclado char ultimatecla(); A package faz parte do nome da classe. instrumentos.teclado ti; perifericos.teclado tp; ti.tocar(); char c = tp.ultimatecla(); 05/12/06 53

Packages Declarações de import permitem usar classes sem a qualificação da package. package instrumentos; public class Teclado void tocar(); package teste; import instrumentos.teclado;... Teclado t; t.tocar(); Pode-se importar todas as classes de uma package ou apenas uma classe específica; import nome.da.package.*; import nome.da.package.nomedaclasse; A package java.lang é importada implicitamente. 05/12/06 54

Packages Arquivos com declaração de package devem ter estrutura de diretório especial. exemplo Package br.ufsc.gsigma exempo/ Diretório br/ufsc/gsigma/ Recomenda-se que nomes de package sejam em minúsculas, e sigam o nome do domínio de internet do desenvolvedor. 05/12/06 55

Packages e declarações de classes/interfaces Classes e interfaces podem ou não ser declaradas como públicas; As não declaradas como públicas são visíveis apenas por outras classes e interfaces declaradas na mesma package; As públicas tem visibilidade externa total; Arquivo deve ter o mesmo nome da classe/interface; Apenas uma classe/interface pública por arquivo. 05/12/06 56

Interfaces Permitem expressar comportamento sem se preocupar com a implementação. interface Voador void voar(int tempo); class Ave implements Voador public void voar(int tempo)... public void comer()... class Avião implements Voador public void voar(int tempo)... public void abastecer()... class DiscoVoador implements Voador public void voar(int tempo)... public void piscar()... 05/12/06 57

Interfaces Permitem expressar comportamento sem se preocupar com a implementação. interface Voador void voar(int tempo); class Ave implements Voador public void voar(int tempo)... public void comer()... Todas as classes que implementam a interface Voador precisam prover um método voar class Avião implements Voador public void voar(int tempo)... public void abastecer()... class DiscoVoador implements Voador public void voar(int tempo)... public void piscar()... 05/12/06 58

Interfaces Clientes usam a interface sem saber qual a classe que a implementa. class Testador public void testar(voador v) for (int i=0; i<5; i++) v.voar(10 * i); Ave a = new Ave(); Avião v = new Avião(); DiscoVoador d = new DiscoVoador();... Testador t = new Testador();... t.testar(a); t.testar(v); t.testar(d); 05/12/06 59

Interfaces Clientes usam a interface sem saber qual a classe que a implementa. class Testador public void testar(voador v) for (int i=0; i<5; i++) v.voar(10 * i); O método testar quer algum objeto que implemente o comportamento de um Voador, não importa qual Ave a = new Ave(); Avião v = new Avião(); DiscoVoador d = new DiscoVoador();... Testador t = new Testador();... t.testar(a); t.testar(v); t.testar(d); 05/12/06 60

Interfaces Uma classe pode implementar várias interfaces interface Voador void voar(int tempo); interface Animal void comer(); void dormir(); class Ave implements Voador, Animal public void voar(int tempo)... public void comer()... public void dormir()... 05/12/06 61

Interfaces Interfaces podem herdar outras interfaces interface Animal void comer(); void dormir(); interface Voador void voar(int tempo); interface Mamífero extends Animal void mamar(); interface AnimalVoador extends Animal, Voador 05/12/06 62

Continua...

Instalação de Ambiênte de Programação Máquina virtual Java da Sun - http://java.sun.com/ Java SE - http://java.sun.com/j2se/1.5.0/download.jsp JDK 5.0 (Java Development Kit) Ambiente de Desenvolvimento Eclipse - http://www.eclipse.org/ Eclipse SDK 3.1 (ou superior) Netbeans - http://www.netbeans.org/ Netbeans IDE 5.0 (ou superior) 05/12/06 Carlos E. Gesser GSIGMA / DAS / UFSC