SlideShare uma empresa Scribd logo
1 de 141
Baixar para ler offline
Aula 18 – Ordena¸c˜ao e Heran¸ca
Norton Trevisan Roman
11 de maio de 2020
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 1 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Algoritmo
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 2 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Algoritmo
Percorremos o arranjo e, a cada novo elemento:
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 2 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Algoritmo
Percorremos o arranjo e, a cada novo elemento:
Procuramos onde, `a esquerda desse elemento, ele se encaixa
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 2 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Algoritmo
Percorremos o arranjo e, a cada novo elemento:
Procuramos onde, `a esquerda desse elemento, ele se encaixa
Abrimos espa¸co para o elemento l´a, deslocando para a
direita todos os elementos que est˜ao entre essa posi¸c˜ao e a
original do elemento
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 2 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Algoritmo
Percorremos o arranjo e, a cada novo elemento:
Procuramos onde, `a esquerda desse elemento, ele se encaixa
Abrimos espa¸co para o elemento l´a, deslocando para a
direita todos os elementos que est˜ao entre essa posi¸c˜ao e a
original do elemento
Inserimos o elemento nesse espa¸co assim aberto
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 2 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ou seja, aumentamos a parte ordenada do arranjo
em uma posi¸c˜ao, inserindo um novo elemento na
posi¸c˜ao correta e deslocando os demais para a
direita
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 3 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ou seja, aumentamos a parte ordenada do arranjo
em uma posi¸c˜ao, inserindo um novo elemento na
posi¸c˜ao correta e deslocando os demais para a
direita
Semelhante ao modo como ordenamos cartas de
baralho
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 3 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ou seja, aumentamos a parte ordenada do arranjo
em uma posi¸c˜ao, inserindo um novo elemento na
posi¸c˜ao correta e deslocando os demais para a
direita
Semelhante ao modo como ordenamos cartas de
baralho
Percorremos da esquerda para a direita e, `a medida que
avan¸camos vamos deixando as cartas mais `a esquerda
ordenadas
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 3 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
9 8 4 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
9 8 4 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o primeiro elemento a ser inserido (8):
9 8 4 10 6
9 8 4 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o primeiro elemento a ser inserido (8):
9 8 4 10 6
9 8 4 10 6
↑
Identificamos onde ele deve estar, na parte ordenada
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o primeiro elemento a ser inserido (8):
9 8 4 10 6
9 9 4 10 6
↑ →
Deslocamos a parte ordenada a partir dessa posi¸c˜ao
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o primeiro elemento a ser inserido (8):
9 8 4 10 6
8 9 4 10 6
↑
Inserimos o 8 na posi¸c˜ao correta
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o segundo elemento a ser inserido (4):
9 8 4 10 6
8 9 4 10 6
8 9 4 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o segundo elemento a ser inserido (4):
9 8 4 10 6
8 9 4 10 6
8 9 4 10 6
↑
Identificamos onde ele deve estar, na parte ordenada
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o segundo elemento a ser inserido (4):
9 8 4 10 6
8 9 4 10 6
8 8 9 10 6
↑ →
Deslocamos a parte ordenada a partir dessa posi¸c˜ao
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o segundo elemento a ser inserido (4):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
↑
Inserimos o 4 na posi¸c˜ao correta
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o terceiro elemento a ser inserido (10):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
4 8 9 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o terceiro elemento a ser inserido (10):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
4 8 9 10 6
↑
Identificamos onde ele deve estar, na parte ordenada
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o terceiro elemento a ser inserido (10):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
4 8 9 10 6
↑
N˜ao h´a necessidade de deslocamento e inser¸c˜ao. J´a est´a na
posi¸c˜ao correta
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
4 8 9 10 6
4 8 9 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
4 8 9 10 6
4 8 9 10 6
↑
Identificamos onde ele deve estar, na parte ordenada
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
4 8 9 10 6
4 8 8 9 10
↑ →
Deslocamos a parte ordenada a partir dessa posi¸c˜ao
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ex: ordene em ordem crescente
Em azul est´a o sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
4 8 9 10 6
4 6 8 9 10
↑
Inserimos o 6 na posi¸c˜ao correta
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Note que, a cada passo:
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 5 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Note que, a cada passo:
Encontr´avamos a posi¸c˜ao em que o valor deveria estar
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 5 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Note que, a cada passo:
Encontr´avamos a posi¸c˜ao em que o valor deveria estar
Desloc´avamos os elementos necess´arios
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 5 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Note que, a cada passo:
Encontr´avamos a posi¸c˜ao em que o valor deveria estar
Desloc´avamos os elementos necess´arios
Inser´ıamos o valor nessa posi¸c˜ao
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 5 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Uma melhoria direta seria:
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 6 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Uma melhoria direta seria:
Para cada passo do vetor original, a partir da posi¸c˜ao 1 at´e o
final
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 6 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Uma melhoria direta seria:
Para cada passo do vetor original, a partir da posi¸c˜ao 1 at´e o
final
Deslocar o arranjo ordenado para direita (uma posi¸c˜ao por vez) at´e
encontrar local adequado para o valor a ser inserido
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 6 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Uma melhoria direta seria:
Para cada passo do vetor original, a partir da posi¸c˜ao 1 at´e o
final
Deslocar o arranjo ordenado para direita (uma posi¸c˜ao por vez) at´e
encontrar local adequado para o valor a ser inserido
Inserir esse valor na posi¸c˜ao correta
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 6 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Uma melhoria direta seria:
Para cada passo do vetor original, a partir da posi¸c˜ao 1 at´e o
final
Deslocar o arranjo ordenado para direita (uma posi¸c˜ao por vez) at´e
encontrar local adequado para o valor a ser inserido
Inserir esse valor na posi¸c˜ao correta
Evita assim a necessidade de se buscar a posi¸c˜ao de
antem˜ao
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 6 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
9 8 4 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
9 8 4 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o primeiro elemento a ser inserido (8):
9 8 4 10 6
9 8 4 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o primeiro elemento a ser inserido (8):
9 8 4 10 6
9 8 4 10 6
↑
Menor que o elemento atual
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o primeiro elemento a ser inserido (8):
9 8 4 10 6
9 9 4 10 6
↑ →
Deslocamos esse elemento
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o primeiro elemento a ser inserido (8):
9 8 4 10 6
8 9 4 10 6
↑
Inserimos o 8 na posi¸c˜ao correta
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o segundo elemento a ser inserido (4):
9 8 4 10 6
8 9 4 10 6
8 9 4 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o segundo elemento a ser inserido (4):
9 8 4 10 6
8 9 4 10 6
8 9 4 10 6
↑
Menor que o elemento atual
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o segundo elemento a ser inserido (4):
9 8 4 10 6
8 9 4 10 6
8 9 9 10 6
↑ →
Deslocamos esse elemento
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o segundo elemento a ser inserido (4):
9 8 4 10 6
8 9 4 10 6
8 9 9 10 6
↑
Menor que o elemento atual
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o segundo elemento a ser inserido (4):
9 8 4 10 6
8 9 4 10 6
8 8 9 10 6
↑ →
Deslocamos esse elemento
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o segundo elemento a ser inserido (4):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
↑
Inserimos o 4 na posi¸c˜ao correta
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o terceiro elemento a ser inserido (10):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o terceiro elemento a ser inserido (10):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
↑
Maior que o elemento atual
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o terceiro elemento a ser inserido (10):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
↑
J´a est´a na posi¸c˜ao correta
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 6
↑
Menor que o elemento atual
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 10
↑ →
Deslocamos esse elemento
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 9 10 10
↑
Menor que o elemento atual
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 9 9 10
↑ →
Deslocamos esse elemento
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 9 9 10
↑
Menor que o elemento atual
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 8 9 10
↑ →
Deslocamos esse elemento
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 8 8 9 10
↑
Maior que o elemento atual
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Melhoria)
Ex: ordene em ordem crescente
Sub-arranjo j´a ordenado
Analisando o quarto elemento a ser inserido (6):
9 8 4 10 6
8 9 4 10 6
4 6 8 9 10
↑
Inserimos o 6 na posi¸c˜ao correta
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ent˜ao...
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ent˜ao... static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) && (aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
public static void main(String[] args) {
int[] v = {9,8,4,10,6};
insercao(v);
for (int el : v)
System.out.print(el+" ");
System.out.println();
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ent˜ao...
Corremos todos os
poss´ıveis candidatos a
inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) && (aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
public static void main(String[] args) {
int[] v = {9,8,4,10,6};
insercao(v);
for (int el : v)
System.out.print(el+" ");
System.out.println();
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ent˜ao...
Corremos todos os
poss´ıveis candidatos a
inser¸c˜ao
Enquanto o candidato
estiver fora de lugar,
deslocamos os
anteriores a ele, at´e
achar o lugar certo
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) && (aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
public static void main(String[] args) {
int[] v = {9,8,4,10,6};
insercao(v);
for (int el : v)
System.out.print(el+" ");
System.out.println();
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ent˜ao...
Corremos todos os
poss´ıveis candidatos a
inser¸c˜ao
Enquanto o candidato
estiver fora de lugar,
deslocamos os
anteriores a ele, at´e
achar o lugar certo
E colocamos ele l´a
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) && (aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
public static void main(String[] args) {
int[] v = {9,8,4,10,6};
insercao(v);
for (int el : v)
System.out.print(el+" ");
System.out.println();
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Ent˜ao...
Corremos todos os
poss´ıveis candidatos a
inser¸c˜ao
Enquanto o candidato
estiver fora de lugar,
deslocamos os
anteriores a ele, at´e
achar o lugar certo
E colocamos ele l´a
Sa´ıda
$ java Projeto
4 6 8 9 10
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) && (aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
public static void main(String[] args) {
int[] v = {9,8,4,10,6};
insercao(v);
for (int el : v)
System.out.print(el+" ");
System.out.println();
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
E como ficaria a vers˜ao
com objetos?
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 9 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
E como ficaria a vers˜ao
com objetos?
static void insercao(Residencia[] v) {
for (int i=1; i<v.length; i++) {
Residencia aux = v[i];
int j = i;
while ((j > 0) &&
(aux.comparaRes(v[j-1]) < 0)) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 9 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
E como ficaria a vers˜ao
com objetos?
static void insercao(Residencia[] v) {
for (int i=1; i<v.length; i++) {
Residencia aux = v[i];
int j = i;
while ((j > 0) &&
(aux.comparaRes(v[j-1]) < 0)) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
public static void main(String[] args) {
Projeto pr = new Projeto(5);
for (int i=0; i<5; i++) {
AreaCasa c = new AreaCasa(Math.
random()*100,Math.random()*30);
AreaPiscina p = new AreaPiscina(
Math.random()*10);
Residencia r = new Residencia(c,p);
pr.adicionaRes(r);
}
for (Residencia r : pr.condominio)
System.out.println(r.area());
System.out.println();
insercao(pr.condominio);
for (Residencia r : pr.condominio)
System.out.println(r.area());
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 9 / 32
Ordena¸c˜ao por Inser¸c˜ao (Insertion sort)
Sa´ıda
$ java Projeto
6583.183940438665
1130.4506182200782
7379.352930903931
3289.6719206296757
5739.294165717424
1130.4506182200782
3289.6719206296757
5739.294165717424
6583.183940438665
7379.352930903931
public static void main(String[] args) {
Projeto pr = new Projeto(5);
for (int i=0; i<5; i++) {
AreaCasa c = new AreaCasa(Math.
random()*100,Math.random()*30);
AreaPiscina p = new AreaPiscina(
Math.random()*10);
Residencia r = new Residencia(c,p);
pr.adicionaRes(r);
}
for (Residencia r : pr.condominio)
System.out.println(r.area());
System.out.println();
insercao(pr.condominio);
for (Residencia r : pr.condominio)
System.out.println(r.area());
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 10 / 32
Ordena¸c˜ao – Compara¸c˜ao
Sele¸c˜ao e Inser¸c˜ao:
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
Ordena¸c˜ao – Compara¸c˜ao
Sele¸c˜ao e Inser¸c˜ao:
Garantem que, no passo i, o subvetor de 0 a i est´a ordenado
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
Ordena¸c˜ao – Compara¸c˜ao
Sele¸c˜ao e Inser¸c˜ao:
Garantem que, no passo i, o subvetor de 0 a i est´a ordenado
Diferem em como fazem isso:
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
Ordena¸c˜ao – Compara¸c˜ao
Sele¸c˜ao e Inser¸c˜ao:
Garantem que, no passo i, o subvetor de 0 a i est´a ordenado
Diferem em como fazem isso:
Sele¸c˜ao troca 2 elementos
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
Ordena¸c˜ao – Compara¸c˜ao
Sele¸c˜ao e Inser¸c˜ao:
Garantem que, no passo i, o subvetor de 0 a i est´a ordenado
Diferem em como fazem isso:
Sele¸c˜ao troca 2 elementos
Inser¸c˜ao desloca `a direita parte ou todo o subvetor
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
Ordena¸c˜ao – Compara¸c˜ao
Sele¸c˜ao e Inser¸c˜ao:
Garantem que, no passo i, o subvetor de 0 a i est´a ordenado
Diferem em como fazem isso:
Sele¸c˜ao troca 2 elementos
Inser¸c˜ao desloca `a direita parte ou todo o subvetor
Bolha:
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
Ordena¸c˜ao – Compara¸c˜ao
Sele¸c˜ao e Inser¸c˜ao:
Garantem que, no passo i, o subvetor de 0 a i est´a ordenado
Diferem em como fazem isso:
Sele¸c˜ao troca 2 elementos
Inser¸c˜ao desloca `a direita parte ou todo o subvetor
Bolha:
Garante que, no passo i, o subvetor de tam-1-i a tam-1
est´a ordenado
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
Ordena¸c˜ao – Compara¸c˜ao
Sele¸c˜ao e Inser¸c˜ao:
Garantem que, no passo i, o subvetor de 0 a i est´a ordenado
Diferem em como fazem isso:
Sele¸c˜ao troca 2 elementos
Inser¸c˜ao desloca `a direita parte ou todo o subvetor
Bolha:
Garante que, no passo i, o subvetor de tam-1-i a tam-1
est´a ordenado
Todos ordenam in loco/in place (no pr´oprio vetor,
sem precisar de vetor auxiliar)
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
Curiosidades
Bolha:
http://www.youtube.com/watch?v=lyZQPjUT5B4
Sele¸c˜ao:
http://www.youtube.com/watch?v=Ns4TPTC8whw
(vers˜ao levemente diferente do algoritmo)
Inser¸c˜ao:
http://www.youtube.com/watch?v=ROalU379l3U
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 12 / 32
Heran¸ca
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 13 / 32
Heran¸ca
Temos agora outro tipo
de cabana, com outro
formato.
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
Heran¸ca
Temos agora outro tipo
de cabana, com outro
formato.
Queremos calcular
tamb´em a ´area e custo
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
Heran¸ca
Temos agora outro tipo
de cabana, com outro
formato.
Queremos calcular
tamb´em a ´area e custo
Quais os dados necess´arios?
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
Heran¸ca
Temos agora outro tipo
de cabana, com outro
formato.
Queremos calcular
tamb´em a ´area e custo
Quais os dados necess´arios?
Lateral da cabana
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
Heran¸ca
Temos agora outro tipo
de cabana, com outro
formato.
Queremos calcular
tamb´em a ´area e custo
Quais os dados necess´arios?
Lateral da cabana
Pre¸co do m2
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
Heran¸ca
Temos agora outro tipo
de cabana, com outro
formato.
Queremos calcular
tamb´em a ´area e custo
Quais os dados necess´arios?
Lateral da cabana
Pre¸co do m2
Que fazer?
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
Heran¸ca
Podemos construir
uma classe para essa
casa
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 15 / 32
Heran¸ca
Podemos construir
uma classe para essa
casa
CasaQuad
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 15 / 32
Heran¸ca
Podemos construir
uma classe para essa
casa
CasaQuad
class CasaQuad {
double valorM2 = 1500;
double lateral = 10;
CasaQuad() {}
CasaQuad(double lateral) {
this.lateral = lateral;
}
CasaQuad(double lateral, double valorM2) {
this(lateral);
this.valorM2 = valorM2;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*area);
return(-1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 15 / 32
Heran¸ca
Podemos construir
uma classe para essa
casa
CasaQuad
Note que n˜ao h´a
construtor do tipo:
CasaQuad(double valorM2) {
this.valorM2 = valorM2;
}
class CasaQuad {
double valorM2 = 1500;
double lateral = 10;
CasaQuad() {}
CasaQuad(double lateral) {
this.lateral = lateral;
}
CasaQuad(double lateral, double valorM2) {
this(lateral);
this.valorM2 = valorM2;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*area);
return(-1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 15 / 32
Heran¸ca
Se houvesse, ao
compilarmos
ter´ıamos:
Linha de Comando
$ javac CasaQuad.java
CasaQuad.java:24: CasaQuad(double) is
already defined in CasaQuad
CasaQuad(double valorM2) {
^
1 error
class CasaQuad {
double valorM2 = 1500;
double lateral = 10;
CasaQuad() {}
CasaQuad(double lateral) {
this.lateral = lateral;
}
CasaQuad(double lateral, double valorM2) {
this(lateral);
this.valorM2 = valorM2;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*area);
return(-1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 16 / 32
Comparando AreaCasa e CasaQuad
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
... (construtores) ...
double area() {
double areat=-1;
if (this.lateral>=0 && this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
class CasaQuad {
double valorM2 = 1500;
double lateral = 10;
... (construtores) ...
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral :
-1);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 17 / 32
Comparando AreaCasa e CasaQuad
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
... (construtores) ...
double area() {
double areat=-1;
if (this.lateral>=0 && this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
class CasaQuad {
double valorM2 = 1500;
double lateral = 10;
... (construtores) ...
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral :
-1);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
H´a v´arios pontos em comum
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 17 / 32
Comparando AreaCasa e CasaQuad
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
... (construtores) ...
double area() {
double areat=-1;
if (this.lateral>=0 && this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
class CasaQuad {
double valorM2 = 1500;
double lateral = 10;
... (construtores) ...
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral :
-1);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
E pontos bastante semelhantes
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 17 / 32
Comparando AreaCasa e CasaQuad
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
... (construtores) ...
double area() {
double areat=-1;
if (this.lateral>=0 && this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
class CasaQuad {
double valorM2 = 1500;
double lateral = 10;
... (construtores) ...
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral :
-1);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
E pontos bastante semelhantes
Mesma assinatura, mas comportamento ou interpreta¸c˜ao
diferentes
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 17 / 32
Heran¸ca
Quase todo o c´odigo das classes ou est´a repetido ou
muito semelhante
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 18 / 32
Heran¸ca
Quase todo o c´odigo das classes ou est´a repetido ou
muito semelhante
Repeti¸c˜ao do trabalho
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 18 / 32
Heran¸ca
Quase todo o c´odigo das classes ou est´a repetido ou
muito semelhante
Repeti¸c˜ao do trabalho
Desperd´ıcio de tempo de desenvolvimento
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 18 / 32
Heran¸ca
Quase todo o c´odigo das classes ou est´a repetido ou
muito semelhante
Repeti¸c˜ao do trabalho
Desperd´ıcio de tempo de desenvolvimento
Desperd´ıcio de tempo de valida¸c˜ao do c´odigo (teste das
mesmas coisas....)
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 18 / 32
Heran¸ca
Quase todo o c´odigo das classes ou est´a repetido ou
muito semelhante
Repeti¸c˜ao do trabalho
Desperd´ıcio de tempo de desenvolvimento
Desperd´ıcio de tempo de valida¸c˜ao do c´odigo (teste das
mesmas coisas....)
Mudan¸cas em uma parte comum a elas devem ser feitas (e
testadas novamente) nas duas classes!
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 18 / 32
Heran¸ca
H´a uma solu¸c˜ao?
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 19 / 32
Heran¸ca
H´a uma solu¸c˜ao?
Agrupar o que for comum (exatamente igual) em
ambas em uma nova classe
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 19 / 32
Heran¸ca
H´a uma solu¸c˜ao?
Agrupar o que for comum (exatamente igual) em
ambas em uma nova classe
Ambas ent˜ao compartilhariam das defini¸c˜oes (n˜ao
necessariamente mem´oria) contidas nessa nova
classe
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 19 / 32
Heran¸ca
H´a uma solu¸c˜ao?
Agrupar o que for comum (exatamente igual) em
ambas em uma nova classe
Ambas ent˜ao compartilhariam das defini¸c˜oes (n˜ao
necessariamente mem´oria) contidas nessa nova
classe
Ambas herdariam essas defini¸c˜oes
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 19 / 32
Heran¸ca
Esse esquema d´a
origem a uma
hierarquia de classes
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
Heran¸ca
Esse esquema d´a
origem a uma
hierarquia de classes Casa
CasaQuad AreaCasa
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
Heran¸ca
Esse esquema d´a
origem a uma
hierarquia de classes
Nela, a nova classe –
Casa – est´a acima de
CasaQuad e AreaCasa
Casa
CasaQuad AreaCasa
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
Heran¸ca
Esse esquema d´a
origem a uma
hierarquia de classes
Nela, a nova classe –
Casa – est´a acima de
CasaQuad e AreaCasa
Para manter o padr˜ao,
podemos rebatizar
AreaCasa para CasaRet
Casa
CasaQuad CasaRet
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
Heran¸ca
Esse esquema d´a
origem a uma
hierarquia de classes
Nela, a nova classe –
Casa – est´a acima de
CasaQuad e AreaCasa
Para manter o padr˜ao,
podemos rebatizar
AreaCasa para CasaRet
Casa
CasaQuad CasaRet
Diz-se que CasaQuad e CasaRet s˜ao subclasses de
Casa
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
Heran¸ca
Esse esquema d´a
origem a uma
hierarquia de classes
Nela, a nova classe –
Casa – est´a acima de
CasaQuad e AreaCasa
Para manter o padr˜ao,
podemos rebatizar
AreaCasa para CasaRet
Casa
CasaQuad CasaRet
Diz-se que CasaQuad e CasaRet s˜ao subclasses de
Casa
E que Casa ´e superclasse de CasaQuad e CasaRet
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
Heran¸ca
Classes mais
especializadas
(subclasses) herdam
propriedades (atributos
e c´odigo) da classe
mais geral (superclasse)
Casa
CasaQuad CasaRet
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 21 / 32
Heran¸ca
Classes mais
especializadas
(subclasses) herdam
propriedades (atributos
e c´odigo) da classe
mais geral (superclasse)
Casa
CasaQuad CasaRet
Cria-se uma subclasse inserindo somente as
diferen¸cas desta para sua superclasse
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 21 / 32
Heran¸ca
Classes mais
especializadas
(subclasses) herdam
propriedades (atributos
e c´odigo) da classe
mais geral (superclasse)
Casa
CasaQuad CasaRet
Cria-se uma subclasse inserindo somente as
diferen¸cas desta para sua superclasse
Identifica-se a possibilidade de heran¸ca por meio da
express˜ao “´e um tipo de”
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 21 / 32
Heran¸ca
Como criamos
Casa?
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 22 / 32
Heran¸ca
Como criamos
Casa?
Separando os
atributos e
m´etodos idˆenticos
em CasaQuad e
CasaRet
class Casa {
double valorM2 = 1500;
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 22 / 32
Heran¸ca
Como criamos
Casa?
Separando os
atributos e
m´etodos idˆenticos
em CasaQuad e
CasaRet
E CasaQuad?
class Casa {
double valorM2 = 1500;
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 22 / 32
Heran¸ca
Inserindo somente as
diferen¸cas
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
this.valorM2 = valorM2;
}
CasaQuad(double lateral, double
valorM2) {
this(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 23 / 32
Heran¸ca
Inserindo somente as
diferen¸cas
E dizendo ao
compilador quem ´e a
classe m˜ae
(superclasse)
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
this.valorM2 = valorM2;
}
CasaQuad(double lateral, double
valorM2) {
this(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 23 / 32
Heran¸ca
Esse procedimento n˜ao
cria um objeto extra
para a superclasse
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
this.valorM2 = valorM2;
}
CasaQuad(double lateral, double
valorM2) {
this(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 24 / 32
Heran¸ca
Esse procedimento n˜ao
cria um objeto extra
para a superclasse
´E como se copiasse os
atributos desta para
dentro da mem´oria da
subclasse
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
this.valorM2 = valorM2;
}
CasaQuad(double lateral, double
valorM2) {
this(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 24 / 32
Heran¸ca
E por que lateral,
embora comum a
CasaRet e CasaQuad,
foi colocada na
subclasse?
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
this.valorM2 = valorM2;
}
CasaQuad(double lateral, double
valorM2) {
this(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 25 / 32
Heran¸ca
E por que lateral,
embora comum a
CasaRet e CasaQuad,
foi colocada na
subclasse?
Porque tem significados
diferentes: Lateral da casa
e da sala
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
this.valorM2 = valorM2;
}
CasaQuad(double lateral, double
valorM2) {
this(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 25 / 32
Heran¸ca
E por que lateral,
embora comum a
CasaRet e CasaQuad,
foi colocada na
subclasse?
Porque tem significados
diferentes: Lateral da casa
e da sala
Poderia tamb´em haver
uma casa redonda, em
que esse atributo n˜ao faria
sentido
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
this.valorM2 = valorM2;
}
CasaQuad(double lateral, double
valorM2) {
this(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 25 / 32
Heran¸ca
CasaRet sai de
maneira semelhante:
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
this.valorM2 = valorM2;
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 26 / 32
Heran¸ca
Lembrando que...
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 27 / 32
Heran¸ca
Lembrando que...
CasaQuad ´e um tipo de Casa
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 27 / 32
Heran¸ca
Lembrando que...
CasaQuad ´e um tipo de Casa
CasaRet ´e um tipo de Casa
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 27 / 32
Heran¸ca
Lembrando que...
CasaQuad ´e um tipo de Casa
CasaRet ´e um tipo de Casa
Podemos identificar a possibilidade de heran¸ca por
meio da express˜ao “´e um tipo de”
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 27 / 32
Heran¸ca
E como usamos essa
nova vers˜ao?
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 28 / 32
Heran¸ca
E como usamos essa
nova vers˜ao?
Como antes:
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("´Area: "+cr.area());
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("M2: "+cr.valorM2);
System.out.println("Valor: "+cr.valor(
cr.area());
System.out.println();
System.out.println("´Area: "+cq.area());
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("M2: "+cq.valorM2);
System.out.println("Valor: "+cq.valor(
cq.area());
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 28 / 32
Heran¸ca
E como usamos essa
nova vers˜ao?
Como antes:
A sa´ıda ser´a:
$ java Projeto
Quarto: 5.0
´Area: 150.0
Lateral da sala: 10.0
M2: 1320.0
Valor: 198000.0
´Area: 100.0
Lateral da casa: 10.0
M2: 1523.0
Valor: 152300.0
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("´Area: "+cr.area());
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("M2: "+cr.valorM2);
System.out.println("Valor: "+cr.valor(
cr.area());
System.out.println();
System.out.println("´Area: "+cq.area());
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("M2: "+cq.valorM2);
System.out.println("Valor: "+cq.valor(
cq.area());
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 28 / 32
Heran¸ca
Temos acesso a todos
os m´etodos e atributos
tanto da subclasse
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("´Area: "+cr.area());
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("M2: "+cr.valorM2);
System.out.println("Valor: "+cr.valor(
cr.area());
System.out.println();
System.out.println("´Area: "+cq.area());
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("M2: "+cq.valorM2);
System.out.println("Valor: "+cq.valor(
cq.area());
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 29 / 32
Heran¸ca
Temos acesso a todos
os m´etodos e atributos
tanto da subclasse
quanto da superclasse
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("´Area: "+cr.area());
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("M2: "+cr.valorM2);
System.out.println("Valor: "+cr.valor(
cr.area());
System.out.println();
System.out.println("´Area: "+cq.area());
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("M2: "+cq.valorM2);
System.out.println("Valor: "+cq.valor(
cq.area());
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 29 / 32
Heran¸ca
Temos acesso a todos
os m´etodos e atributos
tanto da subclasse
quanto da superclasse
N˜ao h´a
compartilhamento de
mem´oria (pois n˜ao h´a
static) – cada um
tem o seu espa¸co
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("´Area: "+cr.area());
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("M2: "+cr.valorM2);
System.out.println("Valor: "+cr.valor(
cr.area());
System.out.println();
System.out.println("´Area: "+cq.area());
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("M2: "+cq.valorM2);
System.out.println("Valor: "+cq.valor(
cq.area());
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 29 / 32
Heran¸ca e Mem´oria
Como se d´a o
funcionamento da
mem´oria nesse caso?
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("´Area: "+cr.area());
System.out.println();
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("´Area: "+cq.area());
}
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 30 / 32
Heran¸ca e Mem´oria
Como se d´a o
funcionamento da
mem´oria nesse caso?
Ao criarmos os objetos,
alocamos espa¸co para
atributos tanto de sua
classe quanto
superclasse
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("´Area: "+cr.area());
System.out.println();
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("´Area: "+cq.area());
}
???
main
args
0x23f
cr
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1320 lateral
0xfff
10
cquarto
0xfff
5
cq
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1523 lateral
0xf00
10
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 30 / 32
Heran¸ca e Mem´oria
Como se d´a o
funcionamento da
mem´oria nesse caso?
Ao criarmos os objetos,
alocamos espa¸co para
atributos tanto de sua
classe quanto
superclasse
O funcionamento dos
construtores foi omitido
para simplificar
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("´Area: "+cr.area());
System.out.println();
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("´Area: "+cq.area());
}
???
main
args
0x23f
cr
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1320 lateral
0xfff
10
cquarto
0xfff
5
cq
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1523 lateral
0xf00
10
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 30 / 32
Heran¸ca e Mem´oria
Cada objeto tem seus
pr´oprios atributos e
m´etodos
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("´Area: "+cr.area());
System.out.println();
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("´Area: "+cq.area());
}
???
main
args
0x23f
cr
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1320 lateral
0xfff
10
cquarto
0xfff
5
area
areat
0xaa2
cq
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1523 lateral
0xf00
10
area
areat
0x992
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 31 / 32
Heran¸ca e Mem´oria
Cada objeto tem seus
pr´oprios atributos e
m´etodos
N˜ao h´a
compartilhamento de
nada
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("´Area: "+cr.area());
System.out.println();
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("´Area: "+cq.area());
}
???
main
args
0x23f
cr
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1320 lateral
0xfff
10
cquarto
0xfff
5
area
areat
0xaa2
cq
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1523 lateral
0xf00
10
area
areat
0x992
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 31 / 32
Heran¸ca e Mem´oria
Cada objeto tem seus
pr´oprios atributos e
m´etodos
N˜ao h´a
compartilhamento de
nada
A menos que haja algum
atributo ou m´etodo
static
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("´Area: "+cr.area());
System.out.println();
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("´Area: "+cq.area());
}
???
main
args
0x23f
cr
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1320 lateral
0xfff
10
cquarto
0xfff
5
area
areat
0xaa2
cq
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1523 lateral
0xf00
10
area
areat
0x992
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 31 / 32
Heran¸ca e Mem´oria
Cada objeto tem seus
pr´oprios atributos e
m´etodos
N˜ao h´a
compartilhamento de
nada
A menos que haja algum
atributo ou m´etodo
static
Nesse caso, todos os
objetos compartilhar˜ao do
mesmo atributo/m´etodo
na mem´oria
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
System.out.println("Quarto: "+
cr.cquarto);
System.out.println("Lateral da sala: "+
cr.lateral);
System.out.println("´Area: "+cr.area());
System.out.println();
System.out.println("Lateral da casa: "+
cq.lateral);
System.out.println("´Area: "+cq.area());
}
???
main
args
0x23f
cr
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1320 lateral
0xfff
10
cquarto
0xfff
5
area
areat
0xaa2
cq
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1523 lateral
0xf00
10
area
areat
0x992
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 31 / 32
Videoaula
https://www.youtube.com/watch?v=_4iTg2K4bqY
e
https://www.youtube.com/watch?v=pnGhdy5B02I
(cobrem parcialmente o conte´udo)
Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 32 / 32

Mais conteúdo relacionado

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 20
(ACH2001) Introdução à Programação - Aula 20(ACH2001) Introdução à Programação - Aula 20
(ACH2001) Introdução à Programação - Aula 20Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 
(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04
 
(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03
 
(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02
 
(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23
 
(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22
 
(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21
 
(ACH2001) Introdução à Programação - Aula 20
(ACH2001) Introdução à Programação - Aula 20(ACH2001) Introdução à Programação - Aula 20
(ACH2001) Introdução à Programação - Aula 20
 

Último

ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024azulassessoria9
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...azulassessoria9
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Centro Jacques Delors
 
Slides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptx
Slides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptxSlides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptx
Slides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Centro Jacques Delors
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
Missa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfMissa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfFbioFerreira207918
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedJaquelineBertagliaCe
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubeladrianaguedesbatista
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticash5kpmr7w7
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024azulassessoria9
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfJuliana Barbosa
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.denisecompasso2
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do séculoBiblioteca UCS
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa paraAndreaPassosMascaren
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmicolourivalcaburite
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaCentro Jacques Delors
 

Último (20)

ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
 
Slides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptx
Slides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptxSlides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptx
Slides Lição 06, Central Gospel, O Anticristo, 1Tr24.pptx
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Missa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfMissa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdf
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União Europeia
 

(ACH2001) Introdução à Programação - Aula 18

  • 1. Aula 18 – Ordena¸c˜ao e Heran¸ca Norton Trevisan Roman 11 de maio de 2020 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 1 / 32
  • 2. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Algoritmo Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 2 / 32
  • 3. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Algoritmo Percorremos o arranjo e, a cada novo elemento: Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 2 / 32
  • 4. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Algoritmo Percorremos o arranjo e, a cada novo elemento: Procuramos onde, `a esquerda desse elemento, ele se encaixa Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 2 / 32
  • 5. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Algoritmo Percorremos o arranjo e, a cada novo elemento: Procuramos onde, `a esquerda desse elemento, ele se encaixa Abrimos espa¸co para o elemento l´a, deslocando para a direita todos os elementos que est˜ao entre essa posi¸c˜ao e a original do elemento Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 2 / 32
  • 6. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Algoritmo Percorremos o arranjo e, a cada novo elemento: Procuramos onde, `a esquerda desse elemento, ele se encaixa Abrimos espa¸co para o elemento l´a, deslocando para a direita todos os elementos que est˜ao entre essa posi¸c˜ao e a original do elemento Inserimos o elemento nesse espa¸co assim aberto Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 2 / 32
  • 7. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ou seja, aumentamos a parte ordenada do arranjo em uma posi¸c˜ao, inserindo um novo elemento na posi¸c˜ao correta e deslocando os demais para a direita Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 3 / 32
  • 8. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ou seja, aumentamos a parte ordenada do arranjo em uma posi¸c˜ao, inserindo um novo elemento na posi¸c˜ao correta e deslocando os demais para a direita Semelhante ao modo como ordenamos cartas de baralho Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 3 / 32
  • 9. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ou seja, aumentamos a parte ordenada do arranjo em uma posi¸c˜ao, inserindo um novo elemento na posi¸c˜ao correta e deslocando os demais para a direita Semelhante ao modo como ordenamos cartas de baralho Percorremos da esquerda para a direita e, `a medida que avan¸camos vamos deixando as cartas mais `a esquerda ordenadas Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 3 / 32
  • 10. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente 9 8 4 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 11. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado 9 8 4 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 12. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o primeiro elemento a ser inserido (8): 9 8 4 10 6 9 8 4 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 13. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o primeiro elemento a ser inserido (8): 9 8 4 10 6 9 8 4 10 6 ↑ Identificamos onde ele deve estar, na parte ordenada Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 14. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o primeiro elemento a ser inserido (8): 9 8 4 10 6 9 9 4 10 6 ↑ → Deslocamos a parte ordenada a partir dessa posi¸c˜ao Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 15. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o primeiro elemento a ser inserido (8): 9 8 4 10 6 8 9 4 10 6 ↑ Inserimos o 8 na posi¸c˜ao correta Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 16. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o segundo elemento a ser inserido (4): 9 8 4 10 6 8 9 4 10 6 8 9 4 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 17. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o segundo elemento a ser inserido (4): 9 8 4 10 6 8 9 4 10 6 8 9 4 10 6 ↑ Identificamos onde ele deve estar, na parte ordenada Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 18. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o segundo elemento a ser inserido (4): 9 8 4 10 6 8 9 4 10 6 8 8 9 10 6 ↑ → Deslocamos a parte ordenada a partir dessa posi¸c˜ao Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 19. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o segundo elemento a ser inserido (4): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 ↑ Inserimos o 4 na posi¸c˜ao correta Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 20. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o terceiro elemento a ser inserido (10): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 4 8 9 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 21. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o terceiro elemento a ser inserido (10): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 4 8 9 10 6 ↑ Identificamos onde ele deve estar, na parte ordenada Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 22. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o terceiro elemento a ser inserido (10): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 4 8 9 10 6 ↑ N˜ao h´a necessidade de deslocamento e inser¸c˜ao. J´a est´a na posi¸c˜ao correta Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 23. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 4 8 9 10 6 4 8 9 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 24. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 4 8 9 10 6 4 8 9 10 6 ↑ Identificamos onde ele deve estar, na parte ordenada Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 25. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 4 8 9 10 6 4 8 8 9 10 ↑ → Deslocamos a parte ordenada a partir dessa posi¸c˜ao Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 26. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ex: ordene em ordem crescente Em azul est´a o sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 4 8 9 10 6 4 6 8 9 10 ↑ Inserimos o 6 na posi¸c˜ao correta Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 4 / 32
  • 27. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Note que, a cada passo: Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 5 / 32
  • 28. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Note que, a cada passo: Encontr´avamos a posi¸c˜ao em que o valor deveria estar Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 5 / 32
  • 29. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Note que, a cada passo: Encontr´avamos a posi¸c˜ao em que o valor deveria estar Desloc´avamos os elementos necess´arios Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 5 / 32
  • 30. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Note que, a cada passo: Encontr´avamos a posi¸c˜ao em que o valor deveria estar Desloc´avamos os elementos necess´arios Inser´ıamos o valor nessa posi¸c˜ao Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 5 / 32
  • 31. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Uma melhoria direta seria: Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 6 / 32
  • 32. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Uma melhoria direta seria: Para cada passo do vetor original, a partir da posi¸c˜ao 1 at´e o final Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 6 / 32
  • 33. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Uma melhoria direta seria: Para cada passo do vetor original, a partir da posi¸c˜ao 1 at´e o final Deslocar o arranjo ordenado para direita (uma posi¸c˜ao por vez) at´e encontrar local adequado para o valor a ser inserido Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 6 / 32
  • 34. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Uma melhoria direta seria: Para cada passo do vetor original, a partir da posi¸c˜ao 1 at´e o final Deslocar o arranjo ordenado para direita (uma posi¸c˜ao por vez) at´e encontrar local adequado para o valor a ser inserido Inserir esse valor na posi¸c˜ao correta Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 6 / 32
  • 35. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Uma melhoria direta seria: Para cada passo do vetor original, a partir da posi¸c˜ao 1 at´e o final Deslocar o arranjo ordenado para direita (uma posi¸c˜ao por vez) at´e encontrar local adequado para o valor a ser inserido Inserir esse valor na posi¸c˜ao correta Evita assim a necessidade de se buscar a posi¸c˜ao de antem˜ao Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 6 / 32
  • 36. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente 9 8 4 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 37. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado 9 8 4 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 38. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o primeiro elemento a ser inserido (8): 9 8 4 10 6 9 8 4 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 39. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o primeiro elemento a ser inserido (8): 9 8 4 10 6 9 8 4 10 6 ↑ Menor que o elemento atual Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 40. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o primeiro elemento a ser inserido (8): 9 8 4 10 6 9 9 4 10 6 ↑ → Deslocamos esse elemento Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 41. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o primeiro elemento a ser inserido (8): 9 8 4 10 6 8 9 4 10 6 ↑ Inserimos o 8 na posi¸c˜ao correta Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 42. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o segundo elemento a ser inserido (4): 9 8 4 10 6 8 9 4 10 6 8 9 4 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 43. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o segundo elemento a ser inserido (4): 9 8 4 10 6 8 9 4 10 6 8 9 4 10 6 ↑ Menor que o elemento atual Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 44. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o segundo elemento a ser inserido (4): 9 8 4 10 6 8 9 4 10 6 8 9 9 10 6 ↑ → Deslocamos esse elemento Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 45. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o segundo elemento a ser inserido (4): 9 8 4 10 6 8 9 4 10 6 8 9 9 10 6 ↑ Menor que o elemento atual Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 46. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o segundo elemento a ser inserido (4): 9 8 4 10 6 8 9 4 10 6 8 8 9 10 6 ↑ → Deslocamos esse elemento Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 47. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o segundo elemento a ser inserido (4): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 ↑ Inserimos o 4 na posi¸c˜ao correta Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 48. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o terceiro elemento a ser inserido (10): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 49. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o terceiro elemento a ser inserido (10): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 ↑ Maior que o elemento atual Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 50. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o terceiro elemento a ser inserido (10): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 ↑ J´a est´a na posi¸c˜ao correta Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 51. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 52. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 6 ↑ Menor que o elemento atual Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 53. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 10 ↑ → Deslocamos esse elemento Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 54. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 9 10 10 ↑ Menor que o elemento atual Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 55. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 9 9 10 ↑ → Deslocamos esse elemento Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 56. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 9 9 10 ↑ Menor que o elemento atual Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 57. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 8 9 10 ↑ → Deslocamos esse elemento Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 58. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 8 8 9 10 ↑ Maior que o elemento atual Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 59. Ordena¸c˜ao por Inser¸c˜ao (Melhoria) Ex: ordene em ordem crescente Sub-arranjo j´a ordenado Analisando o quarto elemento a ser inserido (6): 9 8 4 10 6 8 9 4 10 6 4 6 8 9 10 ↑ Inserimos o 6 na posi¸c˜ao correta Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 7 / 32
  • 60. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ent˜ao... Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
  • 61. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ent˜ao... static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } public static void main(String[] args) { int[] v = {9,8,4,10,6}; insercao(v); for (int el : v) System.out.print(el+" "); System.out.println(); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
  • 62. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ent˜ao... Corremos todos os poss´ıveis candidatos a inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } public static void main(String[] args) { int[] v = {9,8,4,10,6}; insercao(v); for (int el : v) System.out.print(el+" "); System.out.println(); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
  • 63. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ent˜ao... Corremos todos os poss´ıveis candidatos a inser¸c˜ao Enquanto o candidato estiver fora de lugar, deslocamos os anteriores a ele, at´e achar o lugar certo static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } public static void main(String[] args) { int[] v = {9,8,4,10,6}; insercao(v); for (int el : v) System.out.print(el+" "); System.out.println(); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
  • 64. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ent˜ao... Corremos todos os poss´ıveis candidatos a inser¸c˜ao Enquanto o candidato estiver fora de lugar, deslocamos os anteriores a ele, at´e achar o lugar certo E colocamos ele l´a static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } public static void main(String[] args) { int[] v = {9,8,4,10,6}; insercao(v); for (int el : v) System.out.print(el+" "); System.out.println(); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
  • 65. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Ent˜ao... Corremos todos os poss´ıveis candidatos a inser¸c˜ao Enquanto o candidato estiver fora de lugar, deslocamos os anteriores a ele, at´e achar o lugar certo E colocamos ele l´a Sa´ıda $ java Projeto 4 6 8 9 10 static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } public static void main(String[] args) { int[] v = {9,8,4,10,6}; insercao(v); for (int el : v) System.out.print(el+" "); System.out.println(); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 8 / 32
  • 66. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) E como ficaria a vers˜ao com objetos? Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 9 / 32
  • 67. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) E como ficaria a vers˜ao com objetos? static void insercao(Residencia[] v) { for (int i=1; i<v.length; i++) { Residencia aux = v[i]; int j = i; while ((j > 0) && (aux.comparaRes(v[j-1]) < 0)) { v[j] = v[j-1]; j--; } v[j] = aux; } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 9 / 32
  • 68. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) E como ficaria a vers˜ao com objetos? static void insercao(Residencia[] v) { for (int i=1; i<v.length; i++) { Residencia aux = v[i]; int j = i; while ((j > 0) && (aux.comparaRes(v[j-1]) < 0)) { v[j] = v[j-1]; j--; } v[j] = aux; } } public static void main(String[] args) { Projeto pr = new Projeto(5); for (int i=0; i<5; i++) { AreaCasa c = new AreaCasa(Math. random()*100,Math.random()*30); AreaPiscina p = new AreaPiscina( Math.random()*10); Residencia r = new Residencia(c,p); pr.adicionaRes(r); } for (Residencia r : pr.condominio) System.out.println(r.area()); System.out.println(); insercao(pr.condominio); for (Residencia r : pr.condominio) System.out.println(r.area()); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 9 / 32
  • 69. Ordena¸c˜ao por Inser¸c˜ao (Insertion sort) Sa´ıda $ java Projeto 6583.183940438665 1130.4506182200782 7379.352930903931 3289.6719206296757 5739.294165717424 1130.4506182200782 3289.6719206296757 5739.294165717424 6583.183940438665 7379.352930903931 public static void main(String[] args) { Projeto pr = new Projeto(5); for (int i=0; i<5; i++) { AreaCasa c = new AreaCasa(Math. random()*100,Math.random()*30); AreaPiscina p = new AreaPiscina( Math.random()*10); Residencia r = new Residencia(c,p); pr.adicionaRes(r); } for (Residencia r : pr.condominio) System.out.println(r.area()); System.out.println(); insercao(pr.condominio); for (Residencia r : pr.condominio) System.out.println(r.area()); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 10 / 32
  • 70. Ordena¸c˜ao – Compara¸c˜ao Sele¸c˜ao e Inser¸c˜ao: Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
  • 71. Ordena¸c˜ao – Compara¸c˜ao Sele¸c˜ao e Inser¸c˜ao: Garantem que, no passo i, o subvetor de 0 a i est´a ordenado Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
  • 72. Ordena¸c˜ao – Compara¸c˜ao Sele¸c˜ao e Inser¸c˜ao: Garantem que, no passo i, o subvetor de 0 a i est´a ordenado Diferem em como fazem isso: Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
  • 73. Ordena¸c˜ao – Compara¸c˜ao Sele¸c˜ao e Inser¸c˜ao: Garantem que, no passo i, o subvetor de 0 a i est´a ordenado Diferem em como fazem isso: Sele¸c˜ao troca 2 elementos Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
  • 74. Ordena¸c˜ao – Compara¸c˜ao Sele¸c˜ao e Inser¸c˜ao: Garantem que, no passo i, o subvetor de 0 a i est´a ordenado Diferem em como fazem isso: Sele¸c˜ao troca 2 elementos Inser¸c˜ao desloca `a direita parte ou todo o subvetor Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
  • 75. Ordena¸c˜ao – Compara¸c˜ao Sele¸c˜ao e Inser¸c˜ao: Garantem que, no passo i, o subvetor de 0 a i est´a ordenado Diferem em como fazem isso: Sele¸c˜ao troca 2 elementos Inser¸c˜ao desloca `a direita parte ou todo o subvetor Bolha: Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
  • 76. Ordena¸c˜ao – Compara¸c˜ao Sele¸c˜ao e Inser¸c˜ao: Garantem que, no passo i, o subvetor de 0 a i est´a ordenado Diferem em como fazem isso: Sele¸c˜ao troca 2 elementos Inser¸c˜ao desloca `a direita parte ou todo o subvetor Bolha: Garante que, no passo i, o subvetor de tam-1-i a tam-1 est´a ordenado Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
  • 77. Ordena¸c˜ao – Compara¸c˜ao Sele¸c˜ao e Inser¸c˜ao: Garantem que, no passo i, o subvetor de 0 a i est´a ordenado Diferem em como fazem isso: Sele¸c˜ao troca 2 elementos Inser¸c˜ao desloca `a direita parte ou todo o subvetor Bolha: Garante que, no passo i, o subvetor de tam-1-i a tam-1 est´a ordenado Todos ordenam in loco/in place (no pr´oprio vetor, sem precisar de vetor auxiliar) Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 11 / 32
  • 78. Curiosidades Bolha: http://www.youtube.com/watch?v=lyZQPjUT5B4 Sele¸c˜ao: http://www.youtube.com/watch?v=Ns4TPTC8whw (vers˜ao levemente diferente do algoritmo) Inser¸c˜ao: http://www.youtube.com/watch?v=ROalU379l3U Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 12 / 32
  • 79. Heran¸ca Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 13 / 32
  • 80. Heran¸ca Temos agora outro tipo de cabana, com outro formato. Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
  • 81. Heran¸ca Temos agora outro tipo de cabana, com outro formato. Queremos calcular tamb´em a ´area e custo Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
  • 82. Heran¸ca Temos agora outro tipo de cabana, com outro formato. Queremos calcular tamb´em a ´area e custo Quais os dados necess´arios? Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
  • 83. Heran¸ca Temos agora outro tipo de cabana, com outro formato. Queremos calcular tamb´em a ´area e custo Quais os dados necess´arios? Lateral da cabana Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
  • 84. Heran¸ca Temos agora outro tipo de cabana, com outro formato. Queremos calcular tamb´em a ´area e custo Quais os dados necess´arios? Lateral da cabana Pre¸co do m2 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
  • 85. Heran¸ca Temos agora outro tipo de cabana, com outro formato. Queremos calcular tamb´em a ´area e custo Quais os dados necess´arios? Lateral da cabana Pre¸co do m2 Que fazer? Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 14 / 32
  • 86. Heran¸ca Podemos construir uma classe para essa casa Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 15 / 32
  • 87. Heran¸ca Podemos construir uma classe para essa casa CasaQuad Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 15 / 32
  • 88. Heran¸ca Podemos construir uma classe para essa casa CasaQuad class CasaQuad { double valorM2 = 1500; double lateral = 10; CasaQuad() {} CasaQuad(double lateral) { this.lateral = lateral; } CasaQuad(double lateral, double valorM2) { this(lateral); this.valorM2 = valorM2; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 15 / 32
  • 89. Heran¸ca Podemos construir uma classe para essa casa CasaQuad Note que n˜ao h´a construtor do tipo: CasaQuad(double valorM2) { this.valorM2 = valorM2; } class CasaQuad { double valorM2 = 1500; double lateral = 10; CasaQuad() {} CasaQuad(double lateral) { this.lateral = lateral; } CasaQuad(double lateral, double valorM2) { this(lateral); this.valorM2 = valorM2; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 15 / 32
  • 90. Heran¸ca Se houvesse, ao compilarmos ter´ıamos: Linha de Comando $ javac CasaQuad.java CasaQuad.java:24: CasaQuad(double) is already defined in CasaQuad CasaQuad(double valorM2) { ^ 1 error class CasaQuad { double valorM2 = 1500; double lateral = 10; CasaQuad() {} CasaQuad(double lateral) { this.lateral = lateral; } CasaQuad(double lateral, double valorM2) { this(lateral); this.valorM2 = valorM2; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } double valor(double area) { if (area >= 0) return(this.valorM2*area); return(-1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 16 / 32
  • 91. Comparando AreaCasa e CasaQuad class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; ... (construtores) ... double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } class CasaQuad { double valorM2 = 1500; double lateral = 10; ... (construtores) ... double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 17 / 32
  • 92. Comparando AreaCasa e CasaQuad class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; ... (construtores) ... double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } class CasaQuad { double valorM2 = 1500; double lateral = 10; ... (construtores) ... double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } H´a v´arios pontos em comum Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 17 / 32
  • 93. Comparando AreaCasa e CasaQuad class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; ... (construtores) ... double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } class CasaQuad { double valorM2 = 1500; double lateral = 10; ... (construtores) ... double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } E pontos bastante semelhantes Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 17 / 32
  • 94. Comparando AreaCasa e CasaQuad class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; ... (construtores) ... double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } class CasaQuad { double valorM2 = 1500; double lateral = 10; ... (construtores) ... double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } E pontos bastante semelhantes Mesma assinatura, mas comportamento ou interpreta¸c˜ao diferentes Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 17 / 32
  • 95. Heran¸ca Quase todo o c´odigo das classes ou est´a repetido ou muito semelhante Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 18 / 32
  • 96. Heran¸ca Quase todo o c´odigo das classes ou est´a repetido ou muito semelhante Repeti¸c˜ao do trabalho Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 18 / 32
  • 97. Heran¸ca Quase todo o c´odigo das classes ou est´a repetido ou muito semelhante Repeti¸c˜ao do trabalho Desperd´ıcio de tempo de desenvolvimento Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 18 / 32
  • 98. Heran¸ca Quase todo o c´odigo das classes ou est´a repetido ou muito semelhante Repeti¸c˜ao do trabalho Desperd´ıcio de tempo de desenvolvimento Desperd´ıcio de tempo de valida¸c˜ao do c´odigo (teste das mesmas coisas....) Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 18 / 32
  • 99. Heran¸ca Quase todo o c´odigo das classes ou est´a repetido ou muito semelhante Repeti¸c˜ao do trabalho Desperd´ıcio de tempo de desenvolvimento Desperd´ıcio de tempo de valida¸c˜ao do c´odigo (teste das mesmas coisas....) Mudan¸cas em uma parte comum a elas devem ser feitas (e testadas novamente) nas duas classes! Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 18 / 32
  • 100. Heran¸ca H´a uma solu¸c˜ao? Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 19 / 32
  • 101. Heran¸ca H´a uma solu¸c˜ao? Agrupar o que for comum (exatamente igual) em ambas em uma nova classe Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 19 / 32
  • 102. Heran¸ca H´a uma solu¸c˜ao? Agrupar o que for comum (exatamente igual) em ambas em uma nova classe Ambas ent˜ao compartilhariam das defini¸c˜oes (n˜ao necessariamente mem´oria) contidas nessa nova classe Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 19 / 32
  • 103. Heran¸ca H´a uma solu¸c˜ao? Agrupar o que for comum (exatamente igual) em ambas em uma nova classe Ambas ent˜ao compartilhariam das defini¸c˜oes (n˜ao necessariamente mem´oria) contidas nessa nova classe Ambas herdariam essas defini¸c˜oes Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 19 / 32
  • 104. Heran¸ca Esse esquema d´a origem a uma hierarquia de classes Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
  • 105. Heran¸ca Esse esquema d´a origem a uma hierarquia de classes Casa CasaQuad AreaCasa Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
  • 106. Heran¸ca Esse esquema d´a origem a uma hierarquia de classes Nela, a nova classe – Casa – est´a acima de CasaQuad e AreaCasa Casa CasaQuad AreaCasa Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
  • 107. Heran¸ca Esse esquema d´a origem a uma hierarquia de classes Nela, a nova classe – Casa – est´a acima de CasaQuad e AreaCasa Para manter o padr˜ao, podemos rebatizar AreaCasa para CasaRet Casa CasaQuad CasaRet Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
  • 108. Heran¸ca Esse esquema d´a origem a uma hierarquia de classes Nela, a nova classe – Casa – est´a acima de CasaQuad e AreaCasa Para manter o padr˜ao, podemos rebatizar AreaCasa para CasaRet Casa CasaQuad CasaRet Diz-se que CasaQuad e CasaRet s˜ao subclasses de Casa Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
  • 109. Heran¸ca Esse esquema d´a origem a uma hierarquia de classes Nela, a nova classe – Casa – est´a acima de CasaQuad e AreaCasa Para manter o padr˜ao, podemos rebatizar AreaCasa para CasaRet Casa CasaQuad CasaRet Diz-se que CasaQuad e CasaRet s˜ao subclasses de Casa E que Casa ´e superclasse de CasaQuad e CasaRet Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 20 / 32
  • 110. Heran¸ca Classes mais especializadas (subclasses) herdam propriedades (atributos e c´odigo) da classe mais geral (superclasse) Casa CasaQuad CasaRet Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 21 / 32
  • 111. Heran¸ca Classes mais especializadas (subclasses) herdam propriedades (atributos e c´odigo) da classe mais geral (superclasse) Casa CasaQuad CasaRet Cria-se uma subclasse inserindo somente as diferen¸cas desta para sua superclasse Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 21 / 32
  • 112. Heran¸ca Classes mais especializadas (subclasses) herdam propriedades (atributos e c´odigo) da classe mais geral (superclasse) Casa CasaQuad CasaRet Cria-se uma subclasse inserindo somente as diferen¸cas desta para sua superclasse Identifica-se a possibilidade de heran¸ca por meio da express˜ao “´e um tipo de” Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 21 / 32
  • 113. Heran¸ca Como criamos Casa? Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 22 / 32
  • 114. Heran¸ca Como criamos Casa? Separando os atributos e m´etodos idˆenticos em CasaQuad e CasaRet class Casa { double valorM2 = 1500; double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 22 / 32
  • 115. Heran¸ca Como criamos Casa? Separando os atributos e m´etodos idˆenticos em CasaQuad e CasaRet E CasaQuad? class Casa { double valorM2 = 1500; double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 22 / 32
  • 116. Heran¸ca Inserindo somente as diferen¸cas class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double valorM2) { this.valorM2 = valorM2; } CasaQuad(double lateral, double valorM2) { this(valorM2); this.lateral = lateral; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 23 / 32
  • 117. Heran¸ca Inserindo somente as diferen¸cas E dizendo ao compilador quem ´e a classe m˜ae (superclasse) class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double valorM2) { this.valorM2 = valorM2; } CasaQuad(double lateral, double valorM2) { this(valorM2); this.lateral = lateral; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 23 / 32
  • 118. Heran¸ca Esse procedimento n˜ao cria um objeto extra para a superclasse class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double valorM2) { this.valorM2 = valorM2; } CasaQuad(double lateral, double valorM2) { this(valorM2); this.lateral = lateral; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 24 / 32
  • 119. Heran¸ca Esse procedimento n˜ao cria um objeto extra para a superclasse ´E como se copiasse os atributos desta para dentro da mem´oria da subclasse class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double valorM2) { this.valorM2 = valorM2; } CasaQuad(double lateral, double valorM2) { this(valorM2); this.lateral = lateral; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 24 / 32
  • 120. Heran¸ca E por que lateral, embora comum a CasaRet e CasaQuad, foi colocada na subclasse? class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double valorM2) { this.valorM2 = valorM2; } CasaQuad(double lateral, double valorM2) { this(valorM2); this.lateral = lateral; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 25 / 32
  • 121. Heran¸ca E por que lateral, embora comum a CasaRet e CasaQuad, foi colocada na subclasse? Porque tem significados diferentes: Lateral da casa e da sala class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double valorM2) { this.valorM2 = valorM2; } CasaQuad(double lateral, double valorM2) { this(valorM2); this.lateral = lateral; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 25 / 32
  • 122. Heran¸ca E por que lateral, embora comum a CasaRet e CasaQuad, foi colocada na subclasse? Porque tem significados diferentes: Lateral da casa e da sala Poderia tamb´em haver uma casa redonda, em que esse atributo n˜ao faria sentido class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double valorM2) { this.valorM2 = valorM2; } CasaQuad(double lateral, double valorM2) { this(valorM2); this.lateral = lateral; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 25 / 32
  • 123. Heran¸ca CasaRet sai de maneira semelhante: class CasaRet extends Casa { double cquarto = 10; double lateral = 10; CasaRet() {} CasaRet(double valorM2) { this.valorM2 = valorM2; } CasaRet(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } CasaRet(double lateral, double cquarto, double valorM2) { this(lateral, cquarto); this.valorM2 = valorM2; } double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 26 / 32
  • 124. Heran¸ca Lembrando que... Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 27 / 32
  • 125. Heran¸ca Lembrando que... CasaQuad ´e um tipo de Casa Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 27 / 32
  • 126. Heran¸ca Lembrando que... CasaQuad ´e um tipo de Casa CasaRet ´e um tipo de Casa Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 27 / 32
  • 127. Heran¸ca Lembrando que... CasaQuad ´e um tipo de Casa CasaRet ´e um tipo de Casa Podemos identificar a possibilidade de heran¸ca por meio da express˜ao “´e um tipo de” Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 27 / 32
  • 128. Heran¸ca E como usamos essa nova vers˜ao? Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 28 / 32
  • 129. Heran¸ca E como usamos essa nova vers˜ao? Como antes: public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("´Area: "+cr.area()); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("M2: "+cr.valorM2); System.out.println("Valor: "+cr.valor( cr.area()); System.out.println(); System.out.println("´Area: "+cq.area()); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("M2: "+cq.valorM2); System.out.println("Valor: "+cq.valor( cq.area()); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 28 / 32
  • 130. Heran¸ca E como usamos essa nova vers˜ao? Como antes: A sa´ıda ser´a: $ java Projeto Quarto: 5.0 ´Area: 150.0 Lateral da sala: 10.0 M2: 1320.0 Valor: 198000.0 ´Area: 100.0 Lateral da casa: 10.0 M2: 1523.0 Valor: 152300.0 public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("´Area: "+cr.area()); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("M2: "+cr.valorM2); System.out.println("Valor: "+cr.valor( cr.area()); System.out.println(); System.out.println("´Area: "+cq.area()); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("M2: "+cq.valorM2); System.out.println("Valor: "+cq.valor( cq.area()); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 28 / 32
  • 131. Heran¸ca Temos acesso a todos os m´etodos e atributos tanto da subclasse public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("´Area: "+cr.area()); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("M2: "+cr.valorM2); System.out.println("Valor: "+cr.valor( cr.area()); System.out.println(); System.out.println("´Area: "+cq.area()); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("M2: "+cq.valorM2); System.out.println("Valor: "+cq.valor( cq.area()); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 29 / 32
  • 132. Heran¸ca Temos acesso a todos os m´etodos e atributos tanto da subclasse quanto da superclasse public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("´Area: "+cr.area()); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("M2: "+cr.valorM2); System.out.println("Valor: "+cr.valor( cr.area()); System.out.println(); System.out.println("´Area: "+cq.area()); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("M2: "+cq.valorM2); System.out.println("Valor: "+cq.valor( cq.area()); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 29 / 32
  • 133. Heran¸ca Temos acesso a todos os m´etodos e atributos tanto da subclasse quanto da superclasse N˜ao h´a compartilhamento de mem´oria (pois n˜ao h´a static) – cada um tem o seu espa¸co public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("´Area: "+cr.area()); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("M2: "+cr.valorM2); System.out.println("Valor: "+cr.valor( cr.area()); System.out.println(); System.out.println("´Area: "+cq.area()); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("M2: "+cq.valorM2); System.out.println("Valor: "+cq.valor( cq.area()); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 29 / 32
  • 134. Heran¸ca e Mem´oria Como se d´a o funcionamento da mem´oria nesse caso? public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("´Area: "+cr.area()); System.out.println(); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("´Area: "+cq.area()); } Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 30 / 32
  • 135. Heran¸ca e Mem´oria Como se d´a o funcionamento da mem´oria nesse caso? Ao criarmos os objetos, alocamos espa¸co para atributos tanto de sua classe quanto superclasse public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("´Area: "+cr.area()); System.out.println(); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("´Area: "+cq.area()); } ??? main args 0x23f cr 0xa3f 0xccf (0xccf) valorM2 0xf05 1320 lateral 0xfff 10 cquarto 0xfff 5 cq 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1523 lateral 0xf00 10 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 30 / 32
  • 136. Heran¸ca e Mem´oria Como se d´a o funcionamento da mem´oria nesse caso? Ao criarmos os objetos, alocamos espa¸co para atributos tanto de sua classe quanto superclasse O funcionamento dos construtores foi omitido para simplificar public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("´Area: "+cr.area()); System.out.println(); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("´Area: "+cq.area()); } ??? main args 0x23f cr 0xa3f 0xccf (0xccf) valorM2 0xf05 1320 lateral 0xfff 10 cquarto 0xfff 5 cq 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1523 lateral 0xf00 10 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 30 / 32
  • 137. Heran¸ca e Mem´oria Cada objeto tem seus pr´oprios atributos e m´etodos public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("´Area: "+cr.area()); System.out.println(); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("´Area: "+cq.area()); } ??? main args 0x23f cr 0xa3f 0xccf (0xccf) valorM2 0xf05 1320 lateral 0xfff 10 cquarto 0xfff 5 area areat 0xaa2 cq 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1523 lateral 0xf00 10 area areat 0x992 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 31 / 32
  • 138. Heran¸ca e Mem´oria Cada objeto tem seus pr´oprios atributos e m´etodos N˜ao h´a compartilhamento de nada public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("´Area: "+cr.area()); System.out.println(); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("´Area: "+cq.area()); } ??? main args 0x23f cr 0xa3f 0xccf (0xccf) valorM2 0xf05 1320 lateral 0xfff 10 cquarto 0xfff 5 area areat 0xaa2 cq 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1523 lateral 0xf00 10 area areat 0x992 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 31 / 32
  • 139. Heran¸ca e Mem´oria Cada objeto tem seus pr´oprios atributos e m´etodos N˜ao h´a compartilhamento de nada A menos que haja algum atributo ou m´etodo static public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("´Area: "+cr.area()); System.out.println(); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("´Area: "+cq.area()); } ??? main args 0x23f cr 0xa3f 0xccf (0xccf) valorM2 0xf05 1320 lateral 0xfff 10 cquarto 0xfff 5 area areat 0xaa2 cq 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1523 lateral 0xf00 10 area areat 0x992 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 31 / 32
  • 140. Heran¸ca e Mem´oria Cada objeto tem seus pr´oprios atributos e m´etodos N˜ao h´a compartilhamento de nada A menos que haja algum atributo ou m´etodo static Nesse caso, todos os objetos compartilhar˜ao do mesmo atributo/m´etodo na mem´oria public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); System.out.println("Quarto: "+ cr.cquarto); System.out.println("Lateral da sala: "+ cr.lateral); System.out.println("´Area: "+cr.area()); System.out.println(); System.out.println("Lateral da casa: "+ cq.lateral); System.out.println("´Area: "+cq.area()); } ??? main args 0x23f cr 0xa3f 0xccf (0xccf) valorM2 0xf05 1320 lateral 0xfff 10 cquarto 0xfff 5 area areat 0xaa2 cq 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1523 lateral 0xf00 10 area areat 0x992 Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 31 / 32
  • 141. Videoaula https://www.youtube.com/watch?v=_4iTg2K4bqY e https://www.youtube.com/watch?v=pnGhdy5B02I (cobrem parcialmente o conte´udo) Norton Trevisan Roman Aula 18 – Ordena¸c˜ao e Heran¸ca 11 de maio de 2020 32 / 32