VinBR

LP 05/09/2011

Apr 28th, 2012
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.95 KB | None | 0 0
  1.  
  2. # # # # # # # # # # # # # #
  3. # Linguagens de Programação #
  4. # Prof. Fernando Pereira #
  5. # notasdogarcia.blog.com #
  6. # # # # # # # # # # # # # #
  7.  
  8. Vantagens de tipagem estatica:
  9. - Melhor documentação do código pois ele fica mais legível.
  10. - Existem programas de verificação que podem evitar que um código entre em estado de erro que só são possíveis graças à tipagem estática.
  11.  
  12. Vantagens/Desvantagens de tipagem dinâmica:
  13. - Permite decisões de última hora.
  14. - Permite retirar um pouco do peso das decisões do ombro do programador, já que boa parte delas é realizada de última hora, o próprio compilador cuida delas.
  15. ( ou seja, no geral o programador escreve menos, pois tem menos detalhes pra se preocupar )
  16. - A decisão dos tipos se realizada durante a execução pode tornar a execução mais lenta, já que é uma operação de peso não desprezivel.
  17.  
  18. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  19.  
  20. Em SML se dois tipos tem as mesmas características eles são usados como um único tipo,
  21. Coisa que não se faz em C ou Java por exemplo que diferenciam os tipos simplesmente pelo nome.
  22.  
  23. Nota em SML para se definir um tipo que representa uma tupla de int`s se faz:
  24.  
  25. val U = int * int
  26.  
  27. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  28.  
  29. CONCEITO:
  30. Polimorfismo é essa caracteristica de se poder alterar um tipo de última hora, tranformar tipos e adaptar funções para aceitar outros tipos, etc.
  31.  
  32. CATEGORIZAÇÃO:
  33. Polimorfirmo pode se dividir em 2 grupos:
  34.  
  35. - Ad-hoc, que tem como característica ter um conjunto finito de tipos.
  36. - Universal, que tem como características ter um conjunto de tipos infinito.
  37. // Provavelmente haveria mais a ser dito sobre esses 2 sub-grupos, mas o professor não citou em sala,
  38. // Voces devem ser capazes de encontrar mais detalhes no livro.
  39.  
  40. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  41.  
  42. O sub-conjunto "Ad-hoc" se sub-divide em mais dois grupos:
  43.  
  44. - Coerção
  45. Coerção é quando voce faz uma soma do tipo: 1+1.0 e o C entende que 1 é para ser tratado como um float gerando assim uma operação de dois floats.
  46. Para esse tipo de polimorfismo é necessário uma tabela de conversões que indica o que é possível de ser feito, e essa tabela existe dentro do compilador.
  47.  
  48. - Sobrecarga
  49. Um exemplo é a sobrecarga da operação de soma, onde um mesmo simbolo ("+") pode realizar tipos diferentes de somas, ex: 2+2 é diferente de 2.0+1.0
  50. Assim pode-se dizer que o simbolo + representa não uma mas duas operações no mesmo contexto, estando portanto sobrecarregado.
  51. Isso também se aplica a funções quando voce pode descrever uma função mais de uma vez alterando apenas os parâmetros dela, para casos diferentes.
  52.  
  53. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  54.  
  55. O sub-conjunto do "Universal" se subdivide em mais 2:
  56.  
  57. - Parametrico
  58. É um polimorfismo onde uma função vem preparada para se adaptar aos tipos dos parâmetros, sejam eles quais forem.
  59. Assim desde que o tipo recebido seja capaz de realizar as operações da função, (por exemplo soma, ou multiplicação, ou união, ou o que for necessário)
  60. A função se adapta para realizar estas operações corretamente.
  61.  
  62. - Sub-tipagem
  63. Se um tipo possui sub-tipos, ou seja existem outros tipos que possuem as mesmas características que ela (pense nos filhos de uma classe de C++)
  64. então uma função é capaz de receber esses filhos, mesmo tendo sido preparada para receber o pai.
  65.  
  66. Ex: Em C++ voce pode usar um ponteiro para um filho de uma classe em uma função preparada para receber o pai, e ela funcionará corretamente.
  67.  
  68. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  69.  
  70. Nota sobre C++:
  71.  
  72. class batata
  73. {
  74. int feijoada=10;
  75. public:
  76. batata operator+(int a){ this->feijoada+=a; return (*this); }
  77. }
  78.  
  79. Essa declaração realizada dentro de uma classe é convertida pelo compilador para ser usada no lugar de somas.
  80. Ou seja em uma soma do tipo:
  81. batata A;
  82. A = A + 12;
  83.  
  84. É convertida para:
  85. A = A.operator+(12);
  86.  
  87. Pelo compilador.
  88.  
  89. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  90.  
  91. Construtores de tipos em SML:
  92. Existem 3 notações usada pelo construtor de tipos:
  93.  
  94. - "*" que gera uma tupla.
  95. - "list" que descreve uma lista.
  96. - "->" que descreve uma função.
  97.  
  98. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  99.  
  100. Outra nota sobre C++:
  101.  
  102. Uso de Templates:
  103.  
  104. // Declare um template assim:
  105. template <class T>
  106.  
  107. // Quando em uma função voce utilizar esse template como abaixo:
  108. T getMax (T a, T b)
  109. {
  110. return (a>b? a : b);
  111. }
  112. // Essa função fica "incompleta" esperando que seja decida na chamada da função qual o tipo do template T.
  113.  
  114. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  115.  
  116. Assim voce definiu um molde para a funçào getMax, onde class T está função da chamada do template.
  117. Então se eu desejar fazer essa chamada para um inteiro eu informo isso assim:
  118.  
  119. getMax<int>(5,6)
  120.  
  121. para um float:
  122.  
  123. getMax<float>(5.1,7.4)
  124.  
  125. Assim quando a compilação se iniciar, o compilador cria várias copias de getMax uma para cada tipo diferente usado no programa.
  126.  
  127. // Bem fim da aula =].
Advertisement
Add Comment
Please, Sign In to add comment