Download - Visão Geral - nca.ufma.br
Visão Geral .. e conceitos básicos
1
Curso de...
• Programação • O que se estuda aqui?
• Algoritmos
2
E o que são algoritmos? • Sequência finita e não ambígua de passos para a solução de um problema.
• Lembre-‐se que: • Diferentes algoritmos podem levar a solução de um mesmo problema:
3
Como preparar um omelete? • Se você souber fazer, provavelmente não nota mais os passos que realiza:
1. Pegar os ovos 2. Quebrar os ovos 3. Bater os ovos 4. Escolher o recheio 5. Cozinhar 6. ReRrar do fogo 7. Servir num prato 4
Qual o problema? • Bom, então eu sei fazer algoritmos!!!
• Basta sequenciar tudo que vou fazer para achar uma solução • Sim passa por ai!
• Inclua lógica para as tomadas de decisões
• Mas qual o problema então em se programar? • A língua portuguesa (assim como qualquer outra) é extremamente extensa e pode ser ambigua. Imagine um computador para interpretar ela.
• Precisamos de outra forma de expressar algoritmos 5
Formas de representação • Linguagem Natural: Os algoritmos são expressos diretamente em linguagem natural (o português, por exemplo).
• Fluxograma • Pseudocódigo ü Linguagem de Programação: Método padronizado para expressar instruções para um computador. É um conjunto de regras sintáRcas e semânRcas usadas para definir um programa de computador. 6
Linguagem de Programação • Gramática e significado bem definidos • Implementável (executável) com eficiência
“aceitável” • Universal: deve ser possível expressar todo
problema computável • Natural para expressar problemas (em um certo
domínio de aplicação)
• Mas para isso, .... 7
Um pouco sobre o computador digital
8
Lembra que existem os computadores analógicos Primeira LP, ADA foi criada por Babbage para um computador analógico
onde estão os dados
onde o programa é carregado
A arquitetura anterior • Chamada de Von Neumann
• Construída por • “Computador com programa armazenado”
• MatemaRcamente idealizada por Turing em sua: • máquina de Turing • Ou como é conhecida Máquina Universal de Turing
9
Programa Armazenado (Stored Procedure)
10
Formalismo • O algoritmo que é:
• Um sequência finita de passos (ou operações) • Pode ser simulado (ou implementado) numa máquina de Turing.
• Como então mandar um programa para essa máquina? Que LINGUAGEM ela fala? • Linguagem de Máquina (bem cruel)
• É necessário uma linguagem sucinta, clara, precisa... Entra as linguagens de programação
11
Linguagem de Máquina • A máquina fala linguagem de máquina
• As linguagens de programação representam abstrações que são converRdas para linguagem de máquina • Por um compilador
• Ou por um interpretador 12
Compiladores • Programa
• A partir de um código-fonte escrito em uma linguagem, cria uma programa equivalente, mas escrito na linguagem objeto (máquina)
• Composto por: • Analisador Léxico
• Verifica a compatibilidade com determinado alfabeto • Analisador Sintático
• Determinação da estrutura gramatical de uma sentença • Gerador de Código • Otimizador
13
Compilador
14
Interpretador
15
E quais linguagens existem • Fortran • C • C++ • C# • Java • Python • Pascal • Object Pascal • LUA • Visual Basic • .... e por ai vai 16
17
Por que tantas linguagens?
• Propósitos diferentes • Avanços tecnológicos • Interesses comercias • Cultura e background científico
18
PARADIGMAS DE PROGRAMAÇÃO
Como se pensar uma solução? Como programar? Baseado em que?
19
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 consequência de decisões de projeto que impactam radicalmente a forma na qual uma aplicação real é modelada do ponto de vista computacional
20
O Paradigma Imperativo
• 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
21
Modelo Computacional do Paradigma Imperativo
Entrada Programa Saída
Estado
22
Vantagens do modelo imperativo
ü Eficiência (embute modelo de Von Neumann) ü Modelagem “natural” de aplicações do mundo
real ü Paradigma dominante e bem estabelecido
23
Desvantagens do paradigma imperativo • Relacionamento indireto entre E/S resulta em:
• difícil legibilidade • erros introduzidos durante manutenção • descrições demasiadamente operacionais
focalizam o como e não o que
24
O Paradigma Orientado a Objetos
• Não é um paradigma no sentido estrito: é 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 (atributos) e operações (métodos) sobre este
• Classes podem ser estendidas e/ou usadas como tipos (cujos elementos são objetos)
25
Modelo Computacional do Paradigma Orientado a Objetos
. . . . . .
. . .
Entrada Programa Saída
Estado
...
Estado
Entrada Programa Saída
Estado
Entrada Programa Saída
Estado
Entrada Programa Saída
Estado
Entrada Programa Saída
26
Vantagens do Paradigma Orientado a objetos • Além de todas as do estilo imperativo • Classes estimulam projeto centrado em dados:
• Modularidade • Reusabilidade • Extensibilidade
• Aceitação comercial crescente - Java
27
Problemas do Paradigma OO • Semelhantes aos do paradigma imperativo,
mas amenizadas pelas facilidades de estruturação
28
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.
29
OUTRAS CLASSIFICAÇÕES 30
Quais são os comuns • IteraFvo
• Sequência linear de passos • Recursivo
• Autodefinição e uRlização • Lógico
• Dedução lógica (Inteligência ArRficial) • Serial e Paralelo
31
Alguns outros Tipos de resolver problemas • Divisão e Conquista:
• Divida e resolva problemas menores • Programação Dinâmica
• Guarde soluções intermediárias. Seja rápido • Algoritmos Ganancioso
• Escolha apenas os melhores, e guarde-‐os • Busca e Enumeração
• busque num grafo a solução com backtracking • Paradigma HeurísFco e ProbabilísFco
• escolha aleatoriamente uma solução, e verifique se é boa. Algoritmos genéRcos 32
Outras Classificações
• Programação sequencial versus concorrente versus paralela • Sequencial: programação baseada na
execução sequencial de comandos • Concorrente: programação baseada na
execução não sequencial e cooperativa de comandos
• Paralela: programação baseada na divisão de tarefas independentes
33
Outras Classificações
• Programação linear versus programação visual (visual programming) • Ambientes visuais de desenvolvimento
avançado de aplicações • Baseado na filosofia de reuso de Componentes
ou Paradigma Orientado a Componentes
34
Outras Classificações
• Linguagens de máquina • Endereços físicos e operation code
• Linguagens Assembly • Mnemônicos e labels simbólicos
• Linguagens de “alto nível” • Variáveis e atribuição (versus acesso direto à
memória) • Estruturas de dados (versus estruturas de
armazenamento) 35
Curiosidade • Procure na internet por (e leia mais a respeito):
• Máquina de turing (Turing) • Problema da parada • Cálculo Lambda (Church) • Busca em Grafos • Primeiro computadores digitais (Neumann) • Primeira linguagem de programação (Ada Lovelave e Charles Babbage)
• Primeira linguagem de alto nível amplamente usada – FORTRAN
36