Вы находитесь на странице: 1из 47

Paradigmas de Programao

Classes
Campos ou variveis de instncia
Construtores
Mtodos
Modificadores/mutantes
Seletores/acessores
Variveis
Campos
Parmetros
Variveis locais
this

Interao entre Objetos
Modularizao e abstrao
Criao de objetos por objetos
Diagrama de classes e de objetos
Invocao interna e externa de mtodos
Da aula anterior, j conseguem explicar

O que uma classe?
O que contm uma classe? Quais so os membros de uma classe?
O que so variveis de instncia ou campos?
O que so mtodos?
O que o cabealho de um mtodo?
O que a assinatura de um mtodo?
O que so os parmetros de um mtodo?

Projeto Ticket Machine


Verso muito bsica...

Diz o preo (nico...) int getPrice()
Aceita moedas toa void insertMoney(amount)
Diz o saldo int getBalance()
Emite bilhete void printTicket()


Olhemos para o cdigo fonte...
Campos
Construtores
Mtodos
No exemplo so 3

J sabemos o que representam!

Vejamos onde esto e como esto

So mtodos especiais!

Automaticamente invocados
aquando da criao do objeto

Tm a responsabilidade de
preparar os novos objetos,
inicializando os seus campos

Caractersticas
Nome igual ao da sua classe
Sem tipo de retorno
public
public TicketMachine(int ticketCost){
price = ticketCost;
balance = 0;
total = 0;
}
J falmos um pouco do que so

e das suas assinaturas e cabealhos



As assinaturas dos mtodos e dos construtores determinam
que tipos de dados requerem so os parmetros do mtodo

public TicketMachine(int ticketCost)
public void insertMoney(int amount)



Os parmetros tm um tempo de vida mais curto que os
campos!!
Existem enquanto o mtodo estiver a ser executado
criada uma cpia da varivel passada aquando da invocao do
mtodo!!!
passagem por valor!!!!!!!
balance
total
...
Execuo de um mtodo

o sistema cria na memria novas variveis que so cpias das que
recebe como parmetro e sobre essas que trabalha!!!!

Se o parmetro de tipo primitivo as alteraes feitas dentro do
mtodo ao seu valor no afetam o valor da varivel fora do
mtodo!!! (a cpia alterada e no a original)

Se o parmetro de tipo no primitivo, a cpia que passada a
da referncia do objeto (e no o objeto)
se alterar o valor dos campos desse objeto dentro do mtodo
isso vai-se notar c fora!!!

public class Test{

private int x;

public void sampleMethod2(int i, Test z){
i = 400;
z.x = 100;
}

public static void main(String[] args){
int i = 500;
Test t = new Test();
System.out.println("Teste antes i: " + i);
System.out.println("Teste antes t: " + t.x);
t.sampleMethod2(i, t);
System.out.println("Teste depois i: " + i);
System.out.println("Teste depois t: " + t.x);
}

}
Tambm so mtodos especiais

So os mais simples
retornam informao de estado do objeto!!!
/**
* Return the price of a ticket.
*/
public int getPrice(){
return price;
}

Porque so necessrios?
Tambm so mtodos especiais


Modificam o estado do objeto
public void insertMoney(int amount){
balance += amount;
}

Porque so necessrios?
Para imprimir a partir de mtodos

System.out.println(# The BlueJ Line);
System.out.println(# Ticket);
System.out.println(# + price + cents.);




Com o operador + podem concatenar-se Strings
+ um operador polimrfico!!
Projeto Better Ticket Machine

Dar troco; verificar quantias introduzidas antes de emitir
bilhete; ...

Instruo condicional
if (expressoBoleana){
Instrues para o caso true;
}
else {
Instrues para o caso false;
}

if (expressoBoleana) Instruo para o caso true;
else Instruo para o caso false;

O tipo boolean
Expresso
Um bloco... ...outro bloco
true
false
Alm dos campos (variveis de instncia) e dos parmetros...
...podemos usar variveis locais

O mtodo retorna o valor inserido at ao momento:
public int refundBalance()
{
int amountToRefund; // varivel local
amountToRefund = balance;
balance = 0;
return amountToRefund;
}

Variveis locais nunca se declaram fora de mtodos!!!
Resumindo
Campos (variveis de instncia)
Definidos fora dos construtores e mtodos da classe, utilizveis nestes
Se private, invisveis de fora da classe
Tempo de vida igual ao do seu objeto
Automaticamente inicializadas

Parmetros
vivem durante a execuo do mtodo
S so visveis dentro do mtodo

Variveis locais
Definidas dentro de mtodos
Existem e so manipulveis desde o momento em que so declaradas at que
termina o bloco em que so declaradas
Tm que ser inicializadas!!!!


public class Test{

private int x;

public void sampleMethod2(int i, Test z){
i = 400;
z.x = 100;
}

public static void main(String[] args){
int i = 500;
Test t = new Test();
System.out.println("Teste antes i: " + i);
System.out.println("Teste antes t: " + t.x);
t.sampleMethod2(i, t);
System.out.println("Teste depois i: " + i);
System.out.println("Teste depois t: " + t.x);
}

}
Passemos a outro exemplo
Como implementar?

Em vez de uma classe s...
Vamos lidar com a complexidade dividindo o problema em mdulos,
ou sub-problemas (Dividir para conquistar)
Depois pegamos na soluo de cada mdulo e abstramos dos seus
detalhes


De volta ao software:
escrever vrias classes pequenas em vez de uma gigante
programa a funcionar ter vrios objetos pequenos em vez de um
grande
12:05
Em vez de um mostrador com 4 dgitos...


...vamos adotar dois mostradores de 2 dgitos
O primeiro vai de 0 a 23 (o limite de horas)
O segundo de 0 a 59 (o limite dos minutos)


Vamos primeiro escrever a classe NumberDisplay (mostrador
de 2 dgitos)
...e depois basta criar dois objetos com limites diferentes
12
12:05
35
Projeto clock-display

Classe NumberDisplay
Duas variveis de instncia
private int limit;
private int value;
Um construtor
Um mtodo seletor (obter valor)
Dois mtodos modificadores (inicializa e incrementa valor)

Classe ClockDisplay
Duas variveis de instncia
private NumberDisplay hours;
private NumberDisplay minutes;
...
O relgio tem dois mostradores de 2 dgitos

Perspetiva esttica, diagrama de classes:



Perspetiva dinmica, diagrama de objetos:
hours
minutes
relogio1:
ClockDisplay
12
: NumberDisplay
20
: NumberDisplay
Como constri ClockDisplay os seus NumberDisplay ?

Invoca construtor de NumberDisplay!
hours = new NumberDisplay(24)
minutes = new NumberDisplay(60);

Parmetro formal especificado na assinatura do construtor e
o argumento dado ao invocar o construtor

Uma classe pode ter vrios construtores
ClockDisplay(), ClockDisplay(hour, minute)
Numa classe podemos ter construtores ou mtodos com o mesmo
nome mas assinaturas diferentes: overloading!!
Um mtodo pode ser invocado
dentro da classe > invocao interna!
Exemplo: no construtor de ClockDisplay: updateDisplay();


ou a partir de outra classe > invocao externa!
Exemplo: no mtodo timeTick(): minutes.increment();
Projeto mail-system um sistema de correio eletrnico







Classe MailItem no instanciada pelo utilizador, usada
pelas outras classes!!
O construtor de MailItem tem uma coisa interessante:

public class MailItem {

private String from;
private String to;
private String message;

public MailItem(String from, String to, String message){
this.from = from;
this.to = to;
this.message = message;
}
...
}

this desambigua nomes!!
Uma ferramenta til

Debugger
Definir breakpoints (pontos de paragem)
Quando a execuo chegar a este ponto, o
programa vai parar para bisbilhotarmos
Permite...
mandar parar a execuo num ponto
inspecionar campos e variveis locais
prosseguir a execuo passo a passo, saltando
invocaes de mtodo... ou acompanhando a entrada
num mtodo!
Pretende-se implementar o funcionamento de um bloco de notas
que guarde e mostre um nmero ilimitado de notas (strings)


Como posso guardar e manipular 5 notas no meu sistema?

String anotacao1 = new String(Primeira anotao);
String anotacao2 = new String(Segunda anotao);

String anotacao5 = new String(Quinta anotao);

E se fossem 1000 anotaes!?!?!
Como posso guardar e manipular um nmero X de anotaes
(objetos) no meu sistema?

Pelo uso de estruturas especiais, que podem ser de 2 tipos
Arrays
Collections

So a forma mais eficiente de guardar e manipular um grupo de
elementos
So criados na HEAP

mas todos os seus elementos so de um tipo especfico
e tm tamanho fixo
Ateno para no exceder o tamanho!!

Podem conter elementos de um tipo primitivo ou de tipo objeto

J agora
possvel passar um array como parmetro para um mtodo!
possvel retornar um array de um mtodo!
public String[] saboresEscolhidos(int n)

Declarao de um array
private int[] hourCounts;


Criao de um array
alunos = new int[24];




Inicializao de um array
alunos = {12134, 34145, 51643, 222398, }

Declarao, criao e inicializao (3 em 1)
private int[] alunos = {12134, 34145, 51643, 222398, }
:int[]
0 1 2 23 ...
Manipulao dos elementos de um array faz-se com um ndice
int al = alunos[3];
String p = nomes[al+10-y];
machines[2] = new TicketMachine(500);




possvel saber o tamanho de um array
no quantos elementos l esto em determinado momento

alunos.length

Com ciclo for !!!!!!!

Exemplo

double[] alturas = new double[MAXALT];
int[] idades = new int[50];

double somaAlturas = 0.0;
for (int i = 0; i < MAXALT; i++) {somaAlturas += alturas[i];}

for (double altura : alturas) { somaAlturas += altura; }

int soma = 0;
for (int idade : idades) soma += idade;

Analisemos a classe TestArrays
Classe Array existe no package java.lang
No tem que ser importada!!!!!!


Contm mtodos estticos para criar e aceder a arrays
Mtodos getXxx()
Mtodos setYyy()
Mtodo getLength(Object array)

Classe Arrays existe no package java.util
Tem que ser importada!!!!!!

Contm mtodos estticos que realizam funes teis para a
manipulao de arrays

Principais mtodos
equals(xxx[] a, xxx[] b) -> compara 2 arrays
fill( ) -> preenche um array com um valor
sort( ) -> ordena um array
binarySearch( ) -> procura um elemento num array ordenado

J agora para copiar um array
System.arraycopy( )
Para serem considerados iguais, os arrays devem

Ter o mesmo nmero de elementos

Cada elemento de um array deve ser igual ao elemento
correspondente do outro array

Esta igualdade determinada pelo uso do mtodo equals()

Analisemos o mtodo ComparacaoArrays() implementado
na classe TestArray
Veremos mais frente!!!

Alternativa aos arrays...


as collections!!!!


ArrayList

Bibliotecas de classes: packages

import java.util.ArrayList // Importa esta classe
...
private ArrayList<String> notes; // Ateno!!!!
...
notes = new ArrayList<String>();
...
notes.add(note);

Analisemos o cdigo
notes
meuBloco:
Notebook
:ArrayList
Preparar slides
:String
Atualizar site
:String
Exemplo de estrutura de objetos dentro de uma collection
notes
meuBloco:
Notebook
:ArrayList
Preparar slides
:String
Atualizar site
:String
Enviar email
:String
A posio de um objecto na collection o ndice (index)
notes
meuBloco:
Notebook
:ArrayList
Preparar slides
:String
Atualizar site
:String
Enviar email
:String
0 1 2
Ao remover um item, a collection renumerada.
Aps remover o item 1:
notes
meuBloco:
Notebook
:ArrayList
Preparar slides
:String
Enviar email
:String
0 1

// Operaes bsicas
int size()
boolean isEmpty()
boolean contains(Object element)
boolean add(E element) //opcional
boolean remove(Object element)
E get(int index)

// Operations sobre toda a collection
boolean containsAll(Collection<?> c)
boolean addAll(Collection<? extends E> c) //opcional
boolean removeAll(Collection<?> c) //opcional
void clear() //optional


... Ainda h mais
para a frente voltaremos a isto!
H trs formas possveis
Ciclos habituais
Com estrutura foreach (> JAVA5)
for (E elem : coleccao<E>) { ... };
foreach no permite parar as procuras!!!
ArrayList<String> texto = new ArrayList<String>();
for (String s : texto) {System.out.println(s);}
Usando Iteradores
Histrias do dia
Classes tm campos, construtores e mtodos, que definem estado e
comportamento
Os corpos dos construtores e mtodos contm instrues alterando o
estado e implementando comportamento
Para lidar com a complexidade dividem-se os problemas. Podemos
identificar sub-componentes do que queremos construir, e fazer classes
mais pequenas. Para descobrir erros vale tudo ler o cdigo, fazer
diagramas de objetos, usar um debugger
Conceitos:
Campo/varivel de instncia, construtor, mtodo, corpo de mtodo,
mtodo seletor/acessional, mtodo modificador/mutante, declarao,
inicializao, bloco, afetao, instruo condicional, expresso, operador,
varivel local, tempo de vida
abstrao, modularizao, diviso e conquista, diagrama de classes,
diagrama de objetos, overloading, invocao e externa de mtodos,
debugger, breakpoint

Вам также может понравиться