visão geral - nca.ufma.br

36
Visão Geral .. e conceitos básicos 1

Upload: others

Post on 26-Nov-2021

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Visão Geral - nca.ufma.br

Visão Geral .. e conceitos básicos

1

Page 2: Visão Geral - nca.ufma.br

   

Curso  de...  

• Programação  •  O  que  se  estuda  aqui?  

• Algoritmos  

2

Page 3: Visão Geral - nca.ufma.br

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

Page 4: Visão Geral - nca.ufma.br

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

Page 5: Visão Geral - nca.ufma.br

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

Page 6: Visão Geral - nca.ufma.br

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

Page 7: Visão Geral - nca.ufma.br

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

Page 8: Visão Geral - nca.ufma.br

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

Page 9: Visão Geral - nca.ufma.br

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

Page 10: Visão Geral - nca.ufma.br

Programa  Armazenado  (Stored  Procedure)  

10

Page 11: Visão Geral - nca.ufma.br

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

Page 12: Visão Geral - nca.ufma.br

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

Page 13: Visão Geral - nca.ufma.br

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

Page 14: Visão Geral - nca.ufma.br

Compilador

14

Page 15: Visão Geral - nca.ufma.br

Interpretador  

15

Page 16: Visão Geral - nca.ufma.br

E  quais  linguagens  existem  •  Fortran  •  C  •  C++  •  C#  •  Java  •  Python  •  Pascal  •  Object  Pascal  •  LUA  •  Visual  Basic  •  ....  e  por  ai  vai   16

Page 17: Visão Geral - nca.ufma.br

17

Page 18: Visão Geral - nca.ufma.br

Por que tantas linguagens?

•  Propósitos diferentes • Avanços tecnológicos •  Interesses comercias • Cultura e background científico

18

Page 19: Visão Geral - nca.ufma.br

PARADIGMAS  DE  PROGRAMAÇÃO  

Como  se  pensar  uma  solução?  Como  programar?  Baseado  em  que?  

19

Page 20: Visão Geral - nca.ufma.br

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

Page 21: Visão Geral - nca.ufma.br

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

Page 22: Visão Geral - nca.ufma.br

Modelo Computacional do Paradigma Imperativo

Entrada Programa Saída

Estado

22

Page 23: Visão Geral - nca.ufma.br

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

Page 24: Visão Geral - nca.ufma.br

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

Page 25: Visão Geral - nca.ufma.br

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

Page 26: Visão Geral - nca.ufma.br

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

Page 27: Visão Geral - nca.ufma.br

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

Page 28: Visão Geral - nca.ufma.br

Problemas  do  Paradigma  OO  • Semelhantes aos do paradigma imperativo,

mas amenizadas pelas facilidades de estruturação

28

Page 29: Visão Geral - nca.ufma.br

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

Page 30: Visão Geral - nca.ufma.br

OUTRAS  CLASSIFICAÇÕES   30

Page 31: Visão Geral - nca.ufma.br

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

Page 32: Visão Geral - nca.ufma.br

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

Page 33: Visão Geral - nca.ufma.br

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

Page 34: Visão Geral - nca.ufma.br

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

Page 35: Visão Geral - nca.ufma.br

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

Page 36: Visão Geral - nca.ufma.br

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