Você está na página 1de 13

Paradigmas de Programao

Segurana da Informao Senac

Projeto elaborado por Thiago Morais Agosto/2012

... E no comeo,...
Computadores so operados por sequncias de instrues chamadas cdigo de mquina. Esse cdigo endereado ao hardware e escrito em notao binria, usando apenas 0s e 1s.
50nm Transistor 2000x menor que o dimetro de um !o de cabelo. O processador de 10 cores Xeon Westmere-EX da Intel possui 2.6 bilhes de transistores como os da foto ao lado.

Gottfried Leibniz (1646-1716), matemtico alemo que aperfeioou o sistema binrio moderno.

Primeira Gerao
Linguagens de primeira gerao requerem longas sequncias de nmeros binrios para representar operaes como adicionar, subtrair e comparar. Melhoramentos posteriores permitiram as representaes octais, decimais e hexadecimais de sequncias binrias.

Nmeros Fibonacci: Sequncia de nmeros, iniciada pelos nmeros 0 e 1, onde cada nmero subsequente a soma dos dois ltimos nmeros. (0,1,1,2,3,5,8,13,21,34,55,89,144,...) Exemplo: Funo em cdigo de mquina x86 32-bits para calcular o ensimo nmero Fibonacci
8B542408 83FA0077 06B80000 0000C383 FA027706 B8010000 00C353BB 01000000 B9010000 008D0419 83FA0376 078BD98B C84AEBF1 5BC3

ENIAC - 1946 - Primeiro computador eletrnico. Ocupava 167 m2 e pesava 27 toneladas. O processo de programao do ENIAC envolvia manipular cabos e switches.

Segunda Gerao
Assembly Linguagem de baixo nvel, diferente em cada arquitetura (x86, SPARC, ARM, etc.). Menos complicada de compreender do que cdigo de mquina. Mais utilizada em situaes espec!cas: - Software para BIOS; - Sistema !y-by-wire para avies; - Firmware para smartphones; - Engenharia reversa; - Gerenciador de boot GRUB (2,8% do cdigo desenvolvido em Assembly).
Exemplo: Cdigo em Linguagem Assembly para calcular o ensimo nmero Fibonacci
fib: mov edx, [esp+8] cmp edx, 0 ja @f mov eax, 0 ret @@: cmp edx, 2 ja @f mov eax, 1 ret @@: push ebx mov ebx, 1 mov ecx, 1 @@: lea cmp jbe mov mov dec jmp @b @@: pop ebx ret eax, edx, @f ebx, ecx, edx [ebx+ecx] 3 ecx eax

EDSAC - 1949 - Primeiro computador capaz de rodar um assembler primitivo.

Terceira Gerao
- Linguagens de Terceira Gerao ou de Alto Nvel foram inicialmente criadas no !nal da dcada de 50; - Possuem uma estrutura mais fcil de ler, programar e manter. So mais prximas linguagem humana e mais distantes linguagem de mquina; - Propiciam ao programador a desenvolver programas que so um pouco mais independentes de plataforma; - Um programa em Java pode rodar em vrias arquiteturas (X86-64, IA-32, SPARC e ARM) e em vrios sistemas operacionais (Windows, Linux, Mac OSX, Solaris).
Exemplo: Cdigo em Linguagem C para calcular o ensimo nmero Fibonacci
unsigned int fib(unsigned int n) { if (n <= 0) return 0; else if (n <= 2) return 1; else { int a,b,c; a = 1; b = 1; while (1) { c = a + b; if (n <= 3) return c; a = b; b = c; n--; } } }

A verso do Unix para o PDP-11 (acima) foi desenvolvido em Assembly. Em 1973, a linguagem C se tornou madura o su!ciente e uma grande parte do kernel do Unix foi reescrito em C.

Sobre a foto Direita: Dennis Ritchie, criador da linguagem C. Esquerda: Ken Thompson. Ele e Dennis Ritchie criaram o sistema operacional Unix.

Qual a mais fcil de entender?


Funo em cdigo de mquina x86 32-bits para calcular o ensimo nmero Fibonacci
8B542408 83FA0077 06B80000 0000C383 FA027706 B8010000 00C353BB 01000000 B9010000 008D0419 83FA0376 078BD98B C84AEBF1 5BC3

Cdigo em Linguagem Assembly (MASM) para calcular o ensimo nmero Fibonacci


fib: mov edx, [esp+8] cmp edx, 0 ja @f mov eax, 0 ret @@: cmp edx, 2 ja @f mov eax, 1 ret @@: push ebx mov ebx, 1 mov ecx, 1 @@: lea cmp jbe mov mov dec jmp @b @@: pop ebx ret eax, edx, @f ebx, ecx, edx [ebx+ecx] 3 ecx eax

Cdigo em Linguagem C para calcular o ensimo nmero Fibonacci

unsigned int fib(unsigned int n) { if (n <= 0) return 0; else if (n <= 2) return 1; else { int a,b,c; a = 1; b = 1; while (1) { c = a + b; if (n <= 3) return c; a = b; b = c; n--; } } }

Linux Kernel - Linguagens

Linhas de programao no Kernel 3.6-rc1, separadas por linguagem. Ferramenta de Estatstica usada: SLOCCount 2.26

De"nio
Paradigmas de programao so estilos fundamentais de programao em computadores. As principais categorias so: - Estruturada; - Orientada a Objetos; - Funcional; - Lgica.

Categorias (1)
- Estruturada: Paradigma designado a melhorar a claridade, qualidade e tempo de desenvolvimento de um programa de computador, atravs do uso extensivo de subrotinas, estruturas de bloco e loops while e for. - Orientada a objetos: Um programa baseado neste paradigma pode ser visto como uma coleo de objetos que se interagem. Cada objeto capaz de enviar mensagens, processar dados e enviar mensagens a outros objetos. Utiliza tcnicas como encapsulamento, polimor!smo e herana.

Popularidade das principais linguagens de programao nos ltimos 10 anos, de acordo com o ndice TIOBE

Categorias (2)
Cdigo em Linguagem C++ para calcular nmeros Fibonacci
int fibonacci(int iterations) { int first = 0, second = 1; // seed values for (int i = 0; i < iterations - 1; ++i) { int sum = first + second; first = second; second = sum; } return first; } int main() { std::cout << fibonacci(10) << "\n"; return 0; }

- Funcional: Paradigma que usa avaliao de expresses, resultando em um cdigo com menos linhas, mais limpo e mais fcil de entender. Tem as origens de uma disciplina puramente matemtica: A teoria das funes. - Lgica: Drasticamente diferente dos outros trs paradigmas. Encaixa perfeitamente bem ao ser aplicado em problemas que lidam com a extrao de conhecimento baseado em fatos e relaes bsicas. Em seu amplo senso, aplicado o uso de matemtica lgica. Geralmente associada com inteligncia arti!cial e lingustica computacional.

Cdigo em Linguagem Haskell para calcular nmeros Fibonacci


fibRecurrence first second = first : fibRecurrence second (first + second) fibonacci = fibRecurrence 0 1 main = print (fibonacci !! 10)

Exemplos
Estruturada C, COBOL, FORTRAN, BASIC

Orientada a Objetos C++, Delphi, Java, VB.NET, C#

Funcional ISLISP, Erlang, Haskell, Scala

Lgica Prolog, Oz, Mercury


11

Mltiplos Paradigmas
Uma linguagem de programao pode ter suporte a mltiplos 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 deciso de usar um ou outro paradigma por conta do programador (Contanto que a linguagem tenha suporte).

Fontes
http://en.wikipedia.org/wiki/Programming_paradigm http://en.wikipedia.org/wiki/Object-oriented_programming http://people.cs.aau.dk/~normark/prog3-03/html/notes/paradigms_themes-paradigm-overviewsection.html http://en.wikipedia.org/wiki/Functional_programming http://en.wikipedia.org/wiki/Category:Logic_programming_languages http://en.wikipedia.org/wiki/Imperative_programming http://en.wikipedia.org/wiki/Binary_numeral_system http://en.wikipedia.org/wiki/Gottfried_Wilhelm_Leibniz http://www.infoplease.com/ce6/sci/A0860535.html http://en.wikipedia.org/wiki/Fibonacci_number http://www.davidsalomon.name/assem.advertis/asl.pdf (Pgina 7) http://en.wikipedia.org/wiki/Electronic_Delay_Storage_Automatic_Calculator http://en.wikipedia.org/wiki/ENIAC http://nookkin.com/content/why-computers-use-binary.php http://www.dabeaz.com/consulting.html http://en.wikipedia.org/wiki/Second-generation_programming_language http://en.wikipedia.org/wiki/Third_generation_language http://en.wikipedia.org/wiki/C_(programming_language) http://en.wikipedia.org/wiki/Transistor_count http://www.intel.com/about/companyinfo/museum/exhibits/sandtocircuits/index.htm http://www.arm.com/products/tools/software-tools/rvds/arm-compiler.php http://en.wikipedia.org/wiki/Java_(software_platform) http://en.wikipedia.org/wiki/Machine_code http://en.wikipedia.org/wiki/List_of_assemblers http://en.wikipedia.org/wiki/Assembly_language http://en.wikipedia.org/wiki/Structured_programming http://en.wikipedia.org/wiki/Object-oriented_programming http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html