Paradigmas de Programa - PowerPoint PPT Presentation

About This Presentation
Title:

Paradigmas de Programa

Description:

Paradigmas de Programa o - Estilos de programa o - Programa o Estruturada - Programa o Funcional - Programa o em L gica - Programa o Orientada a ... – PowerPoint PPT presentation

Number of Views:125
Avg rating:3.0/5.0
Slides: 51
Provided by: MAF96
Category:

less

Transcript and Presenter's Notes

Title: Paradigmas de Programa


1
Paradigmas de Programação
  • - Estilos de programação
  • - Programação Estruturada
  • - Programação Funcional
  • - Programação em Lógica
  • - Programação Orientada a Objetos

Profa. Maria Aparecida Fernandes Almeida, M.
Comp. Estágio de docência INE 5214 -
Introdução à Computação e Informática Agrícola
Centro de Ciências Agrárias - CCA - UFSC Prof.
Orientador Jorge Muniz Barreto, Dr. Departamento
de Informática e de Estatística -
INE Universidade Federal de Santa Catarina - UFSC
2
Mais informações sobre Paradigmas de Programação
em
Atenção!
  • Jorge Muniz Barreto Inteligência Artificial no
    Limiar do Século XXI,2a. Edição, Florianópolis,
    1999
  • Apêndice A, página 272 a 298

3
Paradigma?
  • Conjunto de regras que estabelecem fronteiras e
    descrevem como resolver problemas dentro destas
    fronteiras. Os paradigmas influenciam nossa
    percepção ajudam-nos a organizar e a coordenar a
    maneira como olhamos o mundo... . (Morris e
    Brandon - Reengenharia -Reestruturando a empresa)
  • Paradigmas de programação referem-se ao estilo de
    programação, portanto tem fortes vínculos com a
    linguagem de programação utilizada.

4
Estilo Declarativo x Estilo Imperativo
  • Uma linguagem particular através de suas
    estruturas de controle conduzem a um estilo
    específico de escrever programas (não confundir
    estilo com linguagem)
  • Estilo declarativo é feita a descrição do
    problema. Cada sentença tem significado por si
    mesma e adiciona algumas informações diretamente
    associadas ao resultado final. Elas podem ser
    apresentadas em qualquer ordem.
  • Exemplo pedir amigo o favor de encadernar
    fotocópias
  • Escute, você tem uma coleção de papéis para
    encadernar. As capas estão na mesa da secretária.
    Você pode pegar uma. As máquinas para encadernar
    cópias estão na sala número 2 e as explicações
    estão pregadas na parede.
  • Você descreve o resultado e dá a informação
    necessária para resolver o problema. Descreveu o
    problema, como soluciona-lo é decidido pelo
    programador.

5
Estilo Imperativo
  • Estilo imperativo descreve-se todas as operações
    a serem realizadas para solucionar o problema. O
    resultado final é uma conseqüência da realização
    destas operações. Cada sentença é uma forma
    imperativa e devem ser executadas em ordem e
    somente todas as sentenças juntas fazem sentido.
  • Exemplo pedir ao amigo para encadernar
    fotocópias
  • será que você pode encadernar esta coleção de
    papéis? Para fazer isso, vá até a mesa da
    secretária. Pegue uma capa. Vá a sala número 2.
    Leia e siga as instruções na parede. Volte com a
    capas encadernadas. Obrigada.
  • A escolha da linguagem tem forte influência no
    estilo imperativo ou declarativo de programação.
    Porém, em um programa real encontramos ambos
    estilos em diferentes partes do programa.

6
Exemplos
  • Fortran, Pascal, C - estilo imperativo, com
    associações, estruturas de controle, etc. Contudo
    na declaração de variáveis, definição de tipos e
    estruturas tem-se parte de programação
    declarativa.
  • Prolog, Lisp - estilo declarativo, mas a execução
    em Prolog depende da ordem das instruções e
    definição de funções em Lisp é feita de modo
    imperativo.

7
Relembrar é viver.... Organização do
computador (1/3)
  • Unidade central de processamento
  • controla a operação do computador
  • desenvolve todas operações aritméticas e lógicas
  • armazena e recupera instruções e dados
  • Unidade de controle
  • Busca as instruções na memória
  • decodifica-as e executa as operações
  • Unidade lógica e aritmética da CPU
  • desenvolve as operações que são aritméticas ou
    lógicas
  • contém os registradores

8
Relembrar é viver.... Organização do
computador (2/3)
  • Memórias
  • as instruções e dados são armazenados na memória
  • principal, primária, acesso aleatório (RAM)
  • RAM é volátil, a informação será perdida com a
    queda de energia
  • os registradores, de alta velocidade que
    localizam-se dentro da CPU também são voláteis
  • As memórias de somente leitura ROM (Read Only
    Memory)
  • não voláteis, contém informações de inicialização
    que não se perdem e nem podem ser trocadas.
    Pergunta E as EPROMs, EEPROs?

9
Relembrar é viver.... Organização do
computador (3/3)
  • memórias de armazenamento (secundárias)
  • disco rígido, disquetes, zips drive e CD
  • dados estão na forma magnética ou ótica
  • os dispositivos periféricos oferecem
    armazenamento de "longa duração"
  • o acesso aos dados é mais lento do que na
    memória principal
  • outros dispositivos periféricos
  • dispositivos de entrada/saída
  • impressoras, monitores, terminais, alto-falantes
  • teclado, scanner,câmera digital , etc..

10
Organização da memória (1/2)
  • Organização da memória
  • esquema binário dois dígitos, bits, 0 e 1
  • representam dois estados elétricos diferentes da
    máquina on (ligado) e off (desligado)
  • um grupo de 8 bits é um byte
  • a memória é referida em blocos
  • 210 bytes - 1024 bytes 1 K
  • Megabyte 210 x 210 1.048.576 bytes
  • bytes são agrupados em palavras (do mesmo tamanho
    que os registradores da CPU - comum 16, 32 e 64
    bits)
  • cada localização da memória é referida por seu
    endereço

11
Organização da memória (2/2)
  • Execução
  • a máquina entende instruções
  • as instruções são construídas de
  • código de operação numérica (opcode)
  • endereço de um operando
  • código de operação numérica (opcode) é a
    representação numérica de uma operação que a CPU
    pode desenvolver (carregar, multiplicar,
    adicionar, armazenar)
  • o endereço e o opcode devem ser representado na
    forma binária

12
Linguagem de Máquina (0 e 1s !!!)
  • Por exemplo, imagine a execução das seguintes
    tarefas
  • buscar o conteúdo da memória na localização 1024
    e carregar no registrador
  • buscar o conteúdo da memória na localização 1025
    e computar o produto deste valor e o valor do
    registrador
  • armazenar o conteúdo do registrador na
    localização 1027.
  • Supondo que os opcodes são 16 (para carregar),
    17 (para armazenar), 35 (para adicionar) e 36
    (para multiplicar) as instruções em linguagem de
    máquina seriam

13
Em Assembly - fica um pouco mais fácil...
  • O mesmo na linguagem Assembly ficaria
  • MOV A, ACC (mova o valor A (1024) para
    registrador ACC)
  • MUL B, ACC (multiplique o valor B (1025) pelo
    conteúdo de ACC)
  • ADD C, ACC (adicione o valor obtido na
    multiplicação (C) pelo conteúdo de ACC)
  • STO ACC, X (armazene o valor de ACC em X (1027))
  • A linguagem Assembly usa
  • mnemônicos para as instruções e nomes de
    variáveis colocadas no endereço numérico
  • Assembler um sistema de software que traduz as
    instruções em assembly para a linguagem de
    máquina
  • Tradução de um programa
  • linguagem de alto nível
  • linguagem assembly
  • linguagem de máquina

14
Do baixo nível ao alto nível!!!
15
Soma de dois números
16
Assembly (1/3)
O que o programa faz? No programa debug (do
DOS), a tela se parecerá com C\gtdebug -a
100 0D620100 mov ax,0002 move o valor 0002
para o registrador ax 0D620103 mov bx,0004
move o valor 0004 para o registrador bx 0D620106
add ax,bx adiciona o conteúdo dos registradores
ax e
bx guardando o resultado em ax D620108
nop a instrução nop (nenhuma operação) finaliza
o
programa 0D620109
17
Assembly (2/3)
Entramos com o comando "t" para executar passo a
passo as instruções -t AX0002 BX0000 CX0000
DX0000 SPFFEE BP0000 SI0000 DI0000 DS0D62
ES0D62 SS0D62 CS0D62 IP0103 NV UP EI PL NZ
NA PO NC0D620103 BB0400 MOV BX, 0004 Vemos o
valor 0002 no registrador AX. Teclamos "t" para
executar a segunda instrução -t AX0002 BX0004
CX0000 DX0000 SPFFEE BP0000 SI0000
DI0000 DS0D62 ES0D62 SS0D62 CS0D62
IP0106 NV UP EI PL NZ NA PO NC 0D620106 01D8
ADD AX,BX
18
Assembly (3/3)
Teclando "t" novamente para ver o resultado da
instrução add -t AX0006 BX0004 CX0000
DX0000 SPFFEE BP0000 SI0000 DI0000
DS0D62 ES0D62 SS0D62 CS0D62 IP0108 NV
UP EI PL NZ NA PE NC 0D620108 90 NOP A
possibilidade dos registradores conterem valores
diferentes existe, mas AX e BX devem conter os
mesmos valores acima descritos.
19
Programação Estruturada
  • A utilização do computador para resolver
    problemas exige que se que se faça uma a
    descrição de um conjunto de comandos que,
    obedecidos, provocarão uma sucessão finita de
    ações que resultarão na resolução do problema
    proposto (algoritmo).
  • O desenvolvimento estruturado de algoritmos tem
    como objetivos
  • facilitar o desenvolvimento dos algoritmos
  • facilitar seu entendimento pelos humanos
  • antecipar a comprovação de sua correção
  • facilitar a sua manutenção e modificação
  • permitir o desenvolvimento em equipe

20
Programação Estruturada
  • na programação estruturada tem-se
  • refinamentos sucessivos de algoritmos parte de
    descrições gerais e gradativas e sucessivamente
    entram em detalhes e minúcias do problema
  • modularização divisão do programa em módulos que
    delimitam poucas funções e são os mais
    independentes possíveis
  • nos módulos deve ser usado um número limitado de
    diferentes comandos e de diferentes estruturas de
    controle

21
Algoritmo Soma de dois números inteiros
- Ler o primeiro valor (A) que será entrado via
teclado - Ler o segundo valor (B) que será
entrado via teclado - Calcular a soma de A e B,
atribuindo o valor total (A B) a uma variável
(X). - Mostrar a soma (valor de X) na
tela. Exemplo Se A 1 e B 2, então X 3
22
Linguagem Basic
Soma de dois números
  • 1 REM LINGUAGEM BASIC
  • 5 REM PROGRAMA PARA ADICIONAR DOIS NUMEROS
    S0MA.BAS
  • 10 PRINT "QUAL O VALOR DE A?"
  • 20 INPUT A
  • 30 PRINT "QUAL O VALOR DE B?"
  • 40 INPUT B
  • 50 X A B
  • 60 PRINT "A SOMA DOS NUMEROS E'"
  • 70 PRINT X

23
Linguagem Fortran
! ! Soma de
dois numeros inteiros ! entradas a, b, dois
numeros inteiros ! saida x , a soma dos
numeros !
PROGRAM soma IMPLICIT NONE INTEGER a,
b INTEGER x ! le os numeros a e b
WRITE(,) 'Qual o valor de A?' READ(,) a
WRITE(,) 'Qual o valor de B?' READ(,) b
! soma o valor de a e b na variavel x x a
b ! mostra o resultado da soma WRITE(,)
WRITE(,) 'A soma dos numeros e', x END
PROGRAM soma
24
Linguagem Pascal
  • LINGUAGEM PASCAL
  • Programa para adicionar dois numeros
  • program adiciona
  • var
  • declaracao de variaveis
  • X, A, B integer
  • begin
  • Writeln('Qual valor de A? ')
  • readln(A)
  • writeln('Qual valor de B? ')
  • readln(B)
  • X AB
  • writeln('A soma dos numeros ', X)
  • readln
  • end.

25
Linguagem C
  • / programa adiciona dois numeros inteiros /
  • / inclui informacao sobre biblioteca de comandos
    /
  • include ltstdio.hgt
  • / define uma funcao chamada main que nao recebe
    argumentos /
  • main()
  • / define as variaveis A e B que serao somadas em
    X como inteiras /
  • int A
  • int B
  • int X
  • / scanf() e printf() entrada e saida de dados /
  • printf("Digite o valor de A")
  • scanf("d", A)
  • printf("Digite o valor de B")
  • scanf("d", B)
  • / soma dois numeros (A e B) inteiros /
  • X A B
  • / d imprime o resultado X como inteiro decimal
    /
  • printf("valor da soma eh d", X)

26
Programação Funcional
  • É um estilo de programação, sem atribuição, sem
    alteração dos argumentos de funções, e em que
    estas se limitam a produzir novos valores.
  • Neste paradigma, qualquer função da linguagem é
    considerada uma função matemática pura que, para
    os mesmos argumentos produz sempre os mesmos
    valores. Nunca nada é destruído.
  • Uma função que junta duas listas produz uma nova
    lista sem alterar as listas originais.
  • Ex. uma função que muda o número de portas de
    um automóvel produz um novo automóvel.
  • Vantagens produzir programas muito rapidamente e
    minimizar erros.
  • Limitações incapacidade em modificar seja lá o
    que for.

27
Programação Funcional Linguagem LISP
Soma de dois números em LISP A forma especial
setq recebe uma variável e um valor e atribui o
valor à variável. gt (let ((x 2)) atribui
valor 2 a x (setq x ( x 3)) soma em x ao
valor 3 (x5) (setq x ( x x)) multiplica
os valores de x (x.x 25) (setq x (- x 5))
subtrai de o valor x25 o valor 5 x) o
resultado é 20 ou seja (25 - 5) 20 Exemplo gt
(setq y 20) 20 gt (let ((x 10)) ( x y)) 30
28
Programação em Lógica
  • Uso da Lógica como paradigma de programação, anos
    70 Kowalsky
  • Origens demonstração automática de teoremas na
    IA.
  • Objetivo é solucionar um problema. O problema (P)
    é tratado como objeto matemático
  • P (D, R, q)
  • onde D dados, R resultados e q condição do
    problema

29
Orientação a objetos
  • Análise orientada a objetos (OOA) Um método de
    análise cujos requisitos são examinados da
    perspectiva de classes e objetos encontrados no
    vocabulário do domínio do problema.
  • Decomposição orientada a objetos "É o processo
    de quebrar um sistema em partes, cada parte
    representando uma classe ou objeto dentro do
    domínio do problema. Na decomposição orientada a
    objetos, o mundo é visto como uma coleção de
    objetos que cooperam uns com os outros para
    atingir a funcionalidade desejada."

30
Orientação a objetos
  • Projeto orientado a objetos (OOD) "Um método de
    projeto compreendendo o processo de decomposição
    orientada a objetos e a notação descrevendo os
    modelos físicos e lógicos, assim como os modelos
    estáticos e dinâmicos do sistema considerado
    especificamente esta notação incluem os diagramas
    de classes, os diagramas de módulos e os
    diagramas de processo.
  • Programação orientada a objetos (OOP) "Um método
    de implementação no qual os programas são
    organizados como uma coleção cooperativa de
    objetos, cada qual representando uma instância de
    alguma classe, e cujas classes são todas membros
    de uma hierarquia de classes unidas por relações
    de herança.

31
Classes
  • Uma classe é o elemento fundamental de um sistema
    orientado a objetos. Todas as classes de um
    sistema orientado a objetos são arranjadas em uma
    hierarquia de classes com uma classe raiz no
    topo.
  • "Uma classe é uma cópia fiel ou protótipo que
    define as variáveis e métodos comuns a todos
    objetos com uma certa característica". O que isso
    significa?
  • cópia fiel Uma classe não pode fazer qualquer
    coisa consigo mesma.
  • define Uma classe oferece algo que pode ser
    usado mais tarde.
  • objetos Uma classe pode ser somente usada se
    "traz para o mundo real" pela sua instanciação.

32
Exemplo Classe Carro
33
Classe Carro
  • A classe representando um carro tem as variáveis
    (marca, velocidade, marcha,...) e métodos
    (acelerar, frear,...).
  • Esta classe serve como uma descrição genérica de
    qualquer carro, porque cada coisa no mundo real
    que é um carro tem por exemplo, uma velocidade
    máxima, um número de rodas ... e quando dirige um
    carro você pode acelerar ou mudar a marcha.
  • Mas você não dirige um carro genérico com um
    número de rodas em uma velocidade. Você
    usualmente diz, por exemplo, quatro rodas a 80
    km/h. Isto especifica uma instância da classe
    carro e portanto denominada objeto.

34
Objetos
  • Objetos instância de uma classe
  • Um objeto tem um estado, um comportamento e
    identidade. A estrutura e o comportamento de
    objetos similares são definidos em suas classes
    comuns. O que isto significa?
  • estado Um objeto tem uma condição determinada
    por valores correntes de suas variáveis.
  • comportamento o estado de um objeto pode ser
    mudado aplicando-se um certo método.
  • identidade cada objeto pode ser distinguido de
    outros objetos.

35
Objeto MeuCarro
  • O objeto parece ser similar a classe e foi
    instanciado dela. Portanto, devido a isto sua
    estrutura não muda.
  • Pela aplicação de certos valores das variáveis, o
    objeto MeuCarro tem agora um certo estado assim
    como uma identidade.
  • É ainda um carro pois tem o mesmo comportamento
    de todos os outros carros, os quais são definidos
    em métodos de sua classe comum Carro.

36
Métodos
  • Sinônimo mensagem
  • Segundo BOOCH, um método é
  • "Uma operação em um objeto definido como parte da
    declaração de uma classe."
  • Os métodos, definidos em um classe, indicam o que
    objetos instanciados são capazes de fazer. Um
    método de um objeto é chamado por outros objetos
    do sistema.
  • Uma mensagem é compreendida por três componentes
  • 1. o objeto a quem a mensagem é endereçada
  • 2. o nome do método a ser executado
  • 3. quaisquer parâmetros necessários ao método
  • Assim, se quisermos mudar a velocidade de nosso
    carro, o motorista (que também é considerado um
    objeto) tem que chamar o método acelerar.

37
Exemplo
38
Encapsulamento
  • Sinônimo informação escondida
  • O encapsulamento é uma das características mais
    importantes de um sistema orientado a objetos.
  • BOOCH descreve o encapsulamento como
  • "O processo de esconder todos os detalhes de um
    objeto que não contribuem para suas
    características essenciais. Geralmente a
    estrutura de um objeto é escondida assim como a
    implementação de seus métodos....

39
Exemplo
  • Como mostra a figura do objeto MeuCarro, todas as
    suas variáveis são enclausuradas dentro dos
    métodos do objeto e podem ser mudadas somente por
    estes métodos.
  • Assim como, quando você acelera um carro no mundo
    real não sabe exatamente como o motor do carro
    trabalha. Você só tem que saber apertar o pedal
    do acelerador, embreagem e mudar a marcha.
  • Isto conduz a uma interface amigável, com
    benefícios para o usuário e para o programador
    tais como
  • O usuário não precisa conhecer detalhes da
    estrutura interna e da funcionalidade de um
    objeto. Ele deve saber quais operações podem ser
    feitas num objeto para mudar seu estado.
  • O programador pode mudar e melhorar detalhes de
    implementação sem mudança da interface.
  • Outra vantagem é que toda funcionalidade é
    enclausurada num mesmo objeto, o que facilita o
    manuseio de um objeto.

40
Herança
  • Como visto anteriormente, um sistema orientado a
    objetos consiste de classes arranjadas em uma
    hierarquia de classe.
  • Uma classe que esteja no topo desta hierarquia
    serve como uma base para outras classes, as quais
    tem a mesma ou propriedades adicionas. Este
    processo é denominado herança.
  • É um relacionamento entre classes, onde uma
    classe compartilha a estrutura ou comportamento
    definido em uma (herança simples) ou mais classes
    (herança múltipla).
  • A herança define uma característica hierárquica
    entre classes.

41
  • Embora um carro conversível e um caminhão não
    sejam parecidos, ambos têm algo em comum.
  • Assim, foram definidos como subclasses de
    Carro. Por exemplo, ambos têm um número de
    rodas e podem ser acelerados.

42
Abstração
  • Pela definição de subclasses, chega-se uma
    hierarquia de classes, onde as partes inferiores
    são mais e mais especializadas. Por outro lado,
    as classes nas partes superiores são mais
    generalizadas. Isto leva a outro aspecto da
    orientação objetos, a qual é denominada
    abstração.
  • "São as características essenciais de um objeto
    que o distingue de outros tipos de objetos e
    portanto oferecem fronteiras bem definidas,
    relativas à perspectiva de um observador, no
    processo de focalizar as características de um
    objeto ...
  • Como a definição diz, as abstrações são
    "relativas à perspectiva do observador", que
    significa que ela depende muito do domínio do
    problema para qual uma estrutura de classe será
    criada.
  • A pesquisa para se fazer abstrações inicia-se
    após os objetos do domínio do problema terem sido
    encontrados durante a fase de análise.
  • É a parte mais difícil e crítica do processo de
    desenvolvimento, porque o projeto dos níveis de
    abstração determina a qualidade do sistema
    considerado.

43
Exemplo
  • Considerando que o resultado da fase de análise
    foram os seguintes objetos
  • carros conversíveis
  • bicicletas "mountain bike"
  • motocicletas
  • bicicleta de dois lugares (tandem)
  • ônibus escolar
  • camionete
  • um Buggy
  • um caminhão
  • um Puma GTB

44
Exemplo
  • Obviamente, os objetos representam diferentes
    tipos de veículos. Analisando o fato, encontramos
    nossa primeira abstração tomando a classe de
    "veículos" como a classe base da nossa
    hierarquia.

45
Exemplo
Embora ela contenha todos objetos e portanto
esteja correta não é muito inteligente.
  • Uma violação evidente do princípio da abstração é
    por exemplo, que carro conversível pode ser
    encontrada no mesmo nível de um Buggy e um
    Puma GTB. Isto deve estar errado pois ambos são
    tipos de carros conversíveis.

46
  • Mudando a hierarquia

Assim temos uma hierarquia mais estruturada com
subclasses bicicletas, carros conversíveis e
"transportadores". Mas eles ainda são muito
específicos. Por exemplo, se um novo objeto
Omega for adicionado a hierarquia, onde seria
inserido, pois não é um carro conversível?
47
  • Rearranjando nossa estrutura pela introdução de
    uma nova classe "carros"

48
  • Agora existem quatro níveis de abstração. A nova
    classe "carros" pode conter as propriedades que
    são comuns a todas suas subclasses.
  • Mas algo ainda está errado com nossos carros
    conversíveis e "carros de luxo".
  • Como pode ser visto, eles estão arranjado no
    mesmo nível de abstração do que, por exemplo, um
    "caminhão". Mas um caminhão é mais abstrato do
    que um "Buggy" ou um "Omega".

49
  • Melhoremos nossa hierarquia fazendo outra
    abstração

50
  • Um quinto nível de abstração foi criado e nossa
    hierarquia de classe é agora mais adequada que
    nossa primeira tentativa mas ainda não
    terminou...
  • Isto foi um exemplo de processo de abstração para
    demonstrar somente como uma hierarquia de classe
    pode ser construída e quais reflexões devem ser
    feitas.
  • Linguagens orientadas a objetos C, JAVA,
    Smalltalk (ver exemplo no livro do Prof. Barreto)
  • Thatall folks!
  • The End
Write a Comment
User Comments (0)
About PowerShow.com