Programação Orientada a Objetos
Flávio R. C. Sousa flavio@lesc.ufc.br @flaviosousa www.lia.ufc.br/~flavio POO - 2017.1Universidade Federal do Ceará
Departamento de Engenharia de TeleinformáticaHistórico
• Iniciou como uma linguagem de programação para equipamentos eletrônicos (microondas, PDAs, ...) • Concebida no projeto Green (Green Team) – James Gosling (líder) – Inicialmente denominada OAK • Pequena, confiável e portávelHistórico (cont...)
• Ideal para a Internet !
• Sua afirmação se deu com o surgimento do HotJava (Web Browse)
Projetada para aparelhos eletrônicos, lançada para desenvolver aplicativos para navegadores web e consolidada para o desenvolvimento web do lado servidor
Uma Linguagem Moderna
• O que é Java?
“Java é uma linguagem simples, orientada a objetos, distribuída, interpretada, robusta, segura, independente de arquitetura,
portável, de alto desempenho, suportando multithreads e
dinâmica.”
Java é Simples
• Sintaxe familiar a vários programadores (baseada em C e C++) • Elimina várias redundâncias de C++ • Simples para algumas aplicações, desde que se conheça alguns pacotes • Simples dado tudo que a linguagem ofereceJava Eliminou...
• Variáveis e funções globais • Ponteiros
• goto, struct e union
• Tipos fracos
• Remoção programática de objetos (liberação de memória)
Java é Orientada a Objetos
• Objetos e Classes • Encapsulamento (dados e operações) • Subtipos e Herança • Polimorfismo • Ligações dinâmicas (dynamic binding) • Criação e remoção dinâmica de objetosImplementações de Java
• Interpretada – Bytecodes da JVM – Independente de plataforma • Compilada – Código nativo em C ou C++ • Alta performance?Alta Performance?
• Java oferece alternativas e compromissos
• Código do cliente pode ser interpretado
– Compiladores JIT aumentam o desempenho – Cliente universal
– Código móvel, carregado pela rede, evitando instalações, conflito entre versões, etc.
• Código do servidor pode ser compilado para código de máquina
Java é Portável
• Em tese, redução de custos com migração, instalação, treinamento, etc.
• Na prática, ainda é necessário depurar programas antes de migrar para outra plataforma
Java é Distribuída
• Oferece suporte de alto nível para acesso a Internet / WWW • Objetos distribuídos com RMI, CORBA, EJB • Suporte para acesso a arquivos remotos, banco de dados, etc...Java é Robusta
• Ausência de ponteiros • Fortemente tipada
• Coleta de lixo automática
• Exceções tipadas
• Acesso a arrays é verificado
Processo de Compilação em Java
Código Fonte
Bytecode (arquivos .class) Máquina Virtual Java Código Nativo Interpretador (comando java) Sistema Operacional
Processo de Compilação em Java
Máquina Virtual Java
• JVM é dependente de plataforma
• Processa os bytecodes que são independentes de plataforma
• Existem diversas VMs de diversos fornecedores • Cada VM deve ser capaz de executar qualquer
classe compilada java (bytecode)
Máquina Virtual Java (cont...)
JVM PC - Windows JVM IBM - Aix JVM Sun - Solaris BytecodesMáquina Virtual Java (cont...)
• Coleta de Lixo – Memória alocada que não é mais utilizada deve ser liberada – Em outras linguagens, desalocar memória é responsabilidade do programador – Java provê um mecanismo que monitora e libera memóriaMáquina Virtual Java (cont...)
• Coleta de Lixo (cont...) – Garbage Collector • Checa e libera memória que não é mais utilizada • Acontece automaticamente. O programador esta livre de gerenciar a liberação de memória • Pode variar entre JVMs de diferentes fabricantesMáquina Virtual Java (cont...)
• Onde encontrar uma JVM?
– Gratuitamente e direto do fabricante
• Oracle (java.oracle.com)
– Na página, podem ser baixados o JRE e o SDK
• O JRE é o ambiente para máquinas que irão apenas “rodar” programas Java
• SDK ou JSDK é o ambiente para desenvolvedores (JVM, compilador, debugger, etc)
Máquina Virtual Java (cont...)
Primeiro Programa em Java
• Formado por 3 elementos básicos – Declaração de pacotes – Utilização de “imports” – Definições de classe O programa OlaMundo em Javapublic class OlaMundo { public void digaOla(){
System.out.println(“Ola Mundo!”); }
Java em Linha de Comando
Compilação
• javac OlaMundo.java
• Geração do OlaMundo.class
Execução • java OlaMundo <Argumentos>
Comentários
• Existem três tipos de comentários em Java
– De uma linha – De várias linhas
– De documentação
//Comentário uma linha
/* Comentário de várias linhas */ /** Comentário de
Sentenças e Blocos
• Uma sentença (statement) é uma linha de código terminada por um “;” • Um bloco de código é delimitado por chaves (“{” e “}”) total = a + b; { total = a + b; }Palavras-Chaves (Reservadas)
abstract, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, extends, false, final, finally, float, for, goto, if, implements, import, intanceof, int, interface, long, native, new, null, package, private, protected, public, return, short, static, super, switch, syncronized, this, throw, throws, transient, true, try, void, volatile e while
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
Identificadores
• São usados para nomear variáveis, métodos, classes e labels. Não podem ser palavras reservadas e devem iniciar com letra, $ ou _ Exemplo de Identificador Validade do Identificador louco Válido intGrande Válido $valor100 Válido 3_variavel Inválido !verdade InválidoTipos de Dados Primitivos
[1/4] Tipos de Dados Primitivos Tipo Booleano boolean Tipos Numéricos Tipos Integrais Tipo Caractere char Tipos Inteirosbyte short int long
Tipos de Ponto Flutuante
Tipos de Dados Primitivos
[2/4]• Tipo Booleano
Nome Exemplo Largura e Valores Permitidos
Tipos de Dados Primitivos
[2/4]• Tipos Numéricos
Nome Exemplo Largura e Valores Mínimos e Máximos
char char ch = ‘a’ 16bit (single) Unicode/ 0..65,535 byte byte bt = 100; 8 bits / -27 .. +27-1
short short st = -4; 16bits / -215 .. +215-1
int int it = 10; 32bits / -231 .. +231-1
long long lg = 300L; 64bits / -263 .. +263-1
float float ft = 2.5; 32bit (single)/ IEEE 754 ponto flutuante double double db = 5e10; 64bit (double) / IEEE 754 ponto flutuante
Tipos de Dados Primitivos
[3/4]• Caracteres e Cadeias (strings)
Exemplo Descrição
char ch = ‘a’; Caractere ‘a’ char ch = 97; Caractere ‘a’
int val = ‘a’; Valor inteiro do caractere ‘a’ (97) String st = “Tipo”; Cadeia de caracteres T-i-p-o String st = “Ola Java!\n” Ola Java!
Tipos de Dados Primitivos
[4/4] • Matrizes (Arrays) – Declaração • <tipo> <variavel>[]; ou <tipo>[] <variavel>; – int inteiros[]; – double[] doubles; – Construção (instaciação) • <variavel> = new <tipo>[<tamanho>]; – inteiros = new int[5];– Inicialização
• <variavel>[<indice>] = <valor>; – inteiros[0] = 1;
O Tipo String
• Em Java, cadeias de caracteres (String) não são tipos primitivos, são objetos! – Literais: “”, “Programa”, “Linguagem”; – String a = “Java”; – Concatenação: “Ola” + “Mundo” = “OlaMundo”; – Conversão Implícita: “Ola” + 2008 = “Ola2008”; – Comparação de Strings: a.equals(b) retorna boolean – Tamanho de uma String: a.length() retorna intDeclaração e Atribuição
[1/2] • Declarando Variáveis – <tipo> <variável> = <expressão>; • char a, b, c; • double area; • Declarando e Inicializando Variáveis – <tipo> <variável> = <expressão>; • int i = 10, j = 100; • long big = 12341234L;Declaração e Atribuição
[2/2] • Atribuindo valores a variáveis – <variável> = <expressão>; • j = 5; • k = 5; – <variável> = <variável> ... = <expressão>; • int j, k; • j = k = 5;Convenções de Código Java
• Java é sensível ao caso (case sensitive) – variavelA é diferente de variavela
• Além de tudo é uma boa prática toda a equipe escrever da mesma forma – Mais entendimento e organização • Existe um documento oficial da SUN/Oracle que determinada esse padrão (Java Code Convetions) – http://www.oracle.com/technetwork/java/codeconv-138413.html
Convenções de Código Java
• Classes e Interfaces – class MinhaClasse – interface MinhaInterface • Métodos e Variáveis – calcularSalario() – double valorSalarioMensal • Constantes – DADA_DE_EXPIRACAO_SENHA – MAX_SIZEOperadores Matemáticos
Nome Símbolo Exemplo
Adição + a = a + 1 Subtração - s = s - 1 Multiplicação * m = m*2 Divisão / d = d/2 Módulo (resto) % r = r%2 Incremento ++ i++ Decremento --
i--Operadores Comparativos
Nome Símbolo Exemplo
Igualdade == if(a == b) {...} Desigualdade != if(a != b) {...} Menor que < if(a < b){...} Maior que > if(a > b){...} Menor ou igual <= if(a <= b){...} Maior ou igual >= if(a >= b){...}
AND && if(a == 1 && b > 1){...}
Operadores Binários
Nome Símbolo Exemplo
Complemento binário ~ a = ~a
AND & a = a & 0x22
OR | a = a | b
XOR ^ a = a ^ b
Deslocamento à esquerda << a = 2 >> a
Operadores Binários
Nome Símbolo Exemplo
Imprimindo Dados
[1/2]• Escrevendo dados na saída padrão (monitor)
– System.out.print(“dados”); – System.out.println(“dados”);
– System.out.println( x ); (x é uma variável)
• Pode-se concatenar Strings com variáveis
Imprimindo Dados
[2/2] • Códigos de escape para caracteres Caractere Significado \b Caractere de retrocesso (backspace - BS) \f Quebra de página (form feed - FF) \n Quebra de linha (line feed - FL) \r Retorno de carro (carriage return - CR) \t Tabulação horizontal (horizontal tab - HT) \\ Barra invertida (backslash - \ ) \’ Apóstrofo (single quote - ' ) \” Aspas (double quote - " )Lendo Dados
• Lendo dados da entrada padrão (teclado)
– Crie a variável de leitura dos dados
• Scanner scanner = new Scanner ( System.in );
– Use os métodos de leitura específicos do tipo desejado
• System.out.print( "digite uma linha: " );
• String linha = scanner.nextLine() ; // lê a linha • System.out.print( "digite um numero: " );
• int i = scanner.nextInt() ; // lê um inteiro • System.out.print( "digite um numero: " );
Fluxo de Controle (if .. else)
Comando – if ... else if(condição){ (...) } else { (...) }Fluxo de Controle (if ... else ... if)
Comando – if ... else ... if
if(condição){ (...)
} else if (condição){ (...)
Teste de Múltipla Escolha (switch )
Comando - switch switch(opção) { case 1: (...) break; (...) case n: (...) break; default:(...) break; }Enquanto (while)
Comando - while
while(condição) { (...)
Faça Enquanto (do ... while)
Comando – do ... while
do {
(...)
Para (for)
Comando – for
for (comando; condição; comando){ (...)
Break
Comando – break
for (comando; condição; comando) { if(condição) {
break; }
(...) }
Continue
Comando – break
for (comando; condição; comando) { if(condição) {
continue; }
(...) }
Return
É usado para parar a execução do método corrente e transferir o fluxo de controle para o método que o chamou.