Julho, 2012
Paradigmas de análise e
desenvolvimento de sistemas
Principais Paradigmas
Rosemary Silveira Filgueiras Melo
rosesfmelo@hotmail.com
Julho, 2012
Tópicos abordados
•
Conceito de Paradigma
•
Tipos de Paradigmas
•
Paradigma Imperativo
•
Paradigma Declarativo
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
Tipos de Paradigma
Imperativo
Declarativo
Funcional
Lógico
Orientado a Objetos
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.
Julho, 2012
Modelo Computacional do Paradigma Imperativo
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
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
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
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
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 umalinguagem 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
Podem ser classificadas em:
Paradigma Lógico
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
GODELJulho, 2012
Paradigma Declarativo
Exemplo de um programa em Prolog:
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 defunçõ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 Declarativo
Exemplo de um programa em LISP:
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
etcJulho, 2012
Paradigma Orientado a Objetos
Principais conceitos utilizados no paradigma OO:
Classe
Objeto / instância de uma classe
Atributo
Método
Julho, 2012
Paradigma Orientado a Objetos
Principais conceitos utilizados neste paradigma:
Herança (generalização)
Encapsulamento
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
Exemplo de declaração de uma Classe em Java:
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
Exemplo de Objeto:
Julho, 2012
Paradigma Orientado a Objetos
Exemplo de criação de um objeto em Java:
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
Exemplo de declaração de atributo de uma classe em
Java:
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 asubrotina).
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 MorderJulho, 2012
Paradigma Orientado a Objetos
Exemplo de definição de um método em Java:
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
Exemplo de invocação de um método em Java:
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
Herança
Julho, 2012
Paradigma Orientado a Objetos
Herança
Pode haver vários níveis de hierarquia.Julho, 2012
Paradigma Orientado a Objetos
Exemplo utilizando herança em Java:
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
Exemplo de encapsulamento da classe funcionário:
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).
Julho, 2012
Paradigma Orientado a Objetos
Polimorfismo
Julho, 2012
Paradigma Orientado a Objetos
Julho, 2012