Buscar

poos3_aula_1_classes_objetos_metodos_encapsulamento

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

POOS3 – Programação Orientada a Objetos edilson.ifsp@gmail.com 
 
Aula 1 – Classes, Objetos, Métodos e Encapsulamento 
1. Programação Orientada a Objetos 
A programação orientada a objetos é o paradigma de programação em evidência na atualidade. 
Ele vem substituir o paradigma estruturado, que é baseado em técnicas de programação 
procedurais, utilizadas em linguagens como C ou Pascal. 
Um programa orientado a objetos é constituído de objetos. Cada objeto possui uma 
funcionalidade específica, visível ao usuário e cuja implementação fica escondida. Objetos são mais 
apropriados para solucionar grandes problemas. Eles facilitam a busca por bugs e a manutenção do 
código. 
 
2. Definindo Classe e Objeto 
Classe: É um blueprint dos objetos que define como eles devem funcionar. A classe representa um 
conjunto de objetos com características iguais/similares. Ela define o comportamento de um objeto, 
através de métodos, e quais estados ele é capaz de manter, através de atributos. Exemplos de 
Classes: Pessoa, Carro, Casa, Aluno, Conta Corrente, Filme, Jogo, etc. 
 
Veja o código abaixo: 
class Pessoa { 
 String nome; 
 int idade; 
} 
 
A classe Pessoa foi definida. Note que ela não é um objeto, mas é utilizada para construir um 
objeto. Neste momento a classe contém dois atributos: nome e idade. Você poderia perguntar: Mas 
de qual pessoa estamos falando? E a resposta seria: Nenhuma. Temos somente a definição de uma 
classe genérica. É preciso criar objetos para que possamos especificar uma determinada pessoa. 
 
Objeto: É uma instância de uma classe. Um objeto é capaz de armazenar estados através de seus 
atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros 
objetos. Exemplo de objetos da classe Pessoa: João, José, Maria. 
 
Como criar um objeto do tipo Pessoa? Veja o código abaixo: 
Pessoa p = new Pessoa(); 
 
Agora temos um objeto “p”, do tipo Pessoa. Dessa maneira, o objeto “p” possui os atributos 
nome e idade. O operador “.” dá acesso aos atributos. 
 
p.nome = "José"; 
p.idade = 25; 
 
Surge então outra questão. Como definir o comportamento de uma pessoa? Isso é feito 
utilizando-se os métodos. 
 
3. Definindo Métodos 
Um método é muito parecido com uma função. Ele possui um nome e um corpo. 
- O nome deve ser um identificador que reflita o propósito principal do método (ex: 
efetuarCalculoImposto). 
- O corpo do método possui as declarações que serão executadas quando o método for 
invocado/chamado. É possível passar alguma informação para processamento e receber o resultado 
de tal operação. 
 
3.1. Sintaxe: 
tipoRetorno nomeMetodo (listaParametros) 
{ 
 // corpo do método 
} 
 
 tipoRetorno: especifica o tipo de informação que o método retorna. Pode ser int, float, String, 
etc. Se você estiver escrevendo um método que não retorna um valor, utilize void como tipo de 
retorno. 
 
 nomeMetodo: o nome utilizado para invocar o método. O nome de um método segue as 
mesmas regras utilizadas para a criação de variáveis. 
 
 listaParametros: é opcional e descreve os tipos e nomes das informações que você quer enviar 
para processamento. Você escreve os parâmetros entre os parênteses da mesma forma como 
declara as variáveis. Caso seu método tenha dois ou mais parâmetros, separe-os utilizando 
vírgula. 
 
Exemplo 1: Criando métodos para a classe Pessoa 
class Pessoa { 
 String nome; 
 int idade; 
 
 void conversar(){ 
 System.out.println("Blá Blá Blá"); 
 } 
 
 void comprar(){ 
 System.out.println("Hora de Gastar $$$$"); 
 } 
 
 int falarIdade(){ 
 return idade; 
 } 
} 
 
Como Testar? 
public class Main { 
 public static void main(String[] args) { 
 Pessoa p = new Pessoa(); 
 p.nome = "José"; 
 p.idade = 25; 
 p.conversar(); 
 p.comprar(); 
 System.out.println("Idade da Pessoa:" + p.falarIdade()); 
 } 
} 
 
 
 
Exemplo 2: 
int somaValores(int valor1, int valor2){ 
 // corpo do método 
} 
 
somaValores; // erro em tempo de compilação. 
somaValores (); // erro em tempo de compilação. 
somaValores (37); // erro em tempo de compilação. 
somaValores ("37", "5"); // erro em tempo de compilação. 
 
3.2. Escrevendo declarações de retorno do método 
Para retornar um valor do método, escreva a declaração return dentro do método, seguida pela 
expressão a qual você quer retornar, seguida de “;”. 
 
int somaValores(int valor1, int valor2) 
{ 
 // corpo do método 
 return valor1 + valor2; 
} 
 
3.3. Definindo Escopo Local 
public class Exemplo 
{ 
 void primeiroMetodo() 
 { 
 int campo; // ok 
 } 
 
 void segundoMetodo() 
 { 
 campo = 42; // errado 
 } 
} 
 
3.4. Definindo Escopo de Classe 
class Exemplo 
{ 
 public int campo = 0; 
 public void primeiroMetodo() 
 { 
 campo = 42; // ok 
 } 
 
 public void segundoMetodo() 
 { 
 campo++; // ok 
 } 
} 
 
3.5. Efetuando a Chamada de um método 
nomeObjeto.metodo(); 
 
class Main { 
 public static void main(String[] args) { 
 Funcionario f = new Funcionario(); 
 f.nome = "Edilson"; 
 f.salarioBruto = 1000; 
 System.out.println(f.calcularSalarioLiquido()); 
 } 
} 
 
class Funcionario { 
 String nome; 
 double salarioBruto; 
 
 public double calcularSalarioLiquido() 
 { 
 return salarioBruto * 0.9; 
 } 
} 
 
4. Encapsulamento 
O encapsulamento ocorre quando alguns atributos são mantidos como privados e métodos 
públicos para permitir o acesso a eles são fornecidos. Isso significa manter algumas das informações 
da classe como privadas, e fornecer métodos públicos para acessar essas informações. 
Quando todos os métodos e campos são mantidos como públicos, qualquer outra classe pode 
acessá-los. Tudo que essa classe faz torna-se um “livro aberto” para qualquer outra classe. O 
encapsulamento permite que você controle aquilo que você quer compartilhar e aquilo que você 
quer manter privado, dentro de sua classe. 
 
Exemplo: Classe Pessoa com dois atributos: nome e idade 
 
public class Pessoa { 
 private String nome; 
 private int idade; 
 
 public String getNome() { 
 return nome; 
 } 
 
 public void setNome(String nome) { 
 this.nome = nome; 
 } 
 
 public int getIdade() { 
 return idade; 
 } 
 
 public void setIdade(int idade) { 
 this.idade = idade; 
 } 
} 
 
No exemplo acima, a variável nome foi declarada utilizando-se o modificador de acesso private. 
Isso faz com que essa variável possa ser acessada somente dentro da classe Pessoa. Para permitir a 
leitura dos valores da variável, foi definido um método “get” (também conhecido como método 
acessor) chamado de getNome(). Observe que o método getNome() é público. Para permitir a 
modificação das informações, foi especificado um método “set” (também chamado de mutatório) 
chamado de setNome(). Esse método pode fornecer capacidades de validação das informações, 
assegurando que o valor da variável nome seja alterado adequadamente. 
A variável idade também foi declarada como private e possui dois métodos públicos: getIdade() e 
setIdade(). 
4.1. Dicas 
- Para criar os métodos públicos get e set, utilize os prefixos get ou set seguidos do nome da variável 
declarada como private. Exemplo. A variável salario teria como métodos públicos getSalario e 
setSalario. Note que a primeiraletra do nome da variável fica em maiúsculo. 
 
- A especificação dos métodos set e get não é obrigatória. Eles devem ser fornecidos somente 
quando isso fizer sentido. Exemplo: Se você tem uma variável cujo valor nunca será alterado fora 
classe, somente consultado, não faz sentido especificar um método set. 
Como testar? 
public class Main { 
 public static void main(String[] args) { 
 Pessoa p = new Pessoa(); 
 
 p.setNome("Edilson"); 
 p.setIdade(35); 
 
 System.out.println("Nome: " + p.getNome()); 
 System.out.println("Idade: " + p.getIdade()); 
 } 
} 
 
5. Entendendo Métodos Estáticos 
Quando você invoca um método como Math.sqrt, por que ele funciona? Parece estranho. O 
método está sendo invocado diretamente da classe e não de um objeto do tipo Math. Como isso 
funciona? 
O método sqrt é somente um exemplo dos vários métodos que são independentes de qualquer 
instância específica de uma Classe. Se sqrt fosse uma instância da classe Math, seria possível utilizá-
lo somente da seguinte forma: 
Math m = new Math(); 
double d = m.sqrt(42.24); 
 
Em Java todos os métodos devem ser declarados dentro de uma classe. Entretanto, se você 
declarar um método ou uma variável como static, você pode acessá-lo utilizando o nome da classe. 
Nenhuma instância é requerida. Veja como o método Sqrt é declarado na classe Math: 
class Math { 
 public static double Sqrt(double d) { ... } 
 ... 
} 
 
Tenha em mente que um método estático não é chamado em um objeto. Quando você define 
um método estático, ele não tem acesso a variáveis de instância declaradas na classe, somente a 
variáveis estáticas. Além disso, ele somente poderá invocar de forma direta outros métodos que 
também são estáticos. Métodos NÃO estáticos requerem a criação de um objeto. 
 
6. Entendendo as palavras chave class, public, static e main 
A palavra chave class é utilizada para declarar que uma nova classe está sendo definida. A 
definição da classe começa com “{” e termina com “}”. Todos os elementos que estiverem dentro das 
chaves são membros da classe. 
A linha static void main() inicia o método main(). É nessa linha que o programa iniciará sua 
execução (todas as aplicações em Java iniciam sua execução a partir de main()). 
A palavra chave static permite que main() seja utilizado sem que um objeto do tipo da sua classe 
seja criado. Isso é necessário porque main() é chamado quando o programa começa a ser executado. 
7. Casting 
A conversão entre tipos de dados pode ser feita explicitamente utilizando-se um “cast”. 
Entretanto, em alguns casos, conversões implícitas são permitidas: Exemplo: 
int i = 10; 
float f = 0; 
f = i; // Conversão Implícita. Nenhuma informação será perdida. 
f = 0.5F; 
i = (int)f; // Conversão Explícita. Informações serão perdidas. 
 
Um cast explícito invoca o operador de conversão de um tipo para o outro. Caso o operador de 
conversão definido não exista, o cast irá falhar. 
Exemplo: Convertendo um double para um int. Sem o cast, o programa não irá compilar. 
 
class Main { 
 public static void main(String[] args) { 
 double x = 1234.7; 
 int a; 
 a = (int)x; // cast de “double” para “int” 
 System.out.println(a); 
 } 
 
} 
 
Saída: 1234 
 
8. Números Aleatórios 
O método random() da classe Math gera um valor double entre 0.0 e um valor próximo a 1.0. 
Entretanto, esse valor produzido pode diferir do que é necessário para uma aplicação específica. Por 
exemplo, um programa que simule o lançamento de uma moeda pode requerer somente “0” para 
cara ou “1” para coroa. Um programa que simule a rolagem de um dado de seis lados requer inteiros 
aleatórios no intervalo de 1 a 6. 
Uma solução é utilizar o operador * em conjunto com random. 
 
(int) (Math.random() * 6) 
 
O código acima produz inteiros entre 0 e 5. Isso é chamado de escalonamento. Como o objetivo é 
gerar números entre 1 e 6, o valor 1 é adicionado ao resultado anterior. 
 
1 + (int) (Math.random() * 6); 
 
Exemplo: O código abaixo gera um número, aleatoriamente, maior ou igual a 1 e menor ou igual a 6. 
 
int nro; 
nro = 1 + (int) (Math.random() * 6); 
System.out.println("Número Sorteado: " + nro); 
 
9. Exercícios Propostos 
9.1. Crie uma classe chamada Calçado. A classe deve conter os atributos descricao, tipo, 
anoFabricacao e valor. Além disso, forneça métodos para informar/recuperar a descrição do 
calçado, o tipo, o ano no qual foi lançado e também seu preço. 
 
9.2. Especifique uma classe que represente uma Casa. A classe deve permitir a verificação da 
quantidade de pessoas no interior da casa, se as luzes externas estão acesas ou não, a 
quantidade de água e energia elétrica consumidos, assim como a temperatura ambiente. 
 
9.3. Crie uma classe chamada SmartPhone. Defina, no mínimo, quatro atributos e dois métodos. 
 
9.4. Crie uma classe Contador. Ela deverá fornecer métodos para incrementar, decrementar e 
exibir o valor de um determinado número. 
 
9.5. Crie uma classe Aluno especificando o nome, o sobrenome, prontuário, média geral das 
disciplinas. Inclua métodos para identificação do nome do aluno e também alteração/exibição 
das demais informações. 
 
9.6. Crie uma classe Livro especificando o título, o autor, a editora e o número de páginas. Inclua 
métodos para retornar o título, a editora e para determinar se o livro está emprestado ou 
não. 
Dica: Como vou saber se o livro está emprestado? A utilização de um atributo resolveria esse problema? 
 
9.7. Crie uma classe que represente uma Calculadora simples. Essa classe terá os métodos de 
adição, subtração, divisão e multiplicação. Os métodos devem receber dois parâmetros (Ex: 
valor1 e valor2) e retornar o resultado. 
 
9.8. Elabore uma classe que auxilie no gerenciamento de aluguéis. Crie métodos para definir o 
valor do aluguel, calcular o desconto (caso exista) e calcular o valor do aluguel. 
 
9.9. Escreva um programa (utilizando classes e métodos) para calcular o aumento salarial de um 
funcionário baseando-se na tabela abaixo. Além do salário, a classe deve conter o nome do 
funcionário e o ano de contratação. 
Salário Aumento (%) 
Acima de R$ 4.000,00 5% 
R$ 1.900,00 ----- R$ 4.000,00 10% 
Até R$ 1.900,00 20% 
 
9.10. Escreva um programa que simule um jogo de azar. Após solicitar o nome de dois jogadores, o 
programa deve permitir que eles informem seus palpites (um número entre 1 e 6), gerar um 
número aleatório e verificar se algum dos jogadores acertou seu respectivo palpite. O número 
de rodadas é controlado pelos jogadores. Ao final do jogo, o número de acertos de cada 
jogador deverá ser informado. 
 
9.11. Escreva um programa para gerenciar duas rotas de uma companhia aérea (São Paulo – Rio e 
São Paulo – Salvador). Para cada uma das rotas, devem ser armazenados a quantidade de 
assentos disponíveis e ocupados, a tarifa e o tipo de aeronave utilizada. Após a leitura das 
informações, o programa deve produzir um relatório contendo os seguintes itens: 
a) Tipo da Aeronave. 
b) Origem. 
c) Destino. 
d) Percentual de ocupação da aeronave. 
e) Valor da tarifa. 
f) Faturamento do vôo. 
 
9.12. Escreva um programa que auxilie no controle da produção de cana de açúcar de uma usina. 
O programa deve armazenar a quantidade de cana de açúcar estimada para processamento 
(em toneladas), a quantidade que foi realmente processada na usina, o custo de produção e o 
preço de venda da tonelada. Após isso, um relatório deve ser elaborado, contendo as 
seguintes informações: 
a) Quantidade de toneladas processadas. 
b) Valor da tonelada. 
c) Lucro da usina. 
d) Capacidade de produção utilizada (processamento real dividido pelo processamento 
estimado). 
 
9.13.Crie uma classe que permita a simulação de uma conta bancária. Ela deve conter o nome do 
cliente, o tipo da conta (1-Especial; 2-Comum) e o saldo. As seguintes funcionalidades devem 
ser fornecidas: a) saque; b) depósito; c)bônus; d) cálculo da tarifa. O bônus e a tarifa devem 
ser calculados de acordo com as tabelas abaixo: 
Detalhe: o bônus pode ser utilizado somente uma vez. 
Saldo Bônus 
 
Tipo Conta Tarifa 
Até 1000 5% 
 
1 R$ 8 
Acima de 1000 10% 
 
2 R$ 14 
 
 
9.14. Crie um programa que gerencie um estacionamento rotativo de carros. O programa deve 
armazenar a descrição do carro, a placa, o horário de entrada e o horário de saída (despreze 
os minutos). O estacionamento cobra X reais pela primeira hora de permanência com o 
automóvel e X/3 pelas demais horas. Além disso, é fornecido um desconto para o pagamento 
de acordo com a tabela abaixo: 
Valor Desconto (%) 
Até R$ 20 (inclusive) 5 
Entre R$ 20 e R$ 50 (inclusive) 10 
Acima de R$ 50 20 
 
O programa deve exibir um relatório contendo as seguintes informações: 
a) Tipo do carro. 
b) Placa. 
c) Hora da Entrada. 
d) Hora da Saída. 
e) Valor Pago.

Outros materiais