0% acharam este documento útil (0 voto)
42 visualizações50 páginas

Facom39502 Java

A classe Pessoa possui atributos como nome, idade e sexo. Os métodos permitem obter e definir esses atributos, bem como imprimir os dados da pessoa.

Enviado por

José Soares
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
42 visualizações50 páginas

Facom39502 Java

A classe Pessoa possui atributos como nome, idade e sexo. Os métodos permitem obter e definir esses atributos, bem como imprimir os dados da pessoa.

Enviado por

José Soares
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 50

Universidade Federal de Uberlândia

Faculdade de Computação

Java

Prof. Renato Pimentel

2023/1

FACOM39502 POO 2023/1 1 / 99

Sumário

1 Java

FACOM39502 POO 2023/1 2 / 99


A linguagem Java I

Aplicativos ou softwares Java são criados baseados na sintaxe do Java.


Os programas em Java são escritos baseados na criação de classes.
Cada classe segue as estruturas de sintaxe do Java, definida pelo
agrupamento de palavras-chave, ou palavras reservadas, e nomes de
classes, atributos e métodos.

FACOM39502 POO 2023/1 3 / 99

A linguagem Java II

Palavras reservadas do Java:


abstract boolean break byte
case catch char class
continue default do double
else extends false final
finally float for if
implements import instanceof int
interface long native new
null package private protected
public return short static
super switch synchronized this
throw throws transient true
try void volatile while

Palavras reservadas, mas não usadas pelo Java: const, goto

FACOM39502 POO 2023/1 4 / 99


A linguagem Java III

1 public class media {


2 public static void main(String[] args) {
3 //variaveis do tipo real
4 float nota1, nota2, nota3, nota4, mediaAritmetica;
5 //entrada de dados
6 Scanner entrada = new Scanner (System.in);
7 System.out.println("Entre com a nota 1: ");
8 nota1= entrada.nextFloat ();
9 System.out.println("Entre com a nota 2: ");
10 nota2= entrada.nextFloat();
11 System.out.println("Entre com a nota 3: ");
12 nota3= entrada.nextFloat();
13 System.out.println("Entre com a nota 4: ");
14 nota4= entrada.nextFloat();

FACOM39502 POO 2023/1 5 / 99

A linguagem Java IV

15 //processamento
16 mediaAritmetica = (nota1+nota2+nota3+nota4)/4;
17 //resultados
18 System.out.printf ("A média aritmética: %.2f",
mediaAritmetica);
19 if (mediaAritmetica >= 7.0){
20 System.out.printf("Aluno aprovado!");
21 }//fim do if
22 } //fim do método main
23 } //fim da classe média

FACOM39502 POO 2023/1 6 / 99


Declarando classes I

Uma classe é declarada com a palavra reservada class, seguida do nome


da classe e de seu corpo entre chaves (como em C).
1 <modificador de acesso> class NomeDaClasse
2 {
3 // declaracao dos atributos
4 // declaracao dos métodos
5 }

FACOM39502 POO 2023/1 7 / 99

Declarando classes II

O nome da classe é também chamado de identificador.


Regras para nome de uma classe:
Não pode ser uma palavra reservada do Java
Deve ser iniciado por uma letra, ou _ ou $
Não pode conter espaços

public class Pessoa


{
//declaracao dos atributos
//declaracao dos métodos
}

FACOM39502 POO 2023/1 8 / 99


Declarando classes III

Sugestão de estilo para nomes de classes (boa prática de programação):


A palavra que forma o nome inicia com letra maiúscula, assim como
palavras subsequentes:
▶ Exemplos: Lampada, ContaCorrente, RegistroAcademico,
NotaFiscalDeSupermercado, Figura, ...
Devem preferencialmente ser substantivos
Sugere-se que cada classe em Java seja gravada em um arquivo
separado, cujo nome é o nome da classe seguido da extensão .java

FACOM39502 POO 2023/1 9 / 99

Declarando classes IV

Ex.: classe Pessoa no arquivo Pessoa.java


1 public class Pessoa {
2 //declaracao dos atributos
3 //declaracao dos métodos
4 }

FACOM39502 POO 2023/1 10 / 99


Atributos / variáveis de instância I

Atributos / variáveis de instância: espaço de memória reservado


para armazenar dados, tendo um nome para referenciar seu conteúdo;
Um atributo ou variável de instância (ou ainda campo) é uma
variável cujo valor é específico a cada objeto;
Ou seja, cada objeto possui uma cópia particular de atributos/variáveis
de instância com seus próprios valores.
Estilo de nome (Java): “Camel Case” com primeira letra da primeira
palavra minúscula, primeira das demais maiúscula. Ex.: nome,
dataDeNascimento, caixaPostal.

FACOM39502 POO 2023/1 11 / 99

Atributos / variáveis de instância II

Exemplo: classe Carro

FACOM39502 POO 2023/1 12 / 99


Atributos / variáveis de instância III

carroDoJoao:

marca = “Fiat”
modelo = “Uno”
Carro placa = “ABC-1234”
≪instância de≫
marca: String acelerar()
modelo: String
placa: String carroDaMaria:
≪instância de≫
acelerar() marca = “Ferrari”
modelo = “F50”
placa = “DEF-5678”

acelerar()

FACOM39502 POO 2023/1 13 / 99

Atributos / variáveis de instância IV

public class NomeDaClasse Variáveis de instância são


{ definidas dentro da classe, fora
//variáveis de instâ dos métodos;
ncia Inicializadas automaticamente.
//métodos ▶ Ou por meio de construtores
} dos objetos da classe.

public class Carro


{
Carro String marca;
marca: String String modelo, placa;
modelo: String // métodos ...
placa: String }

acelerar()

FACOM39502 POO 2023/1 14 / 99


Tipos de dados I

Tipos: representam um valor ou uma coleção de valores, ou mesmo


uma coleção de outros tipos.
Tipos primitivos:
▶ Valores são armazenados nas variáveis diretamente;
▶ Quando atribuídos a outra variável, valores são copiados.
Tipos por referência:
▶ São usados para armazenar referências a objetos (localização dos
objetos);
▶ Quando atribuídos a outra variável, somente a referência é copiada (não
o objeto).

FACOM39502 POO 2023/1 15 / 99

Tipos de dados II

Tipos primitivos:
Números inteiros:
Tipo Descrição Faixa de valores
byte inteiro de 8 bits −128 a 127
short inteiro curto (16 bits) −32768 a 32767
int inteiro (32 bits) −2147483648 a 21474863647
long inteiro longo (64 bits) −263 a 263 − 1
Números reais (IEEE-754):
Tipo Descrição Faixa de valores
float decimal (32 bits) −3, 4e+038 a −1, 4e−045;
1,4e−045 a 3,4e+038
double decimal (64 bits) −1, 8e+308 a −4, 9e−324;
4,9e−324 a 1,8e+308

FACOM39502 POO 2023/1 16 / 99


Tipos de dados III

Outros tipos
Tipo Descrição Faixa de valores
char um único caractere (16 bits) ’\u0000’ a ’uFFFF’
(0 a 65535 Unicode ISO)
boolean valor booleano (lógico) false, true

FACOM39502 POO 2023/1 17 / 99

Tipos de dados IV

Tipos por referência (ou não-primitivos)


Todos os tipos não primitivos são tipos por referência (ex.: as próprias
classes)
Arrays e strings:
▶ Ex.: String teste = "UFU Sta. Monica";
▶ Ex.: int []v = {3,5,8};

FACOM39502 POO 2023/1 18 / 99


Exercício I

Criar um modelo em Java para uma pessoa. Considere os atributos nome,


idade, sexo e profissão (não se preocupe ainda com o
comportamento/métodos).

Modelagem:

Pessoa

nome: String
idade: int
sexo: char
profissao: String

...

FACOM39502 POO 2023/1 19 / 99

Exercício II

public class Pessoa


{
String nome;
int idade;
char sexo;
String profissao;
// métodos ...
}

FACOM39502 POO 2023/1 20 / 99


Métodos em Java I

Os métodos implementam o comportamento dos objetos;


Um método agrupa, em um bloco de execução, uma sequência de
comandos que realizam uma determinada função;
Os métodos em Java são declarados dentro das classes que lhes dizem
respeito;
Eles são capazes de retornar informações quando completam suas
tarefas.
Estilo de nome (Java): “Camel Case” igual à forma usada para
atributos. Ex.: salvar, salvarComo, abrirArquivo.

FACOM39502 POO 2023/1 21 / 99

Métodos em Java II

Sintaxe da declaração de um método (semelhante a C):


1 public class NomeDaClasse
2 {
3 // declaração dos atributos
4 // ...
5

6 <mod. acesso> <tipo de retorno> nomeDoMétodo (


argumento[s])
7 {
8 // corpo do método
9 }
10 }

FACOM39502 POO 2023/1 22 / 99


Métodos em Java III

Exemplo:
1 public class Carro
2 {
3 // declaração dos atributos
4 // ...
5

6 public void acelerar()


7 {
8 // corpo do método
9 }
10 }

FACOM39502 POO 2023/1 23 / 99

Métodos em Java IV

Em geral, um método recebe argumentos / parâmetros, efetua um


conjunto de operações e retorna algum resultado.
A definição de método tem cinco partes básicas:
▶ modificador de acesso (public, private, ...);
▶ nome do método;
▶ tipo do dado retornado;
▶ lista de parâmetros (argumentos);
▶ corpo do método.

FACOM39502 POO 2023/1 24 / 99


Métodos em Java V

Os métodos aceitam a passagem de um número determinado de


parâmetros, que são colocados nos parênteses seguindo ao nome;
Os argumentos são variáveis locais do método – assim como em C.
Exemplo:
float hipotenusa (float catetoA, float catetoB)
{
// corpo do método
// ...
}

FACOM39502 POO 2023/1 25 / 99

Métodos em Java VI

Se o método não utiliza nenhum argumento, parênteses vazios devem ser


incluídos na declaração.
Exemplo:
public class Carro
{
String marca;
String modelo;
String placa;
public void acelerar()
{ // corpo do método
}
}

FACOM39502 POO 2023/1 26 / 99


Métodos em Java VII

Um método pode devolver um valor de um determinado tipo de dado.


Nesse caso, existirá no código do método uma linha com uma
instrução return, seguida do valor ou variável a devolver.

1 class Administrativo {
2 float salario;
3 public float retorneSalario( )
4 {
5 //calcular salario
6 return salario;
7 }
8 }

FACOM39502 POO 2023/1 27 / 99

Métodos em Java VIII

Se o método não retorna nenhum valor, isto deve ser declarado usando-se a
palavra-chave void – como em C.
Exemplo:
public class Carro {
String marca;
String modelo;
String placa;
public void acelerar() // void indica que nao ha
retorno de valor
{
}
}

FACOM39502 POO 2023/1 28 / 99


Exercício – métodos I

Criar um modelo em Java para uma lâmpada. As operações que podemos


efetuar nesta lâmpada também são simples: podemos ligá-la ou desligá-la.
Quando uma operação for executada, imprima essa ação.

Lampada

estadoDaLampada: boolean

+acender()
+apagar()

FACOM39502 POO 2023/1 29 / 99

Exercício – métodos II

1 public class Lampada {


2 boolean estadoDaLampada;
3
4 public void acender( )
5 {
6 estadoDaLampada = true;
7 System.out.println("A acao acender foi executada");
8 }
9 public void apagar( )
10 {
11 estadoDaLampada = false;
12 System.out.println("A acao apagar foi executada");
13 }
14 }

FACOM39502 POO 2023/1 30 / 99


Exercício – métodos III

Criar um modelo em Java para uma pessoa. Considere os atributos nome,


idade e profissão. A pessoa pode gastar ou receber uma certa quantia de
dinheiro (assuma que o dinheiro se encontra na carteira).

Pessoa

nome: String
idade: int
profissao: String
dinheiroNaCarteira: double

+gastar(valor: double)
+receber(valor: double)

FACOM39502 POO 2023/1 31 / 99

Exercício – métodos IV

1 public class Pessoa


2 {
3 String nome, profissao;
4 int idade;
5 double dinheiroNaCarteira;
6 public void gastar( double valor )
7 {
8 dinheiroNaCarteira = dinheiroNaCarteira - valor;
9 }
10 public void receber( double valor )
11 {
12 dinheiroNaCarteira = dinheiroNaCarteira + valor;
13 }
14 }

FACOM39502 POO 2023/1 32 / 99


Instanciação de objetos I

Declaração: a seguinte instrução declara que a variável


nomeDoObjeto refere-se a um objeto / instância da classe
NomeDaClasse:
NomeDaClasse nomeDoObjeto;
Criação: a seguinte instrução cria (em memória) um novo objeto /
instância da classe NomeDaClasse, que será referenciado pela
variável nomeDoObjeto previamente declarada:
nomeDoObjeto = new NomeDaClasse();

As duas instruções acima podem ser combinadas em uma só:


NomeDaClasse nomeDoObjeto = new NomeDaClasse();

FACOM39502 POO 2023/1 33 / 99

Instanciação de objetos II

public class Carro {


String marca;
String modelo;
String placa;
public void acelerar()
{
}
}

FACOM39502 POO 2023/1 34 / 99


Instanciação de objetos III

...
Carro carro1 = new Carro();
...

FACOM39502 POO 2023/1 35 / 99

Instanciação de objetos IV

O comando new cria uma instância de uma classe:


Aloca espaço de memória para armazenar os atributos;
Chama o construtor da classe;
O construtor inicia os atributos da classe, criando novos objetos,
iniciando variáveis primitivas, etc;
Retorna uma referência (ponteiro) para o objeto criado.

FACOM39502 POO 2023/1 36 / 99


Comando ponto I

Para acessar um atributo de um objeto, usa-se a notação ponto:


<nome do objeto>.<nome da variavel>
...
Carro car1 = new Carro();
public class Carro { Carro car2 = new Carro();
String marca; //inicializando car1
String modelo; car1.marca = "Fiat";
String placa; car1.modelo = "2000";
public void acelerar() car1.placa = "FRE-6454";
{ //inicializando car2
} car2.marca = "Ford";
} car2.modelo = "1995";
car2.placa = "RTY-5675";
...

FACOM39502 POO 2023/1 37 / 99

Comando ponto II

Para acessar um método de um objeto, usa-se a notação ponto:


<nome do objeto>.<nome do metodo>
public class Carro {
...
String marca;
Carro car1 = new Carro();
String modelo;
//inicializando car1
String placa;
car1.marca="Fiat";
public void acelerar()
car1.modelo="2000";
{ // corpo do metodo
car1.placa="FRE-6454";
}
//usando os métodos
public void frear()
car1.acelerar();
{ // corpo do metodo
car1.frear();
}
...
}

FACOM39502 POO 2023/1 38 / 99


Passagem de mensagens I

Para mandar mensagens aos objetos utilizamos o operador ponto,


seguido do método que desejamos utilizar;
Uma mensagem em um objeto é a ação de efetuar uma chamada a
um método.

Pessoa p1;
p1 = new Pessoa();
p1.nome = "Vitor Josue Pereira";
p1.nascimento = "10/07/1966";
p1.gastar( 3200.00 ); // Mensagem sendo passada ao
objeto p1

FACOM39502 POO 2023/1 39 / 99

Passagem de mensagens II

Um programa orientado a objetos nada mais é do que vários objetos


dizendo uns aos outros o que fazer.

Quando você quer que um objeto faça alguma coisa, você envia a ele
uma “mensagem” informando o que quer fazer, e o objeto faz;
Se o método for público, o objeto terá que executá-lo;
Se ele precisar de outro objeto para o auxiliar a realizar o “trabalho”,
ele mesmo vai cuidar de enviar mensagem para esse outro objeto.

FACOM39502 POO 2023/1 40 / 99


O método main()

O método main() é o ponto de partida para todo aplicativo em Java.


É nele que são instanciados os primeiros objetos que iniciarão o
aplicativo.
A forma mais usual de se declarar o método main() é mostrada
abaixo:

public class ClassePrincipal


{
public static void main (String args [])
{
//corpo do método
}
}

FACOM39502 POO 2023/1 41 / 99

Exercício I

Criar um modelo em Java para uma lâmpada. Implemente o modelo,


criando dois objetos Lamp1 e Lamp2. Simule a operação acender para
Lamp1 e apagar para Lamp2.

Lampada

estadoDaLampada: boolean

+acender()
+apagar()

FACOM39502 POO 2023/1 42 / 99


Exercício II

1 public class Lampada {


2 boolean estadoDaLampada;
3
4 public void acender( )
5 {
6 estadoDaLampada = true;
7 System.out.println("A acao acender foi executada");
8 }
9 public void apagar( )
10 {
11 estadoDaLampada = false;
12 System.out.println("A acao apagar foi executada");
13 }
14 }

FACOM39502 POO 2023/1 43 / 99

Exercício III

1 public class GerenciadorDeLampadas {


2 public static void main(String args[]) {
3 // Declara um objeto Lamp1 da classe Lampada
4 Lampada Lamp1;
5 // Cria um objeto da classe Lampada
6 Lamp1 = new Lampada();
7 //Simulando operação sobre objeto Lamp1
8 Lamp1.acender();
9
10 // Declara um objeto Lamp2 da classe Lampada
11 Lampada Lamp2;
12 // Cria um objeto da classe Lampada
13 Lamp2 = new Lampada();
14 //Simulando operação sobre objeto Lamp2
15 Lamp2.apagar();
16 }
17 }

FACOM39502 POO 2023/1 44 / 99


Exercício IV

Criar um modelo em Java para uma pessoa. Considere os atributos nome,


idade e profissão. A pessoa pode gastar ou receber uma certa
quantia de dinheiro (assuma que o dinheiro se encontra na carteira).
Implemente o modelo, criando dois objetos p1 e p2. Assuma que o objeto
p1 tem 3.200 na carteira, e o objeto p2 tem 1.200. Simule operações de
gasto e recebimento.

FACOM39502 POO 2023/1 45 / 99

Exercício V

Pessoa

nome: String
idade: int
profissao: String
dinheiroNaCarteira: double

+gastar(valor: double)
+receber(valor: double)

FACOM39502 POO 2023/1 46 / 99


Exercício VI

1 public class Pessoa


2 {
3 String nome, profissao;
4 int idade;
5 double dinheiroNaCarteira;
6 public void gastar( double valor )
7 {
8 dinheiroNaCarteira = dinheiroNaCarteira - valor;
9 }
10 public void receber( double valor )
11 {
12 dinheiroNaCarteira = dinheiroNaCarteira + valor;
13 }
14 }

FACOM39502 POO 2023/1 47 / 99

Exercício VII

1 public class GerenciadorDePessoas


2 {
3 public static void main(String args[])
4 {
5 // Declara um objeto da classe Pessoa
6 Pessoa p1;
7 // Cria um objeto da classe Pessoa
8 p1 = new Pessoa();
9 //Atribuindo valor aos atributos do objeto p1
10 p1.nome = "Vitor Pereira";
11 p1.idade = 25;
12 p1.profissao = "Professor";
13 p1.dinheiroNaCarteira = 3200.00;
14 System.out.println( "Salário de " + p1.nome + " = " +
15 p1.dinheiroNaCarteira );
16 // Vitor recebeu 1000 reais
17 p1.receber( 1000.00 );

FACOM39502 POO 2023/1 48 / 99


Exercício VIII

18 System.out.println( p1.nome + "tem " +


19 p1.dinheiroNaCarteira + " reais");
20 // Vitor gastou 200 reais
21 p1.gastar( 200.00 );
22 System.out.println( p1.nome + "tem agora " +
23 p1.dinheiroNaCarteira + " reais");
24
25 // Declara e cria um outro objeto da classe Pessoa
26 Pessoa p2 = new Pessoa();
27 //Atribuindo valor aos atributos do objeto p2
28 p2.nome = "João Silveira";
29 p2.idade = 30;
30 p2.dinheiroNaCarteira = 1200.00;
31 System.out.println( "Salário de " + p2.nome + " = " +
32 p2.dinheiroNaCarteira );

FACOM39502 POO 2023/1 49 / 99

Exercício IX

33 // João recebeu 400 reais


34 p2.receber( 400.00 );
35 System.out.println( p2.nome + "tem " +
36 p1.dinheiroNaCarteira + " reais");
37 // João gastou 100 reais
38 p2.gastar( 100.00 );
39 System.out.println( p2.nome + "tem agora " +
40 p1.dinheiroNaCarteira + " reais");
41 }
42 }

FACOM39502 POO 2023/1 50 / 99


Comandos básicos do Java I

Declaração de variáveis:

<tipo> <nomeDaVariável> [= Atribuição de valores:


<valorInicial>];
<nomeDaVariável> = <valor
>;
int x1;
double a, b = 0.4;
float x = -22.7f; double soma;
char letra; soma = 0.6;
String nome = "UFU" obj.nome = "UFU";
boolean tem;

FACOM39502 POO 2023/1 51 / 99

Comandos básicos do Java II

Desvio condicional simples:


if (<condição>) Desvio condicional composto:
<instrução>; if (<condição>)
{
<instruções>;
// {}: mais de uma instruç }
ão else
if (<condição>) {
{ <instruções>;
<instruções>; }
}

FACOM39502 POO 2023/1 52 / 99


Comandos básicos do Java III

Escolha-caso:
1 switch (expressão)
9 ...
2 {
10 case <valorN>:
3 case <valor1>:
11 <comando(s);>
4 <comando(s);>
12 break;
5 break;
13 default:
6 case <valor2>:
14 <comando(s);>
7 <comando(s);>
15 }
8 break;

FACOM39502 POO 2023/1 53 / 99

Comandos básicos do Java IV

Repetição
Com while
while (<condição>)
<comando>; Com do-while – teste ao final
do
{
while (<condição>) <comandos>;
{ } while (<condição>);
<comandos>;
}

FACOM39502 POO 2023/1 54 / 99


Comandos básicos do Java V

Repetição com o laço for


1 for ([tipo] <var = valInicial> ; <condição> ; <
incremento>)
2 {
3 <comandos>;
4 }

Obs.: passar o tipo quando estiver declarando a variável no comando for

FACOM39502 POO 2023/1 55 / 99

Comandos básicos do Java VI

Exemplo – variável i não declarada antes do for:


1 for(int i = 1; i <= 10; i++) {
2 <comando 1>;
3 <comando 2>;
4 }

FACOM39502 POO 2023/1 56 / 99


Vetores e matrizes I
Vetor (array ): agrupamento de valores de um mesmo tipo primitivo ou de
objetos de uma mesma classe.
Em Java, primeiro elemento sempre tem índice 0
Em vetor de n elementos, índices variam de 0 a n-1
Exemplo:

0 1 2 3 4
v[0] v[1] v[2] v[3] v[4]

Todos os arrays são objetos da classe java.lang.Object –


importada automaticamente, ver Java API adiante;
Em Java, vetores têm tamanho fixo (dado pelo atributo length) e
não podem ser redimensionados;
Para redimensionar, deve-se criar um novo e fazer cópia.

FACOM39502 POO 2023/1 57 / 99

Vetores e matrizes II

A utilização de vetores na linguagem Java envolve três etapas:


1 Declarar o vetor;
2 Reservar espaço na memória e definir o tamanho do vetor;
3 Armazenar elementos no vetor.

FACOM39502 POO 2023/1 58 / 99


Vetores e matrizes III

Para declarar um vetor em Java é preciso acrescentar um par de colchetes


antes, ou depois, do nome da variável
Exemplo:
int idade[]; // Colchetes depois do
double salario[]; // nome da
String diasDaSemana[]; // variável

double []nota; // Colchetes antes do


String []nome; // nome da variável:
char []vet1, vet2, vet3;// Esta notação é útil quando
queremos declarar mais de um vetor, pois não há
necessidade de repeti-los.

FACOM39502 POO 2023/1 59 / 99

Vetores e matrizes IV

É preciso definir o tamanho do vetor – isto é, a quantidade total de


elementos que poderá armazenar;
Em seguida é necessário reservar espaço na memória para armazenar os
elementos. Isto é feito pelo operador new.
// Sintaxe 1
int idade[];
idade = new int[10];
double salario[];
salario = new double[6];

// Sintaxe 2
double []nota = new double [125];
String nome[] = new String [70];

FACOM39502 POO 2023/1 60 / 99


Vetores e matrizes V

A cópia de vetores é possível através de um método da classe System,


denominado arraycopy():
int v1[] = {1,2,3,4,5};
v1[5] = 10; // erro: índice fora dos limites

int v2[] = new int[10];


System.arraycopy(v1, 0, v2, 0, v1.length);
v2[5] = 10; // ok, os índices de v2 vão de 0 a 9

Sintaxe: arraycopy(v1,i1,v2,i2,n): Copia n elementos do vetor


v1 – a partir do elemento de índice i1 – para o vetor v2, a partir do índice
i2.

FACOM39502 POO 2023/1 61 / 99

Vetores e matrizes VI

Conforme já adiantado no exemplo anterior, há um atalho que resume os


três passos vistos anteriormente (declaração, reserva de espaço, atribuição
de valor).
Outro exemplo deste atalho:
// 10 primeiros elementos da sequência de Fibonacci
long fibonacci[] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55};

FACOM39502 POO 2023/1 62 / 99


Vetores e matrizes VII

Também é possível armazenar objetos em vetores:


Pessoa [] clientes = new Pessoa[3];
clientes[0] = new Pessoa(); // Necessário neste caso
clientes[0].nome = "João";
clientes[0].idade = 33;
clientes[0].profissao = "gerente";
clientes[1] = new Pessoa();
clientes[1].nome = "Pedro";
clientes[1].idade = 25;
clientes[1].profissao = "caixa";
clientes[2] = new Pessoa();
clientes[2].nome = "Maria";
clientes[2].idade = 20;
clientes[2].profissao = "estudante";

FACOM39502 POO 2023/1 63 / 99

Vetores e matrizes VIII

Percorrendo arrays: podemos fazer for especificando os índices – como


fazemos em C.
Porém, se o vetor todo será percorrido, podemos usar o enhanced for :
public void somaVetor()
{
int[] vetor = {87, 68, 94, 100, 68, 39, 10};
int total = 0;
for (int valor: vetor) // enhanced for
total = total + valor;
System.out.println("Total = " + total);
}

FACOM39502 POO 2023/1 64 / 99


Vetores e matrizes IX

Vetores multidimensionais:
Vetor bidimensional: matriz.
▶ Ex.: double[][] matriz = new double[5][10];
É possível construir vetores multidimensionais não retangulares:
// matriz de inteiros, 2 x 3 (2 linhas e 3 colunas)
int v[][] = new int[2][];
v[0] = new int[3];
v[1] = new int[3];
// vetor bidimensional não-retangular.
int vet[][] = new int[3][];
vet[0] = new int[2];
vet[1] = new int[4];
vet[2] = new int[3];

FACOM39502 POO 2023/1 65 / 99

Vetores e matrizes X

Em Java, é possível criar métodos que recebem um número não


especificado de parâmetros – usa-se um tipo seguido por reticências:
Método recebe número variável de parâmetros desse tipo;
Reticências podem ocorrer apenas uma vez;
No corpo do método, a lista variável é tratada como um vetor.
public class Media {
public double media(double... valor) {
double soma = 0.0;
for (int i=0; i<valor.length; i++)
soma = soma + valor[i];
return soma/valor.length;
}
}

FACOM39502 POO 2023/1 66 / 99


Java API I

Java API (Applications Programming Interface): conjunto de classes


pré-definidas do Java;
API está organizadas em pastas (pacotes)

FACOM39502 POO 2023/1 67 / 99

Java API II

Exemplos:

Pacote Descrição
java.lang Classes muito comuns (este pacote é importado au-
tomaticamente pelo compilador javac em todos
os programas Java).
java.io Classes que permitem entrada e saída em arquivos.
java.math Classes para executar aritmética de precisão arbitrária
javax.swing Classes de componentes GUI Swing para criação e
manipulação de interfaces gráficas do usuário
java.util Utilitários como: manipulações de data e hora, pro-
cessamento de números aleatórios, armazenamento e
processamento de grandes volumes de dados, quebras
de strings em unidades léxicas etc.

FACOM39502 POO 2023/1 68 / 99


Java API III

A classe java.lang.Math, por exemplo, contém valores de constantes,


como Math.PI e Math.E, e várias funções matemáticas. Alguns métodos:

Método Descrição
Math.abs(x) Valor absoluto de x.
Math.ceil(x) Teto de x (menor inteiro maior ou igual a x).
Math.cos(x) Cosseno de x (x dado em radianos).
Math.exp(x) Exponencial de x (e x ).
Math.floor(x) Piso de x (maior inteiro menor ou igual a x).

Métodos estáticos
Chamados a partir da classe (e não de um objeto específico)

FACOM39502 POO 2023/1 69 / 99

Java API IV

A classe String opera sobre cadeias de caracteres.

Método Descrição
ob.concat(s) Concatena objeto ob ao String s.
ob.replace(x,y) Substitui, no objeto ob, todas as ocorrências do ca-
ractere x pelo caractere y.
ob.substring(i,j) Constrói novo String para ob, com caracteres do
índice i ao índice j − 1.

Métodos não são estáticos


Chamados a partir de objetos da classe String.

FACOM39502 POO 2023/1 70 / 99


Armazenamento em memória I

Variáveis de tipos primitivos ou referências são criados em uma área de


memória conhecida como Stack (pilha);
Por sua vez, objetos são criados em área de memória conhecida como Heap
(monte). Uma instrução new Xxxx():
Aloca memória para a variável de referência ao objeto na pilha e
inicia-a com valor null;
Executa construtor, aloca memória na heap para o objeto e inicia seus
campos (atributos);
Atribui endereço do objeto na heap à variável de referência do objeto
na pilha.

FACOM39502 POO 2023/1 71 / 99

Armazenamento em memória II

FACOM39502 POO 2023/1 72 / 99


Coleta de lixo I

Periodicamente, a JVM realiza uma coleta de lixo:


▶ Retorna partes de memória não usadas;
▶ Objetos não referenciados;
▶ Não existem então primitivas para alocação e desalocação de memória
(como calloc, free, etc).

FACOM39502 POO 2023/1 73 / 99

Coleta de lixo II

FACOM39502 POO 2023/1 74 / 99


Coleta de lixo III

FACOM39502 POO 2023/1 75 / 99

Coleta de lixo IV

FACOM39502 POO 2023/1 76 / 99


Coleta de lixo V

FACOM39502 POO 2023/1 77 / 99

Encapsulamento e modificadores de acesso I

A linguagem Java oferece mecanismos de controle de acessibilidade


(visibilidade):

Encapsulamento
Encapsulamento é a capacidade de controlar o acesso a classes, atributos e
métodos

O encapsulamento é implementado através dos modificadores de


acesso;
▶ São palavras reservadas que permitem definir o encapsulamento de
classes, atributos e métodos;
Modificadores de acesso: public, private, protected.
Quando se omite, o acesso é do tipo package-only.
Classes: apenas public – ou omitido (package-only ) – é permitido.

FACOM39502 POO 2023/1 78 / 99


Encapsulamento e modificadores de acesso II

Package-only
▶ Caso padrão (quando modificador de acesso é omitido);
▶ Permite acesso a partir das classes do mesmo pacote – ou classe de
outro pacote, desde que seja subclasse (herdeira) da classe em questão
(conceito de herança).
protected
▶ Permite acesso a partir de uma classe que é herdeira de outra.
public
▶ Permite acesso irrestrito a partir de qualquer classe (mesmo que estejam
em outros arquivos);
▶ Único que pode ser usado em classes.
private
▶ Permite acesso apenas por objetos da própria classe. O elemento é
visível apenas dentro da classe onde está definido.

FACOM39502 POO 2023/1 79 / 99

Encapsulamento e diagrama de classes I


+: public – visível em qualquer classe;
–: private – visível somente dentro da classe.
#: protected – visibilidade associada à herança
1 public class Carro
2 {
3 private String marca;
4 public String ano;
Carro 5 public void abrirPorta()
6 {
–marca: String 7 //corpo do método
8 }
+ano: String 9 public void fecharPorta()
10 {
+abrirPorta() 11 //corpo do método
+fecharPorta() 12 }
13 private void contarKm()
-contarKm()
14 { /*corpo do método*/ }
15 }

FACOM39502 POO 2023/1 80 / 99


Encapsulamento e diagrama de classes II

1 public class Carro 1 public class UsaCarro


2 { 2 {
3 private String marca; 3 public static void main(String
4 public String ano; args[])
5 public void abrirPorta() 4 {
6 { 5 Carro car1 = new Carro();
7 //corpo do método 6 car1.ano = "2000";
8 } 7 car1.marca = "Fiat";
9 public void fecharPorta() 8
10 { 9 car1.fecharPorta();
11 //corpo do método 10 car1.contarKm();
12 } 11 }
13 private void contarKm() 12 }
14 { /*corpo do método*/ }
15 }

Erros de semântica: linhas 7 e 10.

FACOM39502 POO 2023/1 81 / 99

Encapsulamento e métodos

Um método public pode ser invocado (chamado) dentro da própria


classe, ou a partir de qualquer outra classe;
Um método private é acessível apenas dentro da classe a que
pertence.

FACOM39502 POO 2023/1 82 / 99


Encapsulamento e atributos I

Atributos públicos podem ser acessados e modificados a partir de


qualquer classe;
A menos que haja razões plausíveis, os atributos de uma classe devem
ser definidos como private;
Tentar acessar um componente privado de fora da classe resulta em
erro de compilação.

FACOM39502 POO 2023/1 83 / 99

Encapsulamento e atributos II

Mas então como acessar atributos, ao menos para consulta (leitura)?

Para permitir o acesso aos atributos de uma maneira controlada, a


prática mais comum é de criar dois métodos;
Os dois métodos são definidos na própria classe onde o atributo se
encontra;
Um dos métodos retorna o valor da variável
Outro método muda o seu valor;
Padronizou-se nomear esses métodos colocando a palavra get ou set
antes do nome do atributo.

FACOM39502 POO 2023/1 84 / 99


Métodos getters e setters

Com atributos sendo private, é frequente usar métodos


acessores/modificadores (getters/setters) para manipular atributos;
Porém, devemos ter cuidado para não quebrar o encapsulamento:

Se uma classe chama objeto.getAtrib(), manipula o valor do


atributo e depois chama objeto.setAtrib(), o atributo é
essencialmente público.
De certa forma, estamos quebrando o encapsulamento!

FACOM39502 POO 2023/1 85 / 99

Exercício – simulação de um banco (v0)

Construa um programa para simulação de um banco que possui apenas uma


conta, com os atributos privados saldo e limite. Utilize métodos
getters e setters para manipular os valores dos atributos e visualizá-los.
Uma entidade banco é responsável pela criação da conta e sua operação.

Conta

–saldo: double
–limite: double Banco

+setSaldo() opera
+main()
+setLimite()
+getSaldo()
+getLimite()

FACOM39502 POO 2023/1 86 / 99


Classe Conta.java (versão 0)

1 public class Conta {


2 private double limite;
3 private double saldo;
4 public double getSaldo() {
5 return saldo;
6 }
7 public void setSaldo(double x) {
8 saldo = x;
Questão
9 } Esta classe permite
10 public double getLimite() {
11 return limite;
alterar seus atributos
12 } como se fossem públicos!
13 public void setLimite(double y) {
14 limite = y;
15 }
16 }

FACOM39502 POO 2023/1 87 / 99

Classe Banco.java (versão 0)

1 public class Banco


2 {
3 public static void main ( String args[] )
4 {
5 Conta c1 = new Conta();
6 c1.setSaldo( 1000 );
7 c1.setLimite( 1000 );
8 double saldoAtual = c1.getSaldo();
9 System.out.println( "Saldo atual é " + saldoAtual );
10 double limiteConta = c1.getLimite();
11 System.out.println( "Limite é " + limiteConta );
12 }
13 }

FACOM39502 POO 2023/1 88 / 99


Exercício – simulação de um banco (v1)

Construa um programa para simulação de um banco que possui apenas uma


conta, com os atributos privados saldo e limite. Uma entidade
banco é responsável pela criação da conta e sua operação. Ela pode sacar
e depositar dinheiro da conta, visualizar seu saldo atual, assim como
verificar e atualizar o limite.

Conta

–saldo: double
–limite: double Banco
+sacar() opera
+depositar() +main()
+getSaldo()
+getLimite()
+setLimite()

FACOM39502 POO 2023/1 89 / 99

Classe Conta.java (versão 1)

1 public class Conta { 16 public void setLimite( double x


2 private double saldo; )
3 private double limite; 17 {
4 public void depositar( double x 18 limite = x;
) 19 }
20
5 {
6 saldo = saldo + x; 21 public double getLimite()
7 } 22 {
8 public void sacar( double x ) 23 return limite;
9 { 24 }
10 saldo = saldo - x; 25 }
11 }
12 public double getSaldo()
13 {
14 return saldo;
15 }
Já colocamos nos métodos regras de
negócio, que representam a lógica de
negócio da sua aplicação.

FACOM39502 POO 2023/1 90 / 99


Classe Banco.java (versão 1) I

1 public class Banco


2 {
3 public static void main ( String args[] )
4 {
5 Conta c1 = new Conta();
6 c1.setLimite( 300 );
7 c1.depositar( 500 );
8 c1.sacar( 200 );
9 System.out.println( "O saldo é " + c1.getSaldo() );
10 }
11 }

FACOM39502 POO 2023/1 91 / 99

Classe Banco.java (versão 1) II

E se sacarmos mais que o disponível?

FACOM39502 POO 2023/1 92 / 99


Classe Conta.java (versão 1.1)

Reescrevemos o método sacar():


8 public void sacar(double x) {
9 if ( saldo + limite >= x )
10 saldo = saldo - x;
11 }

Métodos permitem controlar os valores / atributos, evitando que qualquer


objeto altere seu conteúdo sem observar regras.

FACOM39502 POO 2023/1 93 / 99

Construtores I

Métodos construtores são utilizados para realizar toda a inicialização


necessária a uma nova instância da classe;

Diferente de outros métodos, um método construtor não pode ser


chamado diretamente:
Um construtor é invocado pelo operador new quando um novo objeto
é criado;
Determina como um objeto é inicializado quando ele é criado;
Vantagens: não precisa criar métodos get/set para cada um dos
atributos privados da classe (reforçando o encapsulamento), tampouco
enviar mensagens de atribuição de valor após a criação do objeto.

FACOM39502 POO 2023/1 94 / 99


Construtores II

A declaração de um método construtor é semelhante a qualquer outro


método, com as seguintes particularidades:
O nome do construtor deve ser o mesmo da classe;
Um construtor não possui um tipo de retorno – sempre void.

FACOM39502 POO 2023/1 95 / 99

Classe Veiculo.java I

1 class Veiculo
2 {
3 private String marca;
4 private String placa;
5 private int kilometragem;
6 public Veiculo( String m, String p, int k )
7 {
8 marca = m;
9 placa = p;
10 kilometragem = k;
11 }
12 public String getPlaca()
13 {
14 return placa;
15 }
16 public String getMarca()
17 {
18 return marca;
19 }

FACOM39502 POO 2023/1 96 / 99


Classe Veiculo.java II

20 public int getKilometragem()


21 {
22 return kilometragem;
23 }
24 public void setKilometragem(int k)
25 {
26 kilometragem = k;
27 }
28 }

FACOM39502 POO 2023/1 97 / 99

Classe AcessaCarro.java

1 class AcessaCarro
2 {
3 public static void main(String args[])
4 {
5 Veiculo meuCarro = new Veiculo("Escort","XYZ-3456",60000);
6 String marca;
7 int kilometragem;
8 marca = meuCarro.getMarca();
9 System.out.println( marca );
10 kilometragem = meuCarro.getKilometragem();
11 System.out.println( kilometragem );
12 meuCarro.setKilometragem( 100000 );
13 System.out.println( kilometragem );
14 }
15 }

FACOM39502 POO 2023/1 98 / 99


Referências

HORSTMANN, Cay S.; CORNELL, Gary. Core Java 2: Vol.1 –


Fundamentos, Alta Books, SUN Mircosystems Press, 7a. Edição, 2005.
DEITEL, H. M.; DEITEL, P. J. JAVA – Como Programar, Pearson
Prentice-Hall, 6a. Edição, 2005.
https://docs.oracle.com/javase/tutorial/java/jav
aOO/accesscontrol.html

FACOM39502 POO 2023/1 99 / 99

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy