Escolar Documentos
Profissional Documentos
Cultura Documentos
- 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
Atenção!
Mais informações sobre Paradigmas de
Programação
em:
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
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)
Exemplo: Se A = 1 e
B =2, então X = 3
Soma de dois números
Linguagem Basic
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
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
end.
Linguagem C
/* programa adiciona dois numeros inteiros */
/* inclui informacao sobre biblioteca de comandos */
#include <stdio.h>
/* 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);
printf(" ");
}
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.
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.
Exemplo :
> (setq y 20)
20
> (let ((x 10))
(+ x y))
30
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
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."
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”.
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.
Exemplo: Classe Carro
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.
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.
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.
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”.
Exemplo
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.[...]”
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.
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.
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”.
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.
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”
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.
Exemplo
Embora ela contenha todos objetos e portanto esteja
“correta” não é muito inteligente.
•That’all folks!
•The End