paradigmas de análise e desenvolvimento de sistemas...

63
Julho, 2012 Paradigmas de análise e desenvolvimento de sistemas Principais Paradigmas Rosemary Silveira Filgueiras Melo [email protected] rosefib.webnode.com.br

Upload: vominh

Post on 12-Jul-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

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

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.

• Primeiro paradigma a surgir e ainda dominante.

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

- 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

Podem ser classificadas em:

Paradigma Lógico

Paradigma Funcional

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

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 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 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

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

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 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

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

Exemplo de sobrecarga de método em Java:

Julho, 2012

Paradigma Orientado a Objetos

Exemplo de um programa OO:

Julho, 2012

Cronograma histórico de linguagens de programação e paradigmas