1) Explique escopo dinmico e escopo esttico. O escopo dinmico baseia-se na seqncia de chamada de subprogramas, no em suas relaes espaciais um com o outro. Dessa forma, o escopo pode ser determinado somente em tempo de execuo. J no escopo esttico, o escopo de uma varivel pode ser determinado estaticamente, ou seja, antes da execuo. 2) Defina coero, erro de tipo, verificao de tipo e tipificao forte. A verificao de tipos a atividade de assegurar que os operandos de um operador sejam de tipos compatveis. Um tipo compatvel aquele vlido para o operador ou com permisso, nas regras da linguagem, para ser convertido pelo cdigo gerado pelo compilador para um tipo vlido. A essa converso automtica chama-se coero. Um erro de tipo a aplicao de um operador a um operando de tipo imprprio. Tipificao forte quando todos os tipos so vinculados estaticamente. 3) Defina e exemplifique compatibilidade de tipo de nome e compatibilidade de tipo de estrutura. A compatibilidade de nome significa que duas variveis tm tipos compatveis somente se estiverem na mesma declarao ou em declaraes que usam o mesmo nome de tipo. Por exemplo, supondo que o Pascal usasse compatibilidade estrita de nomes de tipo, considere o seguinte: Type indextype = 1..100; Var Cont: integer; Indice: indextype; As variveis cont e ndice no so compatveis; cont no seria atribuda a ndice e viceversa. A compatibilidade de estrutura significa que duas variveis tm tipos compatveis se os seus tipos tiverem estruturas idnticas. Por exemplo, considere as seguintes declaraes assemelhadas com Pascal: Type celcius = real; Fahrenheit = real; As variveis desses dois tipos so consideradas compatveis sob a compatibilidade de tipo de estrutura, permitindo que elas sejam misturadas em expresses.
Lista de exerccios 3
1) Descreva os tipos primitivos de dados apresentados nas linguagens C e Java.
Comente o tipo booleano. Inteiro: O tipo de dados primitivo numrico mais comum o inteiro. Um valor inteiro representado em um computador por uma cadeia de bits, com um dos bits tipicamente na extrema esquerda, representando o sinal. Tipos inteiros so suportados diretamente pelo hardware. Vrgula-Flutuante: Os tipos de dados com vrgula-flutuante modelam os nmeros reais, mas as representaes so somente aproximaes para a maioria dos nmeros reais. A maioria das linguagens oferecem dois tipos de vrgula-flutuante, que so float e Double. Booleano: Os tipos booleanos so os mais simples de todos. Sua faixa de valores tem somente dois elementos, um para verdadeiro e um para falso. Caracter: Os dados de caracteres so armazenados nos computadores como codificaes numricas. A codificao mais comum a ASCII, que usa valores de 0 a 127 para codificar os 128 diferentes caracteres. 2) Analise como as linguagens C e Java implementam o tipo de dado cadeia de caracteres. (Como implementado, quais vantagens e desvantagens podem ser apontadas em cada linguagem?) Em C so usados vetores do tipo char para armazenar cadeias de caracteres e para oferecer uma coleo de operaes com cadeias por meio da biblioteca-padro cujo arquivo de cabealhos string.h. J em Java, as cadeias so suportadas como um tipo primitivo pela classe String, cujos valores so cadeias constantes, e pela classe StringBuffer, cujos valores so mutveis e assemelham-se muito mais a vetores de caracteres. Em C o tamanho de uma varivel se baseia no tamanho dinmico limitado (tamanho varivel at um mximo especificado), j em Java o tamanho de uma String esttico (tamanho da cadeia no se modifica ao longo da execuo do programa). 3) Defina o tipo ponteiro e o tipo referncia. Comente as questes de projeto relacionadas a estes tipos de dados. Um tipo ponteiro aquele em que as variveis tm uma faixa de valores que consiste em endereos de memria e um valor especial, o nil. O nil no um endereo de memria vlido e serve para indicar que um ponteiro no pode ser usado atualmente para referenciar qualquer celular de memria. As questes de projeto relacionadas a ponteiro so: Quais so o escopo e o tempo de vida de uma varivel de ponteiro? O escopo de uma varivel do tipo ponteiro qualquer instruo que possa ser referenciada atravs de um endereo de memria. O tempo de vida de um ponteiro vai depender da varivel que ele esta vinculado. Qual o tempo de vida de uma varivel dinmica no monte? O tempo de vida de uma varivel no monte se inicia quando ela vinculada a uma clula especfica e encerra-se quando ela desvinculada. Os ponteiros so restritos quanto ao tipo de valor para o qual eles apontam? O ponteiro que aponta para um tipo no pode apontar para um tipo diferente, a menos que seja possvel fazer a converso entre eles.
Os ponteiros so usados para gerenciamento de armazenamento dinmico, para
endereamento indireto, ou para ambos? Para ambos, pois usando um ponteiro possvel acessar o contedo de memria de uma varivel sem referenci-la diretamente, o que conhecido como endereamento indireto. Alm do endereamento indireto, um ponteiro tambm pode ser utilizado em um programa para alocar memria em tempo de execuo. A linguagem deve suportar tipos ponteiros, tipos referncia ou ambos? Depende da linguagem. Uma linguagem pode ter ambos os tipos ou no. Como exemplo C++ da suporte para ambos, j linguagens mais novas como Java no utilizam o tipo ponteiro. Um registro um agregado possivelmente heterogneo de elementos de dados. Cada elemento individual identificado por seu nome. As questes de projeto relacionadas a registros so: Qual a forma sinttica das referncias a campos? Elementos do registro, ou os campos, so nomeados com identificadores, e as referncias a eles so feitas usando esses identificadores. So permitidas referncias elpticas? Referncias elpticas so aquelas em que o campo nomeado, mas qualquer um ou todos os nomes do registro podem ser omitidos, contanto que a referncia resultante no seja ambgua.