37
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

Programação II

  • Upload
    maddox

  • View
    26

  • Download
    0

Embed Size (px)

DESCRIPTION

Programação II. Prof. Mateus Raeder. Universidade do Vale do Rio dos Sinos - São Leopoldo -. Criando um objeto. Objeto é uma instância de uma classe; Usamos o operador new para criar um objeto. Variável que conterá uma referência a um objeto. ContaCorrente minhaConta; - PowerPoint PPT Presentation

Citation preview

Page 1: Programação II

Programação II

Prof. Mateus Raeder

Universidade do Vale do Rio dos Sinos- São Leopoldo -

Page 2: Programação II

Programação II – Prof. Mateus Raeder

Criando um objeto

• Objeto é uma instância de uma classe;• Usamos o operador new para criar um objeto.

ContaCorrente minhaConta;minhaConta = new ContaCorrente ( );

ContaCorrente minhaConta;minhaConta = new ContaCorrente ( );

Variável que conterá umareferência a um objeto

Criação do objeto

ContaCorrente minhaConta = new ContaCorrente ( );

Page 3: Programação II

Programação II – Prof. Mateus Raeder

Garbage Collection

String str = “Primeiro espaço”;System.out.println (“Usando memória original: “+str);str = “Outro espaço”;System.out.println (“Usando outro espaço de memória: “+str);

10 100str

Primeiro espaço

Outro espaço

10

100

Área de memória liberada pelo Garbage

Collection

System.gc(); Não obriga a limpar, mas “pede”para que o Garbage Collection limpe se possível

Page 4: Programação II

Programação II – Prof. Mateus Raeder

Exercícios

• Crie uma classe Endereco, que possui uma rua, um número e uma cidade. No construtor, receba todos os atributos por parâmetro. Crie métodos para retornar estes parâmetros (getters).

• Crie uma classe Imovel, que possui um valor e um Endereco. No construtor, passe por parâmetro o valor, e diga que o imóvel é na Largo Patrono Fernando Kroeff, número 2, em Porto Alegre. Crie os métodos getEndereco e getValor.

Page 5: Programação II

Programação II – Prof. Mateus Raeder

Exercícios

• Crie uma classe Pessoa, que possui um nome (passado por parâmetro no construtor) e um imóvel de R$650.000,00. Crie um método getNome e um método getImóvel.

• Crie uma classe Teste. No método main, crie uma pessoa chamada Anacreonte. Em seguida, imprima o endereço (por extenso) e o valor do imóvel que esta pessoa possui.

Page 6: Programação II

Programação II – Prof. Mateus Raeder

Respostaspublic class Endereco{ private String rua; private int numero; private String cidade; public Endereco(String rua, int numero, String cidade){ this.rua = rua; this.numero = numero; this.cidade = cidade; } public String getRua(){ return rua; } public int getNumero(){ return numero; } public String getCidade(){ return cidade; }}

Page 7: Programação II

Programação II – Prof. Mateus Raeder

Respostas

public class Imovel{ private double valor; private Endereco endereco; public Imovel(double valor){ this.valor = valor; endereco = new Endereco("Largo Patrono Fernando Kroeff", 2, "Porto Alegre"); } public double getValor(){ return valor; } public Endereco getEndereco(){ return endereco; }}

Page 8: Programação II

Programação II – Prof. Mateus Raeder

Respostas

public class Pessoa{ private String nome; private Imovel imovel; public Pessoa(String nome){ this.nome = nome; imovel = new Imovel(650.000); } public String getNome(){ return nome; } public Imovel getImovel(){ return imovel; }}

Page 9: Programação II

Programação II – Prof. Mateus Raeder

Respostas

public class Teste{ public static void main(String args[]){ Pessoa p = new Pessoa("Anacreonte"); System.out.println("Dados de "+p.getNome()+": \n");

System.out.println("Valor do imóvel: "+p.getImovel().getValor()+"\n"); System.out.println("ENDEREÇO:"); System.out.println("Rua: "+p.getImovel().getEndereco().getRua()); System.out.println("Número: "+p.getImovel().getEndereco().getNumero()); System.out.println("Cidade: "+p.getImovel().getEndereco().getCidade()); }}

Page 10: Programação II

Programação II – Prof. Mateus Raeder

Listas: Tipo de Armazenamento

• O tipo de armazenamento de uma lista linear pode ser classificado de acordo com a posição relativa (sempre contígua ou não) na memória de dois nós consecutivos na lista.

• Lista linear com alocação seqüencial de memória– Nós em posições contíguas de memória– Geralmente representado por arrays– Útil para implementar filas e pilhas (variáveis para

controlar fim e início)

Page 11: Programação II

Programação II – Prof. Mateus Raeder

Listas: Tipo de Armazenamento

• Lista linear com alocação encadeada– Posições de memória são alocadas a medida que são

necessárias– Nós encontram-se aleatoriamente dispostos na memória e são

interligados por ponteiros, que indicam a próxima posição da tabela

• Nós precisam de um campo a mais: campo que indica o endereço do próximo nó.

Page 12: Programação II

Programação II – Prof. Mateus Raeder

Listas Simplesmente Encadeadas

• Uma lista simplesmente encadeada é uma seqüência de objetos alocados dinamicamente, onde cada objeto faz referência ao seu sucessor na lista

• Lista encadeada básica:– possui variável firstNode que referencia para o primeiro

elemento da lista– cada Objeto refere a seu sucessor– ultimo elemento contém a referência null (para indicar

que não referencia nenhum outro).

Ineficiente: se queremos inserir um elemento no final da lista, temos que localizar o último elemento: para tanto é necessário

percorrer todos os elementos da lista.

Page 13: Programação II

Programação II – Prof. Mateus Raeder

Lista Encadeada Básica

Node

data next

......

null final de lista

Apontador para o primeiro nó da lista

firstNode

Page 14: Programação II

Programação II – Prof. Mateus Raeder

Lista encadeada com referência ao último elemento da lista

• Como tornar mais eficiente:– utilizar uma segunda variável, chamada lastNode, que

referencia o último elemento da lista.– eficiência obtida a custa do espaço adicional

Apontador para o primeiro nó da lista

......

firstNodeApontador para o último nó da lista

lastNode

null final de lista

Page 15: Programação II

Programação II – Prof. Mateus Raeder

Classe Nodepublic class Node { private String data; private Node nextNode;

public Node( String element ) { this( element, null ); } public Node( String element, Node node ) { data = element; nextNode = node; } public String getData() { return data; } public void setData(String element){ data = element; } public Node getNext() { return nextNode; } public void setNext(Node node) { nextNode = node; }}

Node

data nextNode

Page 16: Programação II

Programação II – Prof. Mateus Raeder

Operações sobre lista

– public boolean isEmpty() • verifica se a lista está vazia

– public void insertAtFront( String element )

• insere o elemento na frente da lista

– public void insertAtBack( String element )

• insere o elemento no final da lista

– public String removeFromFront() • remove e retorna o primeiro elemento da lista

Page 17: Programação II

Programação II – Prof. Mateus Raeder

Operações sobre lista

– public String removeFromBack() • remove e retorna o último elemento da lista

– public String getFirst()• retorna o primeiro elemento da lista, sem removê-lo

– public String getLast()• remove e retorna o último elemento da lista, sem removê-

lo

– public void print()• exibe o conteúdo da lista

Page 18: Programação II

Programação II – Prof. Mateus Raeder

Class List (1/5)public class List {

private Node firstNode;private Node lastNode;private String name;

public List() {this("list");

}

public List(String listName) {name = listName;firstNode = lastNode = null;

}

public boolean isEmpty() {return firstNode == null;

}

Page 19: Programação II

Programação II – Prof. Mateus Raeder

Class List (2/5)

public String getFirst() throws UnderflowException {if (isEmpty()) throw new UnderflowException();return firstNode.getData();

}public String getLast() throws UnderflowException {

if (isEmpty()) throw new UnderflowException();return lastNode.getData();

}

Page 20: Programação II

Programação II – Prof. Mateus Raeder

Class List (3/5)public void insertAtFront (String insertItem) {

if (isEmpty()) {firstNode = lastNode = new Node(insertItem);

} else {

firstNode = new Node(insertItem, firstNode);}

}

public void insertAtBack (String insertItem) {if (isEmpty()) {

firstNode = lastNode = new Node(insertItem);}

else {lastNode.setNext(new Node(insertItem));lastNode = lastNode.getNext();

}}

Page 21: Programação II

Programação II – Prof. Mateus Raeder

Class List (4/5)

public String removeFromFront() throws UnderflowException {

if (isEmpty()) {throw new UnderflowException();

}String removedItem = firstNode.getData();if (firstNode == lastNode) {

firstNode = lastNode = null;}

else {firstNode = firstNode.getNext();

}return removedItem;

}

Page 22: Programação II

Programação II – Prof. Mateus Raeder

Class List (4/5)public String removeFromBack() throws UnderflowException {

if (isEmpty()) {throw new UnderflowException();

}String removedItem = lastNode.getData();if (firstNode == lastNode) {

firstNode = lastNode = null;}

else {Node current = firstNode;while (current.getNext() != lastNode) {

current = current.getNext();}lastNode = current;current.setNext(null);

}return removedItem;

}

Page 23: Programação II

Programação II – Prof. Mateus Raeder

Class List (5/5)

public void print() {if (isEmpty()) {

System.out.println("Empty " + name);} else {

System.out.print("The " + name + " is: ");Node current = firstNode;while (current != null) {

System.out.print(current.getData().toString() + " ");

current = current.getNext();}System.out.println("\n");

}}

Page 24: Programação II

Programação II – Prof. Mateus Raeder

Testando a listapublic class ListTest {

public static void main(String args[]) {List list = new List(); list.insertAtFront("a");list.insertAtFront("b");list.insertAtBack("c");list.insertAtBack("d");list.print();

String removedEl;try {

removedEl = list.removeFromFront();System.out.println(removedEl.toString() + " removed");

removedEl = list.removeFromFront();System.out.println(removedEl.toString() + " removed");

removedEl = list.removeFromBack();System.out.println(removedEl.toString() + " removed");

removedEl = list.removeFromBack();System.out.println(removedEl.toString() + " removed");

} catch (UnderflowException e) {System.out.println(e.toString());

}}

}

Page 25: Programação II

Programação II – Prof. Mateus Raeder

Pilha(Stack)

Page 26: Programação II

Programação II – Prof. Mateus Raeder

Pilhas (Stack)

• Operações sobre Pilhas:– public boolean isEmpty()

• verifica se a pilha está vazia

– public void push( String element ) • insere o nó no topo da pilha

– public String pop() • retorna e remove o nó do topo da pilha

– public String getTop ()• retorna o nó do topo da pilha, sem removê-lo

– public void print()• exibe todos os nós da pilha

Page 27: Programação II

Programação II – Prof. Mateus Raeder

Pilha

public class Stack {private Node top;

public Stack() { }

public boolean isEmpty() {return (top == null);

}public String getTop() throws UnderflowException {

if (isEmpty()) {throw new UnderflowException();

} else {

return top.getData();}

}

Page 28: Programação II

Programação II – Prof. Mateus Raeder

Pilhapublic void push (String insertItem) {

Node n = new Node(insertItem);n.setNext(top);top = n;

}

public String pop() throws UnderflowException {if (isEmpty()) {

throw new UnderflowException();}Node ret = top;top = top.getNext();return ret.getData();

}

Page 29: Programação II

Programação II – Prof. Mateus Raeder

Pilha

public void print() {if (isEmpty()) {

System.out.println("Stack Empty ");}

else {Node current = top;while (current != null) { System.out.println

(current.getData().toString()); current = current.getNext();}System.out.println("\n");

}}

}

Page 30: Programação II

Programação II – Prof. Mateus Raeder

Testando a Pilhapublic class StackTest {

public static void main(String args[]) {Stack stack = new Stack();stack.push("a");stack.push("b");stack.push("c");stack.push("d");stack.print();try {

String removedEl = null;

while (!stack.isEmpty()) {removedEl = stack.pop();System.out.println(removedEl.toString() + "

popped"); }

} catch (UnderflowException e) {System.out.println(e.toString());

}}

}

Page 31: Programação II

Programação II – Prof. Mateus Raeder

Filas(Queue)

Page 32: Programação II

Programação II – Prof. Mateus Raeder

Operações sobre Filas (Queue)

– public boolean isEmpty() • verifica se a fila está vazia

– public void enqueue( String element ) • insere o elemento no final da fila

– public String dequeue() • remove e retorna o primeiro elemento da fila

– public String getFirst()• retorna o primeiro elemento da fila, sem removê-lo

– public void print()• exibe o conteúdo da fila

Page 33: Programação II

Programação II – Prof. Mateus Raeder

Fila public class Queue {

private Node firstNode;private Node lastNode;

public boolean isEmpty() {return firstNode == null;

}

public String getFirst() throws UnderflowException {

if (isEmpty()) throw new UnderflowException();

return firstNode.getData();}

Page 34: Programação II

Programação II – Prof. Mateus Raeder

Fila

public void print() {if (isEmpty()) {

System.out.println("Empty Queue");}

else { Node current = firstNode; while (current != null) { System.out.print(current.getData().toString() +

", "); current = current.getNext(); } System.out.println("\n");}

}

Page 35: Programação II

Programação II – Prof. Mateus Raeder

Fila

public void enqueue (String insertItem) {if (isEmpty()) {

firstNode = lastNode = new Node(insertItem);}

else {lastNode.setNext(new Node(insertItem));lastNode = lastNode.getNext();

}}

Page 36: Programação II

Programação II – Prof. Mateus Raeder

Fila

public String dequeue() throws UnderflowException {

if (isEmpty()) {throw new UnderflowException();

}String removedItem = firstNode.getData();if (firstNode == lastNode)

firstNode = lastNode = null;else

firstNode = firstNode.getNext();return removedItem;

}}

Page 37: Programação II

Programação II – Prof. Mateus Raeder

Testa Filapublic class QueueTest { public static void main( String args[] ) { Queue queue = new Queue();

queue.enqueue( "1" ); queue.enqueue( "2" ); queue.enqueue( "3" ); queue.enqueue( "4" ); queue.print(); try { Object removedEl = null; while (!queue.isEmpty()) { removedEl = queue.dequeue(); System.out.println( removedEl.toString() + " dequeued" ); } } catch ( UnderflowException e ) { e.printStackTrace(); } }}