Programação por Objectos. Java



Documentos relacionados
Programação por Objectos. Java

Programação por Objectos. Java

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Algoritmos e Programação

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

insfcanceof new public switch transient while byte continue extends for int null

Desenvolvimento OO com Java Orientação a objetos básica

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Unidade IV: Ponteiros, Referências e Arrays

Programação de Computadores - I. Profª Beatriz Profº Israel

Encapsulamento de Dados

INTRODUÇÃO À LINGUAGEM C++

ÇÃO COM OBJECTOS PROGRAMAÇÃ. Programação com Objectos. Programação com Objectos TUDO É UM OBJECTO TUDO É UM OBJECTO ÍNDICE.

Exercícios de Revisão Java Básico

2 Orientação a objetos na prática

Capítulo 3. Programação por objectos em Java

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Cartão de fidelização de clientes das distribuidoras de combustível.

Implementando uma Classe e Criando Objetos a partir dela

3 Classes e instanciação de objectos (em Java)

Análise de Programação

A Linguagem Java. Alberto Costa Neto DComp - UFS

Estrutura Condicional em Java

Conversão de Tipos e Arrays

Utilizem a classe Aula.java da aula passada:

Noções sobre Objetos e Classes

Tabelas (arrays) (vetores, matrizes, etc) Algoritmos de pesquisa Algoritmos de ordenação

Algoritmos e Programação II. Sobrecarga

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Estrutura de Dados Básica

Sintaxe Básica de Java Parte 1

POO Programação Orientada a Objetos. Classes em Java

Como o FIT funciona. FIT: Framework for Integrated Tests FIT. Dados de testes. Programa. Fixtures. classes. Resultados de testes

Java Como Programar, 8/E

Programação Visual TIC - 3PA. Lista de Exercícios 02

9 Comandos condicionais

O comando switch. c Professores de ALPRO I 04/2012. Faculdade de Informática PUCRS. ALPRO I (FACIN) O comando switch 04/ / 31

Curso Java Starter. 1

Criar a classe Aula.java com o seguinte código: Compilar e Executar

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores

Java 2 Standard Edition Como criar classes e objetos

Programação científica C++

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

BSI UFRPE Prof. Gustavo Callou

Orientação a Objetos

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Linguagem de Programação I. Orientação a Objetos em Java

Módulo 06 Desenho de Classes

Programação: Estruturas de seleção

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Java. Marcio de Carvalho Victorino

BC0501 Linguagens de Programação

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

OPERADORES E ESTRUTURAS DE CONTROLE

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Roteiro 1: Dados, variáveis, operadores e precedência

Orientação a Objetos. Conceitos Iniciais Introdução a Linguagem Java. Gil Eduardo de Andrade

Projeto de sistemas em Java. Algoritmos e Programação I. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario

Computação II Orientação a Objetos

Programando em C++ Histórico da Linguagem C

Sobre o Professor Dr. Sylvio Barbon Junior

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

Programação Orientada a Objetos! Java - Fundamentos. Prof. Sérgio Almagro! sergio.ricardo.almagro@gmail.com

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

ESTRUTURA BÁSICA DE UM PROGRAMA JAVA

Vetores. Professor Dr Francisco Isidro Massettto

Capítulo 2. Fundamentos de Java

Testando e Comparando Valores

Convertendo Algoritmos para a Linguagem C

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

LINGUAGEM C. Estrutura básica de um programa

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

5 Apresentando a linguagem C

Linguagem de Programação I

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

compreender a importância de cada estrutura de controle disponível na Linguagem C;

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

UNIVERSIDADE FEDERAL DO PARANÁ

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Linguagens de Programação

ITENS FUNDAMENTAIS. Profª Angélica da Silva Nunes

Capítulo 4. Packages e interfaces

UNIVERSIDADE FEDERAL DO PARANÁ

Transcrição:

Programação por Objectos Java Parte 3: Métodos LEEC@IST Java 1/45

Métodos (1) Sintaxe Qualif Tipo Ident ( [ TipoP IdentP [, TipoP IdentP]* ] ) { [ Variável_local Instrução ]* Qualif: qualificador (visibilidade, entre outros) Tipo: tipo de retorno do método Ident: identificador do método TipoP: tipo dos parâmetros do método IdentP: identificador dos parâmetros do método { [ Variável Instrução ]* : corpo do método LEEC@IST Java 2/45

Métodos (2) Qualificadores de método: Visibilidade: public: método acessível onde quer que a classe seja acessível. private: método acessível apenas na classe. protected: método acessível na classe, subclasses e classes no mesmo pacote. abstract: método sem corpo. static: método de classe. final: método que não pode ser redefinido nas subclasses. LEEC@IST Java 3/45

Métodos (3) No caso de omissão de um qualificador de visibilidade, o método é acessível na classe e classes no mesmo pacote. Com excepção dos qualificadores de visibilidade, um método pode ter mais do que um qualificador. Contudo, um método não pode ser ao mesmo tempo abstract e final. Um método estático só pode aceder a atributos estáticos e chamar métodos estáticos da classe. LEEC@IST Java 4/45

Métodos (4) O tipo de retorno de um método é obrigatório, podendo ser: tipo primitivo (boolean, char, byte, short, int, long, float e double) referências (classes e interfaces definidas pelo Java, por exemplo, classestring, e classes e interfaces definidas pelo programador) void Valor retornado pela instruçãoreturn. LEEC@IST Java 5/45

Métodos (5) Um método pode ter zero, um, ou mais parâmetros: Tipos possíveis de parâmetros: tipo primitivo (boolean, char, byte, short, int, long, float e double) referências (classes e interfaces definidas pelo Java, por exemplo, classestring, e classes e interfaces definidas pelo programador) LEEC@IST Java 6/45

Métodos (6) O último parâmetro de um método pode ser declarado como uma sequência de parâmtetros. Permite que o método seja chamado com um número variável de argumentos (incluindo zero). Métodos com sequência de parâmetros são denominados como métodos de argumento variável, contrastando com os métodos de argumento fixo. A aridade de um método é dada pelo número de parâmetros do mesmo. Os métodos de argumento variável são métodos de aridade variável, enquanto que, os métodos de argumento fixo são de aridade fixa. Definido com reticências (...) antes do tipo de parâmetro mas depois do seu identificador. LEEC@IST Java 7/45

Métodos (7) Declarar um parâmetro como uma sequência de parâmetros é nada mais que pedir ao compilador para construir uma tabela com os elementos que se querem passar ao método. public void imprimeanimais(string... strings) { for (int i=0; i<strings.length; i++) System.out.println(strings[i]); imprimeanimais("leão","tigre","urso"); imprime no terminal Leão Tigre Urso LEEC@IST Java 8/45

Métodos (8) Em Java, os parâmetros são sempre passados por valor: O valor dos parâmetros são sempre cópias dos valores passados como argumento. O método pode moficar o valor dos seus parâmetros sem afectar o respectivo valor no código que chamou o método. Quando o parâmetro é uma referência para um objecto, é a referência para o objecto que é passada por valor. O método pode alterar o objecto para quem o parâmetro faz referência sem afectar a referência que lhe foi passada. Contudo, alterações a nível dos atributos do objecto recebido como parâmetro, ou chamada a métodos que alterem o estado do objecto recebido como parâmetro, alteram o objecto em todos as partes do programa que tenham uma referência para o mesmo. Um parâmetro pode ser declarado final, quando não se quer que o seu valor seja alterado no corpo do método. LEEC@IST Java 9/45

Métodos (9) public class Demo { static void foo(int arg1) { arg1 = 10; public static void main(string args[]){ int arg = 5; foo(arg); System.out.println("arg = " + arg); No terminal é impresso arg = 5 LEEC@IST Java 10/45

Métodos (10) public class Demo { public static void foo(conta c) { c.quantia += 10000; public static void main(string args[]){ Conta arg = new Conta( João Pires,250); foo(arg); System.out.println( arg.quantia = " + arg.quantia); No terminal é impresso arg.quantia = 10250 LEEC@IST Java 11/45

Métodos (11) public static void imprimeanimais(final int i, final String... s) { for (; i<s.length; i++) System.out.println(s[i]); final parameter i may not be assigned for (; i<strings.length; i++) 1 error public static void imprimeanimais(final int i, final String... s) { s[i]="foca"; for (int j=i; j<s.length; j++) System.out.println(s[j]); imprimeanimais(1,"leão","tigre","urso"); imprime no terminal Foca Urso LEEC@IST Java 12/45

Métodos (12) Um método de uma classe é acedido pelo operador ponto (. ) na forma referência.metodo(params). A referência é um identificador de: objecto, se o método não tiver qualificador static. classe, se o método tiver qualificador static. LEEC@IST Java 13/45

Métodos (13) Chamada sucessiva: Um método pode retornar um objecto, ao qual se pode chamar outro método. Existem duas formas de chamar sucessivamente os métodos: 1. Guardar objecto numa variável Classe var = obj.metodo1(); var.metodo2(); 2. Chamar directamente obj.metodo1().metodo2(); LEEC@IST Java 14/45

Métodos (14) Dentro de um método de instâmcia, o objecto sobre o qual está a ser invocado o método pode ser referênciado pelo this. Não existe a referência this em métodos estáticos. Normalmente, o this é usado para passar o objecto sobre o qual está a ser chamado o método como argumento para outros métodos. LEEC@IST Java 15/45

Métodos (15) public void deposito(float valor){ quantia += valor; public void deposito(float valor){ this.quantia += valor; Também pode ser necessário usar o this na presença de um atributo escondido por uma variável local ou parâmetro. public void deposito(float quantia){ this.quantia += quantia; LEEC@IST Java 16/45

Métodos (16) É possível definir dois métodos, na mesma classe, com o mesmo nome mas com diferente número ou tipo de parâmetros. Neste caso, diz-se que um método é uma sobreposição do outro. O compilador decide qual o método a chamar consoante o número e tipo dos parâmetros passados ao método em causa. Normalmente, a sobreposição é usada quando um método pode receber a mesma informação de diferentes formas, ou quando alguns dos parâmetros podem tomar valores por omissão (e nesse caso não precisam de ser passados ao método). LEEC@IST Java 17/45

Métodos (17) No caso de métodos de argumento variável, uma sequência de parâmetros T... é tratada como sendo um parâmetro de tipo tabela T[]. Se dois métodos sobrepostos diferem apenas porque um declara uma sequência de parâmetros T... e outro declara um parâmetro de tipo tabela T[], tal dará origem a um erro de compilação. Em caso de ambiguidade, um método de argumento fixo será sempre escolhido antes de um método de argumento variável. LEEC@IST Java 18/45

Métodos (18) public static void print(string title){... public static void print(string title, String... messages){... public static void print(string... messages){... print( Hello ); Ok, chamaria o 1º método (argumento fixo)! print( Hello, World ); Daria origem a um erro de compilação! A solução seria: print( Hello, new String[] { World ); print(new String[] { Hello, World ); LEEC@IST Java 19/45

Método main (1) O interpretador JVM executa sempre o métodomain da classe indicada na linha do comando: Qualificadores: public static Retorno: void Parâmetros: String[] args Todas as classe numa aplicação podem ter um método main. O método main a executar é especificado de cada vez que se corre o programa. LEEC@IST Java 20/45

Método main (2) Class Echo { public static void main(string[] args) { for(int i=0; i<args.length; i++) System.out.print(args[i]+ ); System.out.println(); > javac Echo.java > java Echo estou aqui > estou aqui LEEC@IST Java 21/45

Método main (3) O programa termina quando é executada a última instrução do main. Se for necessário terminar antecipadamente o programa, chamar o método: System.exit(int status); onde o parâmetrostatus identifica o código de terminação (sucesso - 0 em Linux, 1 em Windows). LEEC@IST Java 22/45

Variáveis locais A declaração de uma variável local é semelhante à declaração de um atributo, sendo que o único qualificador que pode ser aplicado a esta é final. Qualif* Tipo Ident [ = Expr ] [, Ident = Expr ]* ; As variáveis locais têm de ser inicializadas antes de ser usadas, ou quando são declaradas, ou por atribuição antes de ser usada. Ao contrário dos atributos, não há inicialização por omissão de variáveis locais. Tal como no caso dos atributos, quando a incialização de uma variável local com o qualificador final é feita fora da sua declaração, essa variável local é dita final em branco. LEEC@IST Java 23/45

Instruções (1) Um bloco agrupa zero ou mais instruções. Um bloco é delimitado pelos parêntesis{e. Uma variável local existe apenas enquanto o bloco que a contém está a ser executado. Uma variável local pode ser declarada em qualquer ponto do bloco a que pertence, e não apenas no início, mas sempre antes de ser usada. LEEC@IST Java 24/45

Instruções (2) Atribuição Var = Expr [, Var = Expr]*; Var: variável local Expr: expressão Relembrar operador de atribuição: A atribuição Var = Var op Expr é equivalente a Var op= Expr. LEEC@IST Java 25/45

Instruções (3) Atribuição de objectos apenas copia referências! Conta c1 = new Conta(), c2; c1.depositar(1000); c2 = c1; // c2 referencia mesmo objecto que c1 System.out.println( Saldo c1 = " + c1.saldo()); System.out.println( Saldo c2 = " + c2.saldo()); c1.depositar(100); c2.depositar(200); System.out.println( Saldo c1 = " + c1.saldo()); System.out.println( Saldo c2 = " + c2.saldo()); No terminal é impresso Saldo c1 = 1000 Saldo c2 = 1000 Saldo c1 = 1300 Saldo c2 = 1300 LEEC@IST Java 26/45

Instruções (4) Execução condicional if (Expr-Bool) instrução1 [else instrução2] Expr_Bool: expressão Booleana LEEC@IST Java 27/45

Instruções (5) char c; /* identifica espécie de caractere */ if (c>= 0 && c<= 9 ) System.out.println("Digito!"); else if ((c>= a && c<= z ) (c>= A && c<= Z )) System.out.println( Letra! ); else System.out.println("Outra coisa!"); LEEC@IST Java 28/45

Instruções (6) Selecção valores switch (Expr) { case literal: instrução1 case literal: instrução2 default: instruçãon Valor de expressão Expr (char, byte, short ouint, ou correspondentes classes de embrulho, ou enum) é comparado com literais. Execução interrompida pela instruçãobreak. LEEC@IST Java 29/45

Instruções (7) int i = 3; switch (i) { case 3: System.out.print("3, "); case 2: System.out.print("2, "); case 1: System.out.print("1, "); case 0: System.out.println("Boom!"); default: System.out.println("Um numero,por favor!"); No terminal é impresso 3, 2, 1, Boom! Um numero, por favor! LEEC@IST Java 30/45

Instruções (8) int i = 3; switch (i) { case 3: System.out.print("3, "); case 2: System.out.print("2, "); case 1: System.out.print("1, "); break; case 0: System.out.println("Boom!"); default: System.out.println("Um numero,por favor!"); No terminal é impresso 3, 2, 1, LEEC@IST Java 31/45

Instruções (9) int i = 4; switch (i) { case 3: System.out.print("3, "); case 2: System.out.print("2, "); case 1: System.out.print("1, "); case 0: System.out.println("Boom!"); default: System.out.println("Um numero,por favor!"); No terminal é impresso Um numero, por favor! LEEC@IST Java 32/45

Instruções (10) Ciclo condicional while (Expr-Bool) instrução-corpo A instrução-corpo é executada enquanto a expressão booleana Expr-Bool for avaliada a true. do instrução-corpo while (Expr-Bool) O teste pode ser feito depois de executar a instrução-corpo. Em qualquer dos ciclos condicionais: Dentro da instrução-corpo o programa pode regressar à avaliação da expressão boolean Expr-Bool mediante a instruçãocontinue. Saída do ciclo pode ser antecipada pela instruçãobreak. LEEC@IST Java 33/45

Instruções (11) Ciclo iterativo for (inicialização; Expr-Bool; instrução) instrução-corpo Variável de controlo que percorre gama de valores. A inicialização é feita antes de entrar no ciclo (tipicamente, variável de controlo colocada no início da gama de valores). Expressão booleana Expr-Bool é avaliada no início do ciclo, que é executado enquanto for true (tipicamente, testa se variável de controlo atingiu fim da gama de valores). A instrução é executada depois de executado o corpo do ciclo instrução-corpo (tipicamente, altera variável de controlo em direcção ao valor final da gama). LEEC@IST Java 34/45

Instruções (12) Variável de controlo pode ser declarada na inicialização, e é acessível no corpo. Podem existir várias variáveis de controlo, podendo todas elas ser inicializadas na inicialização (separadas por vírgulas). Nesse caso, a instrução pode conter tantas instruções (separadas por vírgulas) quantas as variáveis de controlo a alterar em direcção ao valor final da gama. Os três campos pode ser nulos. Por omissão, o segundo campo é avaliado a true. As instruçõesfor(;;) e while(true) são instruções equivalentes. Dentro da instrução-corpo o programa pode regressar à avaliação da expressão Booleana Expr-Bool mediante a instruçãocontinue. Saída do ciclo pode ser antecipada pela instruçãobreak. LEEC@IST Java 35/45

Instruções (13) /* Imprime pares até 20 */ for(int i=0, j=0; i+j<=20; i++, j++) System.out.print(i+j + " "); System.out.println(); No terminal é impresso 0 2 4 6 8 10 12 14 16 18 20 LEEC@IST Java 36/45

Instruções (14) Cliclo iterativo (variante): for-each loop for (Tipo var-ciclo: conjunto) instrução-corpo O conjunto é um objecto que define um conjunto de valores sobre os quais se pretende iterar (tabela, ) Em cada passo do ciclo a variável local var-ciclo toma um valor diferente do conjunto e é executado a instrução-corpo (tipicamente, usando a variável var-ciclo para algo). O ciclo termina quando não existem mais valores no conjunto. LEEC@IST Java 37/45

Instruções (15) static double media(int[] valores) { double soma = 0.0; for (int val : valores) soma += val; return soma / valores.length; int[] valores={20,19,18,17,16,15,14,13,12; System.out.println("A média dos valores é " + media(valores)); Imprime no terminal A média dos valores é 16.0 LEEC@IST Java 38/45

Instruções (16) A instrução break pode ser usada para sair de qualquer bloco. Há duas formas possíveis para a instrução break: Não etiquetado: break; Etiquetado: break etiqueta; Um break não etiquetado termina a correspondente instruções switch, for, while ou do, e só pode ser usado neste contexto. Um break etiquetado pode terminar qualquer instrução etiquetada. LEEC@IST Java 39/45

Instruções (17) public boolean modificavalor(float[][] matriz, float val) { int i, j; boolean encontrado = false; procura: for (i=0; i<matriz.length; i++) { for (j=0; j<matriz[i].length; j++) { if (matriz[i][j]==val) { encontrado = true; break procura; if (!encontrado) return false; //modificar o valor matriz[i][j] da forma pretendida return true; LEEC@IST Java 40/45

Instruções (18) public boolean modificavalor(float[][] matriz, float val) { int i, j; procura: { for (i=0; i<matriz.length; i++) { for (j=0; j<matriz[i].length; j++) { if (matriz[i][j]==val) break procura; //se chegamos aqui não encontramos o valor return false; //modificar o valor matriz[i][j] da forma pretendida return true; LEEC@IST Java 41/45

Instruções (19) A instrução continue pode ser usada apenas em ciclos (for, while ou do) e transfere o controlo para o fim do correspondente corpo do ciclo. Esta transferência de controlo faz com que a próxima instrução a ser executada seja: No caso dos ciclos while e do, a avaliação da expressão booleana Expr-Bool. No caso do ciclo for (básico), a instrução seguida da avaliação da expressão boolena Expr-Bool. No caso do ciclo for (for-each), próximo elemento do conjunto, se existir. LEEC@IST Java 42/45

Instruções (20) A instrução continue também tem duas formas: Não etiquetada: continue; Etiquetada: continue etiqueta; Na forma não etiquetada, a instrução continue transfere o controlo para o fim do correspondente ciclo. Na forma etiquetada, transfere o controlo para o fim do ciclo com essa etiqueta. LEEC@IST Java 43/45

Instruções (21) static void duplicamatriz(int[][] matriz) { int dim = matriz.length; coluna: for (int i=0; i<dim; i++) { for (int j=0; j<dim; j++) { matriz[i][j]=matriz[j][i]=matriz[i][j]*2; if (i==j) continue coluna; LEEC@IST Java 44/45

Instruções (22) A instrução return termina a execução dum método e regressa ao ponto que o invocou. Se o método não retorna nenhum valor (void), usa-se apenas return; Se o método retorna um valor, a instrução return deve incluir uma expressão com tipo compatível com o tipo de retorno do método. O return também pode ser usado no contexto de um construtor (como os contrutores não têm tipo de retorno é sempre usado na forma return;). LEEC@IST Java 45/45