A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -"— Transcrição da apresentação:

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

2 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 ( ); Variável que conterá uma referência a um objeto Criação do objeto ContaCorrente minhaConta = new ContaCorrente ( );

3 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 100 str 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

4 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.

5 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.

6 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; }

7 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; }

8 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; }

9 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()); }

10 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)

11 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ó.

12 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.

13 Programação II – Prof. Mateus Raeder Lista Encadeada Básica Node datanext... null final de lista Apontador para o primeiro nó da lista firstNode

14 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... firstNode Apontador para o último nó da lista lastNode null final de lista

15 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; } } Node datanextNode

16 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

17 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

18 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; }

19 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(); }

20 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(); } }

21 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; }

22 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; }

23 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"); } }

24 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()); }

25 Programação II – Prof. Mateus Raeder Pilha (Stack)

26 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

27 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(); } }

28 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(); }

29 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"); } } }

30 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()); }

31 Programação II – Prof. Mateus Raeder Filas (Queue)

32 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

33 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(); }

34 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"); } }

35 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(); } }

36 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; }

37 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(); }


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

Apresentações semelhantes


Anúncios Google