O documento discute os conceitos de Tipo Abstrato de Dados (TAD). Um TAD é caracterizado por um conjunto de valores e operações, mas não por sua representação interna de dados. Um TAD deve ter um contrato especificando seus atributos e operações, sem definir a representação ou algoritmos. Isso permite separação de interesses entre implementação e uso do TAD.
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Alex Camargo
O documento descreve o que é um Tipo Abstrato de Dados (TAD) em três frases. Apresenta TAD como uma combinação de estrutura de dados e operações, encapsulando a estrutura para fornecer uma interface ao usuário. Explica também que TAD promove reuso e manutenção de código ao separar implementação da interface. Por fim, fornece um exemplo de TAD para conta bancária com operações como depositar, sacar e imprimir saldo.
O documento apresenta os conceitos de algoritmos, estruturas de dados, tipos abstratos de dados (TADs) e como implementá-los na linguagem C. Explica que algoritmos trabalham sobre estruturas de dados e que TADs encapsulam estruturas de dados e operações. Apresenta exemplos de implementação de TADs como lista encadeada e conta bancária em C usando arquivos de cabeçalho e implementação.
1. Introdução a estruturas de dados, incluindo Tipos de Dados Abstractos (TDA), ponteiros, funções e estruturas definidas pelo programador.
2. Listas lineares como listas sequenciais, ligadas, circulares e duplamente ligadas e implementações de pilhas e filas.
3. Árvores, incluindo representação, terminologia e tipos como binárias e balanceadas.
4. Ordenação com métodos como seleção, inserção, shellsort e quicksort.
5. Pesquisa com métodos sequencial, binária e em
Este documento fornece informações sobre um professor de estrutura de dados, incluindo sua formação acadêmica, experiência profissional e as tecnologias que utiliza. O documento também descreve os objetivos da disciplina de estrutura de dados.
Uma estrutura é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes, colocadas juntas sob um único nome para manipulação conveniente. Por exemplo, para representar um aluno são necessárias as informações nome, matrícula, conceito. Ao invés de criar três variáveis, é possível criar uma única variável contendo três campos. Em C/C++, usa-se a construção struct para representar esse tipo de dado.
O documento resume os principais conceitos sobre estruturas em C/C++. Em 3 frases:
1) Apresenta o que são estruturas (structs) em C/C++, que permitem agrupar variáveis de tipos diferentes sob um único nome para manipulação conveniente de dados.
2) Explica que estruturas e tipos abstratos de dados (TADs) podem ser implementados em C/C++ através de typedef e structs, encapsulando dados e operações em funções.
3) Fornece um exemplo de implementação de um TAD ContaBanc
O documento discute introdução à estrutura de dados, incluindo definições de estrutura de dados, processamento de dados, organização de arquivos e variáveis. Também cobre tipos de dados primitivos e declarando variáveis.
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Alex Camargo
O documento descreve o que é um Tipo Abstrato de Dados (TAD) em três frases. Apresenta TAD como uma combinação de estrutura de dados e operações, encapsulando a estrutura para fornecer uma interface ao usuário. Explica também que TAD promove reuso e manutenção de código ao separar implementação da interface. Por fim, fornece um exemplo de TAD para conta bancária com operações como depositar, sacar e imprimir saldo.
O documento apresenta os conceitos de algoritmos, estruturas de dados, tipos abstratos de dados (TADs) e como implementá-los na linguagem C. Explica que algoritmos trabalham sobre estruturas de dados e que TADs encapsulam estruturas de dados e operações. Apresenta exemplos de implementação de TADs como lista encadeada e conta bancária em C usando arquivos de cabeçalho e implementação.
1. Introdução a estruturas de dados, incluindo Tipos de Dados Abstractos (TDA), ponteiros, funções e estruturas definidas pelo programador.
2. Listas lineares como listas sequenciais, ligadas, circulares e duplamente ligadas e implementações de pilhas e filas.
3. Árvores, incluindo representação, terminologia e tipos como binárias e balanceadas.
4. Ordenação com métodos como seleção, inserção, shellsort e quicksort.
5. Pesquisa com métodos sequencial, binária e em
Este documento fornece informações sobre um professor de estrutura de dados, incluindo sua formação acadêmica, experiência profissional e as tecnologias que utiliza. O documento também descreve os objetivos da disciplina de estrutura de dados.
Uma estrutura é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes, colocadas juntas sob um único nome para manipulação conveniente. Por exemplo, para representar um aluno são necessárias as informações nome, matrícula, conceito. Ao invés de criar três variáveis, é possível criar uma única variável contendo três campos. Em C/C++, usa-se a construção struct para representar esse tipo de dado.
O documento resume os principais conceitos sobre estruturas em C/C++. Em 3 frases:
1) Apresenta o que são estruturas (structs) em C/C++, que permitem agrupar variáveis de tipos diferentes sob um único nome para manipulação conveniente de dados.
2) Explica que estruturas e tipos abstratos de dados (TADs) podem ser implementados em C/C++ através de typedef e structs, encapsulando dados e operações em funções.
3) Fornece um exemplo de implementação de um TAD ContaBanc
O documento discute introdução à estrutura de dados, incluindo definições de estrutura de dados, processamento de dados, organização de arquivos e variáveis. Também cobre tipos de dados primitivos e declarando variáveis.
O documento discute a implementação de classes Data e Hora utilizando encapsulamento e modificadores de acesso na programação orientada a objetos. Inicialmente, as classes apresentam atributos públicos, permitindo alterações inválidas. Posteriormente, os atributos são declarados como privados e métodos públicos de acesso são implementados para validar as entradas. O exercício proposto é implementar as classes Hora e Data com packages e explorar diferentes modificadores de acesso.
O documento apresenta o plano de ensino de uma disciplina de estrutura de dados. Ele descreve os tópicos a serem abordados, como estruturas de dados primitivas, algoritmos de ordenação e pesquisa, medidas de complexidade algorítmica e desenvolvimento com estruturas de dados. Também descreve a metodologia de ensino, com aulas práticas em C, listas de exercícios, trabalhos e avaliações.
O documento apresenta exemplos de manipulação de datas em Java utilizando as classes Date e Calendar. São mostrados exemplos de como pegar a data atual, definir datas explicitamente, comparar datas, converter entre Date e String em diferentes formatos e recuperar partes específicas como dia, mês e ano.
O documento apresenta um professor de Java e detalha seu currículo e experiência. Ele também fornece informações sobre o conteúdo e avaliação da disciplina de Java, incluindo estruturas de dados, algoritmos e desenvolvimento usando a linguagem Java.
O documento descreve estruturas (structs) no C, incluindo: (1) Como definir estruturas nomeadas e variáveis do tipo estrutura; (2) Como acessar elementos internos de estruturas usando o operador ponto; (3) Vetores de estruturas e alocação dinâmica de memória para estruturas; (4) Uso de estruturas como tipo de função.
O documento discute os conceitos de sobrecarga e sobreposição de métodos em programação orientada a objetos. A sobrecarga permite a criação de métodos com o mesmo nome mas assinaturas diferentes, enquanto a sobreposição ocorre quando subclasses implementam versões específicas de métodos herdados. O documento fornece exemplos de como aplicar corretamente esses conceitos e as regras para sua utilização.
1. O documento apresenta o projeto de um sistema para uma empresa de aluguel de buggies utilizando diagramas de classe, modelo conceitual e implementação em C#.
2. Foram desenvolvidos o diagrama de classe, modelo conceitual no brModelo e classes em C# para cliente, reserva, buggy e tipo de buggy.
3. Também foi apresentada a sugestão de equipamentos necessários para a implementação do sistema.
1. O documento apresenta o projeto de um sistema para uma empresa de aluguel de buggies utilizando diagrama de classes, modelo conceitual e implementação em C#.
2. Foram desenvolvidas as classes Cliente, Reserva, Buggy e Tipo_Buggy com atributos e métodos.
3. Também foi apresentada a sugestão de equipamentos mínimos para a execução do sistema.
Este documento apresenta os principais tópicos sobre ponteiros e funções em C, incluindo: 1) como declarar e usar ponteiros para variáveis, vetores e strings; 2) como declarar e usar funções, incluindo parâmetros, retorno e protótipos; e 3) diretivas de compilação como #include e #define. Exemplos de código são fornecidos para ilustrar cada tópico.
O documento discute estruturas de dados compostas em C++, especificamente registos. Apresenta exemplos de declaração e utilização de registos, incluindo a combinação de registos com vectores. Explica como passar registos para funções.
Algoritmos e Estrutura de Dados - Aula 03thomasdacosta
O documento discute modularização e funções em programação. Explica que modularização divide um programa em partes menores para facilitar manutenção e entendimento. Funções são blocos de código reutilizáveis que executam tarefas específicas. O documento fornece exemplos de como criar, chamar e usar funções, incluindo parâmetros por valor e por referência.
Algoritmos e Técnicas de Programação - Aula 06thomasdacosta
O documento discute estruturas de dados em C/C++. Ele define estruturas como um conjunto de variáveis que representam características de um determinado domínio. Exemplos de estruturas incluem alunos em uma faculdade e funcionários em uma empresa. Ele explica como declarar estruturas, acessar membros de estruturas, atribuir valores a membros e usar estruturas com vetores.
O documento discute interfaces em Java. Uma interface define métodos que classes implementadoras devem implementar, permitindo desacoplamento e reuso de código. Exemplos mostram interfaces para elementos gráficos e tipos de pagamento sendo implementadas por classes específicas.
O documento discute a manipulação de datas em Java, cobrindo classes como Date, Calendar, GregorianCalendar e formatos. Ele explica como imprimir, formatar e comparar datas, além de tratar de internacionalização e diferenças entre datas.
O documento apresenta os objetivos e conteúdos de uma disciplina sobre algoritmos e estruturas de dados. Os tópicos incluem listas lineares, pilhas, filas, classificação de dados, recursividade e tipos abstratos de dados.
O documento apresenta os objetivos e conteúdos de uma disciplina de Algoritmos e Estrutura de Dados II. Os tópicos incluem listas lineares, pilhas, filas, classificação de dados e listas ligadas, com foco em definir formalmente estruturas de dados e selecioná-las para aplicações.
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
1. O documento apresenta uma monografia sobre a aplicação de integração contínua para viabilizar a rastreabilidade de artefatos durante a manutenção de software.
2. O trabalho propõe a utilização de ferramentas como Git, Jenkins, Redmine e SonarQube para permitir a rastreabilidade entre requisitos, código e resultados dos testes durante o ciclo de vida do software.
3. É apresentada a instalação e configuração destas ferramentas em um ambiente integrado para permitir a integração e validação contínua do
O documento discute árvores binárias de busca, definindo suas propriedades e operações básicas como busca, inserção e remoção de elementos. Explica que as árvores binárias de busca mantêm uma ordem entre os elementos dos nós, tornando eficiente buscas, inserções e remoções.
A pilha é uma estrutura de dados simples onde os elementos são inseridos e removidos sempre do topo. O documento descreve as operações básicas de empilhar (push) e desempilhar (pop) e apresenta implementações de pilhas usando vetores e listas encadeadas.
O documento descreve como implementar uma fila usando uma lista encadeada simples. Uma estrutura Fila contém ponteiros para o início e fim da lista, e métodos são fornecidos para inserir e remover itens da fila.
O documento descreve as listas encadeadas e como representá-las em C. As listas encadeadas representam uma sequência de objetos na memória ligados por ponteiros. Cada elemento da lista contém um campo de dados e um ponteiro para o próximo elemento, permitindo acesso flexível aos itens.
O documento discute (1) a diferença entre variáveis de valor e referência, (2) como atribuir referências faz com que ambas apontem para o mesmo objeto e (3) como alocar memória dinamicamente usando new em Java/C++.
Mais conteúdo relacionado
Semelhante a Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
O documento discute a implementação de classes Data e Hora utilizando encapsulamento e modificadores de acesso na programação orientada a objetos. Inicialmente, as classes apresentam atributos públicos, permitindo alterações inválidas. Posteriormente, os atributos são declarados como privados e métodos públicos de acesso são implementados para validar as entradas. O exercício proposto é implementar as classes Hora e Data com packages e explorar diferentes modificadores de acesso.
O documento apresenta o plano de ensino de uma disciplina de estrutura de dados. Ele descreve os tópicos a serem abordados, como estruturas de dados primitivas, algoritmos de ordenação e pesquisa, medidas de complexidade algorítmica e desenvolvimento com estruturas de dados. Também descreve a metodologia de ensino, com aulas práticas em C, listas de exercícios, trabalhos e avaliações.
O documento apresenta exemplos de manipulação de datas em Java utilizando as classes Date e Calendar. São mostrados exemplos de como pegar a data atual, definir datas explicitamente, comparar datas, converter entre Date e String em diferentes formatos e recuperar partes específicas como dia, mês e ano.
O documento apresenta um professor de Java e detalha seu currículo e experiência. Ele também fornece informações sobre o conteúdo e avaliação da disciplina de Java, incluindo estruturas de dados, algoritmos e desenvolvimento usando a linguagem Java.
O documento descreve estruturas (structs) no C, incluindo: (1) Como definir estruturas nomeadas e variáveis do tipo estrutura; (2) Como acessar elementos internos de estruturas usando o operador ponto; (3) Vetores de estruturas e alocação dinâmica de memória para estruturas; (4) Uso de estruturas como tipo de função.
O documento discute os conceitos de sobrecarga e sobreposição de métodos em programação orientada a objetos. A sobrecarga permite a criação de métodos com o mesmo nome mas assinaturas diferentes, enquanto a sobreposição ocorre quando subclasses implementam versões específicas de métodos herdados. O documento fornece exemplos de como aplicar corretamente esses conceitos e as regras para sua utilização.
1. O documento apresenta o projeto de um sistema para uma empresa de aluguel de buggies utilizando diagramas de classe, modelo conceitual e implementação em C#.
2. Foram desenvolvidos o diagrama de classe, modelo conceitual no brModelo e classes em C# para cliente, reserva, buggy e tipo de buggy.
3. Também foi apresentada a sugestão de equipamentos necessários para a implementação do sistema.
1. O documento apresenta o projeto de um sistema para uma empresa de aluguel de buggies utilizando diagrama de classes, modelo conceitual e implementação em C#.
2. Foram desenvolvidas as classes Cliente, Reserva, Buggy e Tipo_Buggy com atributos e métodos.
3. Também foi apresentada a sugestão de equipamentos mínimos para a execução do sistema.
Este documento apresenta os principais tópicos sobre ponteiros e funções em C, incluindo: 1) como declarar e usar ponteiros para variáveis, vetores e strings; 2) como declarar e usar funções, incluindo parâmetros, retorno e protótipos; e 3) diretivas de compilação como #include e #define. Exemplos de código são fornecidos para ilustrar cada tópico.
O documento discute estruturas de dados compostas em C++, especificamente registos. Apresenta exemplos de declaração e utilização de registos, incluindo a combinação de registos com vectores. Explica como passar registos para funções.
Algoritmos e Estrutura de Dados - Aula 03thomasdacosta
O documento discute modularização e funções em programação. Explica que modularização divide um programa em partes menores para facilitar manutenção e entendimento. Funções são blocos de código reutilizáveis que executam tarefas específicas. O documento fornece exemplos de como criar, chamar e usar funções, incluindo parâmetros por valor e por referência.
Algoritmos e Técnicas de Programação - Aula 06thomasdacosta
O documento discute estruturas de dados em C/C++. Ele define estruturas como um conjunto de variáveis que representam características de um determinado domínio. Exemplos de estruturas incluem alunos em uma faculdade e funcionários em uma empresa. Ele explica como declarar estruturas, acessar membros de estruturas, atribuir valores a membros e usar estruturas com vetores.
O documento discute interfaces em Java. Uma interface define métodos que classes implementadoras devem implementar, permitindo desacoplamento e reuso de código. Exemplos mostram interfaces para elementos gráficos e tipos de pagamento sendo implementadas por classes específicas.
O documento discute a manipulação de datas em Java, cobrindo classes como Date, Calendar, GregorianCalendar e formatos. Ele explica como imprimir, formatar e comparar datas, além de tratar de internacionalização e diferenças entre datas.
O documento apresenta os objetivos e conteúdos de uma disciplina sobre algoritmos e estruturas de dados. Os tópicos incluem listas lineares, pilhas, filas, classificação de dados, recursividade e tipos abstratos de dados.
O documento apresenta os objetivos e conteúdos de uma disciplina de Algoritmos e Estrutura de Dados II. Os tópicos incluem listas lineares, pilhas, filas, classificação de dados e listas ligadas, com foco em definir formalmente estruturas de dados e selecioná-las para aplicações.
Semelhante a Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados (16)
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
1. O documento apresenta uma monografia sobre a aplicação de integração contínua para viabilizar a rastreabilidade de artefatos durante a manutenção de software.
2. O trabalho propõe a utilização de ferramentas como Git, Jenkins, Redmine e SonarQube para permitir a rastreabilidade entre requisitos, código e resultados dos testes durante o ciclo de vida do software.
3. É apresentada a instalação e configuração destas ferramentas em um ambiente integrado para permitir a integração e validação contínua do
O documento discute árvores binárias de busca, definindo suas propriedades e operações básicas como busca, inserção e remoção de elementos. Explica que as árvores binárias de busca mantêm uma ordem entre os elementos dos nós, tornando eficiente buscas, inserções e remoções.
A pilha é uma estrutura de dados simples onde os elementos são inseridos e removidos sempre do topo. O documento descreve as operações básicas de empilhar (push) e desempilhar (pop) e apresenta implementações de pilhas usando vetores e listas encadeadas.
O documento descreve como implementar uma fila usando uma lista encadeada simples. Uma estrutura Fila contém ponteiros para o início e fim da lista, e métodos são fornecidos para inserir e remover itens da fila.
O documento descreve as listas encadeadas e como representá-las em C. As listas encadeadas representam uma sequência de objetos na memória ligados por ponteiros. Cada elemento da lista contém um campo de dados e um ponteiro para o próximo elemento, permitindo acesso flexível aos itens.
O documento discute (1) a diferença entre variáveis de valor e referência, (2) como atribuir referências faz com que ambas apontem para o mesmo objeto e (3) como alocar memória dinamicamente usando new em Java/C++.
O documento discute recursividade, definindo-a como um objeto ou processo que se refere a si mesmo. Explica que recursividade divide um problema em subproblemas da mesma natureza e fornece exemplos como fatorial e fibonacci. Também discute vantagens e desvantagens de programação recursiva.
O documento descreve o funcionamento de filas, listas lineares que adotam a política FIFO. As filas permitem inserções no final e remoções no início. Elas podem ser implementadas usando vetores de forma circular, incrementando os índices de modo a "andar" no vetor.
O documento discute funções e procedimentos em Java. Resume-se em 3 frases:
1) Funções são blocos de código que retornam um valor ao serem chamados, enquanto procedimentos executam ações mas não retornam valores. 2) Funções e procedimentos organizam e reutilizam código, evitando repetições. 3) O documento fornece exemplos de como declarar e usar funções e procedimentos em Java.
O documento discute variáveis compostas como vetores e matrizes. Em particular:
1) Vetores e matrizes são conjuntos de variáveis do mesmo tipo armazenadas em posições de memória identificadas por índices.
2) Vetores usam um único índice para endereçar elementos, enquanto matrizes usam dois ou mais índices.
3) Exemplos mostram como declarar, acessar e manipular vetores e matrizes.
1) O documento descreve diferentes estruturas condicionais e de repetição da linguagem Java, como if/else, if aninhado, operador ternário, switch/case, while, do-while e for.
2) Inclui exemplos de como implementar aumentos salariais usando switch/case e verificar primos e pagar dívidas usando loops.
3) Também mostra como desenhar figuras usando loops aninhados.
O documento discute o design responsivo para websites, propondo uma abordagem flexível com grid, imagens e media queries que permitem a adaptação do layout a diferentes telas. O design responsivo garante que a web seja acessível em qualquer dispositivo.
O documento discute comunicação distribuída através de middleware JMS, explicando que ele permite comunicação entre componentes e aplicações de forma assíncrona através de mensagens enviadas e recebidas por meio de canais administrados por um serviço central de mensagens. O JMS fornece acoplamento fraco entre os sistemas e escalabilidade, permitindo que novos clientes se conectem para usar as mensagens.
O documento discute estratégias de comunicação distribuída, incluindo EJB. Ele lista vários tipos de comunicação em sistemas distribuídos como sockets, RMI, CORBA, EJB e serviços Web. O documento também discute instalação e configuração do JBoss e conceitos relacionados a JEE, como EJB, entidades e unidades de persistência.
O documento discute o gerenciamento de memória pela máquina virtual Java, incluindo alocação de recursos, reciclagem, fragmentação, recolocação, compactação e gerenciamento automático. Também aborda o heap, com as gerações jovem e velha, e os algoritmos de coleta de lixo como paralelo, concorrente e compactante.
O documento descreve as árvores binárias, incluindo suas propriedades básicas, como grau, altura e tipos de árvores binárias. Também apresenta operações como busca, inserção e remoção em árvores binárias de busca.
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
O documento discute ferramentas para desenvolvimento web com foco em produtividade. Ele apresenta o Hibernate para mapeamento objeto-relacional, o JBoss Seam para gerenciamento de contexto da aplicação, e o RichFaces para interfaces ricas com AJAX. O documento também descreve o uso dessas ferramentas em uma cooperativa agroindustrial.
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
O documento discute ferramentas para desenvolvimento web que aumentam a produtividade, como JSF e RichFaces, que fornecem recursos como interfaces ricas, suporte a temas e templates, Ajax, transações longas e injeção de dependência. O autor seleciona essas ferramentas com base em critérios como desempenho, integração e suporte, e demonstra como elas permitem maior produtividade e abstraem complexidade.
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
Os frameworks fornecem infraestrutura de projeto que reduz o tempo para produção de aplicações, aumentando o reuso de design, código e testes. Frameworks definem a arquitetura e fluxo de execução das aplicações, liberando o desenvolvedor para estender o comportamento do framework.
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
2. Um Tipo Abstrato de Dados é caracterizado
por
◦ Um conjunto de valores
◦ Um conjunto de operações
Não é caracterizado pela sua representação
interna de dados
Prof. Adriano Teixeira de Souza
3. Os dados internos de um TAD são privativos
◦ Código da aplicação não consegue manipular
◦ Manipulável apenas pelas operações definidas em
um TAD
A representação de dados é intercambiável,
sem afetar o código da aplicação
◦ Apenas as operações precisam ser recodificadas
Prof. Adriano Teixeira de Souza
4. Um TAD deve possuir um contrato que
◦ Especifique o seu conjunto de atributos
◦ Especifique a assinatura de suas operações (i.e.,
nome da operação, tipos de parâmetros, tipos de
resultados e comportamento observável)
O contrato não especifica a representação
dos dados nem os algoritmos necessários
para as operações
Prof. Adriano Teixeira de Souza
5. O comportamento observável de uma
operação é o seu efeito da forma que é
‘observado’ pelo código da aplicação
◦ Exemplo de um comportamento observável: busca
em um array
◦ Exemplos de algoritmos com um comportamento:
busca linear, busca binária
Prof. Adriano Teixeira de Souza
6. A implementação de um TAD deve seguir
rigorosamente aquilo que foi especificado no seu
contrato
A implementação de um programa deve utilizar
um TAD apenas na forma como suas operações
são definidas no contrato
Separação de Interesses (Separation of Concerns)
◦ A implementação de um TAD não se preocupa com os
programas que irão utilizá-lo
◦ A implementação de um programa não se preocupa em
como um TAD foi implementado
◦ Propriedade fundamental para o projeto, implementação
e manutenção de grandes sistemas
Prof. Adriano Teixeira de Souza
7. Requisitos:
◦ Os valores armazenados podem ser datas do
passado, do presente ou do futuro
◦ Deve ser possível:
construir uma data a partir de um ano a, mês m, e dia-
no-mês d.
comparar datas
fornecer uma data no formato “a-m-d”
avançar uma data por n dias
Prof. Adriano Teixeira de Souza
8. Possível contrato, expresso na forma de um
esquema de declaração de classe
public class Date {
// Cada valor de Date é uma data atual, do passado ou do futuro
private ...;
public Date (int a, int m, int d);
// Constrói uma data com ano a, mês m, dia do mês d
public int compareTo (Date that);
// retorna -1 se é anterior a este,
// ou 0 se a data é igual a este,
// ou +1 se data é posterior a este
public String toString ();
// retorna a data no formato “a-m-d”
public void advance (int n);
// Avança a data de n dias (onde n >= 0)
}
Prof. Adriano Teixeira de Souza
9. Código de aplicação válido
Date hoje = …;
Date pascoa = new Date(2001, 4, 15);
hoje.advance(16);
if (hoje.compareTo(pascoa) < 0)
System.out.println(hoje.toString());
Código de aplicação inválido
hoje.d += 16;
System.out.println(hoje.a + '-' + hoje.m + '-' + hoje.d);
Prof. Adriano Teixeira de Souza
10. Uma implementação de um TAD inclui:
◦ A escolha de uma representação de dados
◦ A escolha de um algoritmo para cada operação
A representação dos dados deve ser privativa
(private)
A representação de dados deve cobrir todos
os valores possíveis
Os algoritmos devem ser consistentes com a
representação de dados
Prof. Adriano Teixeira de Souza
11. public class Date {
// Cada instância de Date corresponde a uma data presente, do
// passado ou do futuro.
// A data é representada pelo número do ano a, pelo mês m, e
// um dia-no-mês d
private int a, m, d;
public Date (int a, int m, int d) {
// Construtor
this.a = a; this.m = m; this.d = d;
...
Prof. Adriano Teixeira de Souza
13. public String toString () {
// retorna a data no formato “a-m-d”
return (this.a + '-' + this.m + '-‘ + this.d);
}
public void advance (int n) {
// Avança a data de n dias (onde n >= 0)
// omitido
}
}
Prof. Adriano Teixeira de Souza
14. 2ª Implementação de Date
public class Date {
// Esta data é representada por um número inteiro (data em
época)
// (onde 0 representa 1º de janeiro de 2000):
private int d;
public Date (int a, int m, int d) {
…;
this.d = …;
}
Prof. Adriano Teixeira de Souza
15. public int compareTo (Date that) {
return (this.d < that.d ? -1 :
this.d > that.d ? +1 : 0);
}
public String toString () {
int a, m, d;
…;
return (a + '-' + m + '-' + d);
}
public void advance (int n) {
this.d += n;
}
}
Prof. Adriano Teixeira de Souza
16. As operações são suficientes se conseguem
atender todos os requisitos de um TAD
◦ Pode uma aplicação ser escrita inteiramente em
termos das chamadas a estas operações?
Uma operação é necessária se é essencial para
atender os requisitos do TAD
◦ Pode ser omitida?
Um TAD bem projetado provê operações que são
necessárias e suficientes para os seus requisitos
Prof. Adriano Teixeira de Souza
17. public class Date {
private …;
public Date (int a, int m, int d);
public int compareTo (Date that);
public String toString ();
public void advance (int n);
}
São necessárias e suficientes?
Prof. Adriano Teixeira de Souza
18. public class Date {
private …;
public Date (int a, int m, int d);
public int getYear ();
public int getMonth ();
public int getDay ();
}
Prof. Adriano Teixeira de Souza
19. public class Date {
private …;
public Date (int a, int m, int d);
public int compareTo (Date that);
public String toString ();
public void advance (int n);
public void advance1Day ();
}
Prof. Adriano Teixeira de Souza
20. Construção de TADs a partir de outros
existentes
◦ Exemplo: TAD Person
◦ Birthday é uma instância de Date
Prof. Adriano Teixeira de Souza
21. public class Person {
// Cada valor de Person possui nome, endereço e data de
nascimento
private ...; Importação de tipo externo
private Date birthday;
public Date (int a, int m, int d);
// Constrói uma data com ano a, mês m, dia do mês d
public int compareTo (Date that);
// retorna -1 se é anterior a este,
// ou 0 se a data é igual a este,
// ou +1 se data é posterior a este
public String toString ();
// retorna a data no formato “a-m-d”
public void advance (int n);
// Avança a data de n dias (onde n >= 0)
}
Prof. Adriano Teixeira de Souza
22. Interface java.util.List permite listas.
Interface java.util.Set permite conjuntos.
Interface java.util.Map permite mapeamentos
Pacotes java.awt, java.io, java.util, etc., permitem
vários TADs
Prof. Adriano Teixeira de Souza
23. Em Java, o conceito
de Interface é a
maneira natural de
se especificar um
TAD
Interface: conteúdo
vazio – apenas uma
interface pública
para um tipo
Prof. Adriano Teixeira de Souza
24. Distinção entre tipos de dados e tipos
abstratos de dados
◦ TADs não possuem representação, apenas valores e
operações
TADs
◦ Contrato/especificação
◦ Implementação
Critérios para projetar um TAD
Exemplos de TADs disponíveis em Java
Prof. Adriano Teixeira de Souza