Baixe o app para aproveitar ainda mais
Prévia do material em texto
• =i· INSTITUTO FEDERAL SANTA. CATARINA Nomes, Identificadores e Tipagem de Dados Linguagens e Paradigmas de Programação Prof. Vilson Heck Junior Material: Prof. Wilson Castello Branco Neto INSTITUTO FEDERAL SAHTA CATARINA Conteúdo Nomes ou identificadores Tipagem estática e dinâmica Tipagem forte e fraca Objetivos: • Entender sobre nomes e identificadores em linguagens; • Conhecer os conceitos de tipagem estática e dinâmica; • Diferenciar tipagem forte de fraca; • Relacionar tipos primitivos e compostos; • Praticar exemplos de tipagem estática, dinâmica, forte e fraca em diferentes linguagens de programação; INSTITUTO FEDERAL s.on~ CATARINA Leituras • Leitura Obrigatória: TUCKER, A. B.; NOONAN, R. E.; Linguagens de programação: principios e paradigmas. 2. ed. São Paulo: McGrall-Hill, 2009. Capítulo 2 (Exceto 2.5). Capítulo 5 (5.1 ao 5.4). SEBESTA, R. W.; Conceitos de linguagens de programação. 9. ed. Porto Alegre: Bookman, 2011. Capítulo 5. Capítulo 6 (Entrevista LUA páginas 302 e 303). • Leitura Complementar: TUCKER, A. B.; NOONAN, R. E.; Linguagens de programação: princípios e paradigmas. 2. ed. São Paulo: McGrall-Hill, 2009. Capítulo 2, (2.5) e Capítulo 3. SEBESTA, R. W.; Conceitos de linguagens de programação. 9. ed. Porto Alegre: Bookman, 2011. Capítulo 3. Capítulo 6. ·s: • INSTITUTO FEDERAL SAHTA CATARINA 101010 Nomes ou Identificadores Nomes, Identificadores e Tipagem de Dados INSTITUTO FEDERAL SANTA CATARINA Nomes ou Identificadores int quantidade; int sorna(int a, int b) { return a + b; } ••• • •• • INSTITUTO FEDERAL SANTA CATARINA 10 ~ª Nomes ou Identificadores Para criar os identificadores, todas as linguagens devem responder às perguntas abaixo: 1. Quais as regras para formação dos nomes? 2. Os nomes são sensíveis à capitalização? 3. Os termos especiais são palavras reservadas? ~-· ·=· INSTITUTO FEDERAL SANTA CATARINA. Nomes ou Identificadores como os nomes podem ser permitem o uso de símbolos especiais na definição dos nomes dos identificadores e outras não; • PHP - nomes de variáveis iniciam com $: • $nome = "IFSC"; • e c h o $nome; • ••• •• INSTITUTO FEDERAL SANTA CATA.ftlt4A Nomes ou Identificadores • Perl - $ (escalar}, @ (vetor) ou % (hash) no início do nome especificam o seu tipo: • @cidades = ( "Lages", "Florianópoli s", ''Correi a Pi nt o'' ) ; • p rint "$cid ades [ O] \ n"; • p rint "$cid ades [ l ] \ n"; • p rint "$cid ades [ 2] \ n"; INSTITUTO FEDERAL SANTA CATARINA Nomes ou Identificadores Regras léxicas definem como os nomes podem ser • formados: • Ruby - @ ou @@ indicam se é uma variável de instância ou variável de classe; • As primeiras linguagens só usavam letras maiúsculas e possuíam restrição quanto ao tamanho do nome - Seis caracteres no caso do FORTRAN. • O FORTRAN95 restringe a 31 caracteres seus nomes; • C não tem restrição para os nomes internos, mas apenas os 63 primeiros caracteres são significativos e nomes externos também são restritos a 31 caracteres; Java, C# e Ada não tem limitação de tamanho; INSTITUTO FEDERAL SAN TA CATARINA Nomes ou Identificadores • Pascal e Ada não diferenciam entre maiúsculas e minúsculas, C, C++ e Java sim; • Quais as vantagens de fazer ou não esta diferenciação? • Prejudica a legibilidade; • Dificulta a escrita (Ex. parselnt); • Força a padronização; • Permite a associação de nomes semelhantes com diferentes capitalizações; INSTITUTO FEDERAL SANTA CATAR HA Nomes ou Identificadores identificadores definidos como palavras Exemplo. ••• ==· INSTITUTO FEDERAL SAllTA CATARINA Nomes ou Identificadores mais células de memória que possui: • Nome; • Endereço; • Valor; • Tipo; • Escopo; • Tempo de vida. 11: INSTITUTO FEDERAL SANTA CATARINA Nomes ou Identificadores • Indica o local da memória da máquina ao qual a variável está associada; • Uma mesma variável pode representar diferentes posições de memória em diferentes partes da execução; • Diferentes variáveis podem indicar o mesmo u.:~ ;j! endereço de memória. ft • !• INSTITUTO FEDERAL SANTA CATARINA Nomes ou Identificadores Valor de uma variável (r-value)? ~ • Conteúdos da(s) célula{s) de memória associadas à variável; • Células abstratas são diferentes de células físicas (1 byte); Tipo de uma variável? • Define a faixa de valores que a variável pode armazenar, o número de células de memória que ela utiliza e o conjunto de operadores que podem ser aplicados sobre ela. Exemplo em C++: • • Nomes ou Identificadores int *numeres= NULL; int qtd = O; cout << "Informe a quantidade de numeres : 11 ; cin >> qtd; cin . ignore () ; numeras = new int [qtd] ; for (int i = O; i < qtd; i++J numeros [ i ] = 1.; cout << 11 End . de numeres : " << (long) numeros << endl; cout << "End . de numeros[ l ] : " << (long) &numeros [ l] << endl; cout << "Pressio ne enter para f i nalizar" ; cin . get () ; return O; ~-· ·=· INSTITUTO FEDERAL SANTA CATARINA. Nomes ou Identificadores comandos) se ela for declarada dentro dele; • Uma variável é não local a um escopo se ela for acessível aos comandos, mesmo não sendo declarada dentro dele. • Em linguagens de programação, o escopo de variáveis pode ser estático ou dinâmico. INSTITUTO FEDERAL SANTA CATARINA Nomes ou Identificadores encontrada em seu ancestral, até o bloco de código mais abrangente Caso não seja encontrada em nenhum deles, um erro é gerado; • Esta avaliação é mais complicada em linguagens que permitem subprogramas aninhados (Pascal, Ada Javascript, PHP, etc). INSTITUTO FEDERAL SIIHTA CATARIH• Program Su b p r og ramasAni nhado s (out put) ; var x : integer; procedure Sub l ; var x: i n teger; begin X := 5; end; procedure Sub2; var x: i n teger; begin X := 8 ; end; begin X:= 10 ; Subl; Sub 2 ; writeln( 'Resul tad o: end. x ) ; INSTITUTO FEDERAL SAHTA CATARINA Nomes ou Identificadores de blocos • C e C++ permitem a redeclaração de variáveis nos blocos com os mesmos nomes das variáveis dos blocos que os englobam; • Java e C# não? • Algumas linguagens exigem que a declaração seja feita no início dos módulos e outras, como C99, C++, Java e C# não. INSTITUTO FEDERAL SANTA CATARINA Nomes ou Identificadores sendo acessível a todas elas (C, C++, PHP e Python). • Seu valor é acessível a todas as funções, exceto aquelas que declaram uma variável local com o mesmo nome; • Em C++ pode-se utilizar o operador de escopo : para acessar variáveis globais em funções com variáveis locais homônimas. INSTITUTO FEDERAL SANTA CATARINA Nomes ou Identificadores chamada dos subprogramas, o que pode variar entre uma execução e outra; • APL e as primeiras versões de LISP utilizavam escopo dinâmico; • Perl e Common LISP permitem a declaração de variáveis com escopo dinâmico, embora o padrão seja estático. • No próximo slide é apresentado um exemplo utilizando Perl: INSTITUTO FEDERAL SIIHTA CATARIH• !%-=- $nome = "IFSC"; &mostraNome () ; &myFuncao( ) ; &localFuncao () ; s ub mostraNome { prin t "Nome : Snome\ n" ; sub myFuncao ( my $nome = "UFSC"; print "Nome myFuncao : $nome\ n"; &mostraNome () ; sub local Funca o { local $nome = "UDESC"; print "Nome localFuncao: $n ome \ n "; &mostraNome () ; r=~~--------------------------~ INSTITUTO FEDERAL SANTA CATARINA Nomes ou Identificadores são menos parâmetros entre subprogramas; • Erro no livro do SEBESTA, página 255, parágrafo 4, linha 2.Onde está • "os programas em linguagens com escopo dinâmico são mais fáceis de ler. . .", deveria ser estático. • • 1!• INSTITUTO FEDERAL SAHTA CATAIUNA Nomes ou Identificadores ser definido como o tempo de sua existência em memória. • De maneira geral o escopo e o tempo de vida de uma variável estão relacionados; • A chamada a funções modifica esta relação; • Modificadores em C, C++ e PHP, como a palavra static, também alteram esta relação. • Exemplo de uso de static para variáveis no próximo slide, para a linguagem C++: • •• ••• •• INSTITUTO FEDERAL S.\NTA CATAfllHA ~ 1C.::. !'il-'5-~ #include <iostream> using namespace std ; int con t () { static int X - O; x++; return x; } int ma in () { cout << c ont () << cout << c ont () << cout << c ont () << return O; } e nd l; e nd l; e nd l; Tente também removendo static INSTITUTO FEDERAL SAtlTA CATARINA Nomes ou Identificadores • É um nome vinculado a um valor apenas uma vez; • Possibilitam a parametrização do programa, facilitando a sua manutenção e melhorando sua legibil idade e confiabilidade; • Algumas linguagens (como Pascal e Fortran} permitem apenas a utilização de valores constantes, enquanto outras (como C++ e Ada) permitem expressões; #include <iostream> INSTITUTOFEDERAL using namespace std ; SANTA CATAR HA !!ti int X = 5; const int y = x + 2; int main () { } X = 10 ; cout << "Resulta d o : "<< y << endl; return O; ~ ~-----------------------~ • ••• •• INSTITUTO FEDERAL SANTA CATA.ftlt4A Nomes ou Identificadores Em dife rentes linguagens: • C/C++ - const· ' • Pascal - const; • Java - final; • C# - conste readonly; • Ada - constant; ·s: • INSTITUTO FEDERAL SAHTA CATARINA 101010 Tipagem de Dados Nomes, Identificadores e Tipagem de Dados ~-· ·=· INSTITUTO FEDERAL SANTA CATARINA. Tipagem de Dados • Tipo de dado: • Um tipo é um conjunto de valores e um conjunto de operações sobre estes valores. .1: •• INSTITUTO FEDERAL SANTA CATARINA Tipagem de Dados • Erro de tipo: • Qualquer erro que surja porque uma operação é tentada sobre um tipo de dado para o qual ela não está definida. • Sistema de tipos: • Definição precisa das associações entre o tipo de uma variável, seus valores e as operações possíveis sobre esses valores. ••• • •• • INSTITUTO FEDERAL SANTA CATARINA 10 ~ª Tipagem de Dados representar todas as informações (Primeiras versões do Fortran); • COBOL permitiu a definição da precisão de dados decimais e criou os registros; • PUI melhorou a flexibilidade dada pelo COBOL e apresentou diversos novos tipos; • ALGOL 68 fornece alguns tipos básicos e operadores para a definição de novos tipos (novas estruturas - POO). :1: •• INSTITUTO FEDERAL S.\NTA CATAfllHA Tipagem de Dados Toda linguagem de programação implementa um dos formatos de tipagem abaixo: • Tipagem estática; • Tipagem dinâmica; INSTITUTO FEDERAL SAtlTA CATARINA Tipagem de Dados mudam durante a execução do programa. Exemplos de linguagens: • e • Java • Ada INSTITUTO FEDERAL SANTA CATAfl!N.\ Tipagem de Dados • Perl • Python • PHP • Javascript • •• ==· INSTITUTO FEDERAL SIINTA CATARINA Tipagem de Dados Tipagem dinâmica: ·~~ A tipagern dinâmica também é conhecida corno rit:. "Duck Typing" , ou a tipagern do pato. Este nome é atribuído a James Whitcornb Riley, que certa vez exemplificou da seguinte forma: • "Quando eu vejo um pássaro que caminha como um pato, nada como um pato e grasna como um pato, eu chamo aquele pássaro de pato." ••• =·· Tipagem de Dados INSTIT SAH Tipagem dinâmica • Exemplo JavaScript: <p i d = "said a 11 > </ p> <s c ript> var x ; //undefined x = 1 0.5; //nwrber x = º Instituto Federal de Santa Catarina" ; //string x = true; //bool ean x = function () {} ; //function x = null ; //object document . g e t El ementBy l d("saida" ) . innerHTML = x ; //ver typeof </ script> ••• • •• • INSTITUTO FEDERAL SANTA CATARINA Tipagem de Dados Comparação: Quesito lipagem estática 1ipagem dinâmica Velocidade de execução Maior Menor Verificação por erros Compilação Execução Simplicidade de escrita Menor Maior Maior Menor 10 ~ª • ••• •• INSTITUTO FEDERAL SAHTA CATARINA Tipagem de Dados ou estática, ela pode ter diferentes níveis de exigência no que diz respeito ás operações realizadas nos tipos dos dados envolvidos. Quanto mais exigente a linguagem for, em relação às regras das operações que envolvam diferentes tipos de dados, mais fortemente tipada será esta linguagem. INSTITUTO FEDERAL SANTA CATAfl!N.\ ~ !-S '~ Tipagem de Dados double x = 2 . 5; i nt y = 3; int res = x + y; cout << res << endl; //Para C++ System.out.println(res); //Para Java Este código já foi implementado em aula anterior. • 11• INSTITUTO FEDERAL S.A.NTA CATARINA Tipagem de Dados id=11 s aida 11 > </ p> <script> var x = 1110" ; var z = -x; document . g e tElementByid( 11saida11 ) . innerHTML = z; </ script> INSTITUTO FEDERAL SANTA CATAfl!N.\ Tipagem de Dados 10; Sy = "20 11 ; echo "x eh " gettype (Sx ) PHP_EOL; echo "y eh " gettype(Sy) PHP_ EOL; Sz = Sx + Sy; echo "Resultado(x+y): Sz" . PKP EOL; Como fazer para concatenar, ao invés de somar? ;1: INSTITUTO FEDERAL SANTA CATARINA Tipagem de Dados Força de tipagem: É importante observar que não há 100% de consenso entre diferentes autores no momento de comparar todas as linguagens de programação e dizer qual é mais fortemente tipada que outra. Os principais critérios para tornar uma linguagem "fracamente tipada", são • Conversão implícita; • Exposição de ponteiros como valores numéricos; • Unions sem marcação; • Falta de verificações de erros (tipagem estática); lil i.:::::. !;-!';! • Tipagem dinâmica; ~ • ·=· •• INSTITUTO FEDERAL SANTA CATARINA Tipagem de Dados doub1e y = 2. 6 ; int x = y; //Conversão imp1ícita • Java: doub1e y = 2. 6 ; int x = (doub1e)y; //Conv. exp1ícita ••• • •• • INSTITUTO FEDERAL SANTA CATARINA Tipagem de Dados Força de Tipagem • Ponteiros numéricos • exemplo: • C++: int *ptr = new int [lO J; int *atual = ptr, *fim = ~ while {atual<= fim) { &ptr[9 ] ; ~ cout << "End: " <<atual<< " '' <<*atual << endl; atual++; ~'-------------------------------' 10 ~ª ·s: • INSTITUTO FEDERAL SAHTA CATARINA Tipagem de Dados Cada linguagem de programação é livre para escolher os nomes e tamanhos de dados que julgar adequado Independente das escolhas, um conjunto mínimo de tipos primitivos deve existir. Exemplo C e Java: • Inteiro: short (2), int (4) e long(8); • Real: float(4) e double(8); • Caractere char(1 em C++ e 2 em Java); • Booleano boolean(1 em Java) bool(1 em C++); Em Java os tamanhos são fixos. Em algumas linguagens, como C, C++ e Pascal, os tamanhos podem R::~ ~ ser definidos pelo compilador. INSTITUTO FEDERAL SANTA CATARINA Tipagem de Dados Quanto é 2.147.483.647 + 1? • Algumas linguagens geram interrupção, outras não. • Este problema se agrava em números de ponto flutuante que são armazenados em notação científica: • Ex 1432 = 1,432 X 103 A representação de dados numéricos e os erros associados a elas são abordados com maiores detalhes em cálculo numérico. :1: •• INSTITUTO FEDERAL S.\NTA CATAfllHA Tipagem de Dados descrever que um determinado símbolo, comando, função ou operador pode ser uti lizado para tarefas diferentes.Um operador é dito sobrecarregado quando o seu significado varia conforme o tipo dos seus operandos ou resultado. Operadores que aceitam números inteiros ou reais e retornam números inteiros ou reais • + • I ·s: • INSTITUTO FEDERAL SAHTA CATARINA Tipagem de Dados realizar uma operação aritmética. É responsabilidade da linguagem de programação converter "seja lá o que o programador escreveu' para algo executável pelo processador Então, a verificação de tipos consiste em anal isar se os tipos de operandos são aceitos pelos operadores. INSTITUTO FEDERAL s.on~ CATARINA Tipagem de Dados registradores. registradores compatíveis podem ser utilizados para realizar uma operação aritmética. É responsabilidade da linguagem de programação converter "seja lá o que o programador escreveu' para algo executável pelo processador. Então, a verificação de tipos consiste em analisar se os tipos dos operandos são aceitos pelos operadores: int a; float b, e; e= a+ b; ·s: • INSTITUTO FEDERAL SAHTA CATARINA Tipagem de Dados e usavam a tabela que ocupa 1 byte e • Linguagens mais atuais, como o Java, usa UNICODE (UTF-16). Atualmente existe a UTF-32 que representa mais de 100 mil símbolos diferentes. • 11: INSTITUTO FEDERAL SAHTA rATA.RINA Tipagem de Dados • Enumerações: possibilitam a associação de nomes a uma série de valores inteiros; • Facilitam a legibilidade do código e reduzem a chance de erro. No próximo slide é exibido um exemplo de enum na linguagem C++ . IN ••• ••• Tipagem de Dados enum Cor {vermelh o = 1, verde, azul}; int main () { Cor escolh i d a = azul; switch (escolhida) { case vermelho: cout << "Pintar de vermelho: " <<escolhida<< endl; break; case verde : cout << ºPintar de verde: " <<escolhida<< endl; break; case azul: cout << ºPintar de azul: 11 <<escolhi da << endl; break; default : cout << "Cor não reconhecida\n" ; break; return O; 11: INSTITUTO FEDERAL SANTA CATAR NA Tipagem de Dados Vetores/Arrays: ~ Todas as linguagens oferecem mecanismos, com trabalhar com conjuntos de dados variações, para indexados: • C/C++ os índices variam de O até N-1; • Fortran de 1 até N; • Em Pascal e Ada o programador é quem define. • Algumas linguagens como Java e C permitem a definição do tamanho do vetor em tempo de execução, mas uma vez criado, este tamanho não pode ser mudado. • C/C++ o vetor é acessível através de ponteiros. INSTITUTO FEDERAL SA>lTA CATAR NA Tipagem de Dados • Em C string é tratado como vetor de caractere: • char c; • char nome(10]; • Em C++ há uma classe string. • 11: INSTITUTO FEDERAL SAHTA rATA.RINA Tipagem de Dados quais são acessados pelos seus nomes (campos); • Java não suporta estruturas diretamente, tratando-os como uma classe; • Diferem das classes pois possuem apenas os campos (atributos) mas não possuem métodos e outras características inerentes das classes na POO: • Exceção: C# permite a implementação de funções em estruturas; Tipagem de Dados ---·-- ·- ----------------------------, struct pessoa { string nome; int idade; main () pessoa p; cou t << "Digite o nome: 11 ; cin >> p.nome; cou t << "Digite a idade : 11 ; cin >> p . i dade; Exemplo de estrutura em C++ cou t << "Você cadastrou: " << p.nome; cou t << 11 Idade : " << p . i dad e << endl; return O; Tipagem de Dados .,,,._.,., .. _""_"" _______________________________ ~ Program Cadastro (output ) ; type var pessoa= Record nome: string; idade: i nteger; End; p : pessoa; begin write ( ' Digite o nome: ' ); read (p . nome ) ; write ( ' Digite a idade : 1 ) ; read (p . i dad e ) ; write ( 'Você cadastrou: p . nome ) ; writeln ( '. Idade : ' , p . idade) ; end. Exemplo de registro em Pascal INSTITUTO FEDERAL Si\HT,\ CATARINA Conclusão Em essência, na computação tudo se resume a números em bits; A flexibilidade dada ao programador, durante o desenvolvimento, é implementada sempre pela linguagem de programação; • Diferentes linguagens implementam diferentes tipos de dados; O tipo de dado de uma variável pode ser estático ou dinâmico; • As linguagens implementam características que as ll:::~ ~!'! definem como fortemente ou fracamente tipadas. Nome Identificadores e Tipagens (1) Nome Identificadores e Tipagens (2) Nome Identificadores e Tipagens (3) Nome Identificadores e Tipagens (4) Nome Identificadores e Tipagens (5) Nome Identificadores e Tipagens (6) Nome Identificadores e Tipagens (7) Nome Identificadores e Tipagens (8) Nome Identificadores e Tipagens (9) Nome Identificadores e Tipagens (10) Nome Identificadores e Tipagens (11) Nome Identificadores e Tipagens (12) Nome Identificadores e Tipagens (13) Nome Identificadores e Tipagens (14) Nome Identificadores e Tipagens (15) Nome Identificadores e Tipagens (16) Nome Identificadores e Tipagens (17) Nome Identificadores e Tipagens (18) Nome Identificadores e Tipagens (19) Nome Identificadores e Tipagens (20) Nome Identificadores e Tipagens (21) Nome Identificadores e Tipagens (22) Nome Identificadores e Tipagens (23) Nome Identificadores e Tipagens (24) Nome Identificadores e Tipagens (25) Nome Identificadores e Tipagens (26) Nome Identificadores e Tipagens (27) Nome Identificadores e Tipagens (28) Nome Identificadores e Tipagens (29) Nome Identificadores e Tipagens (30) Nome Identificadores e Tipagens (31) Nome Identificadores e Tipagens (32) Nome Identificadores e Tipagens (33) Nome Identificadores e Tipagens (34) Nome Identificadores e Tipagens (35) Nome Identificadores e Tipagens (36) Nome Identificadores e Tipagens (37) Nome Identificadores e Tipagens (38) Nome Identificadores e Tipagens (39) Nome Identificadores e Tipagens (40) Nome Identificadores e Tipagens (41) Nome Identificadores e Tipagens (42) Nome Identificadores e Tipagens (43) Nome Identificadores e Tipagens (44) Nome Identificadores e Tipagens (45) Nome Identificadores e Tipagens (46) Nome Identificadores e Tipagens (47) Nome Identificadores e Tipagens (48) Nome Identificadores e Tipagens (49) Nome Identificadores e Tipagens (50) Nome Identificadores e Tipagens (51) Nome Identificadores e Tipagens (52) Nome Identificadores e Tipagens (53) Nome Identificadores e Tipagens (54) Nome Identificadores e Tipagens (55) Nome Identificadores e Tipagens (56) Nome Identificadores e Tipagens (57) Nome Identificadores e Tipagens (58) Nome Identificadores e Tipagens (59)
Compartilhar