Programação Orientada a Objetos (DPADF 0063) Aula 2 Java como ferramenta de experimentação Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno
Write once, compile once and run anywhere!
Um pouco de história... Em 1991 a Sun Microsystems, de olho no crescente mercado de dispositivos eletrônicos inteligentes, voltados ao consumidor financiou um projeto interno (Green Project); A ideia era produzir uma linguagem de computador reduzida e simples e que gerasse um código eficiente para ser utilizada em dispositivos com algumas restrições: Pouca memória; Diferentes CPUs; O software produzido não poderia se limitar a uma única arquitetura. James Gosling (chefe da equipe) batizou a linguagem de Oak.
Mais um pouco de história... O nome Oak já era patenteado então a linguagem foi batizada de Java em homenagem a Ilha de Java que produzia o café que a equipe da Sun consumia. O mercado de dispositivos eletrônicos não teve um crescimento tão interessante conforme previsto e o Green Project perder força; Na mesma época há uma explosão de popularidade da World Wide Web e este parece ser um mercado potencial para a linguagem Java; Em 1995 Java é anunciado formalmente. Duke um dos símbolos de Java Em 2009 a Oracle adquire a SUN por US$ 7,4 bilhões e é quem mantém o Java atualmente.
Características... Linguagem simples e orientada a objetos; Subconjunto de C++ Reduzido número de palavras reservadas e grande poder de expressão; Construções complexas e desnecessárias que não fazem parte do núcleo mínimo exigido para uma linguagem orientada a objetos são inicialmente eliminadas... Instruções pré-processadas; Herança múltipla; Sobrecarga de operadores; Programação genérica
Características (cont.)... Fortemente tipada Ampla verificação e erros e checagem de tipos em tempo de compilação; Inexistência do conceito de ponteiros O que existem são referências a objetos; Gerenciamento automático de memória Garbage Collection Coletor de Lixo
Características (cont.)... Independente, Interpretada e Portável... Arquivo fonte (.c) Compilador Código objeto Binário Executável (Arquitetura Específica) Arquivo fonte (.java) Compilador Código intermediário bytecode Interpretador Interpretador Interpretador Interpretador
Etapas do desenvolvimento... Editor disco Etapa 1 O programa é criado em um editor e armazenado no disco com a extensão.java Compilador disco Etapa 2 O compilador cria bytecodes e os armazena em disco com a extensão.class Carregador de Classe disco Etapa 3 O carregador de classe lê arquivos.class que contém bytecodes a partir de um disco e coloca estes bytecodes na memória. Verificador de Bytecode Etapa 5 Para executar o programa, a JVM lê os bytecodes e os traduz para uma linguagem de baixo nível específica para a plataforma onde o mesmo está sendo executado Etapa 4 O verificador de bytecodes confirma que todos os bytecodes são válidos e não violam restrições de segurança do Java Java Virtual Machine (JVM)
Antes de começar....java = código fonte.class = código intermediário (bytecodes) JRE = Java Runtime Environment Máquina Virtural Java (JVM = Java Virtual Machine) JDK = Java Development Kit (Kit de Desenvolvimento) javac compilador java interpretador de bytecodes javadoc gerador de documentação jdb debugger jar ferramenta para gerência de Java Archives javap disassembler (fornece um protótipo das classes encontradas no arquivo.class);
JDK x JRE... Desenvolvimento de Aplicações Java JDK Máquina Virtual Java JRE MS Windows Linux Google Android Mac OS Solaris
Exercícios para fixação
Edite, compile e execute import javax.swing.*; public class Janela extends JFrame { } private static String labelprefix = "No. de clicks:"; private int nclicks=0; final JLabel lblmsg = new JLabel(labelPrefix+"0 "); final JButton btnok = new JButton("Ok"); JPanel painel = new JPanel(); public Janela(String titulo) { settitle(titulo); setsize(250,100); setdefaultcloseoperation(jframe.exit_on_close); painel.add(btnok); painel.add(lblmsg); add(painel); } setvisible(true); btnok.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent e) { btnok_actionperformed(e); } }); public void btnok_actionperformed(java.awt.event.actionevent e) { nclicks++; lblmsg.settext(labelprefix + nclicks); } public static void main(string[] args){ Janela app = new Janela("Aplicação com Botao"); } Edite, compile e execute o código ao lado. O que vai acontecer? Transporte o arquivo.class para outro SO e execute, qual é o resultado?