Programação Na Web Visão geral sobre Java António Gonçalves 1 Agenda • • • • • • 2 Vantagens em usar o Java Versões do Java Instalar e executar programas em Java Aplicações básicas (Ola Java !) Argumentos da linha de comando Aplicações básica tipo Applet (Ola Java !) Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 1 Dispositivo Rube Goldberg 3 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Plataforma Java 2 • J2SE – Java 2 Standard Edition – Java para desktop / workstation – http://java.sun.com/j2se • J2ME – Java 2 Micro Edition – Java para PalTop e Telemóveis – http://java.sun.com/j2me • J2EE - Java 2 Enterprise Edition – Java para servidores – http://java.sun.com/j2ee 4 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 2 Plataforma Java 2 http://java.sun.com/java2/ 5 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Tecnologias J2EE • • • • • • • • • • • 6 Java Servlets JSP EJB JMS JDBC JNDI JTA / JTS JavaMail JAAS XML … Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 3 Componentes J2EE http://java.sun.com/j2ee/overview3.html 7 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Plataforma Java 2 8 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 4 O que é o JAVA ? • OOPL - Linguagem de programação OO – Portável, Segura, Simples, “Eficiente” e Concorrente. • JVM - Máquina virtual integrada em: – Browsers – Sistemas Operativos – Aplicações. (NetScape, Explorer, HotJava) (Linux, JavaOS) (java ...) • API - Conjunto de bibliotecas de classes que suportam: – – – – 9 Interfaces gráficas Imagem e Som Redes de comunicação Etc. (AWT, Swing) (wav, jpeg, gif, zip, jar) (Socket, URL, RMI) (Stream, Beans, JDBC, ...) Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Entidades principais das OOPL • Interface Conduzível { virar, acelerar, tarvar } – Define as acções (métodos) que devem ser implementadas para um determinado objectivo. • Classe Automóvel { motor, Conduzivel, atestar } – Define as características (atributos) e as acções (métodos) de um tipo de objectos. – Implementa os métodos. – Pode Implementar uma ou mais Interfaces. • Objecto o meu carro { motor = 1300 } – É uma instância de uma Classe concreta. – Podem existir um ou mais objectos da mesma classe. – Cada objecto mantém os valores dos seus atributos. 10 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 5 Herança nas OOPL • Uma classe, para além de poder implementar interfaces, pode herdar atributos e métodos de outras classes. <<Interface>> Fiat127 é também um Automóvel Conduzível Automóvel é a super-classe ou a classe base de Fiat127 virar Fiat127 é sub-classe ou classe derivada de Automóvel acelerar travar • Uma classe derivada pode: – Acrescentar atributos e/ou métodos – Re-implementar métodos herdados • Uma classe é abstracta se não implementar todos os métodos definidos. Automóvel Fiat127 meu carro motor = 1300 11 Introdução ao Java motor virar acelerar travar atestar http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Java é Multi-Plataforma • Compila para código máquina independente dos sistemas operativos (bytecode) Java Código Fonte Compilador (javac) Java Bytecode Java Bytecode JIT Compilador or Interpretador Execution • Windows, MacOS, OS/2, Solaris, … • Java possui uma biblioteca gráfica propria • Java avoids hard-to-port constructs 12 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 6 Java é Simples • Java possui gestor de memória – Não existe ponteiros soltos – Não é criado “lixo” • Java simplifique a gestão de ponteiros – Não existe operações de referencia ou deferencia • Não existe “makefiles” e ficheiros de include • sintaxe identica ao C++ 13 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Caracteristicas da Linguagem JAVA • Reúne as características das linguagens Object Oriented • C++ ( Sintaxe compacta e já muito divulgada) – Sintaxe das instruções, expressões • for(i=0;i<10;++i), break, w.x%10==0, a>>=2. – Estrutura sintáctica Object Oriented • classes, visibilidade, construtores, declaração de métodos, etc. • Smalltalk – – – – 14 Modelo de objectos (herança simples) Acesso aos objectos apenas por referência Código intermédio Alojamento dinâmico com garbage collection Introdução ao Java (Eficiência) (Segurança) (Portabilidade) (Simplicidade) http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 7 Bibliotecas Standard • Threads (processos leves) • ADTs – “Java Foundation Classes” • Processamento de strings/streams – JDK 1.4 suporto Expressões Regulares • Inteiros com precisão arbritária e aritmética de ponto fixo • Serialização (armazenamento de objecto no disco ou envio através de socket) • Invocar objectos remotos – RMI • Interface com DBA – JDBC • ETC … 15 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Packages • 16 No JAVA existem 23 packages com classes e interfaces Introdução ao Java Applets java.applet Graphics, window, GUI java.awt java.awt.datatransfer Data transfer (copy,paste) Events java.awt.event Image (jpg, gif) java.awt.image GUI for platform independence java.awt.peer JavaBeans java.beans input output java.io Core language java.lang Reflection java.lang.reflect Arithmetic java.math Networking java.net Remote Method Invocation java.rmi +3 Security java.security +2 JDBC Sql for Databases java.sql Internationalization java.text Data types java.util Compression java.util.zip http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 8 Versões do Java • Java 1.0 disponibilizado em 1995 • Java 1.1 disponibilizado em 1997 • Java Standard Edition (JDK 1.2) disponibilizado em 1998 • JDK 1.3 disponibilizado em 2000 • 17 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Como começar 1. Instalar Java – JDK 1.4 • http://java.sun.com/j2se/1.4/ – JDK 1.3 • http://java.sun.com/j2se/1.3/ 2. Instalar um Browser que suporta Java – Netscape Navigator • http://home.netscape.com/download/ – Microsoft Internet Explorer • http://www.microsoft.com/ie/download/ – Sun HotJava • 18 http://java.sun.com/products/hotjava/ Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 9 Como começar, cont. 3. Marcar ou instalar a API do Java – Java 2 SDK, Version 1.4 (JDK 1.4) • • – API Specification, http://java.sun.com/j2se/1.4/docs/api/ API Download, http://java.sun.com/j2se/1.4/docs.html Java 2 SDK, Version 1.3 (JDK 1.3) • • API Specification, http://java.sun.com/products/jdk/1.3/docs/api/ API Download, http://java.sun.com/products/jdk/1.3/download-docs.html 4. Criar e executar um programa em Java – – – 19 Criar o ficheiro Compilar Executar Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Como começar : Detalhes 1. Criar o Ficheiro – Escrever e guardar o ficheiro (exp Test.java) que define a classe Test – O Nome da classe e do ficherio devem ser o mesmo (Atenção com maisculas e minusculas !) 2. Compilar o programa – Compilar Test.java pelo comando javac Test.java – Este passo cria o ficheiro Test.class 20 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 10 Como começar : Detalhes, cont. 3. Executar o programa – Para executar um programa : java Test – Nota O comando é java, e não javac, e deve ser feita referencia a Test, e não Test.class – Para executar uma applet deve ser usado um browser e ser feito o carregamento da página na qual é referenciada 21 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Aplicação básica Hello World • “Aplicação” em Java significa uma programa “ stand-alone” – Nota o nome da classe e o nome do ficheiro são idênticos – Cada ficheiro pode conter várias classes mas só uma pode ser declarada publica e o nome desta deve ser idêntico ao nome do ficheiro • Ficheiro HelloWorld.java: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world."); } } 22 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 11 Aplicação básica Hello World, cont. • Compiar: – javac HelloWorld.java • Executar: – java HelloWorld • Saída: – Hello, world. 23 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Compilador de JAVA • Um programa em JAVA é compilado para código intermédio. – O compilador tem como entrada um ficheiro de texto • normalmente com extensão .java • em UNICODE ou ASCII. – Por cada classe ou interface compilada é gerado um ficheiro com o código intermédio (byte-codes). • normalmente com extensão .class • que podem ser transportados para qualquer plataforma onde exista uma máquina virtual para os executar Hello.java public class Hello { public static void main(String[ ] args) { System.out.println(“Hello World!”); } } 24 Introdução ao Java Hello.class ... javac getstatic #7 ldc #1 invokevirtual #8 return ... http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 12 Máquina virtual JAVA • A VM interpreta os byte-codes do código intermédio – A máquina virtual é uma máquina de stack. – A VM tem uma implementação para cada plataforma (arquitectura/SO). • O ambiente de execução dos byte-codes é seguro (sandbox model). – Os byte-codes são verificados (tipos, visibilidade, overflow, underflow, ...) – A classe é carregada para a memória – Os acessos aos recursos do sistema (ficheiros, portos da rede, etc.) passam pela verificação de um controlador de acessos. • A eficiencia é melhorada com o “Just In Time” compiler. Hello.class ... getstatic #7 ldc #1 invokevirtual #8 return ... 25 java.exe Verifier API Introdução ao Java Class Loader Classes Security Manager Hello world! Recursos do Sistema http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Argumentos da Linha de Comando • Diferenças do C – Em Java uma String é um tipo – Em Java as tabelas sabem qual é o número de elementos guardados (length) – O nome do ficheiro não faz parte dos argumentos da linha de comando • ShowArgs.java: public class ShowArgs { public static void main(String[] args) { for(int i=0; i<args.length; i++) { System.out.println("Arg " + i + " = " + args[i]); } } } 26 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 13 Argumentos da Linha de Comando, Resultados • Compilar e Executar: > javac ShowArgs.java > java ShowArgs fee fie foe fum Arg Arg Arg Arg 27 0 1 2 3 = = = = fee fie foe fum Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Uma aplicação standalone em JAVA Point.java public class Point extends Object { private float x, y; public Point( float xVal, float yVal ) { x = xVal; y = yVal; } public float distanceFrom( Point from ) { double dx = x - from.x; double dy = y - from.y; return (float)Math.sqrt( dx*dx + dy*dy ); } public static void main( String[] args ) { Point a = new Point( 1 , 10 ); Point b = new Point( 3 , 1 ); float d = a.distanceFrom( b ); System.out.println(" distance = " + d); } } 28 Introdução ao Java C:>edit Point.java … C:>javac Point.java C:>dir Point.java Point.class C:>java Point distance = 9.219544 C:>_ http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 14 Applet Básica • HelloWWW.java: import java.applet.Applet; import java.awt.*; public class HelloWWW extends JApplet { public void init() { setBackground(Color.gray); setForeground(Color.white); setFont(new Font("SansSerif", Font.BOLD, 30)); } public void paint(Graphics g) { g.drawString("Hello, World Wide Web.", 5, 35); } } 29 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Applet Básica, cont. • HelloWWW.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>HelloWWW: Simple Applet Test.</TITLE> </HEAD> <BODY> <H1>HelloWWW: Simple Applet Test.</H1> <APPLET CODE="HelloWWW.class" WIDTH=400 HEIGHT=40> <B>Error! You must use a Java enabled browser.</B> </APPLET> 30 </BODY> </HTML> Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 15 Applet Básica, cont. • Compilar: javac HelloWWW.java • Executar: Load HelloWWW.html in a Java-enabled browser 31 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Parametrizar uma Applets com PARAM import java.applet.Applet; import java.awt.*; public class Message extends JApplet { private int fontSize; private String message; public void init() { setBackground(Color.black); setForeground(Color.white); fontSize = getSize().height - 10; setFont(new Font("SansSerif", Font.BOLD, fontSize)); // Read heading message from PARAM entry in HTML. message = getParameter("MESSAGE"); } public void paint(Graphics g) { if (message != null) g.drawString(message, 5, fontSize+5); } 32 } Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 16 Parametrizar uma Applets com PARAM, cont. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>The Message Applet</TITLE> </HEAD> <BODY BGCOLOR="WHITE"> <H1>The <CODE>Message</CODE> Applet</H1> <P> <APPLET CODE="Message.class" WIDTH=325 HEIGHT=25> <PARAM NAME="MESSAGE" VALUE="Tiny"> <B>Sorry, these examples require Java</B> </APPLET> <P> <APPLET CODE="Message.class" WIDTH=325 HEIGHT=50> <PARAM NAME="MESSAGE" VALUE="Small"> <B>Sorry, these examples require Java</B> </APPLET> ... </BODY> </HTML> 33 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm Parametrizar uma Applets com PARAM, Resultado 34 Introdução ao Java http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm 17