Programação Orientada a Objetos
Prof. André Gustavo Duarte de Almeida [email protected]
www3.ifrn.edu.br/~andrealmeida
Aula IV – Escrevendo Programas em Java
Programação Orientada a Objetos
• Roteiro
• Declarando uma classe
• Declarando variáveis
• Declarando métodos
• Comandos Básicos
• Programa Completo em Java
Programação Orientada a Objetos
• Declarando uma classe
<modificador> <espaço_em_branco>class
<espaço_em_branco><NomedaClasse> {
//Declaração de Atributos
//Declaração de Métodos
} <modificador> deve ser substituído por public ou
deixando em branco
<espaco_em_branco> deve ser substituído por
pelo menos um espaço em branco
<NomeDaClasse> deve ser substituído por uma
palavra que necessariamente deve começar com
letra e a primeira letra deve ser maiúscula. Caso
tenha mais de uma palavra no nome da classe, a
primeira letra de cada palavra deve ser maiúscula
Programação Orientada a Objetos
• Declarando uma classe
• Exemplos
public class ImpressoraLaser {
}
class Aluno {
}
public class aluno {
}
public class Impressora Laser
{
}
Correto!!! Incorreto!!!
Programação Orientada a Objetos
• Declarando variáveis
• Assim como em algoritmos, todos programa precisa de variáveis, que são espaços de memória para armazenar informações
<tipo_da_variavel><espaço_em_branco><nome_da_variave1>,<no
me_da_variavel2>,...;
<tipo_da_variavel> Deve ser substituído pelo tipo válido da
linguagem Java, que pode ser os tipos pré-definidos como
também uma classe criada pelo programador
<nome_da_variavel> Deve ser substituído pelo nome da
variável, que deve começar com letra minúscula ou com _. Evitar
começar nome de variáveis com letras maiúsculas. Não é
possível começar com números. Não deve conter espaços em
brancos. Caso tenha mais de uma palavra, colocar _ ou a
primeira letra da palavra com maiúscula
Programação Orientada a Objetos
• Declarando Variáveis
• Exemplos
int x,y,z;
String nomeCompleto;
Aluno a1;
double delta,x1,x2;
String primeiro_nome,sobreNome;
String nome completo;
int 1Variavel;
Aluno andre
Correto!!! Incorreto!!!
Programação Orientada a Objetos
• Declarando Variáveis
• Tipos Básicos
Tipo Capacidade Valores
int Número inteiro de
32 bits
boolean Indica verdadeiro
ou falso
true or false
double Número real de
64 bits
String Cadeia de
caracteres com
tamanho máximo
de 255 caracteres
float Número real de
32 bits
O tipo String é
uma classe
enquanto os
demais são tipos
primitivos
Programação Orientada a Objetos
• Declarando Variáveis
• As classes que definimos, também são definidas como tipos
• A partir do momento da definição da classe, é possível utilizar a mesma como tipo de dados, para criação dos objetos
Programação Orientada a Objetos
• Vamos considerar um contexto em que queremos descrever um Carro
• Citem 4 atributos de um carro
• Utilizando o BlueJ, criem a classe Carro com seus respectivos atributos
• Lembre-se de utilizar as boas práticas vistas até agora
Programação Orientada a Objetos
• Declarando Métodos
<modificador> <espaço_em_branco> <tipo_de_retorno>
<espaço_em_branco> <nome_do_metodo>(<declarar
parâmetros>){
//Comandos
}
<modificador> dever ser substituído por: public, private, protected ou
deixar em branco. Por enquanto deixaremos sempre em branco
<tipo_de_retorno> deve ser substituído por um tipo válido do Java. Senão
tiver retorno usar a palavra reservada void
<nome_do_metodo> deve ser substituído pelo nome do método, que
deve começar com letra minúscula. Se tiver mais de uma palavra, separar
por _ ou então usar a primeira letra maiúscula, a partir da segunda palavra
<declara parâmetros>: Utilizar a mesma regra da declaração de variáveis,
sem a necessidade de colocar ;(ponto-e-vírgula)
Programação Orientada a Objetos
• Declarando Métodos public String getNome(){
return nome;
}
public void setNome(String
_nome){
nome=_nome;
}
int somar(int x,int y){
int z;
z=x+y;
return z;
}
void set nome(String x){
nome=x;
}
int multiplicar(int x ,int y
String k){
return x*y;
}
Correto!!! Incorreto!!!
Programação Orientada a Objetos
• Considerando a classe Carro que começamos a escrever, vamos escrever os métodos do tipo get/set
• Pensem agora em dois comportamentos para um carro
• Vamos tentar escrever os métodos em Java para esses comportamentos?!
Programação Orientada a Objetos
• Comandos Básicos
• Escrever uma mensagem no console(tela)
• System.out.println(<mensagem>);
• <mensagem>: deve ser substituído para uma variável / método do tipo String, ou qualquer tipo primitivo(int, double, float) etc....
• Podemos usar o operador “+” para concatenar mensagens, mesclando valores.
Programação Orientada a Objetos
• Comandos Básicos
• Escrever mensagem na tela
• Exemplos //Mensagem Simples
System.out.println("Olá Mundo");
//Exibindo uma mensagem e concatenando com uma
operação
System.out.println("A 2+3 é igual a "+(2+3));
//Realizando cálculos e exibindo o resultado
double x,y,z;
x=4.5;
y=2.35;
z=x/y;
System.out.println("O resultado de x/y é "+z);
//Utilizando uma variável do tipo String
String s;
s="Esta é uma cadeia de caracteres";
System.out.println("Mensagem"+s);
Programação Orientada a Objetos
• Comandos Básicos – Operadores Aritméticos Operação Operador em
Java
Exemplos
Adição + 2+3
X+4
Subtração - 2-4
x-y
Divisão / 2/5
x/y
Multiplicação * 2.4*3
2*3
X*Y
Resto % 5%3
x%3
Atribuição = X=5
Programação Orientada a Objetos
• Comandos Básicos – Operadores Aritméticos
• Precisamos atentar que a operação de resto(%) só funciona com número inteiros
• Divisão de números inteiros irá produzir um número inteiros
• Em Java o tipo mais amplo tem preponderância sobre um tipo inferior
• Se multiplicarmos um número real por um número inteiro, o resultado será um número real
double n;
n=4.5;
int numero=z*2;
Erro, pois um tipo int não
suporta um double
Programação Orientada a Objetos
• Comandos Básicos – Operadores Aritméticos
• Precedência de Operadores
• *, / e %, com mesma precedência, sendo a expressão avaliada da esquerda para direita
• + e -, com mesma precedência, sendo a expressão avaliada da esquerda para direita
• Parêntesis: Da mesma maneira que na matemática, os parêntesis determinam a ordem de avaliação de uma expressão
Programação Orientada a Objetos
• Comandos Básicos – Operadores Aritméticos
• Exemplos
• Vamos avaliar as seguintes expressões
double a,b,c,d,e,f;
a=5;b=4.5;c=3.2;d=4;e=6;f=5.4;
double r1,r2;
r1=a*b-4*d+c/e-f;
r2=a*b-4*((d+c/e)-f);
System.out.println("Expresão 01: "+r1);
System.out.println("Expressão 02:"+ r2);
Usando algumas das classes passados, criem um comportamento
chamado executarOperacao, que não retorne nada e executa o código
acima. Em seguida criem um objeto dessa classe e testem o método
Programação Orientada a Objetos
• Comandos Básicos
• Vamos retomar os 3 comportamentos da classe carro • Para o método transportar, considere que ele recebe como
informação a capacidade do carro e o número de pessoas. Imprima o número de vagas ocupadas e disponíveis
• Para o método acelerar, considere que ele recebe como parâmetro a velocidade. Imprima essa velocidade.
• Para o método buzinar, apenas imprima uma mensagem que represente o som da buzina
• Crie um método que imprima o modelo, marca e cor do carro
• Use o operador + para concatenar Strings e números quando for necessário.
Programação Orientada a Objetos
• Resolução do Exercício
Programação Orientada a Objetos
• Comandos Básicos – Incremento e Decremento
• ++ e --
• Acrescente +1 e subtrai -1 de um número inteiro Uso Descrição
x++ Incrementa o valor de x depois da expressão
ser avaliada
++x Incrementa o valor de x antes da expressão
ser avaliada
x-- Decrementa o valor de x depois da expressão
ser avaliada
--x Decrementa o valor de x antes da expressão
ser avaliada
Programação Orientada a Objetos
• Comandos Básicos – Incremento e Decremento
• Exemplos
int i,j,k,l;
i=10;j=3;
k=++i * 2*j--;
l=j*j*i;
System.out.println("O valor da 1 expressão é "+k);
System.out.println("O valor da 2 expressão é "+l);
Variável Valor
k
l
Programação Orientada a Objetos
• Comandos Básicos – Operadores Relacionais
Operador Uso Descrição
> op1 > op2 op1 maior do que op2
< op1 < op2 op1 menor do que op2
>= op1 >= op2 op1 maior ou igual a op2
<= op1 <= op2 op1 menor ou igual a op2
== op1 == op2 op1 igual a op2
!= op1 != op2 op1 diferente de op2
Programação Orientada a Objetos
• Comandos Básicos – Operadores Lógicos
• Operador &&(e lógico) e &(binário)
• x1 && x2 / x1 & x2
• x1 e x2 são expressões que produzem valores booleanos(true ou false)
• Tabela Verdade
X1 X2 Resultado
V V V
F V F
V F F
F F F
Programação Orientada a Objetos
• Comandos Básicos
• Operador && e &
• A diferença entre esses operadores, reside no conceito de curto circuito
• Suponha a seguinte expressão
• (x>5) && (y-3>x)
• Se a primeira expressão for falsa, o próprio operador informa que não é necessário avaliar a expressão seguinte
• A mesma expressão, sendo que com o operador & todas as expressões seriam analisadas
Programação Orientada a Objetos
• Comandos Básicos – Operadores Lógicos
• Operador ||(ou lógico) e |(ou binário)
• x1 || x2 / x1 | x2
• x1 e x2 são expressões que produzem valores booleanos(true ou false)
• Tabela Verdade
X1 X2 Resultado
V V V
F V V
V F V
F F F
Programação Orientada a Objetos
• Comandos Básicos
• Operador || e |
• A diferença entre esses operadores, reside no conceito de curto circuito
• Suponha a seguinte expressão
• (x>5) || (y-3>x)
• Se a primeira expressão for verdadeira, o próprio operador informa que não é necessário avaliar a expressão seguinte
• A mesma expressão, sendo que com o operador & todas as expressões seriam analisadas
Programação Orientada a Objetos
• Comandos Básicos – Operadores Lógicos
• Operador !(negação)
• !x1
• x1 é uma expressão que produz um valor booleano(true ou false)
• Tabela Verdade
X1 Resultado
V F
F V
Programação Orientada a Objetos
• Comandos Básicos – Operadores Lógicos
• Ao construir expressões booleanas é fundamental o uso adequado dos parêntesis, de forma a termos expressões corretas
• Com relação a precedência dos operadores lógicos, a sequência é a seguinte
• !, & , |
• &&, ||
• Com utilização correta dos parêntesis, não é necessário uma preocupação maior com essa regra
Programação Orientada a Objetos
• Comandos Básicos – Operadores Lógicos
int i,j,k,l;
i=10;j=3;
k=++i * 2*j--;
l=j*j*i;
System.out.println((i>k)||!(j*2<=100));
System.out.println((l<k) && (j>100 ||
(i<30)));
Programação Orientada a Objetos
• Comandos Básicos – Operador Condicional
• exp1 ? exp2:exp3
• Exp1 deve ser é uma expressão booleana. Caso exp1 seja verdadeiro a exp2 é executada, caso contrário a exp3 é executada
• As expressões exp2 e exp3 podem ser de qualquer tipo, inclusive uma expressão com operador condicional
Programação Orientada a Objetos
• Comandos Básicos – Operador Condicional
double n1,n2,media;
String resultado;
n1=5.0;n2=7.0;
media=(n1+n2)/2;
resultado=(media>=6.0)?"Aprovado":"Reprovado";
System.out.println("A média é :"+media);
System.out.println("A situação do aluno é "+resultado);
Programação Orientada a Objetos
• Comandos Básicos – Operador Condicional
• Suponha que no exemplo anterior, o aluno que tiver nota entre 3 e 5.9 esteja em recuperação
• Queremos agora modificar o mesmo código de forma a definirmos o status do aluno como sendo: ”Aprovado”, “Recuperação” ou “Reprovado”
resultado=(media>=6.0)?"Aprovado":(media>=3)?
"Recuperação":"Reprovado";
Programação Orientada a Objetos
• Comandos Básicos – Exercícios
• Crie uma classe chamada IMC
• Em seguida construa um método(comportamento) que recebe como parâmetro o peso e a altura de uma pessoa. Esse método deve calcular o índice de massa corpórea de uma pessoa.
• O método deve se limitar a imprimir esse índice
• A fórmula é a seguinte
IMC=
𝑝𝑒𝑠𝑜
𝑎𝑙𝑡𝑢𝑟𝑎∗𝑎𝑙𝑡𝑢𝑟𝑎
Programação Orientada a Objetos
• Comandos Básicos – Exercícios
• Crie uma classe Pessoa com os seguintes atributos:
• Nome, idade, peso, altura
• Defina os métodos get/set para esses atributos
• Crie um método que imprima os valores desses atributos na tela
Programação Orientada a Objetos
• Comandos Básicos – Exercícios • Desafio
• Crie um método chamado eObeso na classe pessoa, que retorna uma String, baseado no IMC, conforme virmos anteriormente
• Os resultados possíveis são os seguintes:
IMC Resultado
Abaixo de 18,5 “Você está abaixo do seu peso
ideal”
Entre 18,5 e 24,9 “Você está no peso ideal”
Entre 25 e 29,9 “Você está com sobrepeso”
Acima de 30 “Você está Obeso”
Programação Orientada a Objetos
• Operador new
• Até o momento criamos objetos através do BlueJ
• Agora veremos como declarar e criar um objeto a partir de uma classe por nós definida ou mesmo uma classe existente na linguagem Java
• Utilizaremos o operador new
• <Nome_da_Classe> <Nome_da_Variavel>;
• <Nome_da_Variavel>=new <Nome_da_Classe>();
• Ou faz tudo em uma linha só Carro c1=new Carro();
Aluno a;
a=new Aluno();
Programação Orientada a Objetos
• Usando métodos de um objeto
• <variavel><ponto><metodo>(<valores_dos_parametros>)
• <ponto>= Substituir por .
• (<valores_dos_parametros>) deve ser substituído por uma variável do mesmo tipo do parâmetro ou mesmo um valor fixo(constante)
• Já executamos isso através do blueJ
Programação Orientada a Objetos
• Comandos Básicos – Usando métodos
Carro c1=new Carro();
c1.setAno(2011);
c1.setCor("Amarelo");
String marca;
marca="Volksvagem"
c1.setMarca(marca);
c1.setModelo("Punto");
c1.imprimir();
Cria um objeto da classe Carro
que será referenciado pela
variável c1
Invoca o método setAno do
objeto referenciado pela
variável c1, passando como
parâmetro o ano de
fabricação do carro
Programação Orientada a Objetos
• Comandos Básicos – Operador new
• Como vimos, o operador new cria um novo objeto da memória, com base na classe que definimos
• Mais a frente veremos que existem outras maneiras de se criar um objeto usando new, inclusive definindo algumas informações no momento de criação do objeto
• Para cada vez que o operador new é acionado um novo objeto é criado, independente da variável ser a mesma
Programação Orientada a Objetos
• Comandos Básicos – Operador new
• Vejamos o seguinte exemplo
Carro c1=new Carro();
c1.setAno(2011);
c1.setCor("Amarelo");
c1.imprimir();
c1=new Carro();
c1.imprimir();
Atributo valor
modelo null
marca Null
cor “Amarelo”
ano 2011
c1
Atributo valor
modelo null
marca null
cor null
ano 0
Programação Orientada a Objetos
• Escrevendo um programa em Java – Método Main
• Todo programa possui um ponto principal, ou seja, de onde ele começa
• Veremos que em Java, um programa possuirá diversas classes e dentre elas, precisamos definir onde o programa irá iniciar
• Equivale ao inicio de um programa em portugol
Programação Orientada a Objetos
• O método main deve ser declarado da seguinte maneira:
public static void main(String[] args) {
//Comandos do bloco principal
}
Programação Orientada a Objetos
public class Principal {
public static void main(String[] args) {
Carro c1=new Carro();
c1.setAno(2011);
c1.setCor("Amarelo");
c1.setMarca("Volksvagem");
c1.setModelo("Punto");
c1.imprimir();
}
}
Fe
cha m
éto
do m
ain
Fecha a
cla
sse P
rincip
al
Programação Orientada a Objetos
• Comandos Básicos – Lendo Entrada do Usuário
• Através do console
• Usaremos a classe Scanner, fornecida pela linguagem Java, que permite “escanear” a entrada de dados
• Existem outras forma de ler dados do usuário, porém no momento focaremos nossas atenções na classe Scanner
Programação Orientada a Objetos
• Comandos Básicos – Entrada do Usuário
• Usando a classe Scanner import java.util.Scanner;
public class Principal {
public static void main(String[] args) {
Carro c1=new Carro();
Scanner sc=new Scanner(System.in);
System.out.println("Digite o
modelo do carro");
c1.setModelo(sc.nextLine());
c1.imprimir();
}
}
“importa a classe Scanner”
Cria um objeto da classe
Scanner para escanear a
entrada de dados do sistema
Solicita ao objeto da classe
Scanner que leia a próxima
linha
Programação Orientada a Objetos
• Comandos Básicos – Lendo Entrada de dados
Método Descrição
nextLine() Lê uma linha de caracteres
nextInt() Lê um número inteiro
nextDouble() Lê um número real do tipo
double
nextBoolean() Lê um valor booleano
Programação Orientada a Objetos
• Comandos Básicos – Entrada de Dados
• Exercício
• Complete o exemplo anterior, agora solicitando do usuário que digite os demais atributos do carro