Paradigmas de Programação
Programação Orientada a Objetos Java
Prof. Anselmo Cardoso Paiva
Prof. Geraldo Braz Junior
Linguagem de Programação
Linguagem destinada a ser usada por um ser
humano para expressar um processo
através do qual um computador pode
resolver um problema
2
processo
Solução
Para que estudar linguagens?
 Desenvolvimento da habilidade em resolver
problemas.
 Capacidade de extrair o máximo da
funcionalidade e eficiência da LP.
 Escolha da LP apropriada para a solução
de cada problema
 Facilidade para aprender outras linguagens.
3
O que Estudar?
 Sintaxe: gramática (forma)
 Semântica: significado
 Pragmática (ex.: metodologias)
 Processadores:
compiladores, interpretadores, editores,
ambientes visuais ...
4
Histórico das LP
FORTRAN (FORmula TRANslation)-1956-John
Backus
 muito utilizada no meio técnico-científico
 disponibilidade de uma vasta biblioteca
 Contribuições:
 variáveis;
 comando de atribuição;
 conceito de tipos;
 modularidade (com o uso de subprogramas);
 E/S formatadas ;
5
Histórico das LP
COBOL (COmmon Business Oriented
Language) - 1959
 Código é "English-like"
 Padrão para as aplicações comerciais (até
pouco tempo)
 Excelente para a manipulação de arquivos.
 Contribuições:
 código mais legível;
 estrutura de dados heterogênea (record).
6
Histórico das LP
ALGOL 60 (ALGorithmic Oriented Language)
 Linguagem algébrica européia
 resolução de problemas científicos.
 Influência marcante
 Pouco usada em aplicações comerciais
 Contribuições:
 estrutura de blocos;
 comandos de controle estruturados;
 recursividade.
7
Histórico das LP
LISP (LISt Processing) - 1960 - John
McCartly(MIT)
 Linguagem funcional criada para dar suporte à
pesquisa em Inteligência Artificial.
 Contribuição:
 pioneirismo na idéia de computação simbólica ou
não-numérica.
BASIC (Beginners All-purpose Symbolic
Instruction Code)
 John Kemeny-Thomas Kurtz (Dartmouth College)
 Contribuições para futuras linguagens:
 ambiente de programação interativo;
 conceito de execução interpretativa de programas.
8
Histórico das LP
PL/I (Programming Language I) -IBM
 Incorporou:
 ALGOL 60- estrutura de bloco, de controle e
recursividade
 FORTRAN - subprogramas e E/S formatadas;
 COBOL - manipulação de arquivos e registros do
 LISP - alocação dinâmica e estruturas encadeadas
 linguagem complexa
 Contribuições:
 tratamento de interrupção
 suporte a multitarefa
9
Histórico das LP
SIMULA 67
 destinada a sistemas e programação de simulações.
 Contribuição: conceito de classe
PASCAL - Niklaus Wirth(1969)
 linguagem de fácil aprendizado e
implementação;
 suporta programação estruturada;
 adequada para o ensino de programação;
 Influenciou quase todas posteriores
 Contribuições:
 Estruturas de controle flexíveis; tipos definidos pelo
usuário; manipulação de arquivos; estruturas de
dados heterogêneas e conjuntos.10
Histórico das LP
PROLOG (PROgramming in LOGic)
 desenvolvida para aplicações de IA Artificial
 baseada em lógica formal
SMALL TALK - Alan Kay -Xerox - Palo Alto
 Ambiente de programação com menus pop-up,
windows e mouse.
 Modelo OO: conceito de classe, encapsulamento,
herança e instanciação.
 Contribuições:
- 1ª a utilizar o paradigma de programação
interativa;
- Conceito de LP extensível;
11
Histórico das LP
C - Bell Lab - início dos anos 70
 implementação do UNIX.
 facilidades para a programação em "baixo nível"
 gera código compacto e eficiente
 Alta portabilidade
MODULA 2 - Niklaus Wirth - final 70's
 linguagem de propósito geral, baseada em melhorias
no Pascal.
 Acrescentou:
- possibilidade de implementar TAD;
- existência de uma palavra-chave de terminação para toda
estrutura de controle;
- co-rotinas - execução intercalada; e tipos de
procedimentos;
12
Por que tantas linguagens?
13
• Propósitos diferentes
• Avanços tecnológicos
• Interesses comerciais
• Cultura e background científico
Escolha de uma LP
 Implementação
 Competência na LP
 Portabilidade
 Sintaxe
 Semântica
 Ambiente de programação
 Modelo de computação-
14
15
O que é um paradigma de
programação?
• Modelo, padrão ou estilo de programação
suportado por linguagens que agrupam certas
características comuns
• A classificação de linguagens em paradigmas é
uma conseqüência de decisões de projeto que
impactam radicalmente a forma na qual uma
aplicação real é modelada do ponto de vista
computacional
Paradigmas de LP
 Paradigma Imperativo - Computador
 FORTRAN, COBOL, ALGOL 60, APL, BASIC, PL/I, SIMULA
67, ALGOL 68, PASCAL, C, MODULA 2, ADA.
 Paradigma Funcional - solução do problema
 LISP.
 Paradigma Lógico - ser humano
 PROLOG.
 Paradigma Orientado a Objetos - problema
 SMALTALK , Java
 C++ : Linguagem híbrida
Modelo Imperativo + Orientação a Objetos
16
O Paradigma Imperativo
 Solução do problema especificada na ótica do
computador
 Programas centrados no conceito de um
estado (modelado por variáveis) e ações
(comandos) que manipulam o estado
 Paradigma também denominado de
procedural, por incluir subrotinas ou
procedimentos como mecanismo de
estruturação
 Primeiro paradigma a surgir e ainda é o
dominante
17
Vantagens e Desvantagens -
Imperativo
 Vantagens
- Eficiência (embute modelo de Von
Neumann)
- Modelagem “natural” de aplicações do
mundo real
- Paradigma dominante e bem estabelecido
 Desvantagens
- erros introduzidos durante manutenção
- descrições demasiadamente operacionais
focalizam o como e não o que
18
O Paradigma Funcional
 Programas são funções que descrevem
uma relação explícita e precisa entre E/S
 Estilo declarativo: não há o conceito de
estado nem comandos como atribuição
 Aplicação: prototipação em geral e IA
19
Vantagens e Desvantagens -
Funcional
 Vantagens
- Manipulação de programas mais
simples:
- Prova de propriedades
- Transformação (exemplo: otimização)
- Concorrência explorada de forma
natural
 Desvantagens
- “O mundo não é funcional!”
- Implementações ineficientes
- Mecanismos primitivos de E/S e
formatação20
Exemplo LP Funcional -
Scheme
 Função que Calcula o Máximo de uma
lista
(define maximo
(lambda (l)
(if (null? (cdr l)) ; ultimo/unico elemento?
(car l)
(max (car l) (maximo (cdr l))
)
)
)
)
21
O Paradigma Lógico
 Programas são relações entre E/S
 Estilo declarativo, como no paradigma
funcional
 Na prática, inclui características
imperativas, por questão de eficiência
 Aplicações: sistemas especialistas e banco
de dados
22
Vantagens e Desvantagens - Lógico
 Vantagens
Em princípio, todas do paradigma funcional
Permite concepção da aplicação em um alto
nível de abstração (através de associações
entre E/S)
 Problemas
Em princípio, todos do paradigma funcional
Linguagens usualmente não possuem tipos,
nem são de alta ordem
23
Exemplo Lp Lógico - Prolog
Verifica se uma palavra é palíndroma.
Exemplo de utilização: inicio(madam).
% entrada e saida de dados
inicio(X) :- ler(X), (X = para; teste(X), inicio(Y)).
teste(X) :- nome(X,N), palindromo(N), write(X), write(` e'
palindroma'), nl, !.
teste(X) :- write(X), write(` nao e' palindroma'), nl.
% inversao e teste
palindromo(X) :- inverte2(X,X).
inverte2(L1,L) :- invconc(L1,[ ],L).
invconc([H|L],L,M) :- invconc(T,[H|L],M).
invconc([ ], L, L).
24
O Paradigma Orientado a Objetos
 Pode ser visto como uma subclassificacão do
imperativo
 A diferença é mais de metodologia quanto à
concepção e modelagem do sistema
 A grosso modo, uma aplicação é estruturada
em módulos (classes) que agrupam um
estado e operações (métodos) sobre este
estado
 Classes podem ser estendidas e/ou usadas
como tipos (cujos elementos são objetos)
25
Vantagens e Desvantagens - OO
 Vantagens
Todas as do estilo imperativo
Classes estimulam projeto centrado em
dados: modularidade, reusabilidade e
extensibilidade
Aceitação comercial crescente
 Desvantagens
Semelhantes às do paradigma imperativo,
mas amenizadas pelas facilidades de
estruturação
26
Tendência: integração de
paradigmas
 A principal vantagem é combinar
facilidades de mais de um paradigma,
aumentando o domínio de aplicação da
linguagem
 Exemplos: linguagens lógicas ou funcionais
com o conceito de estado e comandos
 A integração deve ser conduzida com muita
cautela, para que não se viole os princípios
básicos de cada paradigma.
27
Outras Classificações
 Linguagens de 1a., 2a., 3a., 4a. e
5a. gerações
 Programação seqüencial versus
concorrente
 Programação Linear versus
orientada a eventos
28
29
Uma Visão histórica
1950........................................................................................................
FORTRAN
1960.......................ALGOL-60...........COBOL......LISP.........................
SIMULA ALGOL-68 PL/I BASIC
1970..................Pascal............................................................................
Smalltalk C PROLOG
Modula-2 ML
1980....................Ada...........DBASE-II..................................................
Miranda
Eifell C++
1990.....................................................................Haskell..........Godel...
Java Delphi
Imperativo Funcional LógicoOrientado a objetos
Paradigma de Orientação a
Objetos
31
Paradigma de OO
 1ª noção de objeto - Simula (Birtwistle, 1973)
 POO
 programador visualiza programa como uma
coleção de objetos cooperantes que se
comunicam através de mensagens.
 Cada objeto é uma instância de uma classe
 As classes estão organizadas em hieraquia
 Unifica dados e procedimentos
 Dá ênfase à estrutura de dados, adicionando
funcionalidade a estas estruturas.
 Aspectos fundamentais: Abstração de dados;
Objetos; Mensagens; Classes; Herança;
Polimorfismo.
32
Abstração de dados
 Tipo Abstrato de Dados (TAD)
 o que constitui o tipo
 as operações aplicáveis
 representação
 Exemplo: TAD Pilha.
 Interface:
 boolean isEmpty() - verifica se a pilha está vazia
 push(int n) - empilha o número fornecido
 int pop() - desempilha o número do topo e o retorna
 int top() - retorna o número do topo
 Representação: vetor
33
Abstração de dados
 TAD pode ser usado sem qualquer
conhecimento sobre sua implementação.
 Vantagens:
 Independência entre uso e implementação
 Manutenção da integridade do TAD
 Abstração de dados:
 introduz um novo tipo de objeto, útil no
domínio do problema a ser resolvido.
 usuários dos tipos abstratos de dados tem
comportamento do objeto
 dados estão ocultos
 aumento de confiabilidade
34
Abstração - Exemplo
 Plantação de alface hidropônico
 Sistema para monitorar as condições
 Elemento central:
 sensores para medir: temperatura, pH, luz, ..
 sensor: objeto que mede a temp. em uma posição
 identificação do sensor
 responsabilidades:
o conhecer a temperatura na sua posição de
medida
o relatar a temp. medida.
 Operações:
o perguntar a temperatura
o Calibrar o sensor
35
Abstração - Exemplo
 Elemento SensorTemp
 Parte Públicas:
 SensorTemp(pos) - cria o sensor
 ~SensorTemp() - destroi o sensor
 Calibra( tempAtual) - calibra o sensor
 real QualTemp() - devolve a temp. atual no sensor
 Parte Privada
...
36
Objetos
 Entidade autônoma que
combina a
representação da
informação (estruturas
de dados) e sua
manipulação
(procedimentos)
OPERAÇÃO 1
OPERAÇÃO 2
OPERAÇÃO 3
ESTADO
INTERNO
IMPLEMENTAÇÕES DAS
OPERAÇÕES 1, 2 E 3
{INTERFACE
• Compostos de:
- Propriedades(atributos)
- Comportamento (Métodos)
- Identidade
37
Objetos
 Fácil identificar objetos
 Exemplo: Objetos do tipo empregado
 identidade única: CPF.
 Atributos:
 endereço
 idade
 dependentes
 salário
 cargo
 Comportamento (Operações):
 aumentar salário
 listar dependentes
 alterar cargo
AUMENTAR
SALÁRIO
LISTAR
DEPENDENTES
. . . . . .
NOME
CARGO
SALÁRIO
38
Objetos
 Vantagens:
 Modularidade: a unidade de programa que
implementa um objeto pode ser escrita e
mantida sem gerar alterações nas demais;
 Ocultamento de informação:
 Objeto possui interface pública que outros objetos
usam para se comunicar com ele.
 Objeto mantêm informações e métodos particulares,
que podem ser alterados a qualquer momento sem
afetar os outros objetos que se comunicam com ele
 Não é necessário saber como o objeto é
implementado para poder utilizá-lo.
39
Mensagens
 Aplicação OO: vários objetos interagindo
 fornece grande funcionalidade e comportamentos complexos.
 Interação através de mensagens
 objeto A envia mensagem para objeto B executar um de seus
métodos
 informação adicional para B executar o métodos: lista de
parâmetros
 Componentes:
- o objeto a quem a mensagem é endereçada (receptor);
 o nome do método que se deseja executar;
 os parâmetros (se existirem) necessários ao método;
 Objetos em processos ou máquinas distintas podem
comunicar-se através do uso de mensagens(Corba,
DCOm, etc.).
 Mensagem ~ uma chamada de subrotina (procedimento
ou função).
40
Troca de Mensagens - Exemplo 1
"João deseja enviar flores para Maria mas ela
mora em outra cidade. João vai, então, até a
floricultura e pede a José, o floricultor, para que ele
envie um bouquet de rosas ao endereço de Maria.
José, por sua vez, liga para uma outra floricultura,
da cidade de Maria, e pede para que as flores
sejam entregues. João precisa resolver um
problema, então, ele procura um agente, José, e
lhe passa uma mensagem contendo sua requisição:
enviar rosas para Maria. José tem a
responsabilidade de, através de algum método,
cumprir a requisição. O método utilizado por José
pode estar oculto de João."
41
Troca de Mensagens - Exemplo 2
Realização de uma operação aritmética
(SmallTalk)
Adição é realizada enviando uma mensagem a
um objeto representando o número. A
mensagem especifica a operação desejada
(adição) e o número que deve ser somado ao
objeto receptor. Então, a operação “x + y” é
interpretada como a mensagem “+” sendo
enviada ao objeto “x” com o parâmetro “y”.
42
Método
 implementa algum aspecto do
comportamento do objeto.
 uma função ou procedimento que é
definido para o objeto e tipicamente pode
acessar o seu estado interno para realizar
alguma operação.
 procedimento cujo primeiro parâmetro é o
objeto no qual deve trabalhar(objeto
receptor)
receptor.nome_da_mensagem(par1,
par2, par3)
43
Construtores e Destrutores
 Construtores:
 usados para criar e inicializar objetos novos.
 Destrutores:
 usados para destruir objetos
 construtor chamado automaticamente
quando objeto é declarado
 Exemplo: gerenciar a quantidade de
objetos de uma determinada classe que já
foram criados até o momento.
44
Classes
 Objetos com estrutura e comportamento
idênticos são descritos como pertencendo a
uma classe
 Provê a informação para construir e utilizar
objetos de um tipo particular
 Classes de objetos
 descrição das propriedades de objetos, de forma
concisa em termos de estrutura e
comportamento
 Provê a informação para construir e utilizar
objetos de um tipo particular
 Descreve o comportamento de vários objetos
de comportamento semelhante
45
Classes
 Objeto -- variável
 Classe - tipo
 Objeto criado a
partir de uma
classe: instância
 Cada instância
pertence a uma
classe
 Uma classe pode
possuir múltiplas
instâncias
Posição
Dados:
Variável de classe (compartilhada)
nobj
Variável de Instância (única)
X, Y – tipo coordenadas
Métodos
Inicializa a Posição
Retorna valor X
Retorna valor Y
nobj = 3
X = 5
Y = 10
Objeto Posição #1
nobj = 3
X = 7
Y = 2
Objeto Posição #2
nobj = 3
X = 5
Y = 10
Objeto Posição #3
• Exemplo: classe Posição
46
Herança
 Permite a reutilização das propriedades de uma
classe na definição de outra.
 característica única de linguagens OO
 diferencia POO de programação com TAD
 Classe mais generalizada: superclasse
 Classe mais especializada: subclasse.
 Objeto descendente não tem nenhum trabalho
para receber a herança
47
Herança
 classe Ponto:
 herança da classe Posição
 variável de instância Visivel
 métodos para desenhar , apagar e
perguntar acercar da visibilidade de
pontos.
 classe Circulo:
 herança da classe Ponto
 variável de instância Raio
 métodos para contrair e expandir
círculos.
Posição
Dados:
Variável de classe (compartilhada)
nobj
Variável de Instância (única)
X, Y – tipo coordenadas
Métodos
Inicializa a Posição
Retorna valor X
Retorna valor Y
Ponto
Dados:
Variável de Instância (única)
Visivel - lógico
Métodos
Inicializa Ponto
Desenha Ponto
Apaga valor Y
Retorna Visivel
Circulo
Dados:
Variável de Instância (única)
Raio
Métodos
Inicializa Circulo
Expande Circulo
Contrai Circulo
48
Herança
 se B é subclasse de A:
 objetos da classe B suportam todas as operações
suportadas por objetos da classe A, menos as
redefinidas
 as variáveis de instância de B incluem todas as
variáveis de instância de A.
 Especialização: nova classe é criada a
partir de uma classe existente, que era
muito geral.
 Generalização: processo inverso
49
Herança
 Pode afetar o encapsulamento de
informação.
 Clientes:
 requisitam operações sobre instâncias da classe
 informações ocultadas
 classes definidas através da herança
 acesso à representação das variáveis de instâncias
definidas na sua superclasse
 Mudanças na implementação de uma classe,
podem comprometer a implementação de
suas subclasses.
50
Herança Múltipla
 subclasse pode herdar características de
diversas superclasses
 Exemplo: classe Janela
DefineAltura
DefineLargura
MostraObjeto
MoveObjeto
DefineAltura
DefineLargura
MostraObjeto
MoveObjeto
ObjetoTela Texto Arvore
Janela
ExibeTexto
AdicionaTexto
RemmoveTexto
AdicionaFilho
RemoveFilho
51
Polimorfismo
 Vários objetos respondem à uma mesma
mensagem, cada um a seu próprio modo
Solução sem polimorfismo
Função DesenhaObjeto ( Obj )
Se Obj é do tipo Ponto
DesenhaPonto ( Obj)
Senão
Se Obj é do tipo Circulo
DesenhaCirculo (Obj)
Fim se
Fim se
Fim DesenhaObjeto
Solução com polimorfismo
Função DesenhaObjeto ( Obj )
Obj.Desenha()
Fim DesenhaObjeto
52
Polimorfismo
 útil na compreensão de programas
 sobrecarga de função ou de operadores
 polimorfismo paramétrico
 ligação (binding): associação entre um
atributo e uma entidade ou entre uma
operação e um símbolo.
 Estática: ocorre em tempo de compilação ou de
ligação (linking) e não é mais modificada durante
toda a execução do programa.
 Dinâmica: é feita em tempo de execução ou pode
ser alterada no decorrer da execução do programa.
 Aumenta reutilização - diminui a
performance
53
Objeto, Classe e Herança
 Permitem a definição de hierarquias de
abstrações, que facilitam a compreensão
 classes agrupam objetos com características
iguais
 herança estrutura classes semelhantes.
 Objetos e classes:
 grande poder de modelagem
 expressa relações entre comportamentos:
 classificação/instanciação
 generalização/especialização
 agregação/composição
54
Classificação/Instanciação
 Classificação de objetos em classes
 definição de propriedades e comportamentos
comuns a objetos para agrupá-los em classes
 Instanciação de objetos de uma classe
 criação de um objeto de uma determinada
classes
MICROCOMPUTADOR
IBM PC MACHINTOSH
INSTANCIAÇÃO
CLASSIFICAÇÃO
55
Generalização/Especialização
 Abstração de uma classe mais genérica
 Subclasses possuem todas as propriedades
das classes de quem elas são especializações
 Pelo menos uma propriedade para diferenciar duas
classes especializadas (subclasses) a partir da
mesma classe genérica (superclasse)
ESPECIALIZAÇÃO
GENERALIZAÇÃO
MAINFRAMEMICROCOMPUTADOR
COMPUTADOR
56
Composição/Decomposição
 objetos compostos pela agregação de
outros objetos ou componentes
 instâncias (objetos) de uma classe
compostas por instâncias de outras classes.
DECOMPOSIÇÃO
COMPOSIÇÃO
VÍDEOTECLADO
MICROCOMPUTADOR
57
Vantagens POO
 Reutilização de código: maior vantagem
 Escalabilidade: capacidade de crescimento
 Encapsulamento: facilita manutenção
 Polimorfismo: aumenta a legibilidade
 Herança: facilidade de adição de novas
funcionalidades
58
Desvantagens da POO
 Apropriação:
 Problemas com limites nebulosos
 Fragilidade
 sensível a mudanças de relacionamentos
entre as classes chave
 Importância fundamental de bom projeto e
análise
 necessidade de estratégia linera de projeto
ao invés da cíclica
59
Estilo POO
 Modularidade:
 Suporte a generalização/especialização
 Visão balanceada entre dados e processos
 Composição “botton-up” de aplicação
 Atividade incremental e evolutiva
 Reutilização de código
 Robustez
 Programação em grande escala

1.1.paradigmas

  • 1.
    Paradigmas de Programação ProgramaçãoOrientada a Objetos Java Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior
  • 2.
    Linguagem de Programação Linguagemdestinada a ser usada por um ser humano para expressar um processo através do qual um computador pode resolver um problema 2 processo Solução
  • 3.
    Para que estudarlinguagens?  Desenvolvimento da habilidade em resolver problemas.  Capacidade de extrair o máximo da funcionalidade e eficiência da LP.  Escolha da LP apropriada para a solução de cada problema  Facilidade para aprender outras linguagens. 3
  • 4.
    O que Estudar? Sintaxe: gramática (forma)  Semântica: significado  Pragmática (ex.: metodologias)  Processadores: compiladores, interpretadores, editores, ambientes visuais ... 4
  • 5.
    Histórico das LP FORTRAN(FORmula TRANslation)-1956-John Backus  muito utilizada no meio técnico-científico  disponibilidade de uma vasta biblioteca  Contribuições:  variáveis;  comando de atribuição;  conceito de tipos;  modularidade (com o uso de subprogramas);  E/S formatadas ; 5
  • 6.
    Histórico das LP COBOL(COmmon Business Oriented Language) - 1959  Código é "English-like"  Padrão para as aplicações comerciais (até pouco tempo)  Excelente para a manipulação de arquivos.  Contribuições:  código mais legível;  estrutura de dados heterogênea (record). 6
  • 7.
    Histórico das LP ALGOL60 (ALGorithmic Oriented Language)  Linguagem algébrica européia  resolução de problemas científicos.  Influência marcante  Pouco usada em aplicações comerciais  Contribuições:  estrutura de blocos;  comandos de controle estruturados;  recursividade. 7
  • 8.
    Histórico das LP LISP(LISt Processing) - 1960 - John McCartly(MIT)  Linguagem funcional criada para dar suporte à pesquisa em Inteligência Artificial.  Contribuição:  pioneirismo na idéia de computação simbólica ou não-numérica. BASIC (Beginners All-purpose Symbolic Instruction Code)  John Kemeny-Thomas Kurtz (Dartmouth College)  Contribuições para futuras linguagens:  ambiente de programação interativo;  conceito de execução interpretativa de programas. 8
  • 9.
    Histórico das LP PL/I(Programming Language I) -IBM  Incorporou:  ALGOL 60- estrutura de bloco, de controle e recursividade  FORTRAN - subprogramas e E/S formatadas;  COBOL - manipulação de arquivos e registros do  LISP - alocação dinâmica e estruturas encadeadas  linguagem complexa  Contribuições:  tratamento de interrupção  suporte a multitarefa 9
  • 10.
    Histórico das LP SIMULA67  destinada a sistemas e programação de simulações.  Contribuição: conceito de classe PASCAL - Niklaus Wirth(1969)  linguagem de fácil aprendizado e implementação;  suporta programação estruturada;  adequada para o ensino de programação;  Influenciou quase todas posteriores  Contribuições:  Estruturas de controle flexíveis; tipos definidos pelo usuário; manipulação de arquivos; estruturas de dados heterogêneas e conjuntos.10
  • 11.
    Histórico das LP PROLOG(PROgramming in LOGic)  desenvolvida para aplicações de IA Artificial  baseada em lógica formal SMALL TALK - Alan Kay -Xerox - Palo Alto  Ambiente de programação com menus pop-up, windows e mouse.  Modelo OO: conceito de classe, encapsulamento, herança e instanciação.  Contribuições: - 1ª a utilizar o paradigma de programação interativa; - Conceito de LP extensível; 11
  • 12.
    Histórico das LP C- Bell Lab - início dos anos 70  implementação do UNIX.  facilidades para a programação em "baixo nível"  gera código compacto e eficiente  Alta portabilidade MODULA 2 - Niklaus Wirth - final 70's  linguagem de propósito geral, baseada em melhorias no Pascal.  Acrescentou: - possibilidade de implementar TAD; - existência de uma palavra-chave de terminação para toda estrutura de controle; - co-rotinas - execução intercalada; e tipos de procedimentos; 12
  • 13.
    Por que tantaslinguagens? 13 • Propósitos diferentes • Avanços tecnológicos • Interesses comerciais • Cultura e background científico
  • 14.
    Escolha de umaLP  Implementação  Competência na LP  Portabilidade  Sintaxe  Semântica  Ambiente de programação  Modelo de computação- 14
  • 15.
    15 O que éum paradigma de programação? • Modelo, padrão ou estilo de programação suportado por linguagens que agrupam certas características comuns • A classificação de linguagens em paradigmas é uma conseqüência de decisões de projeto que impactam radicalmente a forma na qual uma aplicação real é modelada do ponto de vista computacional
  • 16.
    Paradigmas de LP Paradigma Imperativo - Computador  FORTRAN, COBOL, ALGOL 60, APL, BASIC, PL/I, SIMULA 67, ALGOL 68, PASCAL, C, MODULA 2, ADA.  Paradigma Funcional - solução do problema  LISP.  Paradigma Lógico - ser humano  PROLOG.  Paradigma Orientado a Objetos - problema  SMALTALK , Java  C++ : Linguagem híbrida Modelo Imperativo + Orientação a Objetos 16
  • 17.
    O Paradigma Imperativo Solução do problema especificada na ótica do computador  Programas centrados no conceito de um estado (modelado por variáveis) e ações (comandos) que manipulam o estado  Paradigma também denominado de procedural, por incluir subrotinas ou procedimentos como mecanismo de estruturação  Primeiro paradigma a surgir e ainda é o dominante 17
  • 18.
    Vantagens e Desvantagens- Imperativo  Vantagens - Eficiência (embute modelo de Von Neumann) - Modelagem “natural” de aplicações do mundo real - Paradigma dominante e bem estabelecido  Desvantagens - erros introduzidos durante manutenção - descrições demasiadamente operacionais focalizam o como e não o que 18
  • 19.
    O Paradigma Funcional Programas são funções que descrevem uma relação explícita e precisa entre E/S  Estilo declarativo: não há o conceito de estado nem comandos como atribuição  Aplicação: prototipação em geral e IA 19
  • 20.
    Vantagens e Desvantagens- Funcional  Vantagens - Manipulação de programas mais simples: - Prova de propriedades - Transformação (exemplo: otimização) - Concorrência explorada de forma natural  Desvantagens - “O mundo não é funcional!” - Implementações ineficientes - Mecanismos primitivos de E/S e formatação20
  • 21.
    Exemplo LP Funcional- Scheme  Função que Calcula o Máximo de uma lista (define maximo (lambda (l) (if (null? (cdr l)) ; ultimo/unico elemento? (car l) (max (car l) (maximo (cdr l)) ) ) ) ) 21
  • 22.
    O Paradigma Lógico Programas são relações entre E/S  Estilo declarativo, como no paradigma funcional  Na prática, inclui características imperativas, por questão de eficiência  Aplicações: sistemas especialistas e banco de dados 22
  • 23.
    Vantagens e Desvantagens- Lógico  Vantagens Em princípio, todas do paradigma funcional Permite concepção da aplicação em um alto nível de abstração (através de associações entre E/S)  Problemas Em princípio, todos do paradigma funcional Linguagens usualmente não possuem tipos, nem são de alta ordem 23
  • 24.
    Exemplo Lp Lógico- Prolog Verifica se uma palavra é palíndroma. Exemplo de utilização: inicio(madam). % entrada e saida de dados inicio(X) :- ler(X), (X = para; teste(X), inicio(Y)). teste(X) :- nome(X,N), palindromo(N), write(X), write(` e' palindroma'), nl, !. teste(X) :- write(X), write(` nao e' palindroma'), nl. % inversao e teste palindromo(X) :- inverte2(X,X). inverte2(L1,L) :- invconc(L1,[ ],L). invconc([H|L],L,M) :- invconc(T,[H|L],M). invconc([ ], L, L). 24
  • 25.
    O Paradigma Orientadoa Objetos  Pode ser visto como uma subclassificacão do imperativo  A diferença é mais de metodologia quanto à concepção e modelagem do sistema  A grosso modo, uma aplicação é estruturada em módulos (classes) que agrupam um estado e operações (métodos) sobre este estado  Classes podem ser estendidas e/ou usadas como tipos (cujos elementos são objetos) 25
  • 26.
    Vantagens e Desvantagens- OO  Vantagens Todas as do estilo imperativo Classes estimulam projeto centrado em dados: modularidade, reusabilidade e extensibilidade Aceitação comercial crescente  Desvantagens Semelhantes às do paradigma imperativo, mas amenizadas pelas facilidades de estruturação 26
  • 27.
    Tendência: integração de paradigmas A principal vantagem é combinar facilidades de mais de um paradigma, aumentando o domínio de aplicação da linguagem  Exemplos: linguagens lógicas ou funcionais com o conceito de estado e comandos  A integração deve ser conduzida com muita cautela, para que não se viole os princípios básicos de cada paradigma. 27
  • 28.
    Outras Classificações  Linguagensde 1a., 2a., 3a., 4a. e 5a. gerações  Programação seqüencial versus concorrente  Programação Linear versus orientada a eventos 28
  • 29.
    29 Uma Visão histórica 1950........................................................................................................ FORTRAN 1960.......................ALGOL-60...........COBOL......LISP......................... SIMULAALGOL-68 PL/I BASIC 1970..................Pascal............................................................................ Smalltalk C PROLOG Modula-2 ML 1980....................Ada...........DBASE-II.................................................. Miranda Eifell C++ 1990.....................................................................Haskell..........Godel... Java Delphi Imperativo Funcional LógicoOrientado a objetos
  • 30.
  • 31.
    31 Paradigma de OO 1ª noção de objeto - Simula (Birtwistle, 1973)  POO  programador visualiza programa como uma coleção de objetos cooperantes que se comunicam através de mensagens.  Cada objeto é uma instância de uma classe  As classes estão organizadas em hieraquia  Unifica dados e procedimentos  Dá ênfase à estrutura de dados, adicionando funcionalidade a estas estruturas.  Aspectos fundamentais: Abstração de dados; Objetos; Mensagens; Classes; Herança; Polimorfismo.
  • 32.
    32 Abstração de dados Tipo Abstrato de Dados (TAD)  o que constitui o tipo  as operações aplicáveis  representação  Exemplo: TAD Pilha.  Interface:  boolean isEmpty() - verifica se a pilha está vazia  push(int n) - empilha o número fornecido  int pop() - desempilha o número do topo e o retorna  int top() - retorna o número do topo  Representação: vetor
  • 33.
    33 Abstração de dados TAD pode ser usado sem qualquer conhecimento sobre sua implementação.  Vantagens:  Independência entre uso e implementação  Manutenção da integridade do TAD  Abstração de dados:  introduz um novo tipo de objeto, útil no domínio do problema a ser resolvido.  usuários dos tipos abstratos de dados tem comportamento do objeto  dados estão ocultos  aumento de confiabilidade
  • 34.
    34 Abstração - Exemplo Plantação de alface hidropônico  Sistema para monitorar as condições  Elemento central:  sensores para medir: temperatura, pH, luz, ..  sensor: objeto que mede a temp. em uma posição  identificação do sensor  responsabilidades: o conhecer a temperatura na sua posição de medida o relatar a temp. medida.  Operações: o perguntar a temperatura o Calibrar o sensor
  • 35.
    35 Abstração - Exemplo Elemento SensorTemp  Parte Públicas:  SensorTemp(pos) - cria o sensor  ~SensorTemp() - destroi o sensor  Calibra( tempAtual) - calibra o sensor  real QualTemp() - devolve a temp. atual no sensor  Parte Privada ...
  • 36.
    36 Objetos  Entidade autônomaque combina a representação da informação (estruturas de dados) e sua manipulação (procedimentos) OPERAÇÃO 1 OPERAÇÃO 2 OPERAÇÃO 3 ESTADO INTERNO IMPLEMENTAÇÕES DAS OPERAÇÕES 1, 2 E 3 {INTERFACE • Compostos de: - Propriedades(atributos) - Comportamento (Métodos) - Identidade
  • 37.
    37 Objetos  Fácil identificarobjetos  Exemplo: Objetos do tipo empregado  identidade única: CPF.  Atributos:  endereço  idade  dependentes  salário  cargo  Comportamento (Operações):  aumentar salário  listar dependentes  alterar cargo AUMENTAR SALÁRIO LISTAR DEPENDENTES . . . . . . NOME CARGO SALÁRIO
  • 38.
    38 Objetos  Vantagens:  Modularidade:a unidade de programa que implementa um objeto pode ser escrita e mantida sem gerar alterações nas demais;  Ocultamento de informação:  Objeto possui interface pública que outros objetos usam para se comunicar com ele.  Objeto mantêm informações e métodos particulares, que podem ser alterados a qualquer momento sem afetar os outros objetos que se comunicam com ele  Não é necessário saber como o objeto é implementado para poder utilizá-lo.
  • 39.
    39 Mensagens  Aplicação OO:vários objetos interagindo  fornece grande funcionalidade e comportamentos complexos.  Interação através de mensagens  objeto A envia mensagem para objeto B executar um de seus métodos  informação adicional para B executar o métodos: lista de parâmetros  Componentes: - o objeto a quem a mensagem é endereçada (receptor);  o nome do método que se deseja executar;  os parâmetros (se existirem) necessários ao método;  Objetos em processos ou máquinas distintas podem comunicar-se através do uso de mensagens(Corba, DCOm, etc.).  Mensagem ~ uma chamada de subrotina (procedimento ou função).
  • 40.
    40 Troca de Mensagens- Exemplo 1 "João deseja enviar flores para Maria mas ela mora em outra cidade. João vai, então, até a floricultura e pede a José, o floricultor, para que ele envie um bouquet de rosas ao endereço de Maria. José, por sua vez, liga para uma outra floricultura, da cidade de Maria, e pede para que as flores sejam entregues. João precisa resolver um problema, então, ele procura um agente, José, e lhe passa uma mensagem contendo sua requisição: enviar rosas para Maria. José tem a responsabilidade de, através de algum método, cumprir a requisição. O método utilizado por José pode estar oculto de João."
  • 41.
    41 Troca de Mensagens- Exemplo 2 Realização de uma operação aritmética (SmallTalk) Adição é realizada enviando uma mensagem a um objeto representando o número. A mensagem especifica a operação desejada (adição) e o número que deve ser somado ao objeto receptor. Então, a operação “x + y” é interpretada como a mensagem “+” sendo enviada ao objeto “x” com o parâmetro “y”.
  • 42.
    42 Método  implementa algumaspecto do comportamento do objeto.  uma função ou procedimento que é definido para o objeto e tipicamente pode acessar o seu estado interno para realizar alguma operação.  procedimento cujo primeiro parâmetro é o objeto no qual deve trabalhar(objeto receptor) receptor.nome_da_mensagem(par1, par2, par3)
  • 43.
    43 Construtores e Destrutores Construtores:  usados para criar e inicializar objetos novos.  Destrutores:  usados para destruir objetos  construtor chamado automaticamente quando objeto é declarado  Exemplo: gerenciar a quantidade de objetos de uma determinada classe que já foram criados até o momento.
  • 44.
    44 Classes  Objetos comestrutura e comportamento idênticos são descritos como pertencendo a uma classe  Provê a informação para construir e utilizar objetos de um tipo particular  Classes de objetos  descrição das propriedades de objetos, de forma concisa em termos de estrutura e comportamento  Provê a informação para construir e utilizar objetos de um tipo particular  Descreve o comportamento de vários objetos de comportamento semelhante
  • 45.
    45 Classes  Objeto --variável  Classe - tipo  Objeto criado a partir de uma classe: instância  Cada instância pertence a uma classe  Uma classe pode possuir múltiplas instâncias Posição Dados: Variável de classe (compartilhada) nobj Variável de Instância (única) X, Y – tipo coordenadas Métodos Inicializa a Posição Retorna valor X Retorna valor Y nobj = 3 X = 5 Y = 10 Objeto Posição #1 nobj = 3 X = 7 Y = 2 Objeto Posição #2 nobj = 3 X = 5 Y = 10 Objeto Posição #3 • Exemplo: classe Posição
  • 46.
    46 Herança  Permite areutilização das propriedades de uma classe na definição de outra.  característica única de linguagens OO  diferencia POO de programação com TAD  Classe mais generalizada: superclasse  Classe mais especializada: subclasse.  Objeto descendente não tem nenhum trabalho para receber a herança
  • 47.
    47 Herança  classe Ponto: herança da classe Posição  variável de instância Visivel  métodos para desenhar , apagar e perguntar acercar da visibilidade de pontos.  classe Circulo:  herança da classe Ponto  variável de instância Raio  métodos para contrair e expandir círculos. Posição Dados: Variável de classe (compartilhada) nobj Variável de Instância (única) X, Y – tipo coordenadas Métodos Inicializa a Posição Retorna valor X Retorna valor Y Ponto Dados: Variável de Instância (única) Visivel - lógico Métodos Inicializa Ponto Desenha Ponto Apaga valor Y Retorna Visivel Circulo Dados: Variável de Instância (única) Raio Métodos Inicializa Circulo Expande Circulo Contrai Circulo
  • 48.
    48 Herança  se Bé subclasse de A:  objetos da classe B suportam todas as operações suportadas por objetos da classe A, menos as redefinidas  as variáveis de instância de B incluem todas as variáveis de instância de A.  Especialização: nova classe é criada a partir de uma classe existente, que era muito geral.  Generalização: processo inverso
  • 49.
    49 Herança  Pode afetaro encapsulamento de informação.  Clientes:  requisitam operações sobre instâncias da classe  informações ocultadas  classes definidas através da herança  acesso à representação das variáveis de instâncias definidas na sua superclasse  Mudanças na implementação de uma classe, podem comprometer a implementação de suas subclasses.
  • 50.
    50 Herança Múltipla  subclassepode herdar características de diversas superclasses  Exemplo: classe Janela DefineAltura DefineLargura MostraObjeto MoveObjeto DefineAltura DefineLargura MostraObjeto MoveObjeto ObjetoTela Texto Arvore Janela ExibeTexto AdicionaTexto RemmoveTexto AdicionaFilho RemoveFilho
  • 51.
    51 Polimorfismo  Vários objetosrespondem à uma mesma mensagem, cada um a seu próprio modo Solução sem polimorfismo Função DesenhaObjeto ( Obj ) Se Obj é do tipo Ponto DesenhaPonto ( Obj) Senão Se Obj é do tipo Circulo DesenhaCirculo (Obj) Fim se Fim se Fim DesenhaObjeto Solução com polimorfismo Função DesenhaObjeto ( Obj ) Obj.Desenha() Fim DesenhaObjeto
  • 52.
    52 Polimorfismo  útil nacompreensão de programas  sobrecarga de função ou de operadores  polimorfismo paramétrico  ligação (binding): associação entre um atributo e uma entidade ou entre uma operação e um símbolo.  Estática: ocorre em tempo de compilação ou de ligação (linking) e não é mais modificada durante toda a execução do programa.  Dinâmica: é feita em tempo de execução ou pode ser alterada no decorrer da execução do programa.  Aumenta reutilização - diminui a performance
  • 53.
    53 Objeto, Classe eHerança  Permitem a definição de hierarquias de abstrações, que facilitam a compreensão  classes agrupam objetos com características iguais  herança estrutura classes semelhantes.  Objetos e classes:  grande poder de modelagem  expressa relações entre comportamentos:  classificação/instanciação  generalização/especialização  agregação/composição
  • 54.
    54 Classificação/Instanciação  Classificação deobjetos em classes  definição de propriedades e comportamentos comuns a objetos para agrupá-los em classes  Instanciação de objetos de uma classe  criação de um objeto de uma determinada classes MICROCOMPUTADOR IBM PC MACHINTOSH INSTANCIAÇÃO CLASSIFICAÇÃO
  • 55.
    55 Generalização/Especialização  Abstração deuma classe mais genérica  Subclasses possuem todas as propriedades das classes de quem elas são especializações  Pelo menos uma propriedade para diferenciar duas classes especializadas (subclasses) a partir da mesma classe genérica (superclasse) ESPECIALIZAÇÃO GENERALIZAÇÃO MAINFRAMEMICROCOMPUTADOR COMPUTADOR
  • 56.
    56 Composição/Decomposição  objetos compostospela agregação de outros objetos ou componentes  instâncias (objetos) de uma classe compostas por instâncias de outras classes. DECOMPOSIÇÃO COMPOSIÇÃO VÍDEOTECLADO MICROCOMPUTADOR
  • 57.
    57 Vantagens POO  Reutilizaçãode código: maior vantagem  Escalabilidade: capacidade de crescimento  Encapsulamento: facilita manutenção  Polimorfismo: aumenta a legibilidade  Herança: facilidade de adição de novas funcionalidades
  • 58.
    58 Desvantagens da POO Apropriação:  Problemas com limites nebulosos  Fragilidade  sensível a mudanças de relacionamentos entre as classes chave  Importância fundamental de bom projeto e análise  necessidade de estratégia linera de projeto ao invés da cíclica
  • 59.
    59 Estilo POO  Modularidade: Suporte a generalização/especialização  Visão balanceada entre dados e processos  Composição “botton-up” de aplicação  Atividade incremental e evolutiva  Reutilização de código  Robustez  Programação em grande escala