[TAD-NC4] Gestão de Projetos e Empreendedorismo - Atividade: Status Report
1.Aula01_Estrut_Dados-TAD
-
Upload
franklinfelipe -
Category
Documents
-
view
212 -
download
0
Transcript of 1.Aula01_Estrut_Dados-TAD
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
1/13
Estrutura de dados
Tipo abstrato de dados
(TAD)
Estrutura de Dados
Tipo Abstrato de Dados
(TAD)
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
2/13
Estrutura de dados – Tipo abstrato de dados (TAD) 2
Introdução
Um tipo de dados é um conjunto de valores e de operações sobre
esses valores, por exemplo, o tipo de dado inteiro. Ele define um conjunto de
números inteiros (dentro de um intervalo que depende damáquina/implementação) e um conjunto de operações que pode ser feita
sobre esse conjunto (somar, subtrair, multiplicar, dividir etc.).
Já um tipo abstrato de dados (TAD) refere-se ao conceito de definição
de um tipo de dado. A definição de TAD leva à criação de um novo tipo de
dados. Para facilitar o entendimento, vamos imaginar a criação de um TAD
para armazenar os números racionais: neste TAD, os valores armazenados
têm a forma 1/2, 2/3 etc. Sobre esse conjunto podem ser especificadas
operações, como somar, subtrair, multiplicar, dividir etc.
A criação de um TAD facilita a manipulação das aplicações, já que seconsegue armazenar valores no formato que precisar.
Basicamente, um TAD é:
Uma ESTRUTURA para armazenar valores; e
Um conjunto de OPERADORES para manipular os valores
armazenados.
A tabela 1 mostra alguns exemplos de abstrações do mundo real que
podem ser realizadas. Estas abstrações se transformam em tipos abstratosde dados para facilitar a representação do mundo real.
Tabela 1. Exemplos de abstrações do mundo real
Mundo realAbstração
(informações que interessam)
Estrutura de
armazenamentoAlgumas operações
Pessoa Idade Inteiro
Somar
Subtrair
Multiplicar
Dividir
Cadastro de
funcionário
Para cada funcionário: nome,
cargo e salário
Lista ordenada (em
ordem alfabética)
Incluir funcionárioExcluir funcionário
Alterar cargo
Alterar salário
File de esperaNome de cada pessoa e posição
na filaFila
Sai da fila (o primeiro)
Entra na fila (em último)
Sub-rotinasPara cada sub-rotina: até onde
executou e variáveis locaisPilha
Push (entrar no topo)
Pop (sair do topo)
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
3/13
Estrutura de dados – Tipo abstrato de dados (TAD) 3
Na tabela 1, percebemos que TADs novos aparecem como lista, pilha
e fila. Estes tipos são utilizados com grande frequência pelos
desenvolvedores de aplicações e serão detalhados ao longo da disciplina.
Objetivo
A principal característica de um TAD é que os valores armazenados
em sua estrutura só podem ser manipulados por meio de operadores
definidos.
A ideia de se criar um TAD é análoga à caixa-preta existente nos
aviões: para que o técnico tenha acesso aos dados gravados, ele não
necessita abrir o equipamento, apenas acionar os comandos para extrair os
relatórios.
A manipulação de um TAD deve partir do mesmo princípio: a aplicaçãoque utiliza um TAD não precisa saber como é sua estrutura interna, basta
apenas saber quais são as operações existentes e qual sua função.
Objeto
Um objeto é um conceito de programação que reúne características
(informações) e seu comportamento (operações ou, ainda, métodos).
Um determinado objeto deve representar uma entidade do mundo real
em um sistema computacional. Deve ser descrito através de suas
características desejáveis (atributos) e as operações que são realizadas nele
(métodos).
As principais características de um objeto são:
Independência;
Encapsulamento (agrupamento) de atributos (dados) e
comportamento (métodos, operações);
Detalhes de implementação são ocultados; e
Herança (objetos podem herdar características de outros).
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
4/13
Estrutura de dados – Tipo abstrato de dados (TAD) 4
Abstração
LEMBRE-SEAbstração:
1. Considerar isoladamente um ou mais elementos de um todo;
separar, apartar.
2. Separar mentalmente para tomar em consideração (propriedade
que não pode ter existência fora do todo, concreto ou intuitivo, em que
aparece): abstrair a cor ou a forma de um objeto.
Abstrato: diz-se de representação à qual não corresponde nenhum dado
sensorial ou concreto.
Abstração: ato de separar mentalmente um ou mais elementos de uma
totalidade complexa (coisa, representação, fato), os quais só mentalmente
podem subsistir fora dessa realidade.
FERREIRA, 1996
No contexto de software:
Abstrair (considerar isoladamente, representar) elementos do
mundo real;
Separação (mental) entre representações e implementações; e
Separação entre funcionalidade e implementação.
LEMBRE-SEDeve-se abstrair uma representação de sua implementação, pois cada
implementação varia de acordo com a linguagem de programação – ao
contrário da representação, que é a mesma –, e deve-se definir como uma
funcionalidade será disponibilizada para utilização; seus detalhes de
implementação não são interessantes para quem as utiliza.
Exemplo
Para facilitar o entendimento e a utilização de um TAD, vamos estudar
a criação de um TAD chamado Vetor, utilizando alocação estática
(TAMASSIA; GOODRICH, 2007) de memória, ou seja, a quantidade máxima
de itens presentes do vetor será determinada na criação, e não poderá sermodificada.
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
5/13
Estrutura de dados – Tipo abstrato de dados (TAD) 5
Em vetores, os itens de dados são relacionados e do mesmo tipo.
Além disso, os vetores permanecem com o mesmo tamanho, desde sua
criação até deixarem de existir.
A figura 1 ilustra a representação de um vetor com 12 (doze)
elementos, em que a posição 0 (zero) representa a primeira posição e aposição 11 (onze) representa a décima segunda e última posição. No
exemplo da figura 1, o vetor tem nome c.
Figura 1. Exemplo de um vetor de 12 posições
LEMBRE-SEOs vetores são objetos que ocupam espaço de memória, sendo que
cada posição do vetor ocupa um espaço diferente na memória e as posições
são armazenadas sequencialmente (LORENZI; MATTOS; CARVALHO,
2007).
A figura 2 mostra o código para a criação do TAD Vetor. Os códigos
apresentados nesta disciplina foram elaborados utilizando a linguagem Java
(DEITEL; DEITEL, 2010).
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
6/13
Estrutura de dados – Tipo abstrato de dados (TAD) 6
Figura 2. Estrutura e código do TAD Vetor
O nome do TAD criado é exatamente o nome da classe. Isso pode ser
visualizado na linha 1 da figura 2.
As linhas 3 e 4 da figura 2 representam a estrutura de armazenamento
para o TAD Vetor. A linha 3 declara um vetor a de inteiros e a linha 4 declara
uma variável, denominada nElems, que armazena a quantidade de
elementos do vetor.
As linhas de 6 a 10 representam o construtor do TAD Vetor. Quando
um objeto do TAD Vetor for criado, o construtor do TAD deverá ser chamado.
O construtor do TAD possui um argumento, que é a quantidade máxima deelementos que o vetor armazenará.
Dentro do construtor, duas operações são realizadas:
O vetor a interno é iniciado, e, neste instante, informa-se o seu
tamanho, ou seja, a quantidade máxima de elementos que
podem ser armazenados;
Inicia-se a variável nElems, que armazena a quantidade de
elementos do vetor, com o valor zero. Ou seja, o vetor,inicialmente, encontra-se vazio.
1 public class Vetor
2 {
3 private int a[];
4 private int nElems;
56 public Vetor(int max)7 {
8 a = new int[max];
9 nElems = 0;
10 }
11 // Operação de busca
12 // Operação de inserção
13 // Operação de remoção
14 // Operação de impressão
15 }
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
7/13
Estrutura de dados – Tipo abstrato de dados (TAD) 7
As linhas de 11 a 14 representam as operações existentes neste TAD,
no caso, as operações de busca, inserção, remoção e impressão,
respectivamente. O código destas operações é visualizado nas próximas
figuras.
A figura 3 mostra o código para a operação de busca.
Figura 3. Código para a operação de busca no TAD Vetor
Na figura 3, a linha 1 mostra que o método de busca recebe um
argumento como parâmetro, que é o valor a ser pesquisado, e retorna um
valor booleano como resposta. Se for true, este valor pertence ao vetor, e se
for false, não.
A linha 4 possui uma estrutura de repetição que é utilizada para
percorrer o vetor e pesquisar se o valor pertence ao vetor. A estrutura de
repetição tem a variável contadora j , que é utilizada para percorrer o vetor a,
iniciada com o valor 0 (zero) e incrementada em 1 (um) a cada iteração, e a
repetição ocorre enquanto a variável j for menor do que a quantidade de
elementos do vetor (nElems).
A linha 5 verifica se o valor armazenado na posição j do vetor a é igual
ao valor pesquisado. Caso seja, a linha 6 mostra a instrução break , que
“força” a saída da estrutura de repetição. Isso ocorre porque, como o valor já
foi encontrado, não é necessário que o vetor seja percorrido até o final.
Após ter percorrido o vetor, está na hora de retornarmos a informação
se o elemento pesquisado pertence ou não ao vetor. A linha 7 verifica se a
variável contadora j é igual à nElems. Caso seja igual, isso significa que o
// Operação de busca
1 public boolean busca(int searchKey)2 {
3 int j;
4 for(j=0; j
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
8/13
Estrutura de dados – Tipo abstrato de dados (TAD) 8
vetor foi percorrido até o final e não se encontrou o valor pesquisado. Com
isso, nós retornamos false, como mostra a linha 8. Caso a variável j seja
diferente de nElems, o valor pesquisado foi encontrado e a linha 10 mostra o
retorno true.
A figura 4 mostra o código para a operação de inserção.
Figura 4. Código para a operação de inserção no TAD Vetor
Na figura 4, a linha 1 mostra que o método de inserção recebe um
argumento como parâmetro, que é o valor a ser inserido, e não retorna
nenhuma informação para a aplicação.
A linha 3 verifica se a quantidade de elementos do vetor (nElems) é
menor do que o tamanho do vetor a (a.length). Caso esta verificação dê falso,
o valor não é inserido no vetor, pois isso significa que o vetor está cheio.
Entendeu esta validação? Isso é fundamental para nós não inserirmos mais
elementos do que a capacidade do vetor.
Caso o vetor não esteja cheio, as linhas 4 e 5 são executadas. Na
linha 4 é feita a inserção do valor na primeira posição livre do vetor, que é a
posição nElems. A linha 5 faz o incremento da variável nElems em uma
unidade.
A figura 5 mostra o código para remoção de um elemento no TAD
Vetor.
// Operação de inserção
1 public void insere(int value)
2 {
3 if( nElems < a.length ) {
4 a[nElems] = value;
5 nElems++;
6 }
7 }
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
9/13
Estrutura de dados – Tipo abstrato de dados (TAD) 9
Figura 5. Código para a operação de remoção no TAD Vetor
Na figura 5, a linha 1 mostra que o método de remoção recebe um
argumento como parâmetro, que é o valor a ser removido, e retorna um valor
booleano como resposta. Se for true, o valor foi removido do vetor, e se for
false, não.
A linha 4 possui uma estrutura de repetição, que é utilizada para
percorrer o vetor e pesquisar se o valor pertence ao vetor. A estrutura de
repetição tem a variável contadora j , que é utilizada para percorrer o vetor a,
iniciada com o valor 0 (zero) e incrementada em 1 (um) a cada iteração, e a
repetição ocorre enquanto a variável j for menor do que a quantidade de
elementos do vetor (nElems).
A linha 5 verifica se o valor armazenado na posição j do vetor a é igual
ao valor pesquisado. Caso seja, a linha 6 mostra a instrução break , que
“força” a saída da estrutura de repetição. Isso ocorre porque, como o valor já
foi encontrado, não é necessário que o vetor seja percorrido até o final.
Após ter percorrido o vetor, verificamos se o valor foi encontrado. A
linha 7 verifica se a variável contadora j é igual à nElems. Caso seja igual, o
vetor foi percorrido até o final e não se encontrou o valor pesquisado. Com
isso, nós retornamos false, como mostra a linha 8. Caso a variável j seja
diferente de nElems, o valor pesquisado foi encontrado e nós podemos
remover o valor do vetor a.
// Operação de remoção
1 public boolean remove(int value)2 {3 int j;
4 for(j=0; j
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
10/13
Estrutura de dados – Tipo abstrato de dados (TAD) 10
A linha 11 mostra a variável nElems sendo decrementada em uma
unidade. Isso ocorre porque o valor foi encontrado e será removido.
A linha 12 mostra a estrutura de repetição for . Esta estrutura é
utilizada para percorrer o vetor da posição a ser removida até o fim do vetor.
LEMBRE-SEPrecisamos desta estrutura para evitar que o vetor fique
“desconfigurado” e cheio de “buracos” nas posições intermediárias do vetor.
A linha 13 faz o deslocamento dos valores do vetor uma posição à
esquerda. Fazemos isso para eliminar os “buracos” que podem aparecer
devido às remoções dos valores do vetor. Vamos supor que o valor a ser
removido está na quarta posição do vetor. Para não ficar um buraco nesta
posição, deslocamos o elemento da quinta posição para a quarta posição, oelemento da sexta para a quinta posição, e assim sucessivamente.
Após os deslocamentos, retornamos true para a aplicação, informando
que a remoção foi realizada com sucesso.
A figura 6 mostra o código da operação de impressão.
Figura 6. Código para a operação de impressão no TAD Vetor
Na figura 6, a linha 1 mostra que o método de impressão não recebe
argumentos como parâmetro e não retorna nenhuma informação para a
aplicação.
A linha 3 mostra a estrutura de repetição que é utilizada para percorrer
as posições preenchidas do vetor a. A cada iteração, uma posição do vetor é
impressa, como mostra a linha 4. Após o término da impressão, pula-se uma
linha, através de um enter , conforme mostra a linha 5.
Após explicar o código do TAD Vetor, vamos criar uma aplicação que
utilize as operações do TAD explicado. A figura 7 mostra o código de uma
aplicação que cria um objeto do TAD Vetor.
// Operação de impressão
1 public void imprime()
2 {
3 for(int j=0; j
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
11/13
Estrutura de dados – Tipo abstrato de dados (TAD) 11
Figura 7. Código da aplicação que utiliza o TAD Vetor
Por meio do código apresentado na figura 7, vemos que:
A linha 4 cria um objeto arr do TAD Vetor, chama o seu
construtor, passando maxSize como o tamanho do vetor.
As linhas de 6 a 9 inserem valores no vetor, e os valores
inseridos são passados por parâmetro.
A linha 10 chama a operação de impressão do vetor, e gera
como saída: 77 99 44 55 .
A linha 12 chama a operação de busca, passando o valor 35
como parâmetro. Ou seja, queremos verificar se o elemento 35
pertence ao vetor. Caso ele pertença ao vetor, imprimimos
“Encontrado 35”. Caso contrário, imprimimos “Não encontrado
35”. Neste exemplo, imprimiremos que ele não foi encontrado.
A linha 17 chama a operação para remover o elemento 99 do
vetor. Caso chamemos a operação de impressão após estaremoção, como será a impressão? A saída será a seguinte:
// Código da Aplicação
1 public static void main(String[] args)
2 {3 int maxSize = 100;
4 Vetor arr = new Vetor(maxSize);
5
6 arr.insere(77);
7 arr.insere(99);
8 arr.insere(44);
9 arr.insere(55);
10 arr.imprime();
11
12 if( arr.busca( 35 ) )13 System.out.println("Encontrado " + 35);
14 else
15 System.out.println("Nao encontrado " + 35);
16
17 arr.remove(99);
18 }
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
12/13
Estrutura de dados – Tipo abstrato de dados (TAD) 12
77 44 55 .
Com isso, encerramos um exemplo de TAD. Para mais informações
sobre TAD, leia:
LEITURA COMPLEMENTARParte conceitual de TAD
http://code.sejadiferente.net/?q=pt-br/node/50
http://code.sejadiferente.net/sites/default/files/book/oo/TiposAbst
ratosDeDados.pdf
Vantagens
Algumas vantagens importantes na utilização de TAD são:
Maior facilidade para programar (sem a necessidade de se
preocupar com detalhes de implementação);
Maior segurança para programar (apenas as operações podem
alterar o conteúdo armazenado na estrutura);
Maior independência e portabilidade de código (alterações na
implementação de um objeto não implicam alterações de suas
funcionalidades) –
operações possuem a mesma sintaxe; e
Maior potencial de reutilização de código (pode-se alterar a
lógica de um programa sem a necessidade de reconstruir
objetos). Diferentes aplicações com diferentes propósitos
podem utilizar o mesmo TAD.
-
8/19/2019 1.Aula01_Estrut_Dados-TAD
13/13
Estrutura de dados – Tipo abstrato de dados (TAD) 13
Bibliografia
DEITEL, Paul; DEITEL, Harvey. Java – Como programar. 8. ed. São
Paulo: Prentice Hall, 2010.
FERREIRA, Aurélio B. de Hollanda. Novo Dicionário da Língua
Portuguesa. Rio de Janeiro: Nova Fronteira, 1996.
LORENZI, Fabiana; MATTOS, Patrícia Noll de; CARVALHO, Tanisi
Pereira de. Estrutura de dados. São Paulo: Thomson Learning, 2007.
TAMASSIA, Roberto; GOODRICH, Michael T. Estruturas de dados e
algoritmos em Java. 4. ed. São Paulo: Bookman, 2007.