2. 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
3. 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
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
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
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
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
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 tantas linguagens?
13
• Propósitos diferentes
• Avanços tecnológicos
• Interesses comerciais
• Cultura e background científico
14. Escolha de uma LP
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 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
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
Linguagens de 1a., 2a., 3a., 4a. e
5a. gerações
Programação seqüencial versus
concorrente
Programação Linear versus
orientada a eventos
28
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ô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
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 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. 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 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. 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 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. 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 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. 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. 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. 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. 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. 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. 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. 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. 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. 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