Upload
liverig
View
5.314
Download
3
Embed Size (px)
DESCRIPTION
Trabalho sobre a Linguagem de Programação Java. Work about Java Programming Language.
Citation preview
JAVA: Muito mais que uma linguagem
Enrico NicolettoFernando AlonsoIvan Lopes AlonsoJosé Erinaldo de Jesus Martins
Disciplina: Paradigmas de programação - UNIARARAS
Licença Creative Commons
Trabalho sob licença Creative Commons, alguns direitos reservados.
Você pode transmitir, modificar ou transmitir a obra desde que citados os autores.
Creative Commons 3.0 Brasil, mais informações em:
http://creativecommons.org/licenses/by/3.0/br/
TÓPICOS DESTA APRESENTAÇÃO :
•PERDENDO O SOTAQUE•EXPLICAÇÃO DO CÓDIGO•A HISTÓRIA DA LINGUAGEM•COM LICENÇA, JAVA?•CARACTERÍSTICAS DA LINGUAGEM•JAVASCRIPT VS JAVA •A PLATAFORMA JAVA•CONCEITOS DE GERENCIAMENTO DE MEMÓRIA•AMBIENTE DE DESENVOLVIMENTO •AMBIENTE DE EXECUÇÃO•INTRODUÇÃO A POO EM JAVA•CERTIFICAÇÕES•JAVA E O DRAGÃO•CONSIDERAÇÕES FINAIS•VÍDEO DE ENCERRAMENTO (02” 30s)
Perdendo o sotaque
Aprender uma nova linguagem de programação é mais fácil que aprender uma nova língua falada. Entretanto, em ambos os esforços, é necessário esforço extra para aprender a falar a nova língua sem sotaque. É necessário erradicar certas expressões e corrigir algumas pronúncias para que você fale de forma fluente.
A forma como falamos,
demonstra nossas origens...
Perdendo o sotaque
Não usar as convenções do Java e escrever o código da mesma forma que em C / C++ ou qualquer outra linguagem, trará a você uma imagem de convertido, ao invés de falante nativo!
Seu código vai funcionar, mas parecerá errado aos ouvidos de um nativo. Como resultado, os nativos podem usar um olhar
superior com falantes não nativos
Infelizmente na história do Brasil e de muitos países,colonizadores achavam-se superiores aos colonizados.
Índios nativos do Brasil e portugueses (elite paulista)
Perdendo o sotaqueQuem é esse poookémon ?
class Test {
public static void main(String argv[]) { float F, C; float min_tmp, max_tmp, x; min_tmp = 0; max_tmp = 300; x = 20; F = min_tmp; while (F <= max_tmp) { C = 5 * (F-32) / 9; printf("%f\t%f\n", F, C); F = F + x; } }
private static void printf(String format, Object... args) { System.out.printf(format, args); } }
É um código Java muito engraçado. Trabalho de
alguém que pensa em C e está meramente traduzindo
para a linguagem Java...
Why?•As variáveis são floats em vez de doubles.
•Todas as variáveis são declaradas na parte de cima do método.
•A inicialização segue a declaração.
•É usado um loop while em vez de um loop for.
•É usado printf em vez de println.
•O argumento do método main() é nomeado argv.
•Os parênteses de array vêm depois do nome do argumento e não depois do tipo.
Essas expressões não estão erradas, mas tomados em conjunto eles constituem um
código muito estranho que é difícil para um programador Java ler.
Anatomia básica
/* Aplicativo Anatomia Básica */
public static void main(String[] args){ System.out.println(“Eu sou um programa Java!”); }
public class AnatomiaBasica {
}
Comentário do blocoNome da classe Nome do método
Declaração de argumento variável local: args tipo: String[]
Ponto-e-vírgula aofinal de toda instrução
Atribuição de argumento para o método println()
Chamada do método println() via objeto out acessível através da
classe System
Definição do método main()
Definição da classe AnatomiaBasica
A classe scannerPara ler entrada de dados, devemos utilizar a classe Scanner, veja o exemplo abaixo:
Explicação do códigoimport java.util.*; // ou usar java.util.Scanner, que é o pacote utilizado para obter entrada do usuário via teclado
class Trabalho_Paradigma_Java { public static void main(String args[]) {
float n1 = 0, n2 = 0, nf = 0, PExtra = 1; // variáveis para uso das funções String cong = ""; // variável para controle da participação do Congresso
do { //parametro para continuar a execução. O "do" faz o teste condicional ao final, beleza ?
Scanner entrada = new Scanner(System.in); String nome=""; do { //controle da entrada do nome caso seja = ""
//Entrada do nome do aluno. System.out.println("Digite o Nome do Aluno: "); nome = entrada.nextLine();
} while (nome.equals(""));
int RA=0; do { //controle da entrada do RA caso seja = ""
Explicação do código //Entrada do RA do aluno. System.out.println("Digite o RA do Aluno: "); RA = entrada.nextInt(); } while (RA == 0); //int RA = Integer.parseInt(RA); // Conversão de tipo //requerimento da nota da Lista1 e Scanner da mesma. System.out.println("Digite a nota da Lista 1: "); float lista1 = entrada.nextFloat();
// Verificação de nota menor que 0 ou maior que 10 if ((lista1 < 0.0) || (lista1 > 10.0)) { System.out.println("Favor Informar números entre 0 e 10"); lista1 = entrada.nextFloat(); }
// Requerimento da nota da Prova1 e leitura da mesma. System.out.println("Digite a nota da Prova 1: "); float prova1 = entrada.nextFloat();
// Verificação de nota menor que 0 ou maior que 10 if ((prova1 < 0.0) || (prova1 > 10.0)) { System.out.println("Favor Informar números entre 0 e 10"); prova1 = entrada.nextFloat(); }
Explicação do código //requerimento da nota do SPA e Scanner da mesma. System.out.println("Digite a nota do SPA: "); float SPA = entrada.nextFloat();
// Verificação de nota menor que 0 ou maior que 10 if ((SPA < 0.0) || (SPA > 10.0)) { System.out.println("Favor Informar números entre 0 e 10"); SPA = entrada.nextFloat(); }
//requerimento da nota da AT1 e Scanner da mesma. System.out.println("Digite a nota da Apresentação (AT1): "); float AT1 = entrada.nextFloat();
// Verificação de nota menor que 0 ou maior que 10 if ((AT1 < 0.0) || (AT1 > 10.0)) { System.out.println("Favor Informar números entre 0 e 10"); AT1 = entrada.nextFloat(); }
//requerimento da nota da TInter e Scanner da mesma. System.out.println("Digite a nota do Trabalho Inter. (TInter): "); float TInter = entrada.nextFloat();
Explicação do código // Verificação de nota menor que 0 ou maior que 10 if ((TInter < 0.0) || (TInter > 10.0)) { System.out.println("Favor Informar números entre 0 e 10"); TInter = entrada.nextFloat(); }
//verificação para participação no congresso System.out.println("Participou do Congresso?: "); cong = entrada.next(); cong = cong.toLowerCase();
if (cong.equals("s")) { System.out.println("Parabéns Você Ganhou um Ponto Extra em AT1");
} else { System.out.println("Que Pena Você Não Ganhou um Ponto Extra em AT1"); }
n1 = calculaN1(lista1, prova1); n2 = calculaN2(AT1, TInter, PExtra, cong); nf = calculaNF(n1, n2, SPA);
Explicação do código //Prints da vida System.out.printf("\n\n"); System.out.println("Aluno: " + nome + " RA: " + RA); System.out.printf("\n"); System.out.println("Nota 1: "+n1); System.out.println("Nota 2: "+n2); System.out.println("Nota Final: "+nf);
System.out.println(""); //Pra que usar printf se você tem o poderoso Println ?????? situacaoAluno(nf); // Se quiser usar printf use, mas não é convenção padrão de Java :-/ System.out.println("");
//verificação para continuar no programa System.out.println("Deseja Continuar (S/N)?: "); cong = entrada.next(); cong = cong.toLowerCase();
} while (cong.equals("s")); } /* * Calcular a nota N1. */ static float calculaN1(float l1, float p1) { return ((l1 + p1) / 2); }
Explicação do código /* * Calcular a nota N2. */ static float calculaN2(float at1, float ti, float PExtra, String cong) { float n2 = (((float) 0.3) * at1) + (((float) 0.7) * ti); if (n2 == 10) { return (n2); } if (cong.equals("s")) { n2 = n2 + PExtra; } if (cong.equals("n")) { return (n2); } return (n2); } /* * Calcular a nota final. */
static float calculaNF(float n1, float n2, float spa) { return ((n1 + 2 * spa + 2 * n2) / 5); }
Explicação do código
/* * Avalia a situacao do aluno. */
static void situacaoAluno(float nf) { if (nf < 3) { System.out.printf("Foi reprovado(a) na matéria"); System.out.printf("\n"); } if (nf >= 3 && nf < 5) { System.out.printf("Esta de RE"); System.out.printf("\n"); } if (nf >= 5) { System.out.printf("Esta Aprovado(a) ! Parabéns. "); System.out.printf("\n"); } }}
Explicação do código - JavaDoc
JavaDoc, show de bola!!!!
Histórico
A linguagem JAVA foi projetada e implementada por um pequeno grupo de pessoas, coordenado
por James Gosling, na Sun Microsystems em Mountain View, Califórnia, em 1991.
Histórico
Equipe trabalhava no projeto de software para produtos eletrônicos de consumo.
TVs interativas, torradeiras interativas, uma casa interativa.
Interconectados e com a mesma interface.
Projeto Green(1991)
Histórico
Protótipo de dispositivo de comunicação entre aparelhos eletrodomésticos. (espécie de controle
remoto)
Projeto Green
*7 (Star Seven)Meu primeiro emprego: guia virtual do *7
Histórico
*7 (Star Seven)
Linguagem de programação que tenha alta confiabilidade, compatibilidade e que operem dadas as limitações de hardware.
O grande desafio do projetoC++
E agora, quem poderá me defender ?????
Histórico
Eu, o chapolin colorado!a linguagem Oak !!!
Em português Oak significa Carvalho.
Histórico
1993 – A internet torna-se mais popular e a Sun direciona o potencial da linguagem JAVA
para conteúdo dinâmico na internet .
Oak
1995 – Java é anunciado em uma importante conferência.
Java
E agora o que será do fluxo contínuo de
espaço de tempo????
Dia 02 de Abril de 2010 – James Gosling se demite da Oracle
N o tí c i a m a i s r e c e n t e . . .
27 Jan 2010
Com licença, JAVA?• Durante alguns anos, a Sun resistiu a colocar o Java sob GPL, licença
padrão para software livre. A Sun manifestava temor de que, uma vez aberto, produtos ruins feitos em Java pudessem criar problemas de compatibilidade e afetar negativamente a imagem da linguagem.
• Em 13 de Novembro de 2006, a Sun lançou a maior parte do Java como Software Livre sob os termos da GNU General Public License (GPL).
• Foi quando em 09 de Maio de 2007 a Sun anunciou a oficialização da linguagem JAVA sob licença GPL. Praticamente todo código Java como software de código aberto, menos uma pequena porção da qual a Sun não possui copyright.
“O homem nasceu livre, e em todos os lugares ele está acorrentado.”Jean-Jacques Rousseau
Refletir....
Características da Linguagem
Simples Orientado a Objetos
Distribuída
Robusta Segura Portável
Características da Linguagem
Dinâmica
Interpretada Alto Desempenho
Multi-tarefas(Multithreaded)
Muitas APIs
Características da Linguagem
Alocação automática de memória
Herança únicaSem ponteiros
Arquitetura neutra
Coleta de lixo (garbage collector)
Características da Linguagem
Coerção de tipo implícita
Verificação de faixa de índice
implícita
Híbrida
Imperativa
Destrutores diferentes: finalizadores.
Características da Linguagem
Programação multi-plataforma
Popular Orientada a Eventos
Gratuita
Características da Linguagem
Ortogonalidade
Carga dinâmica de Código
Internacionalização
Tratamento de excessões
Javascript vs Java
Javascript tem sintaxe similar a de Java (mas também de C e C++)
Javascript é interpretado enquanto Java é compilado
Javascript depende de interpretador-mestre (navegador). Java, uma vez compilado, necessita da JVM
Javascript é uma linguagem limitada e não consegue, em vias normais, criar um programa autônomo (standalone)
Não se inclui Java em uma página, carrega-se uma applet ou componente
X
Javascript é jamais Java!Java é jamais Javascript!
Saber, decorar, nunca mais esquecer!
Javascript vs Java
Saber, decorar, nunca mais esquecer!
Uma “homenagem” pela Sun ter ajudado (financeiramente) a Netscape.
O nome e a bandeira do Brasil em 1889 se pareceram muito com os Estados Unidos (óbvio que só nisso), Javascript tem o nome ‘Java’ e possui sintaxe parecida com a de Java (e de C e C++ também), mas
Javascript só é Java se Estados Unidos for Brasil.
Bandeira da República dos Estados Unidos do Brasil
Porque será que Javascript tem o nome Java se são diferentes?
É PECADO dizer que Javascript é DERIVADO de Java. A palavra derivado significa“originário”, o leite é derivado do queijo. Mas uma meia fedida não é derivadado queijo apesar do odor parecido – desculpem o exemplo fedorento!!!!!
Disponível em: <https://meapplicationdevelopers.dev.java.net/fragmentation.html>, acesso em 26 abril 2010
A plataforma Java
“O homem nunca sabe do que é capaz, até que o tenta “.Charles Dickens.
A plataforma JavaMais exemplos...
Java Card(chip para celulares
e disp. móveis)
Receitanet rodandono Mac Os X
Um applet
Java Model Railroad Interface, suíte de ferramentas para modelar
ferrovias.
Arquitetura de aplicativos Java
Plataforma Java é o ambiente computacional onde se permite desenvolver aplicativos utilizando a linguagem Java. Uma grande vantagem da plataforma é a de não estar
presa a um único sistema operacional ou hardware, pois roda sob a JVM (o coração do JAVA).
J2EE J2SE J2ME
J2EEJ2SEJ2ME
Servidor não é a
mamãe!!!!
Oh!!
Conceitos de Gerenciamento de Memória (Alocação dinâmica)
As instruções de um programa são temporariamente armazenados na memória do computador. Não é necessário o programador
preocupar-se com a gestão da memória (coisa que não acontece em outras linguagens tais como o C ou C++): a JVM e o garbage collector tratam do assunto. Todavia ajuda sabermos onde são armazenados os dados na memória para termos uma melhor
compreensão de como os objetos são criados.
Há duas áreas distintas onde os dados de um programa são armazenados: stack e heap são duas formas (ou sítios) diferentes de armazenar em memória os elementos de um programa que
está em execução.
Conceitos de Gerenciamento de Memória (Heap)
Vivem na Heap:• Variáveis de instância: as variáveis de tipos primitivos definidas
dentro da classe mas fora dos métodos (variável de instância pertence a um objeto)
• Referências a variáveis de instância: as variáveis que se referem a um objeto e são definidas dentro da classe mas fora dos
métodos.• Objetos: Todos os objetos vivem na heap.
O garbage collector libera a memória destruindo os objetos
da heap que estejam em desuso.
Conceitos de Gerenciamento de Memória (Stack)
Vivem na Stack:• Variáveis locais: as variáveis de tipos primitivos definidas dentro de
um método ou como parâmetros de um método. (pertencem a métodos e vivem na stack)
• Referências de variáveis locais: as variáveis que se referem a um objeto e são definidas dentro de um método ou como parâmetros de
um método.Um objeto cuja variável local se refere vive na heap.• Invocações a métodos: quando invocamos um método, esse
método é empurrado para a stack (é colocado no topo da stack).
As variáveis locais vivem dentro do método e o seu alcance restringe-se ao método. Quando a execução do método termina, as variáveis locais desaparecem mas os
objetos, cujas variáveis locais eventualmente se referem, continuam vivos na heap (não morrem com a desreferenciação).
Conceitos de Gerenciamento de Memória (Heap e Stack)
Obtido de: <http://www.youtube.com/watch?v=HQ3YI70PDe0&feature=SeriesPlayList&p=4BBB74C7D2A1049C&index=8>, 01:57, acesso em 01 mai 2010.
Obtido de: <http://img187.imageshack.us/img187/2904/hfjcap089fbyh1.png>, acesso em 31 mar 2010.
Conceitos de Gerenciamento de Memória (Heap e Stack)
Heap objetos de forma desorganizada (métodos agrupados sem orientação lógica)
Stack pilha de objetos de forma organizada (Cada método é empilhado, e empilhando-se
sucessivamente ao executar o método dentro de outro método. Ao finalizar, o método é
direcionado ao final da pilha.
Ambiente de desenvolvimentoAntes de falarmos das IDEs, devemos citar os kit´s de
desenvolvimento, eles são:
JDK = Java Development Kit (Sun) OpenJDK = Open JDK (Comunidade, livre)
O usuário não precisa ter eles para executar seu programa Java, mas o desenvolvedor precisa deles para fazer o código.
JDK (desenvolvedor) JRE (usuário)
Java Development KitSuportado em
Solaris SPARC x86Solaris SPARC x64Windows x86Windows x64Linux x86Linux x64Mac OS (já vem no próprio S.O. )
Especificações detalhadas de configurações de sistema do JDK em:http://java.sun.com/javase/6/webnotes/install/system-configurations.html
Como instalar no Linux em:http://techreviews.in/installing-and-setting-up-java-6-jdk-in-intrepid-ibex/
Ambiente de desenvolvimentojEdit - (recomendado para programadores iniciantes)
Dr.Java – Ambiente projetado principalmente para o ensino da linguagem. Desenvolvido na Universidade Rice (EUA).
JCreator - (gratuito/shareware) — um ambiente desenvolvido pela Xinox (recomendado para programadores iniciantes);
Eclipse - (software livre) — um projeto aberto iniciado pela IBM;
NetBeans - (software livre) — um ambiente criado pela empresa Sun Microsystems;
JBuilder - um ambiente desenvolvido pela empresa Borland;
JDeveloper - (gratuito OTN) — uma IDE desenvolvida pela empresa Oracle;
IntelliJ IDEA - (comercial) — uma IDE desenvolvida pela JetBrains (considerada por muitos a melhor IDE do mercado).
Ambiente de desenvolvimento
Dados obtidos de: <http://forum.worldwindcentral.com/showthread.php?t=24462>, acesso em 15 abril de 2010
Netbeans, I LOVE YOU!!!
Este IDE foi desenvolvida pela empresa Oracle
Este é o Eclipse, num Linux...
Esse é o Jcreator da Xinox
E esse é o ... Vocês não enxergam lá
em cima????
Aplicações independentes, Applets, Servlets, JSPs e MIDlets.
Os aplicativos independentes (stand-alone) são executados através de um sistema operacional.
Os Applets são aplicativos que são executados através de um navegador de internet.
Os Servlets são aplicativos que são executados em um servidor de internet.
Os JSP permitem misturar tags HTML e código Java. Ao invés do servlet (código html dentro do java), escreve-se html que pode conter o java.
Os MIDLets são pequenos aplicativos Java que rodam em celulares que possuem Java.
Java não roda só Java...
groovy.codehaus.org www.jython.org
jruby.codehaus.org sun.com/javafx
www.beanshell.org
Rhino: JavaScript for Java
www.mozilla.org/rhino
REHEM, Serge. Desenvolvimento Java. Slide 57. Disponível em:<http://www.slideshare.net/serge_rehem/desenvolvimento-java>. Acesso em: 23 abr. 2010.
Código e componente MediaBox disponível em:http://javafx.com/samples/MediaBox/index.html
JavaFX• Gráficos• Folha de estilos ...• Conteúdo multimídia ...• Jogos on-line ...
Distribuição meuarquivo.class
Ambiente de execução
Ambiente de meuarquivo.javaDesenvolvimento
Ambiente de execução
Para que o programa Java seja executado precisamos da JRE, muito chique. Não concordam?
JRE
= Biblioteca de classes + JVM
Código java
Compilador
Byte Code Java
VM Linux VM Windows VM Celular
SO Windows SO CelularSO Linux
Os bytecodes são a linguagem de máquina da JVM.
Sem bytecodes ? ADEUS, JVM. ADEUS portabilidade!
Ambiente de execuçãoA JVM é uma máquina imaginária
emulada em um hardware. JVM
James Gosling já afirmou que a linguagem Java não é mais importante da plataforma, e sim a JVM.
Ambiente de execução
Arquitetura da Máquina Virtual Java.
// Este é o programa add.java
public class add { public static void main(String args[]) { int x=15, y=9, z=0; z = x + y; } }
Programa Java e arquivo .class compilado
Ambiente de execução (100% segura?)
Uma vulnerabilidade no código de analise de imagens do Ambiente de Execução do Java (JRE) existe devido a um erro de buffer overflow, o que pode permitir a um applet não confiável ou a uma aplicação em java elevar seus privilégios de execução.
Uma segunda vulnerabilidade poderia permitir a um applet não confiável ou a uma aplicação em Java que fizesse a Maquina Virtual do Java (Java Virtual Machine) parar de responder, levando-a a uma condição de negação de serviço (DoS).
(....) recomenda-se que administradores mantenham seus sistemas e aplicativos sempre atualizados, de acordo com as ultimas versões e correções oferecidas pelos fabricantes.
Alerta AL-2007.0071
Ambiente de execução (os 3 mosqueteiros)
Observação: Arquivos interpretados, apesar de portáveis, rodam de 100x a 200x mais lentos que os compilados.
Podemos resumir em 3 formas de execução:
1. Compilação do código Java para bytecode e interpretação através daimplementação da JVM em software. (10x mais lento que compilado emC)
2. Compilação Just-in-time (vêm junto com a JVM, melhoria feita na JVMPela Sun a partir de 1996 – aplicativo com performance comparável a de C++)
3. Execução do bytecode diretamente em uma implementação da JVM emhardware.
Ambiente de execução (JIT)
Sistema de produção Just-in-time: Fazer apenas o necessário, quando necessário e apenas na quantidade necessária. – Kiichiro
Toyoda
Em vez de interpretar bytecode JVM instrução por instrução na máquina destino, a cada vez que uma nova instrução é encontrada os compiladores JIT levam em conta o fato de que a maioria dos programas gasta a maior parte do tempo em loops e outras rotinas iterativas. Quando o JIT encontra uma linha de código pela primeira vez, ele a compila em código nativo e o armazena na memória para reutilização posterior. Da próxima vez que o código for executado, a execução usa o código pré-compilado em lugar do bytecode.
A opção de compilador JIT deve ser usada especialmente seo método executável é repetidamente reutilizado no código.
Lembrar que:
O peso do bytecode triplica (+ memória) e perde-se portabilidade.
A microarquitetura picoJava-II é voltada para a execução eficiente de Java diretamente em hardware. Desta forma, é
possível executar com desempenho aplicativos Java em processadores baratos, para os quais seria necessário uma
máquina de alto desempenho com compiladores Just in Time. Com isto, uma vasta gama de aplicações embarcadas abre-se
para o uso de Java.
Ambiente de execução (picoJava-II)
•Objetivo: otimizar a execução de código Java (acelerar)
• Executa diretamente parte das instruções do código Java• Otimiza sincronização de pipeline (4 níveis no picoJava-I e 6
níveis no picoJava-II)•Otimiza gestão das variaveis locais (obtendo menor numero de
ciclos de clock por instrucao)•Otimização na execução de instruções em C/C++
•Modos de configuração entre consumo, tamanho e velocidade.• Pode-se usar barramento PCI para acessar periféricos/memória
•Destinado a dispositivos eletrônicos de consumo
Ambiente de execução (picoJava-II)
Diagrama adaptado de: <http://www.cqpub.co.jp/dwm/contents/0020/dwm002000420.pdf> Acesso em 17 abril 2010.
Figura 1: Execução da Linguagem C e Java
Conjuntos de instruções dosBytecodes java
(a) Ao usar CPU de propósito geral (b) Ao usar o picojava
Execução direta dosBytecodes
CompilaçãoCompilação/Montagem
Código nativo
Compilação/Montagem
Bytecode Java Código nativo do picoJava(bytecodes e bytes de expansão)
Ambiente de execução (picoJava-II)
Quando devo usar OO ??
Introdução a POO em Java
Um paradigma de programação trata computacionalmente os problemas encontrados nomundo real.
O POO ou OOP (em inglês) surgiu nos anos 60, no centro Norueguês de Computação, onde o Simula 67 introduzia conceitos de classe e herança.
O projeto de java teve influência de C++ e Smalltalk (Tucker e Noona, p.7)
A maioria dos projetos hoje são orientados a objetos
Alan Kay formulou a chamada
analogia biológica: “COMO SERIA UM SISTEMA DE SOFTWARE QUEFUNCIONASSE COMO UM SER-VIVO?”.
Introdução a POO em JavaCada “célula” interagiria com outras através de envios de mensagens
para realizar um objetivo comum, cada qual comportar-se-ia como unidade autônoma.
Alan Kay pensou em como construir um sistema de software a partir de agentes autônomos que interagem entre si.
Com isso nascem os princípios da orientação a objetos.
Eu sei que é emocionante, mas contenham as lágrimas!
Objetos
Pessoas Livro Automóvel
Tangíveis
Incidente
Competição
TransaçãoInteração
Projeto Conserto
Saque Venda
Um objeto é uma extensão do conceito de objeto no mundo real, onde podem-se ter coisastangíveis, um incidente (evento ou ocorrência) ou uma interação (transação ou contrato).
Os atributos representam os estados armazenados e realizam troca de mensagens.
ClasseUma classe é uma coleção de objetos que podem ser descritos por um conjunto básico deatributos e possuem operações semelhantes.
Utilitário Passeio Tração animalEsportivo
Veículos
EspecializaçãoG
ener
aliz
ação
Minivan
Classe Subclasse Subclasse Instância Instância
Veículos Passeio Sedan Marca: ChevroletModelo: Corsa Classicano: 2002eixos:2Injeção eletrônica: Sim
Marca: ChevroletModelo: Chevette SLano: 1984eixos:2Injeção eletrônica: Não
Instâncias de ObjetosQuando se fala em classes de objetos, considera-se que podem ser incluidos objetos nelas.
Passeio
Veículos
Sedan
Para cada novo veículo, será criado uma nova instância deobjeto de uma determinada classe, ex:
Fiat idea -> Minivan
HerançaHerança nada mais é do que a implementação da generalização. É o compartilhamentode atributos e operações entre classes com base em um relacionamento hierárquico.
Quando é criado uma nova instância de um objeto, dizemos, em orientação a objeto, que esse novo objeto herda os atributos e as operações de sua classe.
Ah, fala logo que uma classe (sub-classe) pode
estender outra classe (superclasse), estendendo seus comportamentos e
atributos !
Instância
Marca: ChevroletModelo: Chevette SLano: 1984eixos:2Injeção eletrônica: Não
Herança simples Herança múltipla
PAI
FILHO FILHO
(Java)
FILHO
PAIPAI
(C++)
PolimorfismoAssociado ao conceito de Herança, ele permite que o objeto assuma umcomportamento diferente daquele definido em sua classe.
Polimorfismo: vem do grego poli =“muitas” e morphos=“formas”, é a capacidade deassumir muitas formas.
Operação darPartida();
Considerando-se que a operação dar partida precisa ser adaptada para a classe tração animal, reescrevem-
se as tarefas para essa operação. Que passará a responder de forma diferente apenas para esta classe
e para os objetos instanciados por ela.
EncapsulamentoO encapsulamento, também chamado de ocultamento de informações, consiste naseparação entre os aspectos externos de um objeto, acessíveis por outros objetos,e os detalhes internos da implementação daquele objeto, que ficam ocultos dos demais objetos;
O encapsulamento impede que um programa se torne tão interdependente que umapequena modificação possa provocar grandes efeitos que se propaguem por todo osistema.
PublicPrivate
Protected
Permite que o membro público seja acessado por qualquer outrocódigo do programa. (+ responsabilidade ao usar)
Determina que o membro privado seja acessado apenas por métodos de dentro da própria classe. (usar sempre que possível)
O membro protegido está disponível a todas as classes do mesmopacote, incluindo todas as subclasses da classe que possui o recurso protegido. Somente os métodos e atributos devem ser declarados.
Default O modificador de acesso padrão é adotado quando nenhum outro tipo de moderador é declarado.
CertificaçõesA tecnologia Java oferece por meio da Sun uma série de certificações de diversos níveis e perfis. Há certificações
para iniciantes, programadores, desenvolvedores e arquitetos, abrangendo Java SE, EE e ME.
Gráfico obtido da V Pesquisa Nacional Java, disponível em <http://www.mundojava.com.br/NovoSite/vozDoPlanalto/vozplanalto_MJ_ED10.pdf> Acesso em 03/04/2010
Certificações * Sun Certified Java Associate (SCJA) * Sun Certified Java Programmer (SCJP) + “popular” * Sun Certified Java Developer (SCJD) * Sun Certified Web Component Developer (SCWCD) * Sun Certified Business Component Developer (SCBCD) * Sun Certified Developer For Java Web Services (SCDJWS) * Sun Certified Mobile Application Developer (SCMAD) * Sun Certified Enterprise Architect (SCEA) - “popular”
CertificaçõesEventualmente, quando é lançada uma nova certificação ou versão de uma certificação já
existente, é comum a Sun oferece-lá a comunidade Java por valores bem menores dos oficiais, ou mesmo totalmente de graça.Dentre as certificações Java, a mais conhecida e concorrida é a de programador Java, chamada SCJP (Sun Certified Java Programmer). Seu código é o 310-035, duração de 2 horas e custo de 150 dólares. Este exame é um dos mais rigorosos da lista
de certificações e abrange o core da linguagem Java (Java SE). Essa certificação é pré-requisito para as certificações mais específicas, como as desenvolvedor em geral .
CertificaçõesOutra certificação importante da
tecnologia é a de Arquiteto Corporativo (SCEA), que é formada de três fases. O rigor dessa certificação
mostra ainda o baixo número de profissionais certificados como
arquitetos Java.
A “caçula” das certificações Java é a de Sun Certified Associate e é voltada
para estudantes ou profissionais que estejam iniciando seus estudos e/ou
atividades na tecnologia.
A própria Sun divide em 5 passos o caminho para se obter uma certificação
Java:1. Faça os cursos de que você precisa para se preparar para o exame. Você pode
se inscrever em cursos ligando para 0800-55-7863.
2. Contate os Serviços Educacionais Sun para adquirir um voucher de testes ligando para 0800-55-78-63.
3. De posse dos vouchers, marque seu teste em um local que seja mais conveniente contactando um APTC - Authorized Prometric Testing Center.
Visite www.prometric.com para obter uma relação de APTCs.
4. Faça o teste Prometric.
5. Parabéns por sua certificação Sun! Quando você concluir com sucesso os passos para a certificação, você receberá um Kit de Certificação Sun e acesso
à ferramenta CertManager, com a qual você poderá manter sua conta atualizada e gerenciar suas futuras certificações.
Benefícios ao profissional
Solidificação e aumento de conhecimento Mais chances de conseguir emprego Mostra o interesse do profissional na atualização de seus
conhecimentos Adquire respeito dos demais colegas Adquire mais segurança em si Selo de qualidade importante para uma profissão que é não
regulamentada
Benefícios às empresas
Os clientes se sentem mais seguros ao investir em projetos que
estarão sendo feitos por profissionais certificados.
Questão salarial
Depende da empresa na qual você trabalha Em alguns casos o aumento de salário é significativo Algumas empresas possuem plano de cargos
Certificações
Bons programadores e arquitetos não necessariamente possuem certificações
Certificação não significa que você é “o(a) especialista”. Comprova que você se esforçou, estudou e tem conhecimento sobre o assunto
Existem excelentes programadores e arquitetos que não possuem certificações e são reconhecidos
Certificações
Nem sempre o título é sinal de poder.
O príncipe Charles nasceu para ser rei, foi preparado para ser rei, e todomundo fica o tempo todo dizendo que ele vai ser rei, que é só uma questãode paciência...
Bom, quando ele era jovem, alguém disse que a mãe dele, Sua Majestade a Rainha, renunciaria quando ele fizesse 25 anos. E lá está o príncipe Charles, viúvo e casado pela segunda vez, aos 56 anos, esperando a mãe renunciar para que ele, finalmente, se torne rei.
Java e o dragãoHá uma linda princesa, prisioneira na maior torre de um castelo, guardada por um poderoso dragão e um
destemido cavaleiro deverá salvá-la...Isto descreve como cada linguagem gerenciaria o resgate da princesa das mãos do dragão:
Java - Chega, encontra o dragão, desenvolve um framework para aniquilamento de dragões em múltiplas camadas, escreve vários artigos sobre o framework mas não mata o dragão.
.NET - Chega, olha a idéia do Javanês e a copia, tenta matar o dragão, mas é comido pelo réptil.
C - Chega, olha para o dragão com olhar de desprezo, puxa seu canivete, degola o dragão, encontra a princesa, mas a ignora para ver os últimos checkins no cvs do kernel Linux.
C++ Cria um canivete básico e vai juntando funcionalidades até ter uma espada complexa que apenas ele consegue entender … mata o dragão mas trava no meio da ponte por causa dos memory leaks.
COBOL - Chega, olha o dragão, pensa que tá velho demais para conseguir matar um bicho daquele tamanho e pegar a princesa e, então, vai embora.
Pascal - Se prepara durante 10 anos para criar um sistema de aniquilamento de dragão … chegando lá descobre que o programa só aceita lagartixas como entrada.
PERL - Vai até o CPAN e baixa uma espada de luz anti-dragão-seqüestrador-de-princesa. Escreve o procedimento para matar o dragão em apenas 7 caracteres e tenta. Erra por um milímetro. Tenta modificar para poder acertar o dragão, mas não consegue mais entender o que escreveu…
PHP - Pesquisa bancos de scripts e acha as classes de construção de espada, manuseio da espada, localização da princesa e dragão. Remenda tudo e coloca umas firulas próprias.
Mata o dragão e casa com a princesa. Como tudo foi feito com gambiarras, o dragão um dia vai ressuscitar e comer os dois.
HTML: Monta uma página sobre espadas famosas usadas para matar dragões, mas ignora os padrões W3C. Quando ele encontra o dragão, ele descobre que o código não é compatível com o seu navegador, que o deixa desarmado. O dragão come ele como aperitivo.
Java e o dragãoJavaScript: O programador tenta matar o grande dragão verde que cospe fogo pela boca. Ele cria um script que irá apagar o dragão
quando ele carregar uma página, para criar segundos depois, algumas donzelas que lhe arremessarão flores e baterão palmas. Infelizmente ele não leva em conta a estrutura DOM do réptil, também conhecido como Mozilla, e a única coisa que ele consegue é
preencher seu console de erros e o Livro de Mozilla conta como ele foi devorado.
VB monta uma arma de destruição de dragões a partir de vários componentes, parte pro pau pra cima do dragão e, na hora H, descobre que a espada só funciona durante noites chuvosas…
Ruby on Rails Para matar o dragão cria em 5 minutos uma estrela da morte com todas as funcionalidades básicas implementadas: raio da morte, quarto com espelhos pra quando salvar a princesa e RSS. Ao disparar contra o dragão nota que só funciona se o dragão, a
princesa e o castelo estiverem acessando a web.
Smalltalk Chega, analisa o dragão e a princesa, vira as costas e vai embora, pois eles são muito inferiores.
ASSEMBLY Acha que ta fazendo o mais certo e enxuto, porém troca um A por D, mata a princesa e transa com o dragão.
Fortran Chega desenvolve uma solução com 45000 linhas de código, mata o dragão vai ao encontro da princesa ... mas esta o chama de tiuzinho e sai correndo atrás do programador Java que era elegante e ficou rico.
Python Desenvolve uma arma mortal. Mata o dragão, a princesa e a si mesmo.
ANALISTA DE PROCESSOS Chega ao dragão com duas toneladas de documentação desenvolvendo o processo unificado de matar-dragão, desenvolve um diagrama de fluxo de dados para libertar a princesa e se casar com ela, convence o dragão que aquilo vai ser o melhor pra ele e que não será doloroso. Ao executar o processo ele estima o esforço e o tamanho do estrago que isso vai causar com um plano assinado pelo Papa, pelo Buda e pelo Raul Seixas. Então compra 2 bombas nucleares, 45 canhões, 1 porta aviões, contrata
300 homens armados até os dentes, quando tudo que precisava era da espada que estava na sua mão o tempo todo.
Adaptado de:http://mindthoughts-leela.blogspot.com/2007/10/how-to-kill-dragon-with-various.html
http://arcano.castelodotempo.com/node/20http://www.colherdesopa.com.br/2009/08/como-matar-um-dragao-programadores.html
Considerações finais
• Os cavaleiros agem de diferentes formas e na história não desempenharam o papel correto
(de ficar com a princesa);
• Se você ainda não speak, é melhor começar a “spekar”;
• Posso inventar 1000 motivos para não começar, mas uma longa jornada começa com o
primeiro passo;
Considerações finais
• Tornar-se um bom programador não é fácil, exige prática e experiência.
• É bom utilizarmos convenções certas para o bom funcionamento (e legibilidade) do código
e não apenas “achismos e/ou remendos”.
• Aprender inglês é uma longa jornada, não se iluda pensando que aprenderá em 2 semanas...
Considerações finais
System.out.println(“Obrigado!”);
“Se você não falha em pelo menos 90% das vezes, seus objetivos não foram ambiciosos o suficiente.”Alan Kay
Esse trabalho não poderia terminar sem a seguinte citação:
Vídeo sobre Java
Tempo do vídeo
http://www.youtube.com/watch?v=guXCmQDy9Es
Link do youtube para o vídeo:
Utilizar o mesmo reprodutor, a legenda deve estar no mesmo diretório do vídeo...
Para a apresentação:
BibliografiaSIMON, Imre. Von Neumann, o cientista e a figura humana. Estud. av., São Paulo, v. 10, n. 26, abr. 1996 . Disponível em <http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0103-40141996000100017&lng=pt&nrm=iso>. Acessos em 30 abr. 2010. doi: 10.1590/S0103-40141996000100017.
DEITEL, Harvey M.; DEITEL, Paul J. Java – Como Programar – 6a Edição. São Paulo: Makron Books, 2005.
PUGA, S. RISSETTII, G. Lógica de programação e estruturas de dados com aplicações em Java. São Paulo: Pearson Prentice Hall, 2003. 254 p. ISBN: 8587918826.
MURDOCCA, Miles J.; HEURING, Vicent P. Introdução à Arquitetura de Computadores. Rio de Janeiro: Campus, 2001. ISBN: 85-352-0684-1
TUCKER, Alllen B. / NOONAN, Robert e. - Linguagens de programação – princípios e paradigmas
ELLIS, Graham. When should I use OO techniques? Publicado em: 11 mai 2009. Disponível em: <http://www.wellho.net/archives/2009/05/when_should_i_u.html>. Acesso em: 23 abr. 2010.
APPLE. Java Frequently Asked Questions. Mac OS X Java FAQ. Disponível em: <http://developer.apple.com/java/faq/#bundle>. Acesso em: 03 maio 2010.
http://www.slideshare.net/joellobo/curso-java-basico-1455829http://www.phph.com.br/JAVA/programacao-orientada-objetos.html http://www.slideshare.net/fgsouza/JavaUnipac2
Bibliografiahttp://www.dcc.unesc.net/sulcomp/05/Art110SulComp2005.pdf <- comparação das 3 linguagenshttp://www.inf.unisinos.br/~barbosa/paradigmas/consipa3/53/s27/javac.htmhttp://www.coladaweb.com/informatica/comparativo-entre-c-e-javahttp://www.dcc.ufrj.br/~comp2/TextosJava/Comparando%20C%20com%20Java.pdfhttp://en.wikipedia.org/wiki/Comparison_of_programming_languageshttp://java.com/en/javahistory/timeline.jsphttp://www.linhadecodigo.com.br/Artigo.aspx?id=745http://inventors.about.com/od/gstartinventors/a/James_Gosling.htmhttp://falandodejava.blogspot.com/2007/02/histria-do-java.htmlhttp://java.com/pt_BR/about/http://www.scriptbrasil.com.br/forum/index.php?showtopic=129724http://distritos.telepolis.com/java/lib/documentos/historia.htmhttp://www.cad.com.mx/historia_del_lenguaje_java.htmhttp://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/I_2.htmhttp://www.infoq.com/news/2010/04/gosling_leaves_oraclehttp://g1.globo.com/Noticias/Tecnologia/0,,MUL1566487-6174,00-CRIADOR+DA+LINGUAGEM+DE+PROGRAMACAO+JAVA+DEIXA+A+ORACLE.htmlhttp://pt.wikipedia.org/wiki/James_Goslinghttp://nighthacks.com/roller/jag/entry/time_to_move_onhttp://pt.wikipedia.org/wiki/Licen%C3%A7as_BSD_e_GPLhttp://www.ronaud.com/frases-pensamentos-citacoes-de/jean-jacques-rousseauhttp://www.citador.pt/pensar.php?op=7&author=26http://www.imotion.com.br/frases/?cat=513http://info.abril.com.br/aberto/infonews/052007/09052007-14.shlhttp://pt.wikipedia.org/wiki/Gnuhttp://www.viamais.net/blog/?p=895https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_cpp_dynamic-memory.phphttp://en.wikipedia.org/wiki/Dynamic_memory_allocationhttp://homepages.dcc.ufmg.br/~camarao/ipcj/ambientes-java.htmlhttp://mindprod.com/jgloss/midlet.htmlhttp://www.slideshare.net/sgvargas/introduccion-a-java-presentation – slide 20http://www.dm.ufscar.br/~waldeck/curso/java/introd.htmlhttp://javafree.uol.com.br/noticia/3604/Vulnerabilidades-no-Ambiente-de-Execucao-do-Java-JRE-da-Sun-AL20070071.htmlhttp://imasters.uol.com.br/faq/420 http://www.java-tips.org/java-se-tips/java.lang/what-is-java-just-in-time-compiler.html http://www.glaucoreis.com.br/developers/2000/novembro2000-artigo.jpghttp://www.arquiteturajava.com.br/livro/java-como-plataforma-nao-como-linguagem.pdf
Bibliografiahttp://paginas.fe.up.pt/~ee94168/trabalhos/AC_picoJava.pdfhttp://www.inf.ufrgs.br/gppd/disc/cmp135/trabs/992/picoJava/node6.htmlhttp://www.inf.ufrgs.br/gppd/disc/cmp157/trabalhos/sem2000-2/tf/lisboa/index.htmlhttp://www.inf.ufrgs.br/gppd/disc/cmp135/trabs/992/picoJava/node6.htmlhttp://www.webgoal.com.br/desenvolvimento/origem-da-orientacao-a-objetos/http://www.infnet.edu.br/desktopmodules/tipoevento/slides/Orientação%20a%20Objetos%20na%20Prática.pdfhttp://www.csse.monash.edu.au/~jonmc/CSE2305/Topics/01.01.OverviewAbsEnc/html/text.htmlhttp://www.slideshare.net/jjfeitosa/curso-java-basico-1108760http://luishenrique.org/blog/posts/paradigmas-de-programacaohttp://www.guj.com.br/posts/list/66878.javahttp://www.hwn.com.br/pej/tij2pej/PEJ306.htmhttp://www.inf.puc-rio.br/~java/progjava/protected/apostilas/oo1.pdfhttp://www.vivaolinux.com.br/artigo/Programacao-orientada-a-objetos-e-o-Java-%28Parte-6%29/?pagina=2http://www.infowester.com/lingjava.phphttp://www.rodflash.com/en/2007/07http://teamkings.forumeiros.com/java-e-javascript-f60/ola-mundo-java-javascript-t780.htmhttp://amsterdaintelligence.blogspot.com/2009/10/java-vs-javascript.htmlhttp://antigo.qi.com.br/professor/downloads/download8785.pdfhttp://www.joomreem.com/joomla-articles/20-generaltopics/26-javavsjavascript.htmlhttp://www.sislands.com/coin70/week1/javajs.htmhttp://www.dannyg.com/ref/javavsjavascript.htmlhttp://www.guiadohardware.net/artigos/programacao-orientada-objetos/ http://www.casodepolicia.com/2007/09/25/conheca-te-a-ti-mesmo-atraves-da-historia/http://www.ibm.com/developerworks/br/java/library/j-noaccent/http://www.slideshare.net/rafaelcarneiro/certificaes-java http://www.ronaud.com/frases-pensamentos-citacoes-de/alan-kayhttp://www.yurimalheiros.com/2009/12/apresentacoes-sem-slides.html http://www.scribd.com/doc/3360383/Choosing-the-Right-Speaker