Title: Paradigmas de Programa
1Paradigmas 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
2Mais 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
3Paradigma?
- 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.
4Estilo 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.
5Estilo 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.
6Exemplos
- 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.
7Relembrar é 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
8Relembrar é 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?
9Relembrar é 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..
10Organizaçã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
11Organizaçã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
12Linguagem 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
13Em 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
14Do baixo nível ao alto nível!!!
15Soma de dois números
16Assembly (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
17Assembly (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
18Assembly (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.
19Programaçã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
20Programaçã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
21Algoritmo 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
22Linguagem 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
23Linguagem 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
24Linguagem 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.
25Linguagem 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)
26Programaçã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.
27Programaçã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
28Programaçã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
29Orientaçã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."
30Orientaçã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.
31Classes
- 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.
32Exemplo Classe Carro
33Classe 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.
34Objetos
- 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.
35Objeto 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.
36Mé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.
37Exemplo
38Encapsulamento
- 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....
39Exemplo
- 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.
40Heranç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.
42Abstraçã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.
43Exemplo
- 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
44Exemplo
- 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.
45Exemplo
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.
46Assim 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