Paradigmas de Programação
Curso de Análise e Desenvolvimento de Sistemas
Turma: 309-5 Semestre - 2014.2
FACULDADE LEÃO SAMPAIO
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 1
ISAAC BEZERRA DE OLIVEIRA Formação:
• Bacharel em Sistemas de Informação pela Faculdade de Juazeiro do Norte - FJN.
• Curso de Extensão na Especialização Engenharia de Software com ênfase em padrões de softwares na Faculdade de Juazeiro do Norte - FJN.
• Especialista - MBA em Logística Empresarial pela Faculdade de Juazeiro do Norte - FJN
• Mestrado Profissional em Engenharia de Software – C.E.S.A.R. (Centro de Estudos e Sistemas Avançados do Recife).
Apresentação
Apresentação
ISAAC BEZERRA DE OLIVEIRA
Cursos Técnicos/Profissionalizantes:
• Curso de Infraestrutura - Programa Microsoft S2B - Students to Business;
• Formação em Android – UTD (Universidade do Trabalho Digital) CENTEC Fortaleza/CE.
• Programação em Delphi – SENAI Juazeiro do Norte /CE;
• Redes de Computadores – Microlins Fortaleza/CE;
• Montagem e Manutenção de Computadores - SENAI Juazeiro do Norte;
• Inglês Básico – FJN, Faculdade de Juazeiro do Norte;
• Cursos Básico em Informática;
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 3
ISAAC BEZERRA DE OLIVEIRA
Experiências de Trabalho
• Office-boy e Digitador
• Vendedor Varejista
• Auxiliar de Contabilidade
• Técnico e Vendedor em Informática
• Almoxarife
• Professor
Apresentação
ISAAC BEZERRA DE OLIVEIRA
Quatro Anos de Experiências como Docente
• CENTEC - EEEP. Prof. Moreira de Sousa
• Coordenador e Professor do Curso de Informática
• SENAI – Juazeiro do Norte
• Professor do Curso de Montagem e Manutenção
• FVS – Faculdade Vale do Salgado
• Professor do Curso de ADS.
• FALS – Faculdade Leão Sampaio
• Professor do Curso de ADS.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 5
Apresentação
Contatos:
E-mail:
isaacbezerra@leaosampaio.edu.br professor@isaacbezerra.com.br
Site:
www.isaacbezerra.com.br
Apresentação
PARADIGMAS DE PROGRAMAÇÃO CH: 80 HORAS
• Introdução a paradigmas de linguagens de programação:
• Conceitos de linguagens de programação, Domínio de programação, Critérios de avaliação de linguagens e Categoria de linguagens.
• Linguagens de programação:
• evolução, características; sintaxe e semântica: notações e gramáticas; Tipos de dados; Expressões e sentença de atribuição, Estrutura de controle, Subprogramas;
• Paradigmas:
• imperativas, funcionais, orientadas a objetos, programação lógica e concorrente.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 7
PARADIGMAS DE PROGRAMAÇÃO CH: 80 HORAS
OBJETIVO
• Possibilitar aos alunos de paradigmas de programação o conhecimento sobre as características dos principais modelos de linguagens de programação e sua adequação à solução de problemas. Conceituam os aspectos das linguagens de programação, o que são, para quê serve e como funcionam. Isso possibilita uma aprendizagem de novas linguagens com mais facilidade, uma visão crítica e comparativa das linguagens de programação e dos paradigmas de programação.
Ementa
UNIDADE I: INTRODUÇÃO
Conceitos de Linguagens de Programação Evolução das Linguagens de Programação Sintaxe e Semântica
Analise Léxica e Sintática
UNIDADE II: CARACTERIZAÇÃO DOS PRINCIPAIS PARADIGMAS DE PROGRAMAÇÃO
Tipos de Dados
Expressões e sentenças de atribuição Estruturas de controle
Subprogramas Orientação a Objeto Concorrência
UNIDADE III: PARADIGMA ORIENTADO A OBJETO
Programação orientada a objetos
Questões de projeto para programação a objetos
Orientação a objeto em algumas linguagens Tratamento de eventos
UNIDADE IV: PARADIGMA FUNCIONAL Funções matemáticas
Fundamentos de linguagens de programação funcional
Apresentação de linguagens funcionais Aplicações de linguagens funcionais UNIDADE V: PARADIGMA LÓGICO Cálculos de predicados e prova de teoremas Visão geral do paradigma lógico
Apresentação do Prolog Aplicação da programação lógica Conteúdo Programático
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 9
Ementa
• SEBESTA, Robert W. Conceitos de Linguagens de Programação. 9. ed. Brasil:
Bookman Companhia, 2011.
• TUCKER, Allen. NOONAN, Robert. Linguagens de Programação: Princípios e Paradigmas. 2. ed. Brasil: MCGraw Hill - Artmed, 2009.
• SILVA, Flavio S. C. Da. MELO, Ana Cristina V. De. Princípios de Linguagens de Programação.: Edgard Blucher, 2003.
• WAMPLER, Dean. Programação Funcional para Desenvolvedores Java.: Novatec, 2012.
• Sá, C. S.; Silva, M. F. Haskell: uma abordagem prática.: Novatec, 2006.
• AHO, Alfred V. SETHI, Ravi; LAM, Monica S. Compiladores.: Longman do Brasil, 2007.
• CASANOVA, Marco A.; GIORNO, Fernando A.C. Programação em Lógica e a Linguagem Prolog.: Edgard Blucher, 1987.
• PAGGIOLI, Sergio R. LISP: uma nova linguagem. Penha: Século Futuro, 1986.
Sugestão de Bibliográficas:
NOME DA DISCIPLINA – PROFESSOR THIAGO BESSA PONTES. ESP., MBA. 11
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 11
Sugestão de Bibliográficas:
Metodologia, Técnicas de Ensino
Metodologia de Ensino 1. Estratégias de Ensino (X) Aulas Expositivas ( ) Seminários
( ) Aulas práticas (X) Práticas demonstrativas ( ) Estudo dirigido ( ) Preleção dialogada ( ) Leituras programadas ( ) Atividades integradas (X) Aulas teóricas ( ) Outras (especificar):
(X) Discussão em pequenos grupos
2. Recursos Audio-Visuais (X) Quadro Branco ( ) Vídeos/Filmes
( ) Retroprojetor (X) Textos
( ) Projetor de Slides ( ) Projetor de Lâminas (X) Data-show ( ) Outros (especificar):
Formas de Avaliação
Descrição do Processo Avaliativo:
Avaliações Obrigatórias : AV-1 , AV-2, AVF Avaliações Opcionais : AP-1, AP-2
AV-1 : A nota será composta pela seguinte ponderação
70% Prova escrita.
20% Realização das atividades em sala de aula no bimestre referente a AV-1
10% Assiduidade e participação.
AV-2 : A nota será composta pela seguinte ponderação
70% Prova escrita.
20% Realização das atividades em sala de aula no bimestre referente a AV-2
10% Assiduidade e participação..
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 13
Descrição da Média:
M = [AV1 + (AV2*2)]/3 M >= 7 Aprovação direta
M >=4 e M < 7 Aluno com direito a prova final M < 4 Reprovação sem direito a prova final Alunos que realizaram final:
MF = (M + NF)/ 2
MF >= 5 e NF >= 5 Aluno aprovado na final MF >= 5 e NF < 5 Aluno reprovado na final MF < 5 e NF > 5 Aluno reprovado na final Legenda: M – Média
MF – Média Final
AV1 – Avaliação da Primeira Unidade AV2 – Avaliação da Segunda Unidade AVF – Avaliação Final
Formas de Avaliação
Frequência
•
Número Máxima de Falta é de 25%;
•
Falta não possui recuperação;
•
Sempre justificar as faltas, quando tiver justificativa (atestado ou documento equivalente), com a coordenação e acadêmico.
•
Atenção para as datas das avaliações, atividades e trabalhos.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 15
IMPORTANTE: Anotem as Datas !!!
•
Horário de Aulas – 20:20 até as 22:00
•
Data da AV1 – 22 ou 23 do 09 de 2014
•
Data da AV2 – 24 ou 25 do 11 de 2014
•
Data da 2º Chamada – 03 a 05 do 12 de 2014
•
Data da AVF – 15 ou 16 do 12 de 2014
•
Calendário Acadêmico
• Período de Solicitação de 2º Chamada, 19/11 a 01/12.
•
Horários em que estarei na FALS
•
Segunda-feira AB e CD
•
Terça-feira AB e CD
•
Quinta-feira CD
•
Sexta-feira AB
Conhecendo Vocês
• 1º FREQUÊNCIA
•
Cidade natal e cidade onde reside atualmente?
•
Experiências na área de TI?
•
Opinião sobre o curso de ADS?
•
O que espera da disciplina:
Paradigmas de Programação
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 17
Conhecendo a área de :
Paradigmas de Programação
O que é um paradigma de programação?
•
Etimologia da Palavra
PARADIGMA pa.ra.dig.ma
sm (gr parádeigma) 1 Modelo, padrão, protótipo. 2 Ling Conjunto de unidades suscetíveis de aparecerem num mesmo contexto, sendo, portanto, comutáveis e mutuamente exclusivas. No paradigma, as unidades têm, pelo menos, um traço em comum (a forma, o valor ou ambos) que as relaciona, formando conjuntos abertos ou fechados, segundo a natureza das unidades.
Dicionário Michaelis em: http://michaelis.uol.com.br/
19
O que é um paradigma de programação?
•
Forma geral de pensar ao programar
•
Principais elementos que compõem o programa
•
Linguagens seguem/suportam um ou mais paradigmas
•
Há centenas de linguagens, mas poucos paradigmas
Porque devo Estudar
Paradigmas de Programação
•
Aumenta a capacidade de expressar ideias;
•
Embasa a escolha adequada de linguagem;
•
Aumenta a habilidade de aprender novas linguagens
•
Melhora o uso de linguagens já conhecidas
21
Conhecendo a área
Mercado de Trabalho
BUSCA POR ANALISTA DE SISTEMAS
• EM TODO O BRASIL
• 1.743 vagas de emprego em 1.307 anúncios.
• R$: 1.000,00 a R$: 7.000,00
• CEARÁ
• 46 vagas de emprego em 19 anúncios.
• R$: 1.000,00 a R$: 7.000,00 Fonte: www.catho.com.br
Conhecendo a área
Mercado de Trabalho
BUSCA POR ANALISTA PROGRAMADOR
• EM TODO O BRASIL
• 806 vagas de emprego em 544 anúncios.
• R$: 2.000,00 a R$: 10.000,00
• CEARÁ
• 5 vagas de emprego em 4 anúncios.
• R$: 2.000,00 a R$: 4.000,00 Fonte: www.catho.com.br
Conhecendo a área
Mercado de Trabalho
BUSCA POR ANALISTA PROGRAMADOR JAVA
• EM TODO O BRASIL
• 203 vagas de emprego em 120 anúncios.
• R$: 2.000,00 a R$: 10.000,00
• CEARÁ
• 3 vagas de emprego em 3 anúncios.
• R$: 2.000,00 a R$: 4.000,00
•
Na Região Metropolitana do Cariri
• Empresas e setor público
• Faculdade e instituições de ensino
• Empresas Especializadas na área
•
O mundo é sua possibilidade!
• Home Office!
• Ex.:
• Porto Digital– 89% dos projetos são para fora do país
• TI brasileiro representa apenas 2% do share global
• 500 bilhões de dólares por ano.
• Cera de 90% do que é desenvolvido no Porto Digital é destinado ao mercado Externo.
Conhecendo a área
* Fonte: revista Você S/A e Faturamento anual do Porto G
Quais são os principais paradigmas?
• Imperativo
• Estruturado / Procedural ou procedimental
• Orientado a objetos
• Funcional
• Lógico
• Concorrente (se mistura aos demais)
• Outros
• Orientado a aspectos,
• Visual,
• Orientado a eventos,
• etc.
Paradigmas de Programação
Categorias: imperativo X declarativo
• Imperativo
•
ênfase nas ações, em "como fazer"
•
paradigmas procedimental, orientado a objetos
• Declarativo
•
ênfase nos resultados, no que se deseja obter
•
paradigmas funcional, lógico
27
Categorias: sequencial X concorrente
• Sequencial
•
um único fluxo de execução, uma operação por vez
• Concorrente
•
vários fluxos de execução, várias operações simultâneas
Paradigmas de Programação
Domínios de programação
• Aplicações científicas
• Fortran(IV-95), C, ..., Python, ...
• Aplicações comerciais
• SQL, Cobol, ..., Pascal/Delphi..., Java, C#, ...
• Software básico
• C, C++, ...
• Educação
• Cobol, ..., Pascal/Delphi, C, ...
• Scripting
• Perl, Python, PHP, Ruby, bash, ...
• Inteligência artificial
• Prolog, LISP, Java, ...
• Web
• Perl, Java, PHP, Python, ...
29
Breve Histórico das Linguagens
• Augusta Ada
•
Filha de um Lord Inglês
•
Não recebeu educação formal
•
Ada tomava Aulas Particulares
•
Casou-se as 19 anos e passou a ser chamada de Lady Lovelace.
•
Teve três filhos
31
Breve Histórico das Linguagens
• Charles Baddage
•
Matemático Inglês
•
Projetou computadores mecânicos
•
A Máquina Diferencial
•
A Máquina Analítica
Breve Histórico das Linguagens
• Ada e Charles
•
Ficaram amigos e trabalharam juntos em muitas das ideias de Charles
•
Ada descreveu um algoritmo para calcular usando a máquina diferencial.
•
Não chegou a ser testado, pois a máquina nunca existiu de fato
•
É considerado como sendo o primeiro programa
33
Breve Histórico das Linguagens
• Programar era um atividade trabalhosa
• Programar era uma atividade de semanas a 60 anos atrás.
• Programar era trocar fios
• Na melhor das hipóteses era perfurar cartões
• é difícil mensurar quão difícil era essa atividade
Breve Histórico das Linguagens
•
As linguagens de programação são classificadas por gerações.
• Primeira geração 1950-1962 : linguagens de baixo nível, como Assembly.
• Segunda geração 1962-1974: as primeiras linguagens criadas, como Fortran e ALGOL.
• Terceira geração 1974-1986: procedurais e estruturadas, como C e Pascal.
• Quarta geração 1986 até os dias atuais: linguagens que geram programas em outras linguagens, como Java e C++.
35
Breve Histórico das Linguagens
Breve Histórico das Linguagens
37
Breve Histórico das Linguagens
COBOL
•
É datada do ano de 1959
•
COmmon Business Oriented Language
•
Linguagem Comum Orientada para os Negócios
•
É uma linguagem de programação orientada para o processamento de banco de dados comerciais.
•
Produto do Departamento de Defesa norte-americano
Breve Histórico das Linguagens
39
Breve Histórico das Linguagens
Breve Histórico das Linguagens
41
Breve Histórico das Linguagens
Breve Histórico das Linguagens
43
Breve Histórico das Linguagens
Breve Histórico das Linguagens
45
Sucesso de uma LP
•
Como uma linguagem de programação surge e se torna bem-sucedida?
•
Quais são as características-chave que tornam uma linguagem de programação ideal?
• Características-Chave
• Legibilidade
• Simplicidade
• Ortogonalidade
• Portabilidade
• Confiabilidade
• Suporte
• Abstração
• Implantação Eficiente
• Custo
47
Características-Chaves
LEGIBILIDADE
Forte Influência da “CRISE DO SOFTWARE”
• Refere-se a um conjunto de problemas encontrados no desenvolvimento de software e na etapa de Manutenção.
•
Anticrise do Software
• é a união e o trabalho conjunto e harmonia de três elementos:
empresa, cliente e departamento de TI. O departamento de TI é o responsável e o principal elemento em aceitar estes conceitos e fazer de tudo para aceitar estas metodologias e teses, utilizando de todos os recursos disponíveis.
Características-Chaves
LEGIBILIDADE
Principais problemas da área de Informática
•
Questionário aplicado à alta direção de 200 empresas de porte médio/grande, sobre as principais falhas/dificuldades com a Informática:
• Cumprimento dos prazos 26,3%
• Custos elevados 25,4%
• Prioridade desenvolvimento x manutenção 25,4%
• Manutenção dos sistemas em uso 21,1%
• Recrutar profissionais qualificados(*) 18,4%
(*) Boa formação e atualizados
49
Características-Chaves
LEGIBILIDADE
•
Facilidade de ler e escrever programas
•
Legibilidade influi:
• desenvolvimento e depuração de programas
• manutenção de programas
• desempenho de equipes de programação
•
Fatores que melhoram a legibilidade:
• Abstração de dados
• Comandos de controle
• Modularização de programas
• Documentação
• Convenções léxicas, sintaxe e semântica
• Exemplo em Java: nomes de classes iniciam por letra maiúscula, nomes de campos usam letras minúsculas
Características-Chaves
LEGIBILIDADE
•
Tipos e Estruturas de Dados
• A possibilidade de definir estruturas e tipos de dados também afeta a legibilidade
• INT fim_de_arquivo = 1;
• BOOLEAN fim_de_arquivo = true;
• while( not fim_de_arquivo == 1)
• while (not fim_de_arquivo )
51
Características-Chaves
LEGIBILIDADE
•
Quanto mais fácil de escrever um programa, maior e a probabilidade dele esta certo
•
Quanto mais fácil de escrever um programa, maior é a facilidade de corrigi-lo e de reescreve-lo.
Características-Chaves
SIMPLICIDADE
•
Representação de cada conceito seja simples de aprender e dominar
• Simplicidade sintática exige que a representação seja feita de modo preciso, sem ambigüidades
• contra-exemplo: A++; A=A+1; A+=1; ++A.
• Simplicidade semântica exige que a representação possua um significado independente de contexto
• while (Sempre será um enquanto).
• Simplicidade não significa concisão
• Exemplo - Identificadores
• FORTRAN 77 (6 caracteres)
• BASIC (1 caractere ou 1 caractere seguido de 1número)
53
Características-Chaves
SIMPLICIDADE
• Palavras Especiais:
• PASCAL (begin--end)
• FORTRAN 90 e ADA ( if--endif)
• FORTRAN 90 permite que se defina variáveis com nomes do e end
•» if if > then then then = else else else = endif endif endif endif
• Forma e significado
• A aparência deve ao menos parcialmente indicar o propósito.
• » static em C; begin – end; if
Características-Chaves
ORTOGONALIDADE
•
Possibilidade de combinar entre si, sem restrições, os componentes básicos da LP
• Exemplo:
• permitir combinações de estruturas de dados, como arrays de registros
• Contra exemplo:
• não permitir que um array seja usado como parâmetro de um procedimento
55
Características-Chaves
ORTOGONALIDADE
•
Se uma linguagem tiver um grande número de construções, programadores podem não se familiarizar com todas
•
Mal uso de algumas e desuso de outras
•
Sendo assim, Ortogonalidade demais pode prejudicar a escrita da linguagem
Características-Chaves
PORTABILIDADE
•
Multiplataforma:
• capacidade de um software rodar em diferentes
• plataformas sem a necessidade de maiores adaptações
• Sem exigências especiais de hardware/software
• Exemplo: aplicação compatível com sistemas Unix e Windows
•
Longevidade:
• ciclo de vida útil do software e o do hardware não precisam ser síncronos; ou seja, é possível usar o mesmo software após uma mudança de hardware
57
Características-Chaves
CONFIABILIDADE
•
Mecanismos que facilitem a produção de programas que atendam às sua especificações
• Tipagem forte: o processador da linguagem deve
• assegurar que a utilização dos diferentes tipos de dados seja compatível com a sua definição
• evitar que operações perigosas, tal como aritmética de ponteiros, seja permitida
• Tratamento de exceções: sistemas de tratamento de exceções permitem construir programas que
• possuam definições de como proceder em caso de comportamento não usual
• possibilitem tanto o diagnóstico quanto o tratamento de erros em tempo de execução
Características-Chaves
CONFIABILIDADE Tipagem
Verifica se os valores atribuídos aos tipos estão de acordo com os definidos
Quando uma linguagem faz uma verificação rigorosa de seus tipos, diz-se que ela é fortemente tipada.
Exemplo:
Java e Pascal Contra Exemplo:
C , PHP
59
Características-Chaves
CONFIABILIDADE
Tratamento de exceções
• É a possibilidade de um programa interceptar um erro em tempo de execução, tomar as medidas adequadas e continuar (ou não) a execução
• Exemplos
• Java, C++ e Ada
• Contra exemplo
Pascal, C e FORTRAN
Características-Chaves
CONFIABILIDADE
“ Aliasing”
•
É a possibilidade de se ter duas ou mais referências para um mesmo local da memória
•
É uma técnica perigosa de programação Exemplo
C (apontadores) Contra Exemplo:
Java não possui essa propriedade
61
Características-Chaves
SUPORTE
•
Acessibilidade a informações, documentos e ferramentas para o desenvolvimento na linguagem
• Compiladores de Domínio Público
• Múltiplas Plataforma
• Cursos, Livros, Tutoriais e Comunidades sobre a Linguagem
•
Linguagens Proprietárias x Não Proprietárias
• Governamentais e Corporativos
• Sucesso em ambos os lados
Características-Chaves
ABSTRAÇÃO
•
Possibilidade de se definir e usar estruturas complexas sem que os aspectos internos de implementação dessas estruturas sejam vistos pelo programador
•
Exemplo
•
Implementação de uma Árvore Binária em FORTRAN,
Pascal e em Java
63
Características-Chaves
ABSTRAÇÃO
•
Aspecto fundamental no projeto de programas pois:
•
Reuso de código
•
Evita reinventar a roda
•
Bibliotecas que acompanham a linguagem
•
Exemplo:
• JAVA: Classe Scanner para entrada de dados
Características-Chaves
IMPLANTAÇÃO EFICIENTE
•
Implementação Prática e Eficiente em Plataformas Contemporâneas
•
Ineficiência de tempo de execução
•
Necessidade de respostas imediatas a mudanças bruscas aos valores de entrada.
•
Exemplo:
• ADA e JAVA
65
Características-Chaves
CUSTO
• É uma função de algumas outras características
• Linguagem Proprietária x Domínio Público
• Custo de Treinamento
• Custo de Escrever Programas na Linguagem
• Custo de Confiabilidade
• Custo de Execução e Compilação
• Custo de Manutenção
Conceitos
•
Algoritmos e programas
•
Linguagens de programação
•
Desenvolvimento de programas
Algoritmos e programas
• Algoritmos
•
Conjunto finito de passos sequenciais que descrevem como resolver um determinado problema.
•
Informações de entrada, modificação da informação, informações de saída.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 67
Algoritmos e programas
•
Exemplo:
Receita de bolo:Misture os ingredientes Unte a forma com manteiga Despeje a mistura na forma Se houver coco ralado então despeje sobre a mistura Leve a forma ao forno Enquanto não corar deixe a forma no forno Retire do forno Deixe esfriar
Algoritmos e programas
•
Construção de algoritmos
•
Dividir-e-conquistar: divide-se sucessivamente o problema em subproblemas cada vez menores.
•
Exemplo:
Trocar pneu de um carro 1. pegue o macaco
2. levante o carro 3. retire o pneu furado 4. pegue o estepe 5. coloque-o na roda 6. aperte os parafusos 7. abaixe o carro 8. reaperte os parafusos
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 69
Algoritmos e programas
•
Construção de algoritmos
• Exemplo: Refinamento do passo 1.
Refinamento ou procedimento do passo 1
1.1 abra a mala
1.2 remova o macaco do porta-malas
1.3 coloque o macaco sob o carro, próximo ao pneu furado 1.4 desaperte os parafusos da roda
1.5 insira a manivela no macaco
1.6 coloque um calço sob o carro para impedi-lo de se mover
1.7 levante o carro com o macaco até que haja espaço suficiente para colocar o estepe
Algoritmos e programas
• Construção de algoritmos
•
Qual o limite do refinamento?
•
Um algoritmo pode ser escrito de forma gráfica ou textual.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 71
• Formas de representação dos algoritmos
•
Descrição narrativa
•
Fluxograma convencional
•
Pseudocódigo
Algoritmos e programas
Algoritmos e programas
• Descrição narrativa
•
Pouco usada na prática (permite equívocos).
•
Algoritmos expressos em linguagem natural.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 73
Algoritmos e programas
•
Descrição narrativa
• Exemplo:
Calcular média de um aluno
Obter as suas 2 notas de provas Calcular a média aritmética Se a média for maior que 7, o aluno foi aprovado, senão ele foi reprovado
Algoritmos e programas
• Fluxograma convencional
•
Formas geométricas diferentes implicam ações distintas.
•
Não se preocupa com detalhes de implementação do programa
.Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 75
Algoritmos e programas
•
Fluxograma convencional
Início e final do fluxograma
Operação de entrada de dados
Operação de saída de dados
Operação de atribuição
Decisão
Algoritmos e programas
•
Fluxograma convencional
• Exemplo:
Início
N1, N2
"Aprovado"
MEDIA aaa
(N1 + N2) / 2
MEDIA >= 7
"Reprovado"
Fim
.V. .F.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 77
Algoritmos e programas
• Pseudocódigo
•
Algoritmo escrito em português utilizando convenções próximas de uma linguagem de programação.
•
Forma de representação rica em detalhes.
•
Encontra bastante aceitação.
Algoritmos e programas
•
Pseudocódigo
Algoritmo <nome_do_algoritmo>
<declaração_de_variáveis>
<subalgoritmos>
Início
<corpo do algoritmo>
Fim
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 79
Algoritmos e programas
•
Pseudocódigo
• Exemplo:
Algoritmo Calculo_Media Var N1, N2, MEDIA: real Início
Leia N1, N2
MEDIA (N1 + N2) / 2 Se MEDIA >= 7 então
Escreva “Aprovado”
Senão
Escreva “Reprovado”
Fim_se Fim
Algoritmos e programas
• Programas
•
Conjunto de instruções executadas numa certa sequência de modo a resolver algum problema.
•
Formalização de um algoritmo em alguma linguagem de programação.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 81
Linguagens de programação
• Linguagens de programação
•
Conjunto limitado de instruções (vocabulário), associado a um conjunto de regras (sintaxe) que define como as instruções podem ser associadas.
•
Cada linguagem possui um conjunto único de palavras-
chave ou palavras reservadas e uma sintaxe
específica.
Linguagens de programação
•
O que caracteriza uma linguagem de programação?
•
Sintaxe e semântica bem definidas;
•
Implementável (executável) com eficiência aceitável.
•
Universal: deve ser possível expressar todo problema computável.
•
Natural para expressar soluções de problemas (em um certo domínio de aplicação).
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 83
Por que existem tantas linguagens?
• Propósitos Diferentes;
• Avanços Tecnológicos.
• Interesses comerciais.
• Cultura e background
científico.
Linguagens de programação
• De acordo com a sua similaridade com a linguagem humana:
•
Linguagem de máquina
•
Linguagem simbólica
•
Linguagem de alto nível
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 85
Linguagens de programação
• Linguagem de máquina - Baixo Nível
•
Mais baixo nível de entendimento pelo ser humano e a única entendida pelo processador (UCP).
•
Instrução típica em linguagem de máquina:
1001 0100 1111 1010 1001 0100 1111 1010
Linguagens de programação
•
Linguagem simbólica (Assembly) – Baixo Nível
• Linguagem de nível imediatamente acima da linguagem de máquina.
• Permite o uso de nomes (mnemônicos) e símbolos em lugar de números.
• Linguagem simbólica para linguagem de máquina (Montador:
Assembler).
• Instrução típica em linguagem simbólica:
• MOV R1, R2
• ADD R1, R2
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 87
Linguagens de programação
• Linguagem de alto nível
•
Possui uma estrutura e palavras-chave mais próximas da linguagem humana.
•
Programas escritos em linguagem de alto nível são convertidos para linguagem de baixo nível através de um programa denominado compilador ou de um interpretador.
•
Instrução típica em linguagem de alto nível:
Linguagens de programação
•
Compilador x Interpretador.
A implementação de cada um dos elementos de uma LP é feita através de processadores:
• Compiladores: os programas são transformados por inteiro em um conjunto de instruções que podem ser fisicamente efetuadas por um computador.
• Interpretadores: cada expressão é transformada nas instruções correspondentes e acionada no computador.
Um programa compilado geralmente executa mais rapidamente que um programa interpretado.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 89
Desenvolvimento de programas
• Processo
• É associado ao uso de ferramentas ou ambientes de desenvolvimento
• Exemplo: IDEs Eclipse e Delphi ...
• Principais etapas:
•
Geração de código-fonte
•
Tradução do código-fonte
•
Editores de ligação
•
Depuradores
Desenvolvimento de programas
• Geração de código-fonte
•
Codificação em alguma linguagem de programação
•
Editores
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 91
Desenvolvimento de programas
• Tradução do código-fonte
•
O código-fonte não é executável.
•
É necessário que o código-fonte seja traduzido para o código de máquina.
•
Esta tradução (ou conversão) é realizada de forma automática graças à existência de ferramentas como os montadores (ou Assemblers) e os compiladores.
•
O código gerado por essas ferramentas é denominado
código-objeto.
Desenvolvimento de programas
• Editores de ligação
•
Conhecidos como “Linkers”
•
Rearranjar o código do programa, incorporando a ele todas as partes referenciadas no código original.
Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 93
Desenvolvimento de programas
•
Editores de ligação
• Conhecidos como linkers
Programa executável Linker
Código Fonte Código
Fonte
Código Fonte
Código Fonte
Biblioteca Código Objeto
Código Objeto
Código Objeto
Código Objeto
Desenvolvimento de programas
•
Depuradores ou debuggers
• Auxilia o programador a eliminar (ou reduzir) a quantidade de
“bugs” (erros) de execução no seu programa
• Executam o programa gerado através de uma interface apropriada que possibilita uma análise efetiva do código do programa
• Graças à:
• execução passo-a-passo (ou instrução por instrução) de partes do programa
• visualização do “estado” do programa através das variáveis e eventualmente dos conteúdos dos registros internos do processador
• alteração em tempo de execução de conteúdos de memória ou de variáveis ou de instruções do programa
• etc...
95Paradigmas de Programação – Prof. MSc. Isaac Bezerra de Oliveira. 95
Métodos de implementação
•
Compilação
–Programas são traduzidos para linguagem de máquina
•
Interpretação pura
–Programas são interpretados por outro programa chamado interpretador
•
Sistemas de implementação híbridos
–Um meio termo entre os compiladores e os interpretadores puros
Visão em camadas de um computador
O Sistema operacional e as implementações de linguagem são
colocados em camadas superiores à interface de linguagem de máquina de um computador
Compilação
•
Traduz programas (linguagem de fonte) em código de máquina (linguagem de máquina)
•
Tradução lenta, execução rápida
•
Processo de compilação tem várias fases:
–análise léxica: agrupa os caracteres do programa fonte em unidades léxicas
–análise sintática: transforma unidades léxicas em árvores de análise sintática (parse trees), que representam a estrutura sintática do programa
–análise semântica: gera código intermediário –geração de código: código de máquina é gerado
O processo de compilação
The Compiling Process
Gargalo de Von Neumann
•
A velocidade de conexão entre a memória de um computador e seu processador determina a velocidade do computador
•
Instruções de programa normalmente podem ser executadas mais rapidamente do que a velocidade de conexão, o que resulta em um gargalo
•
Conhecido como gargalo de von Neumann; é o fator limitante primário na velocidade dos computadores
Interpretação pura
•
Sem tradução
•
Fácil implementação de programas (mensagens de erro em tempo de execução podem referenciar unidades de código fonte)
•
Execução mais lenta (tempo de execução de 10 a 100 vezes mais lento do que nos sistemas compilados)
•
Geralmente requer mais espaço
•
Raramente usada em linguagens de alto nível
•
Volta significativa com algumas linguagens de scripting e para a
Web (como JavaScript e PHP)
Processo de interpretação pura
Sistemas de implementação híbridos
•
Um meio termo entre os compiladores e os interpretadores puros
•
Uma linguagem de alto nível é traduzida para uma linguagem intermediária que permite fácil interpretação
•
Mais rápido do que interpretação pura
•
Exemplos
–Programas em Perl eram parcialmente compilados para detectar erros antes da interpretação
–As primeiras implementações de Java eram todas híbridas; seu formato intermediário, byte code, fornece portabilidade para qualquer máquina que tenha um interpretador de bytecodes e um sistema de tempo de execução associado (juntos, são chamados de Máquina Virtual Java)
Sistema de implementação híbrido
The Interpreting Process
Sistemas de implementação Just-in-Time
•
Inicialmente traduz os programas para uma linguagem intermediária
•
Então, compila os métodos da linguagem intermediária para linguagem de máquina quando esses são chamados
•
A versão em código de máquina é mantida para chamadas subsequentes
•
Sistemas JIT são agora usados amplamente para programas Java
•
As linguagens .NET também são implementadas com um sistema JIT
Pré-processadores
•
As instruções de pré-processador são comumente usadas para especificar que o código de outro arquivo deve ser incluído
•
Um pré-processador é um programa que processa um programa imediatamente antes de o programa ser compilado para expandir macros embutidos
•
Um exemplo conhecido: pré-processador de C
–expande#include, #define e macros similares
Ambientes de programação
•
Coleção de ferramentas usadas no desenvolvimento de software
•
UNIX
–Um ambiente de programação mais antigo
–Agora bastante usado por meio de uma interface gráfica com o usuário (GUI) que roda sobre o UNIX
•
Microsoft Visual Studio .NET
–Grande e complexo
•
Usado para desenvolver software em qualquer uma das linguagens .NET
•
NetBeans
–Usado primariamente para o desenvolvimento de aplicações Web usando Java, mas também oferece suporte a JavaScript, Ruby e PHP
Exercício de Fixação - 01
1.
O que é um paradigma de programação?
2.
Qual o objetivo de conhecer Paradigmas de Programação?
3.
Quais são os principais paradigmas?
4.
Quais são as Categorias dos paradigmas de programação?
5.
Quais os Domínios de programação e no que isso implica na escolha de uma linguagem?
6.
O que uma linguagem necessita para obter sucesso de uso?
7.