Programação Orientada a Objetos - WordPress.com · A Disciplina – Objetivos Gerais Desenvolver...
Transcript of Programação Orientada a Objetos - WordPress.com · A Disciplina – Objetivos Gerais Desenvolver...
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
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
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
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
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);
}}