Programação
Java II
Conceitos OO
• Gap semântico
– Nossa mente é orientada a objetos;
– Se nossa LP também for OO, podemos diminuir o gap semântico:
• Os recursos oferecidos são os mesmos, porém os mecanismos de abstração são mais poderosos;
• Passamos a construir a solução em termos do domínio do problema (mundo real – objetos);
Conceitos OO - Relembrar
• Características..
– Linguagens tradicionais:
• Dados e procedimentos são consideradas entidades separadas
– Linguagens OO:
• Entidade única e indivisível – objeto
– Objeto encapsula os dados e os procedimentos (métodos)
– Dados só podem ser modificados pelos métodos que são parte do objeto – Chamar um método tem o significado de passar uma mensagem
Sistemas OO – coleção de objetos se comunicando, cooperando para atingir um resultado
Conceitos OO - Relembrar
Objeto Estado Comportamento
Cão Nome Raça Cor Caçando Comendo Balançando o ramo Bicicleta Velocidade do pedal
Marcha
Velocidade da Bike
Freiar Acelerar
Mudar de marcha
• Exemplos de
Objetos de software:
– Todo objeto no mundo real possui 2 características:
• Estado;
• Comportamento. • E identidade única
• Objetos de software:
– Estado são representados por atributos (armazenados pelas variáveis de classe modeladas);
– Comportamento são representados por métodos de
classe (funções).
Conceitos OO - Relembrar
• Classes
– Uma Classe é um Protótipo que define as variáveis e métodos comuns a todos os objetos de um determinado tipo.
• Uma classe define as propriedades (estado) e as operações (comportamento) que são comuns a um conjunto de objetos. – Uma Classe define um tipo, a partir do qual todos os
objetos são criados.
Classe Bicicleta
Conceitos OO - Relembrar
• Classes
– As classes fornecem duas potencialidades muito
importantes:
• Encapsulamento
– O poder de esconder a informação, reduzindo desse modo a quantidade de detalhes que necessitam ser lembrados, ou seja, trocados entre programadores.
• Instanciação
Conceitos OO - Relembrar
Classe Bicicleta Objetos (instâncias) da classe Bicicleta Em software, instâncias alocam um espaço de memória especificado do seu protótipo (CLASSE).• Instâncias:
Conceitos OO - Relembrar
• Instâncias:
– Importância da nomenclatura definida:
• Conceitos de atributos e métodos de instâncias X variáveis e métodos de classe
– Instâncias
• São referencias ao objetos do problema;
– Atributos de instância:
• Conjunto de variáveis que modelam um objeto em um determinado instante. Velocidade do pedal Marcha Velocidade da bike
Conceitos OO - Relembrar
• Instâncias:
– Métodos de instância:
• Conjunto de métodos que interagem sobre uma instância.
Encapsulamento Restringe o acesso aos atributos permitindo Modularidade e Seleção de Informação Exibida Freiar Acelerar Mudar de marcha
Conceitos OO - Relembrar
Você (You) solicita
mudança de marcha para sua bicicleta (YourBicycle)
Informação necessárias:
• Objeto destino (YourBicicle); • Método (changeGears);
• Parâmetro (lowerGear).
• Mensagem
Conceitos OO - Relembrar
• Resumindo...
– Todas as linguagens orientada a objetos têm os seguintes conceitos:
• Classes (tipo do objeto)
• Instâncias (objetos)
• Mensagens (troca de informações)
• Atributos (estado do objeto)
• Métodos (comportamento do objeto)
• Herança, Subclasse, etc
– Mas como podemos codificar essas coisas??!!!
• Diferente de antes, onde tudo era feito dentro do método
Estrutura de uma classe
class Pessoa { } int qual_Idade () { return idade; }void casar (Pessoa p) { conjuge = p; } int idade; Pessoa conjuge;
Classe
Propriedades
Métodos
• Nós precisamos aprender uma nova estrutura...
– Todos aplicados de acordo com a sintaxe da linguagem Java
Declaração de Classes
• Para declarar uma nova classe, utiliza-se a seguinte
sintaxe:
<modificador-acesso> class <nome-classe> {
/* corpo da classe,com atributos e métodos */
}
Ex:
class Ponto { ...
}
– A classe cria um novo tipo, a partir do qual podemos criar e usar objetos.
Estamos definindo um tipo!!
Declaração de Variáveis
• Nas classes podemos declarar variáveis/atributos e métodos: – Variáveis definem o estado de um objeto, de acordo com seus atributos.
– Métodos define como é possível interagir com um objeto, de maneira a modificar o seu estado ou obter informações a seu respeito.
• Para declarar um atributo de classe deve-se atender a seguinte sintaxe:
<modificador de acesso><tipo><nome>;
– Exemplos:
class MinhaClasse { public int atributo1; public int atributo2; }
class Ponto {
float x, y;
Assinatura Corpo Retorno
Declaração de Métodos
• A declaração de um método deve obedecer a seguinte sintaxe:
– Exemplos:
– No exemplo abaixo, o método atributosSaoIguais retorna verdadeiro caso valores dos atributos sejam iguais
class Ponto {
int x, y;
void mover ( int dx, int dy) { x += dx; y += dy; } } <modificador-acesso><tipo-retorno><nome>(<parametros>){ /* código do método */ } class MinhaClasse {
public int atributo1; public int atributo2;
public boolean atributosSaoIguais() {
return (atributo1 == atributo2); }
Declaração de Métodos
• Retorno
– Já pudemos observar que um método pode retornar um valor usando o comando return:
– Em métodos que não retornam valores (void)
Declaração de Métodos
• Importante:
Assinatura de um método
– Define o método de uma forma única;
– Em Java, o nome e os tipos de parâmetros de um método formam sua assinatura;
– Não pode haver dois métodos com a mesma assinatura na mesma classe (mesmo que o tipo de retorno seja
diferente);
– Algumas linguagens incluem o tipo de retorno na assinatura. Java não o faz.
Manipulação de Objetos em
Java
• Blz,
– Sabemos definir uma classe e especificar seu
método e atributos…
– Mas como isso vai virar um objeto que eu possa
utilizar...???
– Como eu posso instanciar um objeto de uma
classe????
Manipulação de Objetos
em Java
• Para criar um objeto em memória, ou instanciá-lo, precisamos utilizar o operador new , da seguinte maneira:
nome = new String(“meu nome”);
• O código de criação de objeto feito anteriormente possui o seguinte significado:
• Importante: Objetos Java são manipulados por referências.
• Internamente, o Java aponta para a posição da memória que representa a variável
– No código Java abaixo, foi criada uma referência chamada nome para o objeto da classe String.
String nome;
– Ao declarar uma referência, ainda não há objeto criado em memória.
Instanciação de Objetos
• Vamos analisar com mais detalhes... As figuras a seguir ilustram o processo de instanciação do objetos
– Toda classe criada pode ser usada na declaração de variáveis (podendo futuramente se tornarem objetos).
• Exemplo:
class Editor {
public static void main (String arg[]) {
Ponto p; int a = 2; } } Declaração de uma variável p do tipo da classe Ponto. Declaração de uma variável a do tipo inteiro. X = ? Y = ? 2 class Ponto { int x, y;
void mover ( int dx, int dy) { x += dx; y += dy; } }
Instanciação de Objetos
• Dada uma classe, pode ser criada uma nova
instância desta classe usando o comando
new
.
– Aqui o objeto é criado em memória
• Exemplo:
class Editor {
public static void main (String arg[]) {
Ponto p = new Ponto(); }
}
X = 0 Y = 0
p
Instanciação de Objetos
• Quando não inicializamos explicitamente, um valor
default
é atribuído a ele:
Manipulação de Objetos
em Java
• Interessante:
Duas variáveis podem estar
referenciando o mesmo objeto em memória.
– Exemplo:
String str1;
String str2 = new String(“teste”);
str1 = str2; //str1 e str2 são o mesmo objetos na memória
– No código acima,a atribuição str1 = str2 faz com que str1
passe a referenciar o mesmo objeto em memória que str2.
teste
Manipulação de Objetos
em Java
• Vimos que para cada objeto criado em memória
será criado espaço em memória distinto para os
atributos da classe:
– Ex: A classe MinhaClasse possui as variáveis de classe atr1
e atr2
MinhaClasse o1,o2;
o1 = new MinhaClasse(); o2 = new MinhaClasse();
– Os dois atributos são chamados atributos de instância.
Qualquer objeto do tipo MinhaClasse possuirá dois atributos denominados atr1 e atr2
Manipulação de Objetos em
Java
• Blz,
– Sabemos como instanciar um objeto…
– Mas como podemos acessar os seus atributos e
comportamentos....??
Manipulação de Objetos
em Java
• Acessando membros de uma classe -
Variáveis
– As propriedades visíveis dos objetos podem ser manipuladas diretamente através do ponto (.):
Ponto p1 = new Ponto(); p1.x = 1;
p1.y = 2;
// p1 representa o ponto (1,2) Ponto p2 = new Ponto();
p2.x = 3; p1.y = 4;
// p2 representa o ponto (3,4)
• Esse acesso também depende do
controle de acesso:
público, privado, protegido
• Já já vamos falar sobre isso....
X = 1 Y = 2
p1
X = 3 Y = 4p2
Manipulação de Objetos
em Java
• Acessando membros de uma classe –
Variáveis
Manipulação de Objetos
em Java
• Acessando membros de uma classe – Métodos Operacionais
– A troca de mensagens entre os objetos é realizada através da
chamada de métodos com passagem de parâmetros
MinhaClasse objeto1 = new MinhaClasse(); objeto1.atributo1 = 0;
objeto1.atributo2 = 1;
boolean iguais = objeto1.atributosSaoIguais();
– Métodos se comporta como funções, exceto que eles só podem ser invocados a partir de um objeto ou de uma classe (métodos estáticos da classe).
– Métodos podem acessar diretamente os atributos e demais métodos de um objeto que não possui controle de acesso.
– Métodos podem ter zero ou mais parâmetros.
– Um método que não retorna nenhum valor (como um procedimento), deverá ser declarado como retornando void (nada)
Manipulação de Objetos
em Java
• Acessando membros de uma classe –
Métodos
Operacionais
– Mensagem entre Objetos
class Editor {
void criarPonto (int x1, int y1) { Ponto p1 = new Ponto ();
p1.x = x1; p1.y = y1; p1.desenhar(); } } Troca de mensagem de um objeto da classe Editor com o
objeto da classe Ponto denominado
Manipulação de Objetos em
Java
• Acessando membros de uma classe –
Métodos
Operacionais
Manipulação de Objetos
em Java
Objeto a
Objeto f
...
float calcularBonus (Funcionario f) { float bonus = 0;
if ( f.ehChefe ( ) ) {
bonus = f.salario * 0.5; }
else bonus = f.salario * 0.2;
return bonus; }
...
true
Premissas:
Método da Classe Folha. Instância denominada a.
true
• Acessando membros de uma classe – Métodos Operacionais
Estrutura de um programa
Java -
MAIN
• Um programa OO cria objetos e interage com eles.
– Em Java um programa também é uma classe, que possui
um método main, conforme mostrado abaixo:
public class MeuPrograma {
public static void main(String [] args){
/* corpo do programa */
}
}
– A assinatura do método deve ser exatamente como a da classe acima.
– O parâmetro args é um vetor de Strings que recebe os argumentos de linha de comando passados para o
Estrutura de um programa
Java
1. Define a classe programa;
2. Adiciona o método principal (main);
3. Adiciona o código a ser executado;
• A classe abaixo implementa um programa
Hello
World
em Java:
Agora temos a visão de classes e métodos e não de procedimentos e corpo principal
Estrutura de um programa
Java
// Programa.java
public class Principal {
public static void main(String args[]) {
int numargs = args.length; String arg1 = args[0];
String arg2 = args[1]; }
}
C:\>java Principal nome endereco ...
args[0] args[1] args[2] ... args.length
• Importante
- Argumentos
Modifique o exemplo anterior para pegar e imprimir um parâmetro digitado pelo usuárioEstrutura de um programa
Java
• Blz..
– Entendemos a estrutura sintática básica e como
referenciar os atributos e métodos..
– Agora vamos analisar um exemplo, desde a
modelagem até o implementação...
Estrutura de um programa
Java
• Modelagem
– Seja a Representação gráfica da classe Carro:
Estrutura de um programa
Estrutura de um programa
Java
• Vimos que....
– Instância de uma classe é a representação de uma classe na memória do computador.
Estrutura de um programa
Java
• Podemos ter
várias
instâncias de
uma mesma
classe…
Controle de Acesso
• Blz.. Entendemos a estrutura sintática básica e como
referenciar os atributos e métodos..
• E vimos um exemplo pra entender melhor o
processo...
• Reparam que aparecia um comando public....
– Que raios é isso???....Controle de Acesso
• O controle de acesso a variáveis e métodos é feito
por meio dos modificadores de visibilidade.
– Determinam a visibilidade de um determinado membro da classe com relação a outras classes; (modificadores-acesso)
• Public : variáveis/método pode ser acessado em qualquer classe.
• Private : variáveis/método só pode ser acessado no escopo (código) da própria classe.
• Protected : estende o controle private, permitindo que subclasses acesse o variáveis/método.
• Package : variáveis/método pode ser acessado por classes que faça parte do mesmo pacote. Aplica-se a variáveis/método sem modificador de visibilidade indicado ou amigo.
Controle de Acesso
• Variáveis e métodos públicos -
Public
– Variáveis públicas
• Permitem acesso de leitura/escrita:
– Não recomendável – o projeto do sistema deve prever métodos acessores.
• Constantes públicas:
– Somente acesso de leitura (recomendável)
– Métodos públicos
• Serviços oferecidos aos clientes da classe
– Devem formar um conjunto consistente de serviços relacionados ao conceito que a classe representa uma vez que representa o comportamento da classe para os outros objetos
• Interfaces:
Controle de Acesso
Controle de Acesso
• Variáveis e métodos privativos -
Private
– Variáveis privativas
• Permitem acesso de leitura/escrita somente na própria classe
• Não são transmitidos por herança
– Métodos privativos
• Não podem ser invocados fora da classe
• Não são transmitidos por herança • Aplicação:
– Métodos de serviço que não interessam a classes derivadas – Métodos pertinentes apenas a classe a qual pertence.
Controle de Acesso
Controle de Acesso
• Variáveis e métodos protegidos -
Protected
– Variáveis protegidos
• Permitem acesso de leitura/escrita somente na própria classe
• São transmitidos por herança
– Métodos protegidos
• Não podem ser invocados fora da classe em outro pacote
• São transmitidos por herança • Podem ser redefinidos
• Aplicação:
– Métodos de serviço que podem interessar a classes derivadas, mas que não são acessados por outros objetos.
Controle de Acesso
• Variáveis e métodos protegidos - Protected
– Permite acesso interno (à própria classe); – Permite acesso às classes do mesmo pacote;
– Permite acesso às subclasses (do mesmo ou de outro pacote);
– Não permite acesso às demais classes.
Controle de Acesso
•
Variáveis e métodos protegidos –
Protected
– Não permite acesso às demais classes.Controle de Acesso
• Rapidamente:
Controle de Acesso
• Na classe abaixo, há um atributo público e outro
privado:
class MinhaClasse {
public int atributo1; private int atributo2;
public boolean atributosSaoIguais(){ return (atributo1 == atributo2);
}
}
– Qual o erro do código abaixo:
1:class Teste {
2:public static void main(String[] args){ 3:MinhaClasse obj1 = new MinhaClasse(); 4:obj1.atributo1 = 10;
5:obj1.atributo2 = 30; 6:}
7:}
Controle de Acesso
• Variáveis e métodos
package-private
–
Package
– É uma forma de organizar grupos de classes relacionadas
• São úteis para:
– Organizar as classes em unidades, permitindo usar apenas as necessárias em cada programa;
– Reduzem o problema de conflito de nomes;
– Permite proteger classes, variáveis e métodos de maneira mais ampla do que em cada classe de forma individual;
– Pode ser usado para identificar as classes (hierarquia diretório)
» Maneira de construir bibliotecas de classes (coleção de arquivos .class);
- Pacotes: Agrupamento de classes Pode conter subpacotes
Controle de Acesso
• Variáveis e métodos
package-private
–
Package
– É uma forma de organizar grupos de classes relacionadas CLASSPATH = C:\Exemplos
package tela;
public class Exemplo2 { ...
}
O comando
package diz que a classe Exemplo2
faz parte do pacote tela (o .class gerado vai
ficar dentro de tela)
• Variáveis e métodos
package-private
–
Package
– Pacotes e Diretórios
• Existe relação direta entre os nomes dos pacotes e a estrutura dos diretórios
– Cada pacote corresponde a um diretório
– Arquivos e classes de um mesmo pacote devem estar em um mesmo diretório
• Uso de . para indicar existência de subpacote
– Classes e arquivos do subpacote devem estar em subdiretório correspondente no diretório do pacote
– Uso de . como notação multiplataforma para definição do caminho dos diretórios
• Classes criadas em arquivos que não especificam o pacote são colocadas no pacote padrão do diretório,
– Que pode ser o mesmo onde se encontra os arquivos .java
• Convenção para Nomes de Pacotes
– Uso de pacotes obtidos na Internet ou em empresas
• Pode gerar conflito de nomes de classes
– Convenção proposta pelos projetistas de Java
• Uso do domínio do criador do pacote como prefixo do pacote na ordem inversa
• InterNIC garante que nomes de domínios são únicos
• Dentro de um mesmo domínio devem ser estabelecidas convenções
específicas
package br.uvv.inf.vinicius.pacotes.meuPacote;
– Exemplo de Pacotes do Synergia
– Implica em criar localmente uma estrutura de diretório
• Com os nomes indicados ns URL para então armazenar as classes dentre do diretório meuPacote
Controle de Acesso
• Variáveis e métodos
package-private
–
Package
– CLASSPATH = C:\Exemplospackage distribuidora.pedido; public class ItemPedido { ... }
ItemPedido.java
O comando package
diz que a classe
ItemPedido faz parte do pacote
distribuidora.pedido (o .class gerado vai
ficar dentro de distribuidora.pedido)
Controle de Acesso
• Outro comando importante é a declaração import
– Para importar (ou seja acesssar) classes de um pacote, é necessário utilizar a declaração import
• É possíve importar uma classe específica
– import java.util.Vector;
• Ou todas a classes do pacote, usando *
– import java.util.*;
– Uma IDE ajuda bastante nesta tarefa.
– Não se usa import para acessar classes do pacote padrão
• As classes do pacote java.lang, por exemplo, são importadas automaticamente;
– Não é necessário:
» import java.lang.String; » import java.lang.Math; » import java.lang.*;
– O import deve direcionar para o mesmo local onde se encontra as classes do pacote,
Controle de Acesso
• A declaração
import
Controle de Acesso
• A declaração
import
– Importação estática• A partir do Java 5 é possível importar os membros estáticos de uma classe:
Controle de Acesso
• Acesso variáveis e métodos –
Resumão
– Em ordem crescente de acesso
• private
• “package-private"
– modificador ausente
• protected • public
Controle de Acesso
• Acesso variáveis e métodos –
Resumo
– public
• Acessível
– Na própria classe – Nas subclasses
– Nas classes do mesmo pacote – Em todas as outras classes
• Use para
– Construtores e métodos que fazem parte da interface do objeto – Métodos estáticos utilitários
– Constantes (estáticas) utilitárias
• Evite usar em
– Construtores e métodos de uso restrito – Campos de dados de objetos
Controle de Acesso
• Acesso variáveis e métodos –
Resumo
– private
• Acessível
– Na própria classe (nos métodos, funções estáticas, blocos estáticos e construtores)
• Use para
– Construtores de classes que só devem criar um número limitado de objetos
– Métodos que não fazem parte da interface do objeto funções estáticas que só têm utilidade dentro da classe
– Variáveis e constantes estáticas que não têm utilidade ou não podem ser modificadas fora da classe campos de dados de objetos
Controle de Acesso
• Acesso variáveis e métodos –
Resumo
– protected • Acessível
– Na própria classe – Nas subclasses
– Nas classes do mesmo pacote
• Use para
– Construtores que só devem ser chamados pelas subclasses (através de super())
– Métodos que só devem ser usados se sobrepostos
• Evite usar em
– Construtores em classes que não criam objetos
Controle de Acesso
• Acesso variáveis e métodos –
Resumo
– package-private
• Modificador ausente
– Se não houver outro modificador de acesso, o acesso é "package-private".
• Acessível
– Na própria classe
– Nas classes e subclasses do mesmo pacote
• Use para
– Construtores e métodos que só devem ser chamados pelas classes e subclasses do pacote
– Constantes estáticas úteis apenas dentro do pacote
• Evite usar em
– Construtores em classes que não criam objetos
– Métodos cujo uso externo seja limitado ou indesejável campos de dados de objetos
Controle de Acesso
• Sobreposição
– Métodos sobrepostos nunca podem ter menos acesso
que os métodos originais
• Se método original for public, novas versões têm que ser public • Se método original for protected, novas versões podem ser
protected ou public
• Se método original não tiver modificador de acesso (é "package-private"), novas versões podem ser declaradas sem modificador de acesso, com modificador protected ou public
• Se método original for private, ele não será visível da subclasse e portanto, jamais poderá ser estendido.
Controle de Acesso
private sem
modificador
protected public
Sim
Sim
Sim
Sim
Não
Sim
Sim
Sim
Não
Sim
Sim
Sim
Não
Não
Sim
Sim
Não
Não
Não
Sim
Mesma classe Subclasse mesmo pacote Não Subclasse mesmo pacote Subclasse outro pacote Não Subclasse outro pacote
Controle de Acesso
Máquina Java
?
?
Onde estão as Classes?Variável de Ambiente CLASSPATH
• Vamos falar uma palavrinha sobre o CLASSPATH
– Variável de Ambiente usada pelas Ferramentas do JDK para encontrar classes
• CLASSPATH
–
CLASSPATH default
:
• Inclui diretório corrente e diretórios com bibliotecas padrão de classes de Java
–
CLASSPATH
definido
• O caminho dos diretórios definidos no pacote importado é concatenado a todos os caminhos de diretórios
existentes no CLASSPATH
– Seja package pacotes.meuPacote;
– Se C:\Vinicius está no CLASSPATH:
» Ao compilar ou executar MinhaAplic1, as classes do pacote
meuPacote serão procuradas no diretório
C:\Vinicius\pacotes\meuPacote e .\pacotes\meuPacote
• Cuidados com o CLASSPATH
– A busca pela classe pertencente a pacote padrão será interrompida
quando for encontrada a primeira classe com o nome da classe
procurada
• Pode provocar erro difícil de encontrar
– Erro tende a ocorrer mais frequentemente quando a variável de Ambiente CLASSPATH é modificada permanentemente
• Recomenda-se definir CLASSPATH provisoriamente usando a opção -classpath das ferramentas do JDK
– Diretório corrente deve ser incluído na opção –classpath
– Uso de IDEs:
• Utilizar uma IDE abstrai todas estas preocupações; • A IDE cuida de todo o processo de compilação.
Pacotes JAR
• Arquivos JAR permitem agrupar os arquivos e classes do programa para que eles possam ser executados em outros ambientes
• São arquivos compactados no formato ZIP e podem ser abertos por qualquer programa compatível
Exercício - Construção de
Classes
• Blz, entendemos alguma teoria...
– Vamos construir juntos um exemplo inteiro, com
duas classes
– Criação de classes A e B e acesso do objeto de uma classe A numa classe B
Exercício - Construção de
Classes
É definida uma variável local para referenciar um objeto do tipo Bicicleta b Memória• O que a gente quer fazer....
Instanciando um NOVO objeto Bicicleta b Memória * b Memória
.
velocidade Acessando o atributo do objeto instanciado Chamando o método do objeto instanciado * b Memória.
aumentaVelocidade( )Exercício - Construção de
Classes
• Exercício (
Fazer no NetBeans
)
– Crie uma classe chamada Bicicleta com o atributo: • velocidade : indica a velocidade atual;
– Acrescente à classe Bicicleta os métodos:
• aumentarVelocidade
• diminuirVelocidade
– Escolha os parâmetros e tipo de retorno adequados para cada método
Exercício - Construção de
Exercício - Construção de
Classes
• Exercício
– Crie uma classe AndarBicicleta que instancia um objeto da classe Bicicleta e acesso seus atributos e métodos,
imprimindo os resultados
– AndarBicicleta.java
– Faça os seguintes testes em AndarBicicleta.java
• Brincar com os modificadores de acesso, colocando para private e ver o que acontece
Exercício - Construção de
Exercícios
• Blz... Agora é hora de exercitar...
• Tente resolver os seguintes problemas...
– Em dupla
– Apresentar ao professor no final da aula
– Pontuação em Atividades em sala de aula...
Exercício - Construção de
Classes
• Crie uma classe chamada Televisao de acordo com a
representação abaixo.
– Os métodos simplesmente imprimem um texto (String) dizendo que eles fazem
• Logo depois crie uma classe programa que utilize os
atributos e métodos implementados
Exercício
• Crie uma classe chamada Produto de acordo com a
representação abaixo.
– Crie uma classe que crie um objeto da classe Produto, atribua valores aos atributos através dos métodos e imprime seus valores também utilizando os métodos.
Exercício
• Crie a classe Retangulo de acordo com o modelo
abaixo
• Depois crie uma classe programa para executar o
cálculo da área do retângulo
Exercício - Construção de
Classes
• Crie uma classe chamada Calculus....
– Que tenha os métodos somar, subtrair, multiplicar e dividir
– Esses métodos sempre recebem 2 parâmetros – E retornam a operação solicitada...
• Logo depois crie uma classe programa UsaCalculus
que utilize os métodos implementados
Exercício - Construção de
Classes
• Crie uma classe chamada Conta de acordo com a
representação abaixo.
– Implemente os métodos...
• Logo depois crie uma classe programa que utilize os
atributos e métodos implementados
Exercício
• Crie e implemente a classe Carro com as seguintes
propriedades:
– Um veículo tem um certo consumo de combustível (medido em litros/km)
– E uma certa quantidade de litros no tanque.
– O consumo é especificado na declaração do atributo e o nível de combustível inicial é 0.
– Forneça um método andar que simule o ato de dirigir o veículo por uma certa distância, reduzindo o nível de combustível no tanque de gasolina
– E o método obterGasolina, que devolva o nível atual de gasolina e
Exercício
• Crie e implemente uma classe PopulacaoBaratas que
simule o crescimento de uma população de baratas.
– O tamanho inicial da população de baratas é definido no atributo.
– O método dobraBaratas, simula em período no qual a população dobra.
– O método spray pulveriza as baratas com um inseticida e reduz a população em 10%.
– O método obterBaratas devolve o número atual de baratas.
– Implemente também uma classe que simule uma cozinha que começa com 10 baratas.
– Utilize a dobraBaratas, utilize o spray, e imprima a contagem de baratas.
Exercício
• Projete uma classe para encontrar o menor e o maior
valor de um conjunto de números inteiros aleatórios.
– Especifique os atributos
• O conjunto de inteiros deverá ter 10 elementos.
– Utilize os recursos da classe Integer para verificar o maior e menor valor inteiro possível.
– Integer.MAX_VALUE; e Integer.MIN_VALUE;
– Os elementos do conjunto de inteiro deverá ser gerado de forma randômica
– Math.random() * 10
• O que deve ser feito para adequar o retorno desse método ao tipo do conjunto?
Exercício
•
Exiba o valor do empréstimo possível para um
funcionário de uma empresa.
– Sabe-se:
• Modele essa características em uma classe, junto com seus métodos, e depois crie uma outra classe principal para usá-la • Pegue as informações via Scanner
Exercício
•
Crie uma classe Pessoa com atributo Nome e Idade
•
Solicite ao usuário essas informações de um grupo
de 5 pessoas.
– Pegue as informações via Scanner
•
Após o término da entrada, apresente:
– a média das idades,
– a maior idade,
– a menor idade,
– a quantidade de pessoas maior de idade.
Exercício
• Crie uma classe Calculadora e UsaCalculadora que defina e usa as operações descritas abaixo.
– Operação: soma (+ )
• Parâmetro de entrada: operando 1, double. • Parâmetro de entrada: operando 2, double. • Retorno: soma de operando 1 e 2, double.
– Operação: subtracao ( - )
• Parâmetro de entrada: operando 1, double. • parâmetro de entrada: operando 2, double.
• Retorno: subtração de operando 1 pelo 2, double.
– Operação: mult iplicacao ( * )
• Parâmetro de entrada: operando 1, double. • Parâmetro de entrada: operando 2, double.
• Retorno: multiplicação de operando 1 pelo 2, double.
– Operação: divisao ( / )
• Parâmetro de entrada: operando 1, double.
• Parâmetro de entrada: operando 2, double.
• Retorno: divisão de operando 1 pelo 2, double.
– Operação: potencia ( ^ ) (não pode usar Math.pow, utilize laços for ou while)
• Parâmetro de entrada: operando 1, double. • Parâmetro de entrada: operando 2, double.
• Retorno: potência de operando 1 elevado ao operando 2, double.
– Operação: fatorial ( ! )
• Parâmetro de entrada: operando 1, int . • Retorno: fatorial de operando 1.
Exercício
•
Verifique a validade de uma data de aniversário
– Solicite apenas o número do dia e do mês
•
Além de falar se a data está ok, informe também o
nome do mês.
– Dica: meses com 30 dias: abril, junho, setembro e novembro.
Exercício
• Acrescente no exercício anterior a apresentação do
signo do horóscopo da pessoa.
• Inclua no exercício anterior a solicitação do ano de
nascimento e também da data de hoje.
– A partir destas informações, apresente a idade atual desta pessoa.
Exercício - Construção de
Classes
• Crie uma classe chamada Lampada com o atributo:
• acesa : indica se a lampada está ou não acesa;• Acrescente à classe Lampada os métodos:
• ligar• desligar
• Escolha os parâmetros e tipo de retorno adequados
para cada método
• Crie uma classe
TesteLampadaque instancia um objeto
da classe
Lampadae acesso seus atributos e métodos,
imprimindo os resultados
• Lampada.java
Exercício
• Estrutura de um programa Java
– Qual o resultado do código abaixo:Exercício - Construção de
Classes
• Altere o código para que Bicicleta possa fazer parte
do pacote “veiculos”.
• O que deve ser feito na classe AndarBicicleta para
funcionar corretamente agora???
– AndarBicicletaPacote.java
Exercício - Controle de Acesso
– Declaração de Pacote (opcional) – Declarações de importação (opcional) – Declaração de classes • No máximo uma Classe Pública – Atributos – Métodos• Estrutura da classe
Exercício - Controle de Acesso
• Acessando as classes do pacote
– Se subtituir o modificador public para protected das
variáveis de classe de ClasseTelevisaoPacoteAparelhoVideo e compilar novamente tudo o que acontece?
Exercício - Controle de Acesso
• Erro de Ambigüidade
– O que acontece se temos classes com o mesmo nome em pacotes diferentes?
• O compilador identifica classes de mesmo nome importadas por pacotes diferentes e indica onde ocorreu a ambigüidade
aparelhos.relogio Ambigua.java ./ AplicacaoClasseAmbiguaPacote.java aparelhos.video Ambigua.java
Exercício - Controle de Acesso
• Acessando as classes do pacote - Ambigüidade
Neste caso poderíamos usar todo o caminho para diferenciar a classe que vai