Buscar

1 Introdução a programação

Prévia do material em texto

Laboratório de 
Programação
Dr. Deam James Azevedo da Silva
Conteúdo
 Histórico da Computação
 Conceitos básicos de linguagens de programação de computadores
 Conceitos de algoritmos
 Linguagem Java
 Exemplos práticos com Netbeans
 Primeiro ser humano a CALCULAR: pastor
 Técnica utilizada: empilhamento de pedras 
para controle da quantidade de ovelhas do 
rebanho
Calculus – lat. pedrinha
Histórico da Computação
Forma ancestral dos seres humanos para indicar 
quantidades: gestos com os dedos da mão
Histórico da Computação
Digitus – lat. dedo
Histórico da Computação
Sistema de numeração egípcio
Sistema de numeração romano
Histórico da Computação
10001000500500100100505010105511
MMDDCCLLXXVVII
10001000500500100100505010105511
MMDDCCLLXXVVII
10000001000000100000100000100001000010001000100100101011 10000001000000100000100000100001000010001000100100101011
Primeira tentativa bem sucedida de criação de uma 
máquina de contar: ábaco (China, cerca de 2500 
a.C.)
Abacus – lat. tábua de argila
Histórico da Computação
Bastões de Napier: conjunto de 9 bastões, um para 
cada dígito, que transformavam a multiplicação de 
dois números numa soma das tabuadas de cada 
dígito. 
Histórico da Computação
Régua de Cálculo - o primeiro computador analógico
http://www.geocities.com/SiliconValley/Haven/8692/comput.htm
Histórico da Computação
Primeiro instrumento moderno de calcular: Máquina 
de Pascal – somadora construída por Blaise Pascal 
(físico, matemático e filósofo – França, 1642) 
9
Histórico da Computação
Aplicação dos cartões de Jacquard ao cálculo de 
funções trigonométricas e logaritmos: concepção da 
máquina diferencial (matemático Charles Babbage -
Inglaterra, 1882)
10
http://ei.cs.vt.edu/~history/Babbage.html
Histórico da Computação
Gerações
 Antes de 1943: Geração “zero” 
(baseado em engrenagens)
 1943-1959 Primeira Geração
Computadores à Válvulas
 1959-1964 Segunda Geração
Transístores e Circuitos Impressos
 1964-1972 Terceira Geração
Circuitos Integrados
 1972- ? Quarta Geração
LSI (500 partes), VLSI (10000)
 Alguns dizem que
paralelismo e VLSI 
são a quinta geração
1a Geração
2a Geração
3a Geração
Geração I - ENIAC
ENIAC (1945)
30 toneladas, 19000 válvulas, consumia
200kwatts
Era programado por conexão de cabos!
“Killer” Application (primeira): resolver problemas
do Manhattan Project (codinome do projeto da 
bomba atômica)
Geração II – IBM 7090
IBM 7090 (1958)
Versão de transístores do IBM 709
Usado para computação científica
e também para usos comerciais.
Geração III – IBM Systems/360
 IBM Systems/360 (1964)
vários modelos (13), 6 computadores e 40 periféricos, a IBM chegou a produzir
1000 por mês. 
Geração IV – Microcomputadores
 Micral (8008) (1973)
 Altair (Intel 8080)
(1974)
Odyssey
 Ralph Baer: 1968, 1972
Pong
 Nolan Bushnell : Atari (1972)
Próximo Passo: A Revolução do Computador 
Pessoal
1953 – 100 computadores no mundo todo
1976 –dezenas de milhares de microcomputadores
(Altair, Apple, etc.)
Hoje – Só podemos adivinhar – dezenas de milhões, 
talvez centenas
Apple Computers
 Apple I – 8 bit, 1 Mhz
Max mem 32kb (1976)
Apple II (1977)
8 bit, 1Mhz, gráfico!
6 cores em 280x192
Apple Computers
Apple III (1980)
Codename: Sara
8 bit, 2 MHz, max mem 
256kb, max resolução
1 bit (Preto e Branco) a 
590x192, 
unidade de disco
A década de 80
 No Brasil –
Reserva de Mercado
 Alguns clones nacionais
CP500 (TRS-80) CP400 (TRS80 Color) TK90X (ZX Spectrum)
Hotbit (MSX)
IBM PC (1981)
 O erro da IBM: Como a IBM deu de graça um dos maiores negócios do 
planeta à duas empresas (Intel, Microsoft)
Apple Macintosh (1984)
“Copiado” da Xerox por Steve Jobs, o Mac revoluciona 
com primeiro sistema de janelas e o primeiro sistema 
comercial com mouse.
!!!
A Década do Windows 1990-2000
 1990 Microsoft Windows 3.0
 1992 Intel i486DX2 - 25/50 MHz (external/internal), Windows 3.1, IBM ThinkPad 700C 
laptop 
 1993 IBM OS/2 2.1, Windows NT 3.1, IBM RS/6000 PowerPC (66 MHz), Pentium 60Mhz
 1994 Apple Power Macintosh 6100 (60 MHz PowerPC), DEC Alpha AXP (300 MHz) , 
 Iomega Zip drive (até 100 MB)
 1995 Windows 95, Pentium Pro (200 MHz), Windows NT 4.0, Windows CE 
 1996 CD-RW
 1997 AMD K6 (233MHz) 
 1998 400 MHz Pentium II processor, iMac 233 MHz PowerPC G3, Windows 98. 
 1999 Pentium III 1 Ghz, Apple PowerBook G3/333,Windows 2000 
 2000 PowerMac G4 Cube (450 MHz PowerPC G4)
2000-…
 Intel Pentium IV 3.4 Ghz HyperThreading 800Mhz
 Intel Pentium M (Centrino) 1.7 Ghz (Medição em Ghz não é mais 
significante, 1.7Ghz é equivalente a um Pentium 4 Mobile 2.5 Ghz)
 AMD Athlon 64 FX
 Etc….
Programação de Computadores
Como programar computadores atuais?
Linguagens de programação
Programação de Computadores
O que é língua?
“O conjunto das palavras e expressões usadas
por um povo, por uma nação, e o conjunto de
regras da sua gramática.”, “Sistema de signos
que permitem a comunicação entre os
membros de uma comunidade.”
O que é Linguagem:
“O uso da palavra articulada ou escrita como
meio de expressão e de comunicação entre
pessoas.”
Programação de Computadores
Qual a linguagem que o computador entende? 
Será que fácil programar um computador assim? 
Programação de Computadores
Linguagens de alto nível
Próximo a linguagem humana
Conjunto de símbolos reduzidos
Possui uma gramática própria
Exemplo
Java
C#
Pascal
Computador entende linguagem de alto nível?
Não. Solução?
Interpretador
Compilador
Lógica de programação 
 LÓGICA DE PROGRAMAÇÃO:
 Técnica de encadear pensamentos para atingir determinado objetivo
 Necessária para desenvolver programas e sistemas, pois permite definir a
seqüência lógica para a solução de um problema
 SEQÜÊNCIA LÓGICA: ?  1.  2.  3.  !
 Estes pensamentos podem ser descritos como uma seqüência de
instruções, que devem ser seguidas para se cumprir uma determinada
tarefa
 Passos executados até se atingir um objetivo ou solução de um problema
Lógica de programação 
 INSTRUÇÃO:
Cada um dos passos, cada uma das ações a tomar (obedecendo a
seqüência lógica) para ir resolvendo o problema, ou para ir executando a
tarefa
 Em informática, é a informação que indica a um computador uma
operação elementar a executar
Ex.: “somar”, “subtrair”, “comparar se é maior”, etc
 Uma só instrução não resolve problemas
 Executar um conjunto de instruções
 Executar em uma sequência lógica
Lógica de programação 
 EXEMPLO: para “fazer omelete”
Instruções: “quebrar ovos”, “bater ovos”, “pôr sal”, “ligar 
fogão”, “pôr óleo na frigideira”, “pôr frigideira no fogo”, “fritar 
ovos batidos”, etc...
Quanto às instruções isoladas:
Só “quebrar ovos”, ou só “pôr óleo na frigideira”, não é 
suficiente para cumprir a tarefa “fazer omelete”
Quanto à sequência lógica:
Se executarmos “fritar ovos batidos” antes de “bater ovos”, ou 
pior, antes de “quebrar ovos”, não iremos cumprir a tarefa 
“fazer omelete”
Lógica de programação 
 ALGORITMO:
Seqüência finita de passos que levam à execução de uma 
tarefa
Claro e preciso. Ex. “somar dois números”:
Escrever primeiro número no retângulo A
Escrever segundo número no retângulo B
Somar o número do retângulo A com o número do retângulo 
B e escrever o resultado no retângulo C
A B C
+ =
Exemplo de algoritmo
Quando uma dona de casa prepara um bolo, segue uma receita, 
que nada mais é do que um algoritmo em que cada instrução 
é umpasso a ser seguido para que o prato fique pronto com 
sucesso:
1. Bata 4 claras em neve
2. Adicione 2 xícaras de açúcar
3. Adicione 2 colheres de farinha de trigo, 4 gemas, uma colher 
de fermento e duas colheres de chocolate
4. Bata por 3 minutos
5. Unte uma assadeira com margarina e farinha de trigo
6. Coloque o bolo para assar por 20minutos
Exemplo de algoritmo
Um motorista que necessita efetuar a troca de um pneu 
furado segue uma rotina para realizar essa tarefa:
1. Verifica qual pneu está furado
2. Posiciona o macaco para levantar o carro
3. Pega o estepe
4. Solta os parafusos
5. Substitui o pneu furado
6. Recoloca os parafusos
7. Desce o carro
8. Guarda o macaco e o pneu furado
O Programa
 PROGRAMA:
 Algoritmo escrito em uma linguagem de 
computador (linguagem de programação - C, 
Pascal, COBOL, Fortran, Basic, Java, etc.)
 Interpretado e executado por um computador
 Interpretação rigorosa, exata, do computador 
 escrita do algoritmo na linguagem de prog. 
tem que seguir regras mais rigorosas
A descrição de uma linguagem
 Sintaxe: é o conjunto de regras que determina quais
construções são corretas para formação dos programas e
quais não são; em outras palavras, preocupa-se com a
“forma” dos programas (como expressões, comandos,
declarações, etc. são colocados juntos para formar
programas).
 Semântica: é a descrição da maneira que um programa
sintaticamente correto é interpretado ou executado; em
outras palavras, preocupa-se com o “significado” dos
programas (como o programa vai se comportar quando
executado no computador)
A descrição de uma linguagem
 Torna-se interessante comentar que o principal objetivo
de uma LP é dar suporte ao programador no
desenvolvimento dos sistemas.
 Isto inclui assistência no projeto, implementação, teste,
verificação e manutenção do software
 Existe uma série de características numa linguagem que
contribuem para este objetivo.
As características gerais que definem uma 
boa linguagem.
 Simplicidade: clareza e concisão semântica (linguagem
com um mínimo número de conceitos e estruturas), e
clareza sintática (sintaxe deve representar cada conceito
de uma maneira apenas).
 Suporte para abstração de dados: representação de um
objeto deve incluir somente os atributos relevantes.
 Expressividade: refere-se a facilidade com que um objeto
pode ser representado; a linguagem deve oferecer
estruturas de dados e de controle apropriadas.
As características gerais que definem uma 
boa linguagem
Ortogonalidade: refere-se a interação entre conceitos, isto
é, o grau com que diferentes conceitos podem ser
combinados uns com os outros de uma maneira
consistente; ortogonalidade reduz o número de exceções
das regras de uma linguagem, tornando mais fácil o seu
aprendizado e memorização.
 Suporte à manutenção e portabilidade: habilidade de
manter programas que devem ser fáceis de entender e
alterar; é afetada pelas características anteriores.
As características gerais que definem uma 
boa linguagem
Eficiência: a avaliação precisa de uma
linguagem, baseada em critérios pré-definidos,
é extremamente importante; as medidas mais
comuns são a eficiência da execução do
programa, da tradução do programa, e da
criação, teste e uso do programa.
Classes e Gerações
 Linguagem de Máquina: é uma linguagem usualmente baseada
num código binário, específico para cada tipo de computador
(ou microprocessador). Como a codificação das instruções é
feita na forma final de execução (endereços e opcode em
binário), esta linguagem pode ser usada diretamente pela
máquina.
 Linguagem de Baixo Nível: aqui começa a ser introduzida a
abstração, pois os códigos binários são substituídos por
mnemônicos. Neste caso é necessário usar um montador
(assembler ), que consiste num programa que lê o programa em
baixo nível e converte os códigos mnemônicos para opcodes .
 Linguagem de Alto Nível: é a LP mais próxima da linguagem do
homem, não requer conhecimento da arquitetura da máquina
e é portável, isto é, independente da máquina.
O que caracteriza uma 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)
Aspectos do Estudo de linguagens
Sintaxe: gramática (forma)
Semântica: significado
Processadores: 
compiladores, interpretadores, 
editores, ambientes visuais ...
Por que tantas linguagens?
Propósitos diferentes
Avanços tecnológicos
 Interesses comercias
Cultura e background científico
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.
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
em aplicações “legadas”
Modelo Computacional do Paradigma 
Imperativo
Entrada Programa Saída
Estado
Vantagens do modelo imperativo
Eficiência (embute modelo de Von Neumann)
Modelagem “natural” de aplicações do mundo 
real
Paradigma dominante e bem estabelecido
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
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)
Vantagens do Paradigma Orientado a 
objetos
Todas as do estilo imperativo
Classes estimulam projeto centrado 
em dados: modularidade, reuso e 
extensibilidade
Aceitação comercial crescente
Problemas do Paradigma OO
Semelhantes aos do paradigma 
imperativo, mas amenizadas pelas 
facilidades de estruturação
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
Conceitos sofisticados como polimorfismo,
funções de alta ordem e avaliação sob
demanda
Aplicação: prototipação em geral, IA,
concorrência, core de várias soluções ...
Modelo Computacional do 
Paradigma Funcional
Entrada Programa Saída
Visão Crítica do Paradigma Funcional
 Vantagens
Manipulação de programas mais simples:
- Prova de propriedades
- Transformação (exemplo: otimização)
- Concorrência explorada de forma natural
 Problemas
“O mundo não é funcional!”
Implementações ineficientes
Mecanismos primitivos de E/S e formatação
O Paradigma Lógico
Programas são relações entre E/S
Estilo declarativo, como no paradigma funcional
Abstração: não determinismo
Na prática, inclui características imperativas, por
questão de eficiência
Aplicações: prototipação em geral, sistemas
especialistas,banco de dados, ...
Modelo Computacional do Paradigma 
Lógico
Entrada Programa Saída
Visão Crítica do Paradigma 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.
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.
Outras Classificações
Linguagens de 1a., 2a., 3a. 4a. e 5a. gerações
Programação sequencial versus concorrente
Programação linear versus programação visual 
(visual programming) 
Metaprogramação e reflexão
Linguagens de script
...
Smalltalk C PROLOG
1980....................Ada...........DBASE-II..................................................
1990.....................................................................Haskell..........Godel...
1950........................................................................................................
FORTRAN
1960.......................ALGOL-60...........COBOL......LISP.........................
SIMULA ALGOL-68 PL/I BASIC
1970..................Pascal............................................................................
Modula-2 ML
Miranda
Eifell C++
Delphi Java Python Ruby
Imperativo Funcional LógicoOrientado a objetos
Um breve histórico
CommonLISP Erlang F#
Lua
2000...C#..............................................................................................
Um breve histórico
 Para mais detalhes, inclusive de versões das linguagens:
 http://www.levenez.com/lang/
Evolução centrada em níveis 
crescentes de abstração
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)
Evolução centrada em níveis 
crescentes de abstração
Evolução centrada em níveis 
crescentes de abstração
Evolução centrada em níveis 
crescentes de abstração
Evolução centrada em níveis 
crescentes de abstração
Evolução centrada em níveis 
crescentes de abstração
Estruturas de controle (versus jumps e 
gotos)
Estrutura de blocos como forma de 
encapsulamento
Generalização e parametrização 
(abstração de tipos de valores)
Classes, processos, aspectos, ...
Evolução centrada em níveis 
crescentes de abstração
Evolução centrada em níveis 
crescentes de abstração
Evolução centrada em níveis 
crescentes de abstração
Leitura
 Linguagens de Programação : Princípios e Paradigmas
 Capítulo 1

Continue navegando