42
Prof. Kléber de Oliveira Andrade [email protected] Programação Orientada a Objetos

Programação Orientada a Objetos - WordPress.com · A Disciplina – Objetivos Gerais Desenvolver habilidades de programação orientada à objetos de ambientes com interfacegráficae

Embed Size (px)

Citation preview

Prof. Kléber de Oliveira [email protected]

Programação Orientada a Objetos

O professorKléber de Oliveira Andrade• Doutorando em Engenharia Mecânica (EESC/USP)• Mestrado em Engenharia Mecânica (EESC/USP)• Bacharel em Ciência da Computação (EEP)

Áreas de Interesse e Pesquisas:

• Programação de Jogos• Computação Gráfica• Inteligência Artificial• Robótica Móvel• Reabilitação Robótica

09/08/2011 Prof. Kléber de Oliveira Andrade 2

http://www.pontov.com.br

A Disciplina – Objetivos Gerais

Desenvolver habilidades de programaçãoorientada à objetos de ambientes cominterface gráfica e utilização de arquivos.

09/08/2011 Prof. Kléber de Oliveira Andrade 3

Cronograma de Aulas1. (09/08) Apresentação da Disciplina e Revisão de OO;2. (16/08) Introdução a Interfaces Gráficas (Bibliotecas

AWT e Swing)3. (20/08) Introdução a Interfaces Gráficas

(Gerenciamento de Layout)4. (23/08) Introdução a Interfaces Gráficas (Eventos)5. (30/08) Revisão de Herança6. (06/09) Revisão de Polimorfismo7. (20/09) Classe Abstrata8. (27/09) Classe Abstrata9. (04/10) Atividades de Avaliação

09/08/2011 Prof. Kléber de Oliveira Andrade 4

Cronograma de Aulas10. (11/10) Interfaces11. (18/10) Interfaces12. (25/10) Interfaces13. (01/11) Tratamento de Exceções14. (08/11) Tratamento de Exceções15. (15/11) Arquivos16. (22/11) Arquivos17. (29/11) Coleções18. (06/12) Prova Escrita Oficial19. (13/12) Exercícios de Revisão20. (20/12) Prova Substitutiva

09/08/2011 Prof. Kléber de Oliveira Andrade 5

Critérios de Aprovação Para aprovação na disciplina o aluno deverá satisfazer

os seguintes critérios:1. Possuir freqüência nas aulas igual ou superior a 75%;2. Obter conceito final igual ou maior que 5,0;

Conceito final: Atividade de avaliação (provas) que compõem 70% da nota; Atividade (projetos e exercícios) que compõem os outros

30% da nota

09/08/2011 Prof. Kléber de Oliveira Andrade 6

Bibliográfia Básica• SANTOS, R. Introdução à Programação Orientada

a Objetos Usando Java. Elsevier, 1ª Edição, 2008.(PLT)

• DEITEL, H. M.; Java: Como Programar. Prentice-Hall, 6ª Edição, 2005.

• SIERRA, K.; BATES, B.; Use a Cabeça! Java. AltaBooks, 1ª edição, 2005.

09/08/2011 Prof. Kléber de Oliveira Andrade 7

Bibliográfica Complementar• GOSLING, J.; ARNOLD, K.; HOLMES, D.; A Linguagem de Programação Java.

Porto Alegre: Bookman, 4ª Edição, 2007.

• GONÇALVES, E. G.; Desenvolvendo aplicações web com JSP, Servlets,JavaServer Faces, Hibernate, EJB 3 Persistence e Ajax. Rios de Janeiro:Ciência Moderna, 1º Edição, 2007.

• ZHANG, K.; AMMERAAL, L.; Computação Gráfica para ProgramadoresJava. São Paulo: LTC, 1ª Edição, 2007.

• BARNES, D. J.; KOLLING, M.; FURMANKIEWICZ, E.; Programação Orientadaa Objetos com Java: uma introdução prática usando o BLUEJ. São Paulo:Pearson Education, 1ª Edição, 2004.

• SEBESTA, R. W.; Conceitos de Linguagem de Programação. Porto Alegre:Bookman, 6ª Edição, 2005.

09/08/2011 Prof. Kléber de Oliveira Andrade 8

Introdução ao Java

Origem da linguagem Java

• 1991: projeto “Green” - grupo de engenheiros da Sun• Inicialmente: linguagem compacta e portável para código

embarcado!!!• Inspiração no UCSD Pascal (Wirth): linguagem portátil e

geração de código intermediário para uma máquina neutra (noJava: JVM)

• Influência do C++ (Unix): linguagem orientada a objetos• Nome da linguagem: inicialmente “Oak” e depois “Java”• 1° produto (1992): controle remoto “*7” (fracassou)• HotJava (1995): browser escrito em Java que inspirou o uso da

linguagem para a Web• 1996: Netscape 2.0 - compatível com Java 1.0

Evolução da linguagem Java

• Versão 1.02 (1996): apresentava conectividade com SGBD esuporte a objetos distribuídos

• Versão 1.1 (1997): recebeu melhorias no modelo de eventos eacrescentou suporte a internacionalização e a modelos decomponentes (Java Beans)

• Versão 1.2 (1998): principal novidade foi o toolkit parainterfaces swing

• Principais inovações nas versões 1.3 e 1.4: segurança,aplicações 3D, melhoria na comunicação I/O

• Principais inovações nas versões 1.5 e 1.6: metadados(annotations), genéricos, enumerações e autoboxing para tiposprimitivos

Características do Java• Simples: sintaxe mais simples que C++ (ñ tem ponteiros)• Orientado a objetos• Distribuído: TCP/IP (e serviços) suportado pela API Java• Robusto: compilador antecipa runtime errors• Seguro• Arquitetura neutra: compilador gera bytecode intermediário• Portátil: tipos básicos compatíveis com “todas” arquiteturas• Interpretado: ambiente de execução interpreta bytecode• Alto desempenho• Multithreaded: implementação mais fácil também• Dinâmico: reconhecimento de tipos de dados em tempo de

execução

O ambiente Java• O pacote JSDK (Java Standard Development Kit), pode ser

obtido da Sun (http://java.sun.com), e contém:– Java Compiler (javac): compila um arquivo contendo código fonte Java

(extensão .java) gerando o bytecode (arquivo com extensão.class).Ex.: javac HelloWorld.java armazenará o bytecode emHelloWorld.class (se o código fonte não apresentar erros)

– Java Interpreter (java): interpreta e executa o bytecode de umaplicativo Java.Ex.: java HelloWorld interpretará e executará o bytecode contidoem HelloWorld.class (se for um aplicativo Java)

– Application Programable Interface (API) do JSDK: contém as classes queimplementam os recursos disponíveis para o Kit de desenvolvimentoJava. Podem ser utilizadas, estendidas, substituídas ou modificadas

Instalando o JSDK e o JavaDoc da JSDK API

• Instalando o JDK e a API– Obter o instalador adequado do JSDK no site da Sun– Executar o instalador.– Prosseguir e concluir a instalação com as opções default

• Instalando o JavaDoc da JSDK API– Obter a documentação da API do JSDK, para a plataforma adequada, no

site da Sun– Descompacte o arquivo obtido em um diretório (dica: utilize o diretório

onde foi instalado o JSDK)– Para utilizar o JavaDoc abra, com um browser, o arquivo index.html que

encontra-se no diretório criado pela descompactação

Editores e IDEs

• Editores– TextPad: http://www.textpad.com/download/index.html– GVim: http://www.vim.org/download.php– JCreator: http://www.jcreator.com/download.htm– Outros…

• IDEs– NetBeans: http://www.netbeans.org/– Eclipse: http://www.eclipse.org/– Outras…

Configuração do ambiente

• PATH - indica o diretório onde estão java e javacExs.: Windows: set PATH=%PATH%;C:\JAVA\BIN

Unix: export PATH=$PATH:/usr/share/java/bin

• CLASSPATH - indica os lugares onde o compilador e ointerpretador Java procurarão classes utilizadas oureferenciadas (importadas)Exs.: Windows: set CLASSPATH=C:\JAVA\CLASSES

Unix: export CLASSPATH=/home/user/classes

• JAVA_HOME - indica a localização do diretório onde foiinstalado o JSDK (utilizado por utilitários como o Tomcat)

Exemplo1: HelloWorld.java

import java.lang.*; //opcional, é defaultpublic class HelloWorld {

public static void main(String[] args) {String frase[] = new String[3];frase[0] = "Olá a todos...";frase[1] = "Sejam bem vindos ao curso de Java!";frase[2] = "Ass.: Kleber";int i;for (i = 0; i < frase.length; i++)

System.out.println(frase[i]);}

}

Compilando e testando o Exemplo1

• Salve o conteúdo do Exemplo1 em um arquivo chamadoHelloWorld.java (respeite maiúsculas e minúsculas)

• Abra um prompt do command.com (ou o que for parecido emsua plataforma) e vá até o diretório onde salvou

• Configure a variável PATH, se já não o fez• Compile a classe: javac HelloWorld.java

• Execute o aplicativo: java HelloWorld

• Será exibido na tela:C:\JAVA>java HelloWorldOlá a todos...Sejam bem vindos ao curso de Java!Ass.: KleberC:\JAVA>

A sintaxe Java• Sintaxe parecida com a linguagem C• Case sensitive• Blocos são delimitados por chaves { }• Toda instrução deve terminar com ponto-e-vírgula ;• Bloco principal: nome da classe (= nome do arquivo)• Blocos internos: métodos, construtores e destrutores• Primeiras linhas: import de classes e pacotes• Método main: obrigatório em aplicativos Java• “Variáveis”: tipos básicos e objetos• Java é uma linguagem com muita ênfase em tipos (toda

variável deve ter um tipo declarado)• Comentários: // ou /* ... */ ou /** ... */ (JavaDoc)

Tipos primitivos de dados• Inteiros:

int - 4 bytes long - 8 bytesshort - 2 bytes byte - 1 byte

• Ponto flutuante: simples e dupla precisãofloat - 4 bytes double - 8 bytes

• Caractere (char): utiliza 2 bytes (Unicode)Contém os caracteres ASCII/ANSI. Podem ser expressos em hexadecimal:

de '\u0000' a '\uFFFF'. Indicados por aspas simples.Seqüências de escape e respectivos valores Unicode:

\b (retrocesso) - \u0008 \r (retorno carro) - \u000d\t (tab) - \u0009 \" (aspas) - \u0022\n (nova linha) - \u000a \' (apóstrofo) - \u0027\\ (barra invertida)- \u005c

• Booleanos (boolean): admitem os valores true ou false

Variáveis

• Devem ser declaradas quanto ao tipo (básico ou objeto), queprecede o nome da variável, como na linguagem C

• Nomes: evitar palavras reservadas, caracteres especiais..• Todas as variáveis devem ser inicializadas (atribuir valores

iniciais a)• Conversões de tipo:

– Operações entre tipos diferentes de números - Java tratará oselementos como o maior tipo (Ex.: multiplicação int por double: ambosserão tratados como double e o resultado será um double)

– Casting - permite a conversão para um tipo numérico menor (comperda de precisão). Ex.: float f = 10/3; int i = (int) f;

– Conversão direta na atribuição - de um tipo menor para um maior• Constantes - declaradas fora do método com static final

Operadores aritméticos

– + - * / %/ indica divisão inteira se ambos operadores forem inteiros, e ponto flutuante,

caso contrárioExs.: 15/4 = 3 e 15/4.0 = 3.75

% indica o resto (mod) de uma divisão inteiraEx.: 15%4 = 3

– Exponenciação - Math.powEx.: y = Math.pow(x,a); (xa ; x,a double)

– Incremento e decremento: incrementam/decrementam em 1sufixados: i++; i--; (em expressões, são realizados depois da operação)

Ex.: int i = 2; int j = 10 * i++; (j será igual a 20)prefixados: ++i; --i; (em expressões, são realizados antes da operação)

Ex.: int i = 2; int j = 10 * ++i; (j será igual a 30)

Operadores relacionais e booleanos

– Igualdade e desigualdade== (igual) != (diferente) < (menor) > (maior)<= (menor ou igual) >= (maior ou igual)

– Curto-circuito&& (and) || (or)(se o 1° termo for false em && ou true em ||, o 2° não será calculado)

– de Bit& (and) | (or) ^ (xor) ~ (not)>> (deslocamento a direita; estende o bit de sinal para bits do alto)>>> (deslocamento a direita; preenche bits do alto com zeros)<< (deslocamento a esquerda)

– Atalhos para atribuição+= -= *= /= %= &= |= ^= <<= >>= >>>=

Ex.: x += 4; (somará 4 ao valor anterior de x)

Hierarquia de operadores[] () chamada de método esquerda para direita! ~ ++ -- +(unário) -(unário) Casting new direita para esquerda* / % esquerda para direita+ - esquerda para direita<< >> >>> esquerda para direita< <= > >= instanceof esquerda para direita== != esquerda para direita& esquerda para direita^ esquerda para direita| esquerda para direita&& esquerda para direita|| esquerda para direita?: esquerda para direita= += -= *= /= %= &= |= ^= <<= >>= >>>= direita para esquerda

Operações com Strings (1)

• Diferentemente de C, String é uma classe em Java• Facilidade: pode receber atribuição direta

Exs.: String s = ""; String oi = "oi";• Concatenação: utilizando sinal +

Exs.: String saudacao = oi + " " + "amigo";System.out.println(oi + " amigo");System.out.println(saudacao);

• Conversão direta: de tipos numéricosExs.: int soma = 1 + 1;

String res = "Soma= " + soma;System.out.println("Soma = " + soma);System.out.println(res);System.out.println(”Soma = " + (1+1));

Operações com Strings (2)• Métodos úteis da classe String

– substring(i,j) - obtém String que é parte de uma String: i = índice do 1°caracter; j = i + tamanho da substring

Ex.: String hello = "Hello";System.out.println(hello.substring(0,4)); //resultará “Hell”

– equals(s) - compara StringsEx.: hello.equals(hello.substring(0,4)+"o"); //retornará true

– charAt(n) - retorna o caractere Unicode na posição n– length() - retorna o tamanho (int) de uma String– indexOf(s) - procura ocorrência de s na String e retorna a posição (int) do

primeiro caractere de s na String• Importante

– O índice dos caracteres em uma String vai de 0 a (length() -1– (string1 == string2) é verdadeira se as variáveis apontam para a mesma área

na memória

Controle de Fluxo (If... Else)• Em Java, como em muitas linguagens de programação,

quem faz isso é o IF (SE traduzindo).

• O ELSE é o que chamamos de caso contrário, ou seja,se for falso execute o que está no ELSE.

• Exemplificando: Se (IF) for tal coisa, faça isso! Casocontrário (ELSE), faça aquilo!

09/08/2011 Prof. Kléber de Oliveira Andrade 27

If...else if... If... else

09/08/2011 Prof. Kléber de Oliveira Andrade 28

Condição ternária ( ? : )

• (boolean_expr ? Expr_1 : expr_2)• É uma alternativa útil ao if...else:• Se boolean_exp = true, o resultado é expr_1,

senão o resultado é expr_2:

09/08/2011 Prof. Kléber de Oliveira Andrade 29

Controle de Fluxo (switch...case)• É útil para selecionar um

entre vários valores inteirosalternativos.

• As etiquetas de case devemser constantes.

• Utilizar break para saltarfora do switch.

• Dar sempre umaalternativa default

09/08/2011 Prof. Kléber de Oliveira Andrade 30

Controle de Fluxo (switch...case)

09/08/2011 Prof. Kléber de Oliveira Andrade 31

Ciclos• Em Java existem três tipos de ciclos:

– while– do...while– for

• Todos os ciclos têm quatro partes:– Inicialização– Iteração– Corpo– Terminação

09/08/2011 Prof. Kléber de Oliveira Andrade 32

while

• O while é o mais simples de todos os ciclos:

09/08/2011 Prof. Kléber de Oliveira Andrade 33

do...while

• Os ciclos do...while tês o teste no fim do ciclo:

09/08/2011 Prof. Kléber de Oliveira Andrade 34

for...• Os ciclos for são os mais comuns:

• Podem ser declaradas variáveis na parte de inicialização dociclo for:

• As partes de inicialização e iteração podem consistir de umalista de expressões separadas por vígulas:

09/08/2011 Prof. Kléber de Oliveira Andrade 35

break

• Interrompe um ciclo ou uma instrução switch:• Transfere o controle para a primeira instrução

depois do corpo do ciclo ou instrução switch.• Pode simplificar o código

09/08/2011 Prof. Kléber de Oliveira Andrade 36

continue

• Apenas pode ser usado em ciclos• Abandona a iteração em curso e salta para a

próxima iteração do ciclo.

09/08/2011 Prof. Kléber de Oliveira Andrade 37

Arrays

• Em Java são objetos e devem ser instanciadosEx.: int[] arrayDeInts = new int[100];

for (int i = 0; i < 100; i++)arrayDeInts[i] = i; //0 a 99

• Atalho na atribuiçãoEx.: int[] numeros = {1,2,3,4,5,6,7,8,9,0};

• campo length - indica o tamanho do arrayEx.: numeros.length vale 10

• método System.arraycopy(ArrayOrigem, posicaoInicial, arrayDestino,posicaoDestino, numDeElementosParaCopiar)

Recebendo argumentos na chamada do aplicativo

• O método main recebe um Array de Strings como argumentos,provenientes da chamada do aplicativo (linha de comando)

public static void main (String[] args)

• A quantidade de argumentos fornecida pode ser obtida deargs.length

• Os argumentos são acessados pelo índice do Array: de 0 a(args.length - 1)

if (args.length > 0)String arg1 = args[0];

Exemplo2: ArgsSample.javapublic class ArgsSample {

public static void main(String[] args) {String primeiro = "";if (args.length < 1)System.out.println("Nenhum argumento foi fornecido");

else {primeiro = args[0];System.out.println("Primeiro argumento: " + primeiro);System.out.print("Todos os argumentos: ");for (int i = 0; i < args.length; i++)System.out.print(args[i] + " ");

System.out.print("\n");}

}}

Obtendo entrada em stdin

• A classe Scanner permite leitura de dados em um stream• Ela pode ser utilizada para a leitura de dados da entrada

padrão (System.in)

• O próximo exemplo ilustra o uso de tal classe

Exemplo3: StdinSample.javaimport java.util.Scanner;public class StdinSample {public static void main(String[] args) {String s;int i;Scanner scanner = new Scanner(System.in);System.out.print("Digite uma string: ");s = scanner.next();System.out.println("String digitada: " + s);System.out.print("Digite um numero inteiro: ");i = scanner.nextInt();System.out.println("Numero digitado: " + i);

}}