Your SlideShare is downloading. ×

Paradigmas

901

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
901
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
21
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Paradigmas deProgramaçãoSegurança da Informação Senac Projeto elaborado por Thiago Morais Agosto/2012
  • 2. ... E no começo,...Computadores são operados porsequências de instruções chamadas“código de máquina”.Esse código é endereçado ao hardware eé escrito em notação binária, usandoapenas 0’s e 1’s. 50nm Transistor 2000x menor que o diâmetro de um !o de cabelo. O processador de 10 cores Xeon Westmere-EX da Intel possui 2.6 bilhões de Gottfried Leibniz (1646-1716), matemático transistores como os da alemão que aperfeiçoou o sistema binário foto ao lado. moderno.
  • 3. Primeira Geração Linguagens de primeira geração requerem longas sequências de números binários para representar operações como “adicionar”, “subtrair” e “comparar.” Melhoramentos posteriores permitiram as representações octais, decimais e hexadecimais de sequências binárias. Números Fibonacci: Sequência de números, iniciada pelos números 0 e 1, onde cada número subsequente é a soma dos dois últimos números. (0,1,1,2,3,5,8,13,21,34,55,89,144,...) Exemplo: Função em código de máquina x86 32-bits para calcular o “enésimo” ENIAC - 1946 - Primeiro “computador” número Fibonacci eletrônico. Ocupava 167 m2 e pesava 27 8B542408 83FA0077 06B80000 0000C383 toneladas. O processo de programação do FA027706 B8010000 00C353BB 01000000ENIAC envolvia manipular cabos e switches. B9010000 008D0419 83FA0376 078BD98B C84AEBF1 5BC3
  • 4. Segunda Geração Assembly Exemplo: Código em Linguagem Assembly para calcular oLinguagem de baixo nível, diferente “enésimo” número Fibonacciem cada arquitetura (x86, SPARC, ARM, fib:etc.). mov edx, [esp+8] cmp edx, 0 ja @fMenos complicada de compreender do mov eax, 0 retque “código de máquina”. @@: cmp edx, 2Mais utilizada em situações especí!cas: ja @f mov eax, 1- Software para BIOS; ret- Sistema !y-by-wire para aviões; @@:- Firmware para smartphones; push ebx mov ebx, 1- Engenharia reversa; mov ecx, 1 EDSAC - 1949 - Primeiro- Gerenciador de boot GRUB (2,8% do @@: lea eax, [ebx+ecx] “computador” capaz de rodarcódigo desenvolvido em Assembly). cmp edx, 3 jbe @f um assembler primitivo. mov ebx, ecx mov ecx, eax dec edx jmp @b @@: pop ebx ret
  • 5. Terceira Geração - Linguagens de Terceira Exemplo: Código em Linguagem C para calcular o “enésimo” Geração ou de Alto Nível número Fibonacci foram inicialmente criadas no unsigned int fib(unsigned int n) !nal da década de 50; { - Possuem uma estrutura mais if (n <= 0) return 0; fácil de ler, programar e else if (n <= 2) return 1; manter. São mais próximas à else { int a,b,c; linguagem humana e mais a = 1; distantes à linguagem de b = 1; while (1) { máquina; c = a + b; if (n <= 3) return - Propiciam ao programador a c; a = b; A versão do Unix para o PDP-11 (acima) foi desenvolver programas que b = c; desenvolvido em Assembly. Em 1973, a são um pouco mais n--; }linguagem C se tornou madura o su!ciente e independentes de plataforma; } uma grande parte do kernel do Unix foi } - Um programa em Java pode reescrito em C. rodar em várias arquiteturas Sobre a foto (X86-64, IA-32, SPARC e ARM) e Direita: Dennis Ritchie, em vários sistemas criador da linguagem C. operacionais (Windows, Linux, Esquerda: Ken Thompson. Mac OSX, Solaris). Ele e Dennis Ritchie criaram o sistema operacional Unix.
  • 6. Qual é a mais fácil de entender?Função em código de máquina x86 32-bits Código em Linguagem Assembly Código em Linguagem C para calcular para calcular o “enésimo” número (MASM) para calcular o o “enésimo” número Fibonacci Fibonacci “enésimo” número Fibonacci8B542408 83FA0077 06B80000 0000C383 fib: unsigned int fib(unsigned int n)FA027706 B8010000 00C353BB 01000000 mov edx, [esp+8] {B9010000 008D0419 83FA0376 078BD98B cmp edx, 0 if (n <= 0) C84AEBF1 5BC3 ja @f return 0; mov eax, 0 else if (n <= 2) ret return 1; else { @@: int a,b,c; cmp edx, 2 a = 1; ja @f b = 1; mov eax, 1 while (1) { ret c = a + b; @@: if (n <= 3) return push ebx c; mov ebx, 1 a = b; mov ecx, 1 b = c; n--; @@: } lea eax, [ebx+ecx] } cmp edx, 3 } jbe @f mov ebx, ecx mov ecx, eax dec edx jmp @b @@: pop ebx ret
  • 7. Linux Kernel - Linguagens Linhas de programação no Kernel 3.6-rc1, separadas por linguagem. Ferramenta de Estatística usada: SLOCCount 2.26
  • 8. De"nição Paradigmas de programação são estilos fundamentais de programação em computadores. As principais categorias são: - Estruturada; - Orientada a Objetos; - Funcional; - Lógica.
  • 9. Categorias (1)- Estruturada: Paradigmadesignado a melhorar a“claridade”, qualidade e tempo dedesenvolvimento de umprograma de computador, atravésdo uso extensivo de subrotinas,estruturas de bloco e loopswhile e for.- Orientada a objetos: Umprograma baseado nesteparadigma pode ser visto comouma coleção de objetos que seinteragem. Cada objeto é capazde enviar mensagens, processardados e enviar mensagens aoutros objetos. Utiliza técnicascomo encapsulamento,polimor!smo e herança. Popularidade das principais linguagens de programação nos últimos 10 anos, de acordo com o índice TIOBE
  • 10. Categorias (2) Código em Linguagem C++ para calcular números Fibonacci - Funcional: Paradigma que usa int fibonacci(int iterations) { avaliação de expressões, int first = 0, second = 1; // seed values resultando em um código com for (int i = 0; i < iterations - 1; ++i) { menos linhas, mais “limpo” e mais int sum = first + second; first = second; fácil de entender. Tem as origens second = sum; } de uma disciplina puramente matemática: A teoria das funções. return first; } int main() { - Lógica: Drasticamente diferente std::cout << fibonacci(10) << "n"; dos outros três paradigmas. return 0; } Encaixa perfeitamente bem ao ser aplicado em problemas que lidamCódigo em Linguagem Haskell para calcular números Fibonacci com a extração de conhecimento baseado em fatos e relações fibRecurrence first second = first : fibRecurrence second (first + second) básicas. Em seu amplo senso, é fibonacci = fibRecurrence 0 1 main = print (fibonacci !! 10) aplicado o uso de matemática lógica. Geralmente associada com inteligência arti!cial e linguística computacional.
  • 11. Exemplos EstruturadaC, COBOL, FORTRAN, BASIC Orientada a ObjetosC++, Delphi, Java, VB.NET, C# FuncionalISLISP, Erlang, Haskell, Scala Lógica Prolog, Oz, Mercury 11
  • 12. Múltiplos Paradigmas Uma linguagem de programação pode ter suporte a múltiplos paradigmas. Por exemplo, programas criados em C++ ou Object Pascal podem ser: - Puramente estruturados OU - Puramente orientados a objeto OU - Conter elementos de ambos.A livre decisão de usar um ou outro paradigma é por conta do programador (Contanto que a linguagem tenha suporte).
  • 13. Fonteshttp://en.wikipedia.org/wiki/Programming_paradigmhttp://en.wikipedia.org/wiki/Object-oriented_programminghttp://people.cs.aau.dk/~normark/prog3-03/html/notes/paradigms_themes-paradigm-overview-section.htmlhttp://en.wikipedia.org/wiki/Functional_programminghttp://en.wikipedia.org/wiki/Category:Logic_programming_languageshttp://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Binary_numeral_systemhttp://en.wikipedia.org/wiki/Gottfried_Wilhelm_Leibnizhttp://www.infoplease.com/ce6/sci/A0860535.htmlhttp://en.wikipedia.org/wiki/Fibonacci_numberhttp://www.davidsalomon.name/assem.advertis/asl.pdf (Página 7)http://en.wikipedia.org/wiki/Electronic_Delay_Storage_Automatic_Calculatorhttp://en.wikipedia.org/wiki/ENIAChttp://nookkin.com/content/why-computers-use-binary.phphttp://www.dabeaz.com/consulting.htmlhttp://en.wikipedia.org/wiki/Second-generation_programming_languagehttp://en.wikipedia.org/wiki/Third_generation_languagehttp://en.wikipedia.org/wiki/C_(programming_language)http://en.wikipedia.org/wiki/Transistor_counthttp://www.intel.com/about/companyinfo/museum/exhibits/sandtocircuits/index.htmhttp://www.arm.com/products/tools/software-tools/rvds/arm-compiler.phphttp://en.wikipedia.org/wiki/Java_(software_platform)http://en.wikipedia.org/wiki/Machine_codehttp://en.wikipedia.org/wiki/List_of_assemblershttp://en.wikipedia.org/wiki/Assembly_languagehttp://en.wikipedia.org/wiki/Structured_programminghttp://en.wikipedia.org/wiki/Object-oriented_programminghttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

×