View
3
Download
0
Category
Preview:
Citation preview
Apresenta�c~aoJava { conceitos B�asicos
Java { Conceitos B�asicos
I ClassesI o que s~aoI constitui�c~aoI heran�ca
I M�etodosI tipos de m�etodosI sobreposi�c~ao e sobrecarga
I ObjectosI o que s~aoI cria�c~aoI cadeias de caracteresI vectores
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Caracter��sticas do Java
I linguagem orientada a objectosI abstrac�c~aoI heran�caI modularidadeI encapsulamentoI polimor�smo
I permite reutiliza�c~ao de software
I independente da plataforma
I facilidades gr�a�cas independentes do dispositivo
I �e do dom��nio p�ublico
I facilidades para aplica�c~oes na Web
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Caracter��sticas menos positivas do Java
I execu�c~ao lentaI mecanismos de E/S [razoavelmente] complexos
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Elementos do Java
I linguagem de programa�c~ao JavaI m�aquina virtual Java (Java Virtual Machine { JVM)
m�aquina virtual executa um c�odigo chamado bytecodeI Java Application Programing Interface (Java API). De�ne as
classes padr~ao dispon��veis na linguagem
um programa em Java corre como application ou applet
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Ambiente Java
(do livro \Java How to Program" - H. Deitel & P. Deitel)Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Classes em Java
De�nem tipos abstractos de dados. Organizadas hierarquicamente. Os seus
membros podem ser:I campos de dados (guardam valores de atributos)
I vari�aveis do tipo primitivoI referencias (\apontadores" para objectos)
I m�etodos (implementam comportamentos)I construtoresI atribui�c~ao de valores (set methods)I inspec�c~ao de valores (get methods)I predicadosI m�etodos que implementam comportamentosI �nalizador
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Tipos Primitivos
I Tipos primitivos n~ao originam objectos (e�ciencia)I Vari�aveis autom�aticasTipo Tamanho M��nimo M�aximo TipoPrimitivo Derivadoboolean 1 bit { { Booleanchar 16 bit Unicode 0 Unicode 216-1 Characterbyte 8 bit -128 127 Byteshort 16 bit -215 215 -1 Shortint 32 bit -231 231 -1 Integerlong 64 bit -263 263 -1 Long oat 32 bit -3.4E+38 3.4E+38 Floatdouble 64 bit -1.8E+308 1.8E+308 Double
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Programar em Java
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Operador \."
Separa os elementos no caminho at�e ao membro a que queremosaceder.exemplo:I classe Pessoa: campo de dados contador; m�etodo quantasSao()I objecto referenciado pela vari�avel pessoa: campo de dados idade; m�etodo
mostraIdade()acesso ao campo de dados da classe ) Pessoa.contadoracesso ao campo de dados do objecto ) pessoa.idadeEvoca�c~ao do m�etodo da classe ) Pessoa.quantasSao( .. )Evoca�c~ao do m�etodo do objecto ) pessoa.mostraIdade( .. )
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Classes em Java{ exemplo {
/* Esta classe tem dois campos de dados e dois m�etodose �e uma subclasse da classe Object */
public class Pessoa extends Objectf/* Dados */
int idade; // vari�avel do tipo primitivoString nome; // referencia
/* M�etodos */public Pessoa(String nomePessoa, int idadePessoa)f
idade = idadePessoa;nome = nomePessoa;
gpublic int idadePessoa()f
return idade;g
g
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Classes { heran�ca simples{ exemplo {
/* A classe Aluno �e subclasse de Pessoa. Herda os campos de dados e os m�etodos */
public class Aluno extends Pessoaf/* Dados */
int notaCPA;
/* M�etodos */public Aluno(String nome, int idade, int nota)f
super(nome, idade);notaCPA = nota;
gpublic void mostraDados()f
System.out.println(\idade = \+idade+" nota = \+notaCPA);g
g
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
M�etodos{ classi�ca�c~ao {
I Construtores: inicializa�c~oes aquando da cria�c~ao de umobjecto
I Atribui�c~ao de valores: alterar os campos de dados quandoh�a encapsulamento
I Inspec�c~ao de valores: inspeccionar os campos de dadosquando h�a encapsulamento
I Predicados: testes boleanos aos campos de dadosI M�etodos que implementam comportamentos:
implementa�c~ao de algoritmos e qualquer outro prop�ositoI �nalizador: evocado quando um objecto �e removido da
mem�oria. Usado para libertar recursos espec���cos do objectoa remover
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
M�etodos{ exemplo {
public class Pessoafint idade;
/* Construtor */
public Pessoa(int idadePessoa)fidade = idadePessoa;
g/* Atribuicao de valores */
public void atribuiIdade(int idadePessoa)fidade = idadePessoa;
g/* Metodo de inspeccao */
public int idadePessoa()freturn idade;
g
/* Predicado */public boolean eVelho()f
return idade >= 80;g
/* Outros propositos */
public int calculaSalario()f...return salario;
g/* Finalizador */
protected void �nalize()fSystem.out.println(\Objecto termina
a sua existencia");gg
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
M�etodos{ sobrecarga {
M�etodos com o mesmo nome mas com n�umero de parametros diferentes oumesmo n�umero de parametros mas de tipos diferentes.public class Complexof
double parteReal, parteImaginaria;double modulo, fase;public Complexo()f
parteReal = parteImaginaria = 0.0;modulo = fase = 0.0;
gpublic Complexo(double real)f
modulo = parteReal = real;fase = real >= 0.0 ? 0.0 : 180.0;parteImaginaria = 0.0;
gpublic Complexo(double real, double imag)f
parteReal = real;parteImaginaria = imag;modulo = Math.sqrt(real * real + imag * imag);fase = Math.atan(imag / real);
gg
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
M�etodos{ sobreposi�c~ao {
Uma subclasse cont�em um m�etodo com o mesmo nome, rede�nindo essecomportamento da classe (codi�car uma excep�c~ao, por exemplo).
public class Avef
public boolean voa()freturn true;
gg
public class Avestruz extends Avef
public boolean voa()freturn false;
gg
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Regras de nomea�c~ao
I Vari�aveis locais e parametros: nome curtos em min�usculas(ex: int numero, idade;)
I Classes e Interfaces: nomes ou frases nominais, 1a letra de cada nome emmai�uscula. As restantes em min�usculas(ex: class PessoaAdulta extends ...)
I Campos de dados (excepto �nal): nomes ou frases nominais em que a 1a letrade cada palavra �e mai�uscula(ex:class Pessoa f
int limiteDeIdade;...
)I constants em interfaces e vari�aveis �nal: letras mai�usculas com palavras
separadas por \ " (ex: �nal int MAXIMO VALOR;)I M�etodos: verbos ou frases verbais em que a 1a letra de cada palavra �e
mai�uscula (ex: int comparaDoisInteiros( ... )
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Sugest~oes para escrita de Programas
Generalidadesusar:I \programa�c~ao estruturada" (m�etodos pequenos)I campos de dados antes dos m�etodosI de�nir TODAS as vari�aveis antes do c�odigo do m�etodoI dar nomes intelig��veis �as vari�aveis
evitar:I usar o quali�cador public em dados (e m�etodos auxiliares) a
menos que absolutamente necess�arioI usar \vari�aveis globais" desnecessariamente
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Objectos
I Todos os objectos s~ao instancias de uma classeI S~ao criados \a pedido" usando a instru�c~ao new.
Algo semelhante �a gest~ao de mem�oria dinamica em C.I S~ao acedidos atrav�es de referencias (apontadores)I Como argumentos de m�etodos s~ao passados por referenciaI Espa�co libertado por garbage collection quando n~ao h�a nehuma referencia
para o objecto
declara�c~ao de referencias:Pessoa pessoaRef1, pessoaRef2;
cria�c~ao de dois objectos do tipo Pessoa:pessoaRef1 = new Pessoa();pessoaRef2 = new Pessoa();
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Instancia�c~ao
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Objectos (cont.)
Inicialmente tres objectos s~ao criados automaticamente:
I System.out ! associado ao ecr~a (\standard output")
I System.in ! associado ao teclado (\standard input")
I System.err ! associado ao ecr~a (\standard error")
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Auto-referencia (this)
I um m�etodo tem sempre umparametro impl��cito que �e oobjecto (ou classe) a que se vaiaplicar
I x.inc() pode ser visto comoinc(x) (nota�c~ao mais corrente)
I se se omitir o objecto assume-seque se trata do objecto corrente
I para referir explicitamente oobjecto corrente usa-se this
I uma escolha criteriosa doresultado das fun�c~oes podepermitir um estilo de escritaque use composi�c~ao de fun�c~oes
public class Contadorfprivate int i = 0;
Contador inc()fi++;return this;
gvoid print()f
System.out.println(\i = "+i);g
public static void main(String [] args)fContador x = new Contador();Contador y = new Contador();
x.inc().inc().inc().print();y.inc().print();
gg
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Referencias this e super
Para designar um membro m (atributo ou m�etodo) de um objecto o, anota�c~ao �e o.m
I na de�ni�c~ao dos m�etodos de uma classe, o objecto corrente est�anormalmente impl��cito (referem-se os membros sem pre�xo)
I se existir uma vari�avel x num m�etodo da classe com o mesmo nomede um atributo, este �ca escondido; para o aceder usa-se this.x
I this referencia o objecto corrente
I se existir um m�etodo local f() com o mesmo nome de um numasuperclasse, este �ca escondido; para o aceder usa-se super.f()
I super pode ser usado para fazer revoga�c~ao parcial de um m�etodo:fornecer nova de�ni�c~ao que chama m�etodo da superclasse
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Construtores e this
public class Florfprivate int i = 0;private String s = new String(null);
Flor(int x)fi = x;System.ot.println(\Construtor com int: i = \+i);gFlor(String ss)fs = ss;System.ot.println(\Construtor com String: s = \+ss);g
Flor(String s, int x)fthis(x);this.s = s;System.ot.println(\Dois args\);g
Flor()fthis(\cravo", 47);System.out.println(\Construtor por omissao\);gvoid print()f
System.out.println(\i = "+i+ \ s = \+s);
gpublic static void main(String args[])fFlor x = new Flor();x.print();gg/* RESULTADO:Construtor com int: i = 47Dois argsConstrutor por omissaoi=47 s = cravo */
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Cria�c~ao e Elimina�c~ao
I construtor por omiss~ao n~ao temargumentosI s�o �e sintetizado se n~ao se
de�nir nenhum construtorI um construtor pode usar outro
chamando-o com a sintaxe:this(args)I tem que ser a 1a instru�c~aoI s�o se pode chamar outro
construtor uma vezI n~ao se pode usar esta sintaxe
num m�etodo n~ao construtorI this para referenciar o objecto
corrente num construtor, (ex.desambiguar nome de atributoigual a parametro (this.s = s))
I n~ao existe destrui�c~aoexpl��cita de objectosI quando deixam de ser
precisos (n~ao h�areferencias para eles)s~ao eliminados pelogarbage collector
I se n~ao se de�ne o construtorI construtor por omis~ao
inicializa tiposprimitivos a zero ereferencias a null
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Cadeias de caracteres (String)
I imut�aveis depois de criadas
I concatena�c~ao: + constroi String se um dos elementos o for
I == e != testam identidade de objectos n~ao a igualdade entre asstrings
I alguns m�etodos:I esquerdo.compareTo(direito) compara de acordo com ordem
lexicogr�a�caI cadeia.length() devolve o comprimentos da stringI cadeia.charAt(posicao) indexa a partir de 0I cadeia.substring(inicio, �m)
I toString() converte tipo primitivo em String (�e impl��cito em +)
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Cadeias de caracteres (String)| cria�c~ao |
Declara�c~ao de uma referencia (n~ao de um objecto) para String:
String cadeia;
Declara�c~ao de uma referencia e cria�c~ao de um objecto tipo String:
String cadeia = new String(\Mensagem");
no caso especial das strings o mesmo pode ser obtido com:
String cadeia = \Mensagem";
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Vectores
I Colec�c~ao de entidades do mesmo tipo
I Declara�c~ao:int [] vector1;int vector1[];
I Cria�c~ao:vector = new int[100];com inicializa�c~ao int vector[] = 2, 3, 4;
I Tamanho: vector.length
I Cria�c~ao dinamica
I Multi-dimensional: int [][] matriz = new int[10][10];
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Vectores| exemplo |
public class Vectorfint [] vector;
public Vector(int dimensao, int valor)fint i;vector = new int[dimensao];for(i = 0; i < vector.length; i++)
vector[i] = valor;gvoid mostraVector()f
int i;for(i = 0; i < vector.length; i ++)
System.out.print(vector[i]+\ ");g
g
public class TestaVectoresfpublic static void main(String [] args)f
Vector vector = new Vector(10, 2);
vector.mostraVector();g
g
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Vectores| outro exemplo |
public class Matrizfint [][] matriz;
public Matriz(int dim1, int dim2, int valor)fint i, j;matriz = new int[dim1][dim2];for(i = 0; i < matriz.length; i++)
for(j = 0; j < matriz[i].length; j++)matriz[i][j] = valor;
gvoid mostraMatriz()f
int i, j;System.out.println("nnnn matriz "+matriz.length+"x"+matriz[0].length);System.out.println("nn");for(i = 0; i < matriz.length; i ++)f
for(j = 0; j < matriz[i].length; j++)System.out.print(matriz[i][j]+" ");
System.out.println();g
g
public class TestaVectoresfpublic static void main(String [] args)f
Matriz vect = new Matriz(10, 3, 2);vect.mostraMatriz();
gg
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Vectores| ainda outro exemplo |
public class MatrizEsquisitafint matriz[][] = ff1, 2, 3, 4g, f5g, f6, 7gg;
void mostraMatriz()fint i, j;
for(i = 0; i < matriz.length; i ++)ffor(j = 0; j < matriz[i].length; j++)
System.out.print(matriz[i][j]+" ");System.out.println();
gg
public class TestaMatrizEsquisitafpublic static void main(String [] args)f
MatrizEsquisita matriz = new MatrizEsquisita();matriz.mostraMatriz();
gg
resultado:
1 2 3 456 7
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Mini-programa em Java
public class Pessoafint idade;String nome;public Pessoa(String nomePessoa,
int idadePessoa)fidade = idadePessoa;nome = nomePessoa;System.out.println("Construtor Pessoa");
gpublic int idadePessoa()f
return idade;g
g
public class Aluno extends Pessoafint notaCPA;public Aluno(String nome, int idade, int nota)f
super(nome, idade);notaCPA = nota;System.out.println("Construtor Aluno");
g
public void mostraDados()fSystem.out.println("idade = " + idade + " nota = " +
notaCPA);System.out.println("metodo idade =" + idadePessoa());
gg
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Mini-programa em Java (cont.)
public class TestaPessoaEAlunof
public static void main(String[] args)fAluno aluno = new Aluno("Antonio", 21, 15);aluno.mostraDados();
gg
Compilar:
comando> javac *.javacomando> java TestaPessoaEAluno
Resultado da execu�c~ao:
Construtor PessoaConstrutor Alunoidade = 21 nota = 15metodo idade =21
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Segundo Mini-programa em Java
public class Complexofdouble parteReal, parteImaginaria;double modulo, fase;public Complexo()f
parteReal = parteImaginaria = 0.0;modulo = fase = 0.0;
gpublic Complexo(double real)f
modulo = parteReal = real;fase = real >= 0.0 ? 0.0 : 180.0;parteImaginaria = 0.0;
gpublic Complexo(double real, double imag)f
parteReal = real;parteImaginaria = imag;modulo = Math.sqrt(real * real + imag * imag);fase = Math.atan(imag / real);
gpublic void mostraValores()f
System.out.print(\Re = \+parteReal);System.out.println(" Im = \+parteImaginaria);System.out.print(\Mod = \+modulo);System.out.println(" Fase = \+fase);
gg
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Segundo Mini-programa em Java (cont.)
public class TestaComplexof
public static void main(String[] args)fComplexo complexo1 = new Complexo(2, 2);Complexo complexo2 = new Complexo(4);complexo1.mostraValores();System.out.println("|||\);complexo2.mostraValores();
gg
Compilar:comando> javac *.javacomando> java TestaComplexo
Resultado da execu�c~ao:Re = 2.0 Im = 2.0Mod = 2.8 Fase = 0.785|||Re = 4.0 Im = 0.0Mod = 4.0 Fase = 0.0
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Apresenta�c~aoJava { conceitos B�asicos
Realizar um programa em Java
I Identi�car as entidades envolvidas no problemaI Cada entidade origina uma classeI Sempre que poss��vel usar classes da Java APII Codi�car cada classe
I conceber a estrutura da classedadosm�etodos
I ligar a classe na hierarquia de classesI Uma classe com um m�etodo public static void main()
onde o programa inicia a execu�c~aoI Guardar uma classe em cada �cheiro .javaI Compilar os �cheiros: javac *.javaI Executar o programa: java ClassePrincipal
Rui Camacho Complementos de Programa�c~ao e Algoritmos { LEIC
Recommended