370 likes | 485 Views
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;
E N D
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; minhaConta = new ContaCorrente ( ); Criação do objeto ContaCorrente minhaConta = new ContaCorrente ( ); 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); Primeiro espaço 10 Área de memória liberada pelo Garbage Collection str 10 100 Outro espaço 100 Não obriga a limpar, mas “pede”para que o Garbage Collection limpe se possível System.gc(); 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. 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. Programação II – Prof. Mateus Raeder
Respostas public 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; } } 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; } } 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; } } 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()); } } 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) 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ó. 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. Programação II – Prof. Mateus Raeder
Lista Encadeada Básica data next firstNode Apontador para o primeiro nó da lista Node ... null final de lista 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 firstNode lastNode Apontador para o primeiro nó da lista Apontador para o último nó da lista ... null final de lista Programação II – Prof. Mateus Raeder
Classe Node public 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; } } data nextNode Node 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 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 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; } 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(); } 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(); } } 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; } 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; } 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"); } } Programação II – Prof. Mateus Raeder
Testando a lista public 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()); } } } Programação II – Prof. Mateus Raeder
Pilha(Stack) 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 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(); } } Programação II – Prof. Mateus Raeder
Pilha public 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(); } 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"); } } } Programação II – Prof. Mateus Raeder
Testando a Pilha public 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()); } } } Programação II – Prof. Mateus Raeder
Filas(Queue) 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 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(); } 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"); } } 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(); } } 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; } } Programação II – Prof. Mateus Raeder
Testa Fila public 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(); } } } Programação II – Prof. Mateus Raeder