Luiza Miranda Guterres Agosto de 2013 Existem milhares de linguagens de programação e novas linguagens surgem frequentemente. As linguagens de programação podem ser classificadas de acordo com o tipo de sistema que elas usam. O tipo de sistema define como são os métodos e as variáveis da linguagem . Podendo ser estática (compilada), dinâmica (interpretada), ou híbrida. Em uma linguagem de tipo estático, o compilador deve conhecer o tipo de uma variável ou método antes da execução do programa. Na linguagem compilada todo o texto do programa é traduzido (compilado) de maneira que as instruções possam ser realizadas pelo computador. A linguagem compilada geralmente gera um executável (como os famosos ".exe") ...ou compiladas, usualmente fortemente tipificadas, geram um código binário, específico para cada máquina, aumentando a eficiência e auxiliando a remover erros de programação. Ex.: C, Pascal Normalmente não necessita de um passo específico de compilação para executar um programa. O código fonte escrito pelo programador pode ser executado diretamente por um interpretador. Esse interpretador lê trechos do código fonte em tempo de execução, converte em um formato que o computador consegue ler (compilação em tempo de execução) e realiza sua execução. ...ou interpretadas, normalmente são fracamente tipificadas, fazem a verificação de tipo durante a execução do algoritmo, aumentando a portabilidade e a usabilidade. Ex.: PHP, Ruby, Javascript Exemplo prático de declaração de uma variável inteira com valor 10: › C (tipo estático): int a = 10; › Ruby (tipo dinâmico): a = 10; Tem características únicas, como o Java, por exemplo, que é compilado, mas roda em uma máquina virtual C, ou seja, o código binário pode ser interpretado por qualquer dispositivo que tenha a máquina virtual. Ex.: Java e C#. A definição de fortemente ou fracamente tipada tem relação com quão profundamente um sistema verifica as operações que podem ser feitas sobre uma estrutura de dados. As operações são aplicadas para estruturas de dados bem definidas e cada operação define os tipos de dados que deve receber. O sistema tem garantias sobre o comportamento do programa. Ex.: Java, Pascal, C, C++ As operações são aplicadas para qualquer estrutura de dados; porém, essas operações podem falhar em tempo de execução caso a estrutura não suporte a operação. O sistema não tem garantias sobre o funcionamento do programa. Ex.: Perl e Ruby Exemplo de uma função que realiza a soma de dois números, um inteiro e um ponto flutuante, e devolve um resultado em ponto flutuante: › C (Fortemente tipada): float soma(float a, int b){ return a + b; } › Ruby (Fracamente tipada): def soma (a, b) return a + b end São aquelas em que existe apenas um tipo genérico ou mesmo nenhum tipo de dados. Não existe a necessidade transformação de tipos. Ex.: Assembly de Capacidade que a linguagem tem para determinar os tipos das variáveis tendo em consideração o contexto em que encontram-se. Desta forma não é necessário especificar todos os tipos das variáveis. Dependendo da linguagem, ela pode ser automática, ou necessitar de comandos. public class InferenciaDeTipo { public static void Main(String[] args) { int valor1 = 10; String valor2 = "Valor"; var permitido1 = 1; var permitido2 = "Permitido"; } }