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) Interpretador Arquivo fonte (.java) Compilador Código intermediário bytecode Interpretador Interpretador Interpretador Etapas do desenvolvimento ... Etapa 1 – O programa é criado em um editor e armazenado no disco com a extensão .java Editor disco Compilador disco Etapa 2 – O compilador cria bytecodes e os armazena em disco com a extensão .class Carregador de Classe disco Verificador de Bytecode 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. 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 JRE Máquina Virtual Java 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); Edite, compile e execute o código ao lado. O que vai acontecer? 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"); } } Transporte o arquivo .class para outro SO e execute, qual é o resultado?