Projeto de Linguagens de Programação
Por: wolle • 15/5/2015 • Artigo • 1.558 Palavras (7 Páginas) • 162 Visualizações
UNIVERSIDADE FEDERAL DO PAMPA
ENGENHARIA DE SOFTWARE
[pic 1]
Pesquise sobre os tipos Registro e União.
Projeto de linguagens de programação
Discentes:
Luiz Paulo Franz
Matrícula: 131150030
Wolleson Kevin Kelm
Matricula : 131151949
Alegrete - RS
Março, 2015
1.Introdução
Este trabalho tem por objetivo o relatar as informações encontradas sobre a pesquisa de tipos União e Registro. Para isso foi levando em conta suas características e aplicações nas seguintes linguagens linguagens C, C++, COBOL, Ada e Java para o tipo Registro e C, C++ e Ada para o tipo União.
2. União
Uma união é um tipo cujas variáveis podem armazenar diferentes valores de tipos em vários momentos durante a execução de um programa.
Para deixar mais clara a necessidade de um tipo união, imagina uma tabela que armazena as contantes de um programa que está sendo compilado. Cada campo da tabela é para um valor constante, agora suponha que os tipos de contantes desse programa que está sendo compilado fosse do tipo inteiro, ponto flutuante e booleano. Seria muito interessante se a mesma posição, ou um campo da tabela, pudesse armazenar um valor de qualquer um desses três tipos. Então, todos valores constantes podem ser endereçados da mesma maneira. O tipo de tal posição é em certo sentido a união dos trés tipos de valores que ela pode armazenar.
2.1 Questões de projeto
Uma das questões fundamentais sobre união é verificação em relação ao tipo, por esse motivo linguagens como C e C++ que não oferecem essa verificação não são considerados fortemente tipadas. Outra questão é como representar sintaticamente uma união. Em alguns projetos, as uniões estão confinadas a serem partes de estruturas do tipo registro, mas em outras não. Então avaliando esses pontos podemos dizer que duas questões que cercam a união são:
- A verificação de tipos deve ser obrigatória ?
- As uniões devem ser embutidas em registros ?
2.2 Uniões discriminadas e uniões livres
As linguagens C e C++ possibilitam representar uniões sem existir nenhum tipo de verificação de tipos. A sentença usada para especificar uniões em C e C++ é union. As uniões nessas linguagem são denominadas de uniões livres, pois permitem que os programadores tenham total liberdade em relação á verificação de tipos sobre o uso de uniões.
Para que possa ser feita a verificação de tipos de uniões é preciso que cada uma delas inclua em sua construção um tipo de indicador de tipo. Tal indicador é chamado de etiqueta ou discriminante, para uniões com discriminante é chamada de união discriminada.
A primeira linguagem a fornecer união discriminada foi a ALGOL68. Elas são agora suportadas por Ada.
2.3 Uniões em Ada
O projeto de Ada para uniões discriminadas, é baseado no projeto de sua linguagem antecessora, o Pascal, ela possibilita ao seus usuários especificar variáveis de um tipo de registro variável que armazenará apenas um dos valores de tipo possível na variação. Assim o usuário poderá dizer ao sistema em que momento a verificação de tipos pode ser estática. Tal variável restrita é chama de variável variante restrita.
A etiqueta de uma variável variante restrita é tratado como uma constante nomeada. Ada permite que os tipos da variante troquem de tipo durante a execução.
Entretanto, o tipo da variável pode ser modificado apenas pela atribuição do registro inteiro, incluindo o discriminante. Isso proíbe registro inconsistentes, visto que se o novo registro atribuído for um agregado de dados constantes , o valor da etiqueta e o tipo da variante podem ser estaticamente verificados em relação a consistência. Se o valor atribuído for uma variável, sua consistência foi garantida, e o novo valor dessa variável é com certeza consistente.
2.4 Avaliação
Uniões são construções inseguras em algumas linguagens e é umas das razões pelas quais linguagens como Fortran, C e C++ não são fortemente tipadas, mas em Ada as uniões pode ser usadas com segurança.
Nem java nem C# incluem uniões, o que pode ser um reflexo da crescente preocupação com segurança em linguagens de programação.
3. Registros
Um registro é uma estrutura de dados heterogênea, ou seja, formada por uma conjunto de variáveis (campos) que podem assumir tipos diferentes de dados, inclusive os tipos compostos (vetores, matrizes e registros).
São estruturas semelhantes a matrizes em sua utilização, porém com uma diferença fundamental importante em sua apresentação, enquanto as matrizes apresentam apenas dados de um mesmo tipo, um registro é capaz de apresentar diferentes tipos de dados em seu interior.
O conceito de registro visa facilitar o agrupamento de variáveis que não são do mesmo tipo, mas que guardam estreita relação lógica.
3.1 Questões de projeto
Diferente do que ocorre em matrizes ou vetores, onde a individualização de um elemento é feita através de um índice, em registros cada componente é individualizado pela explicitação de seu identificador. Registros representam um conjunto de dados ocupando conjuntos de posições de memória endereçados em um mesmo nome e individualizados por identificadores associados a cada posição. Os elementos do conjunto não precisam ser, necessariamente, do mesmo tipo.
...