Julho, 2012
Paradigmas de análise e desenvolvimento de sistemas
Principais Paradigmas Rosemary Silveira Filgueiras Melo
[email protected] rosefib.webnode.com.br
Julho, 2012
Tópicos abordados
• Conceito de Paradigma
• Tipos de Paradigmas
• Paradigma Imperativo
• Paradigma Declarativo
• Paradigma Orientado a Objetos
Julho, 2012
Conceito de Paradigma
Paradigma
- modelo, padrão ou estilo de programação suportado por linguaguens que agrupam certas características comuns.
- fornece e dertermina a visão que o programador tem sobre a estrutura e execução de um programa
- algumas linguagens foram construídas para suportar um paradigma específico, outras podem suportar múltiplos paradigmas
Exemplos.:
-Java e Smalltalk suportam o paradigma orientado a objetos
-C++, LISP, Perl, Python suportam múltiplos paradigmas
Julho, 2012
Paradigma Imperativo
• Programas centrados no conceito de estado (modelado por variáveis) e ações (comandos) que modificam o estado.
• Expressam uma sequência de comandos para o computador executar.
• Também denominado de paradigma procedural por incluir mecanismos de subrotinas como forma de estruturação.
• Primeiro paradigma a surgir e ainda dominante.
Julho, 2012
Paradigma Imperativo
Exemplo de linguagens Imperativas:
• Fortran
• Cobol
• Algol
• Pascal
• C
•etc
Julho, 2012
Paradigma Imperativo
Técnicas de programação das linguagens imperativas:
- Programação estruturada
- Modularização
- Recursividade
Julho, 2012
Paradigma Imperativo
Programação estruturada:
- forma de programação que considera que todo programa se resume a três estruturas:
sequencial
de decisão
e de repetição
Julho, 2012
Paradigma Imperativo
Modularização:
- Mecanismo que permite o usuário subdividir seus programas em
blocos ou módulos (subrotinas)
- Estes blocos ou módulos referem-se a um pedaço de código computacional que executa uma função bem definida, que pode ser utilizado várias vezes no programa.
- Estas funções devem ser criadas para serem genéricas o
bastante visando a possibilidade de reutilização de código.
- Certas linguagens define dois tipos de subrotinas: as que
retornam valores (função) e as que não retornam valores (procedimento). Ex.: linguagem Pascal.
Julho, 2012
Paradigma Imperativo
Exemplo:
#include <iostream> using namespace std; int fatorial(int x) { int i, aux; aux = 1; for (i=x; i>=1;i--) aux = aux * i ; return aux; }
main () { int n; cout << "Digite um numero inteiro : "; cin >> n; cout << "Fatorial: " <<fatorial(n) <<"\n"; system("PAUSE"); }
Julho, 2012
Paradigma Imperativo
Recursividade:
- definição de subrotina que podem invocar a si mesma
Ex.:
#include <iostream> using namespace std; int fatorial (int x) { int aux; if (x==0) return 1; else { aux = x*fatorial(x-1); return aux; } }
main () { int n; cout << "Digite um numero inteiro : "; cin >> n; cout << "Fatorial: " <<fatorial(n) <<"\n"; system("PAUSE"); }
Julho, 2012
Paradigma Imperativo
Principais elementos das linguagens imperativas
- Variáveis: simples e compostas (vetores, matrizes e registros)
- Definição de tipo (permite definir novos tipos)
- Comandos de atribuição
- Expressões aritméticas e lógicas
- Estrutura sequencial e condicional
- Estrutura de repetição
- Subrotinas
- Alocação dinâmica
Julho, 2012
Paradigma Imperativo
Exemplo de Vetores
(Variáveis compostas homogêneas Unidimensionais):
#include <iostream>
char nome[10];
using namespace std;
main ()
{
cout <<"Digite um nome:";
gets(nome);
cout << << "\n“;
system("PAUSE");
}
Julho, 2012
Paradigma Imperativo
Exemplo de Matriz
(Variáveis compostas homogêneas Bidimensionais):
#include <iostream>
float M[10][10];
int i,j;
using namespace std;
main () {
for(i=0;i<=3;i++) //Leitura dos elementos
for(j=0;j<=3;j++)
M[i][j]=i+j;
for(i=0;i<=3;i++) //Impressão da matriz
for(j=0;j<=3;j++)
cout << M[i][j] <<" ";
system("PAUSE");
}
Julho, 2012
Paradigma Imperativo
Exemplo de registros
(Variáveis compostas heterogêneas):
struct aluno {
char nome[40];
int matric;
float nota1, nota2;
} aluno1, aluno2;
Julho, 2012
Paradigma Imperativo
Exemplo de definição de novos tipos de dados:
typedef struct tipo_endereco { char rua [50]; char bairro [20]; char cidade [30]; long int CEP; } TEndereco;
typedef struct ficha_pessoal { char nome [50]; long int telefone; TEndereco endereco; }TFicha;
void main(void) { TFicha *ex; .... }
Julho, 2012
Paradigma Imperativo
Exemplo usando subrotina: (Ling. C) :
int soma (int x, int y)
{ int z;
z = x + y;
return z;
}
int main () {
int a, b;
cin >> a;
cin >> b;
cout << “soma = “<< soma(a,b);
system(“Pause”);
}
Julho, 2012
Paradigma Imperativo
Exemplo usando alocação dinâmica:
(usa variáveis chamada de ponteiro para guardar endereço de memória)
int count = 10;
int *pt;
pt= &count; //atribui o endereço de count a pt
*pt=12; //atribui um novo valor a variável apontada por pt
Julho, 2012
Paradigma Imperativo
Vantagens
- eficiência
- modelagem “natural” de aplicações do mundo real
- paradigma dominante e bem estabelecido
- flexível
- boa legibilidade ao utilizar o modelo estruturado
Desvantagens
- as instruções são baseadas no como e não no o que.
- mudanças na estrutura dos dados pode acarretar alteração em todas as funções relacionadas (dados separados das funções)
Julho, 2012
Paradigma Declarativo
Caracteriza-se pelo método preciso de descrever um problema sem se preocupar como este problema será resolvido.
Um programa é dito declarativo quando ele descreve o que ele faz e não como ele funciona.
No paradigma declarativo o programa especifica uma relação ou uma função.
A maioria das linguagens declarativas não constituem uma linguagem declarativa pura por definição, pois permitem que os algoritmos sejam implementados com detalhes.
Julho, 2012
Paradigma Declarativo
Outra forma de programação declarativa é o uso de linguagens específicas por domínio.
Ex.: XSLT (transformar documentos XML), SQL (para realizar requisições a banco de dados), ATL (Linguagem de transformação de Modelos – Atlas), etc.
Julho, 2012
Paradigma Declarativo
Exemplos na Linguagem SQL (Structured Query Language):
Ex1.:
SELECT *
FROM cliente
WHERE nome = “Joao”
Ex2.:
SELECT Name, ProductNumber, ListPrice AS Price
FROM Product
WHERE ProductLine = 'R' AND DaysToManufacture < 4
Julho, 2012
Paradigma Declarativo
Exemplo na Linguagem ATL:
--testa no contexto UML se a classe que esta sendo transformada esta estereotipada com sensor
helper context UML!Class def:isSensor():Boolean = self.getAppliedStereotypes()->exists(c|c.name='Sensor');
rule Sensor2EquipMedicao{
from s:UML!Class (s.isSensor())
to tSensor:UML!Class(
name <-s.name,
generalization <- s.generalization
}
do{ tSensor.applyStereotype(thisModule.findStereotype('EquipamentoM edicao', 'PerfilPIM'));}
Julho, 2012
Paradigma Declarativo
Paradigma Lógico Paradigma que adota o estilo da lógica matemática à
programação de computadores.
Se baseia em axiomas (verdades universais) e regras de inferência (regra de transformação sintática) para inferir (deduzir) uma conclusão a partir de um argumento.
O programa formará conclusões imediatas a partir de uma lista de premissas.
A inteligência artificial teve uma influência importante no desenvolvimento da programação lógica.
Julho, 2012
Paradigma Declarativo
Modelo Computacional do Paradigma Lógico:
Mudança substancial do modelo computacional, pois a execução é baseada em relação entre entrada e saída.
Ex.: um compilador modelado como um programa lógico, relaciona código fonte e destino, portanto pode ser utilizado tanto como um compilador quanto como um decompilador.
Julho, 2012
Paradigma Declarativo
Exemplo de linguagens que adotam o paradigma lógico:
PLANER
PROLOG
GODEL
Etc.
Julho, 2012
Paradigma Declarativo
Paradigma Funcional
Trata a computação como uma avaliação de funções matemáticas, que evita estado ou dados mutáveis.
Um programa é visto como uma função (ou grupo de funções) constituída de outras funções mais simples.
Entende-se como um mapeamento dos valores de entrada nos valores de saída, através de funções.
Enfatiza a aplicação de funções, em contraste com o paradigma imperativo, que enfatiza mudanças no estado do programa.
Julho, 2012
Paradigma Declarativo
Paradigma Funcional
Não incluem qualquer provisão para atribuição ou dados mutáveis.
O mapeamento entre os dados de entrada e saída são alcançados mais diretamente.
Mais usada academicamente do que no desenvolvimento comercial de software.
Julho, 2012
Paradigma Declarativo
Modelo Computacional do Paradigma Funcional:
Adota o modelo computacional de função que mapeia entradas em saídas de forma determinística ou direta, através de funções definidas como na matemática.
Julho, 2012
Paradigma Declarativo
Exemplo de linguagens que adotam o paradigma funcional:
APL
LISP
ML
Haskell
Etc.
Julho, 2012
Paradigma Orientado a Objetos
Paradigma de análise, projeto e programação de software baseado na composição e interação de diversas unidades de software denominadas de objetos.
Um programa OO (Orientado a Objetos) consiste de objetos que recebe e envia mensagens, executa processamento e possui estado que ele pode modificar.
Funcionamento de um programa OO se dá através da troca de mensagens entre objetos.
Todo objeto possui método(s) e atributo(s) relacionados que correspondem respectivamente ao comportamento e o estado de cada objeto.
Julho, 2012
Paradigma Orientado a Objetos
Modelo Computacional do Paradigma Orientado a Objetos:
Num programa OO, as ações (comandos) do programa podem envolver a invocação de métodos que alteram o estado de um objeto específico, ao invés de um estado único de aplicação.
Julho, 2012
Paradigma Orientado a Objetos
Comparação entre o paradigma procedural e orientado a objetos
Paradigma procedural enxerga um programa como um conjunto de funções que alteram dados.
Paradigma OO enxerga um programa como uma coletânea de objetos que interagem entre si, possui características própria representadas pelos seus atributos e operações.
Julho, 2012
Paradigma Orientado a Objetos
Exemplo de linguagens de programação OO:
Simula 67
Smalltalk
Eiffel
Object Pascal
C++
Java
etc
Julho, 2012
Paradigma Orientado a Objetos
Principais conceitos utilizados no paradigma OO:
Classe
Objeto / instância de uma classe
Atributo
Método
Mensagem
Julho, 2012
Paradigma Orientado a Objetos
Principais conceitos utilizados neste paradigma:
Herança (generalização)
Encapsulamento
Polimorfismo
Julho, 2012
Paradigma Orientado a Objetos
Classe
Representa uma idéia ou conceito simples, que define as
características de uma coleção de objetos.
Consiste na descrição de métodos e atributos pertencentes a todos os objetos desta classe.
Similar a um tipo abstrato de dados, define a estrutura interna e um conjunto de operações que todos os objetos instâncias da classe irão possuir.
Exemplo de classes: pessoa, aluno, professor, livro, faculdade, etc.
Julho, 2012
Paradigma Orientado a Objetos
Classe
Representação de uma classe usando notação simbólica:
Atributos
Métodos
Julho, 2012
Paradigma Orientado a Objetos
Objeto
Representa uma instância de uma classe, analogamente há uma
variável que corresponde a um tipo de dado específico.
Um objeto é capaz de armazenar estados através de seus atributos, reagir a mensagens enviadas, assim como se relacionar e enviar mensagens a outros objetos.
Exemplo de objetos da classe Pessoa:
João, José, Maria, etc.
Exemplo de objetos da classe Faculdade:
ESTÁCIO, UNIFACS, AREA1, etc
Julho, 2012
Paradigma Orientado a Objetos
Atributo
Consiste em um dado ou informação de estado, para o qual cada objeto de uma classe tem seu próprio valor.
Ex.: Classe funcionário
atributos: nome, endereço, telefone, CPF, ...
Os atributos possuem valores .
Ex.: Nome: João;
Endereço: Rua E, Casa 9
O conjunto de valores dos atributos de um determinado objeto é chamado de estado.
Julho, 2012
Paradigma Orientado a Objetos
Método
Consiste na descrição de uma operação que um objeto deve
executar quando receber uma mensagem (semelhante a subrotina).
Um método em uma classe é apenas uma definição.
Normalmente uma classe possui diversos métodos.
Dentro de um programa a utilização de um método deve afetar apenas um objeto em particular.
Julho, 2012
Paradigma Orientado a Objetos
Método
Exemplo:
Classe Cachorro
Métodos
Latir
Sentar
Comer
Morder
Julho, 2012
Paradigma Orientado a Objetos
Mensagem Chamada a um objeto para invocar um de seus métodos,
ativando um comportamento descrito por sua classe.
Funciona como uma fábrica que recebe uma ordem de produção
(mensagem de solicitação), processa esta ordem (operações), utilizando matéria-prima (atributos) e gera um produto final (mensagem de resposta).
Julho, 2012
Paradigma Orientado a Objetos
Herança
Mecanismo pelo qual uma classe (subclasse) pode estender uma
outra classe (super-classe).
A subclasse herda todos os componentes da classe pai, como atributos e métodos.
Qualquer propriedade herdada pode ser redefinida na definição da subclasse, substituindo a definição herdada.
Julho, 2012
Paradigma Orientado a Objetos
Encapsulamento
Consiste na separação de aspectos internos e externos de um objeto.
É utilizado para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando apenas os métodos que alteram este estado.
Julho, 2012
Paradigma Orientado a Objetos
Polimorfismo
Propriedade que permite que a mesma mensagem seja enviada a diferentes objetos e que cada objeto execute a operação que é apropriada à sua classe.
Funções/métodos com o mesmo nome mas assinaturas diferentes (sobrecarga).
Top Related