Você está na página 1de 37

Orientaes para o trabalho do 1

Bimestre
o Modelagem de um sistema com identificao
Das classes
Dos atributos presentes em cada classe
Dos mtodos de cada classe
Dos relacionamentos entre as classes, especialmente os casos de
herana simples
Dos mtodos polimrficos, quando for o caso
o Entrega do trabalho impresso com uma pequena introduo a
respeito do escopo do sistema e diagramas de classe
o Data de entrega: 06/04
o Apresentao breve do modelo representado na data de entrega do
trabalho
o Trabalho individual
Propostas de sistema
1. Gerenciamento de escola: cadastro de alunos, turmas, professores,
disciplinas, notas, emisso de histrico escolar
2. Gerenciamento de biblioteca: cadastro de livros, emprstimos a
usurios, reserva de livros
3. Banco: cadastro de Contas e Clientes, operao de depsito, saque
e transferncia de uma Conta
4. Reserva de recursos: cadastro de funcionrios, cadastro e reserva
de equipamentos
5. Help desk: cadastro de reas, clientes, operaes de abertura e
atendimento de chamado
6. Gesto de frotas/ Locadora de carro: cadastro de veculos,
operaes de manuteno do carro, locao do veculo
7. Sistema de licitao online: cadastro de fornecedores, operaes
de compra de materiais de acordo com proposta mais vantajosa
LINGUAGEM
DE PROGRAMAO
ORIENTADA A OBJETOS
LINGUAGEM JAVA
Tipos de variveis, Pilha de Lixo
Coletvel, Casting, Mtodos com
Retorno, Arrays, Variveis de
Instncia, Variveis Locais

Prof Luciana Fortes


Tipos de variveis
o Variveis primitivas
representam os tipos mais simples de dados (numrico, booleano
e caracter)
podem ser do tipo: byte, short, int, long, float, double, char ou
boolean
quando declaramos uma varivel primitiva, estamos associando
esta a um espao na memria que vai guardar o seu valor
ficam em um local chamado stack
o Variveis de referncia
usada para referenciar um objeto
apontam para algum lugar vazio (null) ou para algum espao da
memria que guarda os dados de um objeto
ficam em um local chamado heap
Pilha de Lixo Coletvel
o Ao se criar um objeto java, ele ocupa uma rea de
memria
Heap
Pilha de Lixo Coletvel
o Espao alocado de acordo com o que o objeto
precisar
o Espao necessrio determinado pela quantidade de
variveis de instncia do objeto
o A JVM gerencia o espao descartando variveis que
possivelmente no sero mais utilizadas
Tipos primitivos
Declaraes primitivas
Exerccios Tipos Primitivos
o Exerccios de identificao de tipos, nomes de atributos,
classes, mtodos
o Crie uma nova classe para nosso projeto de
gerenciamento de Contas Bancrias, com as seguintes
caractersticas:
Exerccios
Casting Introduo
o Alguns valores so incompatveis se voc tentar fazer
uma atribuio direta
double d = 3.1415;
int i = d; // no compila
int i = 3.14; // no compila
double d = 5;
int i = d; // no compila mesmo o double podendo
conter um nmero inteiro
o J no caso a seguir, o contrrio:
int i = 5;
double d2 = i;
O cdigo acima compila sem problemas, j que um double pode
guardar um nmero com ou sem ponto flutuante. Todos os
inteiros representados por uma varivel do tipo int podem ser
guardados em uma varivel double
Casting
o s vezes, precisamos que um nmero quebrado seja arredondado e
armazenado em um nmero inteiro, por exemplo.
o Para fazer isso sem que haja erro de compilao, preciso ordenar que o
nmero quebrado seja moldado (casted) como um nmero inteiro.
o Esse processo recebe o nome de casting.
double num = 3.14;
int i = (int) num; //i agora 3
o O mesmo ocorre entre valores int e long.
long x = 10000;
int i = x; // no compila, pois pode estar perdendo informao
o Se quisermos realmente fazer isso, fazemos o casting:
long x = 10000;
int i = (int) x;
o O nico tipo primitivo que no pode ser atribudo a nenhum outro tipo o
boolean.
Castings possveis
o Castings implcitos ou automticos - no precisa indicar o cast
explicitamente
o Cast de um tipo maior para um menor: derramamento
o Cast de um tipo menor para um maior: alargamento
o O tipo boolean no pode ser convertido para nenhum outro tipo
O que vlido?
double

X um inteiro; valores
possveis so true e false

Cast implcito

Alargamento implcito. 12
poderia ser um byte, que
menor.

Precisa de cast (short no


cabe em byte)

Derramamento. Byte s
suporta at 127
Variveis de referncia
o No h varivel para Objeto
o Existe uma varivel de referncia de objeto
o Representam a maneira de acessar o objeto
o Os objetos residem em um local
Heap
Pilha de lixo coletvel
o Quando declaramos uma varivel para associar a um objeto, na
verdade essa varivel no guarda o objeto, e sim uma maneira de
acess-lo, chamada de referncia.
o Considerando-se, por exemplo, uma classe chamada Pessoa:
No correto dizer que se criou um objeto Funcionario do tipo Pessoa
O correto afirmar que criou-se uma referncia Funcionario a um objeto do
tipo Pessoa.
Voltando s classes Como os
objetos se comportam

o De maneira bem geral:


O estado afeta o comportamento
O que um estado?
Variveis de instncia
O que um comportamento?
Um mtodo
Os mtodos USAM os valores das variveis de instncia
Um mtodo USA parmetros
Uma classe que chama esse mtodo PASSA argumentos
Voltando s classes Como os objetos se
comportam (cont.)

o Vimos a anatomia de uma classe


o Criamos alguns mtodos sem retorno (void)
o Entendemos a comunicao bsica entre classes
o Vamos criar alguns mtodos com retorno e testar a
comunicao entre diversas classes e seus mtodos
o Mtodos que retornam alguma informao precisam
declarar argumentos (ou parmetros)
Variveis desses argumentos so chamadas de temporrias ou
locais, pois, ao final da execuo desse mtodo, ela deixa de
existir.
O escopo dessas variveis o mtodo ao qual ela pertence
Praticando Continuao Exerccios
o Vamos criar uma classe Conta
public class Conta {
int numero;
String titular;
double saldo;
double limite;
}
o Vamos criar um mtodo sacar sem retorno com um
parmetro
void sacar(double valor){
double novoSaldo = saldo valor;
saldo = novoSaldo;
}
Praticando (cont.)
o Vamos criar uma classe para instanciar o objeto Conta
public class InicioAplicativo {
public static void main(String[] args){
Conta minhaConta = new Conta();

minhaConta.titular = "Luciana";
minhaConta.numero = 1234;
minhaConta.saldo = 1505.9;
minhaConta.limite = 1000;

System.out.println("Saldo atual: " +


minhaConta.saldo);

}
}
Praticando (cont.)
o Vamos acrescentar classe Conta o mtodo depositar com um
parmetro para acrescentar valores ao saldo
void depositar(double valor){
saldo += valor;
}
o Agora vamos invocar os mtodos criados em Conta e mostrar o
saldo aps a alterao do saldo
o Nesse caso, onde o mtodo possui um parmetro (valor),
OBRIGATRIO que seja informado o argumento para esse
parmetro
minhaConta.sacar(200);
System.out.println(Saldo atual: " + minhaConta.saldo);
double valorDeposito = 2000;
minhaConta.depositar(valorDeposito);
System.out.println("Aps depositar " + valorDeposito + " o saldo
atual : " + minhaConta.saldo);
Mtodos com retorno
o Um mtodo sempre tem que definir o que retorna
o Se ele no retorna nada, tem que tornar isso explcito
utilizando a expresso void
o Um mtodo pode retornar um valor para o cdigo que o
chamou
o Vamos definir que nosso mtodo sacar ir devolver um
valor booleano indicando se a operao foi bem
sucedida
o Nesse caso antes do nome do mtodo, indica-se o tipo
do retorno
Praticando
o Altere a classe Conta:
boolean sacar(double valor){
if (saldo > valor){
double novoSaldo = saldo valor;
saldo = novoSaldo;
return true;
}else{
return false;
}
}
o Uso na classe Banco:
boolean saqueOk = minhaConta.sacar(200);
if (saqueOk){
System.out.println("Saque realizado com sucesso!");
}else{
System.out.println(Sem saldo disponvel para saque!");
}
Praticando (cont.)
o Crie um mtodo na classe Conta para transferir recursos
entre contas
Para us-lo voc precisar criar um outro objeto em sua classe
testadora
o O mtodo receber um parmetro do tipo Conta, a
Conta destino, e o valor a ser transferido
o Essa transferncia debitar o valor da conta1 e creditar
na conta2
o Verifique se a conta possui a quantidade a ser
transferida disponvel
o Voc pode chamar os mtodos deposita e saca j
existentes para fazer essa tarefa
Resumindo o assunto...
o As classes definem o que um objeto conhece e o que ele faz
o As coisas que um objeto conhece so
Suas variveis de instncia
o As coisas que um objeto faz so
Seus mtodos (comportamentos)
o Os mtodos podem usar variveis de instncia para que
objetos do mesmo tipo possam se comportar diferentemente
o Um mtodo pode ter parmetros, o que significa que voc
pode passar um ou mais valores para ele.
o A quantidade e o tipo dos valores passados devem
corresponder exatamente ordem e tipo dos parmetros
declarados pelo mtodo
Resumindo o assunto (cont)...
o Os valores passados para dentro e fora dos mtodos podem
ser elevados implicitamente a um tipo maior ou convertidos
explicitamente para um tipo menor
A definio explcita chamada de Casting
o O valor que voc passar como argumento para um mtodo
pode ser literal ou uma varivel com tipo compatvel ao
parmetro declarado
o Um mtodo deve declarar um tipo de retorno
Um tipo de retorno void significa que o mtodo no retorna nada
o Se um mtodo declarar um tipo de retorno diferente de void,
ele obrigado a retornar um valor compatvel com o tipo
declarado.
Praticando mtodos com argumentos
o Desenvolva uma classe Java chamada Apolice com os
seguintes atributos: nomeSegurado, idade e
valorPremio.
o Crie os seguintes mtodos:
imprimir() no retorna valor; mostra na tela todos os
atributos da classe Apolice
calcularPremioApolice() - no retorna valor e dever calcular
o valor do prmio seguindo as seguintes regras:
caso a idade seja maior ou igual a 18 ou menor ou igual a 25 anos, use
a frmula: valorPremio+=(valorPremio * 20)/100.
Quando a idade for superior a 25 ou menor ou igual a 36 anos, use a
frmula valorPremio += (valorPremio * 15)/100.
Quando a idade for superior a 36 anos, use a frmula valorPremio
+=(valorPremio*10)/100.
Praticando mtodos com argumentos
oferecerDesconto() - Este mtodo no retorna valor, mas
possui o parmetro cidade, que ir conter o nome da cidade para
o clculo do desconto.
Caso Curitiba = 20%, Rio de Janeiro = 15%, So Paulo = 10% e Belo
Horizonte = 5%
Para fazer a comparao de strings pedida neste exerccio utilize
o mtodo equals()
if (nomeCidade.equals(Curitiba)) {
Seja criterioso(a) na criao das classes e dos mtodos utilizando
nomes significativos e vlidos
Variveis de Instncia e Variveis
Locais
o Variveis de instncia so declaradas DENTRO DE UMA
CLASSE, mas no dentro de um mtodo
public class Apolice {
String nomeSegurado;
int idade;
double valorPremio;
o Variveis locais so declaradas DENTRO DE UM MTODO
boolean transferirPara(Conta destino, double valor){
boolean retiradaOk = sacar(valor);
if (retiradaOk){
destino.depositar(valor);
...
}
Variveis de Instncia e Variveis
Locais
o Variveis de Instncia sempre recebem um valor
padro:
Nmeros so inicializados com 0, booleanos com false e
referncias com null
o Variveis Locais precisam SEMPRE SER INICIALIZADAS
int x = 0;
o Os parmetros do mtodo so equivalentes a variveis
locais (embora no sejam declarados no corpo do
mtodo), j que o compilador obriga ao programador
informar os argumentos quando utilizar os mtodos
Matrizes Arrays
o Matrizes concedem acesso aleatrio rpido, permitindo o uso da
posio de um ndice para acessar qualquer objeto existente nelas
o Todo elemento da matriz apenas uma varivel
o Todo array (matriz) um objeto
Ou seja variveis array so na verdade apenas referncias;
comum ouvirmos array de objetos. Porm quando criamos
uma array de alguma classe, ela possui referencias. O objeto,
como sempre, est na memria principal e, na sua matriz, s
ficam guardadas as referencias (enderecos).
o Ex.:
idades = new int[10];
array de inteiros de 10 posies
idades[7] = 30;
Atribui o valor 30 a oitava posio (oitavo ndice) da array
Matrizes Arrays
o Ex.:
Conta[] minhasContas;
minhasContas = new Conta[10];
o No exemplo acima, quantos objetos foram criados?
Por enquanto nenhum
Foram reservados 10 espaos para 10 contas
Ainda precisam ser instanciados os objetos para cada ndice do
array
A matriz precisa ser populada
minhasContas[1] = new Conta();
minhasContas[1].saldo = 3200.0;
o Uma matriz de tipos primitivos guarda valores, um array
de objetos guarda referncias.
Matrizes Arrays
public static void main(String args[]) {
int[] idades = new int[10];
for (int i = 0; i < 10; i++) {
idades[i] = i * 10;
}
for (int i = 0; i < 10; i++) {
System.out.println(idades[i]);
}
}
o Para saber o tamanho da matriz utiliza-se o atributo length ou o
recurso enhanced-for, til por exemplo quando no est explcito
esse dado e voc precisar usar a matriz em uma iterao
for (int i = 0; i < array.length; i++) {
for (int x : array) {
Matrizes (cont.)
o Para criar uma matriz:
int[] idades = new int[10];
Na memria, o espaco ocupado por essa matriz est dividido em 10
partes iguais numeradas de 0 at 9. Cada parte pode armazenar um
valor do tipo int.
Cada parte ser inicializada com um 0 (zero)
int[] numeros = new int[100];
int[] numeros2 = {123,90,787,989};
Cria uma matriz numeros2 com 4 partes (0 a 3) e inicializa com os
valores 123, 90, 787, 989
o Quando uma matriz criada com o comando new, todas
as posies so inicializadas com valores padro
Nmeros so inicializados com 0, booleanos com false e
referencias com null
Matrizes (cont.)
o Modificar o contedo de um array
Devemos escolher uma ou mais posies que devem ser
alteradas
Ex.: Para int[] numeros = new int[100];
numeros[3] = 231;
numeros[88] = 2873;

o Acessar o contedo de um array


Devemos escolher uma ou mais posies que devem ser
acessadas
Ex.: Para int[] numeros = new int[100];
System.out.println(numeros[3]);
System.out.println(numeros[88]);
Operaes com Matrizes
o Ordenar
Mtodo sort da classe Arrays
int[] numeros2 = {123,90,787,989};
Arrays.sort(numeros2);

for (int x : numeros2){


System.out.println(x);
}
String[] nomes = new String[]{"Marcos", "Adriana", "Vtor", "Alex"};
Arrays.sort(nomes);
Escreva a rotina para imprimir a matriz nomes:
for (String s : nomes) {
System.out.println(s);
}
Operaes com Matrizes (cont.)
o Duplicar um Array
Para copiar o contedo de uma matriz para outro com maior
capacidade, podemos utilizar o mtodo Arrays.copyOf()
String[] nomes2 = new String[] {"Gabriel", "Joo", "Antonio"};
String[] nomes2Copia = Arrays.copyOf(nomes2, 3);
O mtodo copyOf recebe como argumentos o nome do Array e a
quantidade de elementos do array que devero ser copiados
o Preencher um Array
Para preencher uma matriz
int[] numPreencher = new int[10];
Arrays.fill(numPreencher, 5);
O mtodo fill recebe como argumentos o nome do Array e o valor com
o qual os elementos devero ser preenchidos
Exerccios
o 1) Crie um programa que imprima na tela os valores de
uma matriz que liste os nomes de 5 pessoas, aps
passar por ordenao.
o 2) Faca um programa que invoque um mtodo que
calcule e exiba a mdia dos elementos de um array
(considere, por exemplo, as notas de um aluno).