Introdução – Linguagens

Propaganda
BC & T
Universidade Federal do ABC
Hardware está associado à
parte física do sistema (os
circuitos e dispositivos) que
suporta o processamento da
informação
Software corresponde ao conjunto
de programas responsáveis pelo
controle do sistema para a
execução das tarefas consideradas
•Tipos de software:
• Software de sistema, ou sistema operacional
• Software aplicativo
•Editores de texto: Word, WordPerfect, etc
•Planilhas eletrônicas: Excel, Lotus 123,
QuatroPro, etc
•Apresentação: PowerPoint, etc
•Desenho: CorelDraw, etc
Um Sistema Operacional
(SO) é uma camada de
software colocada entre
o hardware e os
programas aplicativos e
o usuário. Sua função
principal é controlar o
funcionamento do
computador, como um
gerente dos diversos
recursos disponíveis no
sistema
Editor de Texto
Planilha Eletrônica
Jogos
Compiladores
Sistema Operacional
Hardware
• Funções Básicas de um Sistema Operacional:
• Comunicação usuário x computador
• Gerenciamento do hardware
• Manutenção e gerenciamento dos sistemas de
arquivos
• Exemplos de SOs:
• Windows
• Linux
• MS-DOS
• Unix
• Macintosh, Solaris, OS/2
•
Software aplicativo: programas
desenvolvidos ou adquiridos pelos
usuários para algum fim específico.
Podem ser de natureza:
• profissional,
• educacional ou
• mesmo de lazer;
E como são construídos/desenvolvidos
softwares?
Software corresponde ao conjunto de programas
responsáveis pelo controle do sistema para a
execução das tarefas consideradas
No dia-a-dia os termos software e
programa são usados como
sinônimos
Linguagens de programação são
utilizadas para a construção de
programas em computadores
• Linguagem de Programação pode ser definida
como:
• conjunto limitado de símbolos e comandos,
utilizados para criar programas,
• por meio dela se estabelece uma
comunicação com o computador, fazendo
com que ele compreenda e execute o que o
programador determinar;
Uma linguagem (natural ou de
programação) é formada por:
•
• Sintaxe
• Semântica
Sintaxe determina regras de como se escreve de
forma correta em uma linguagem (regras de escrita)
Os seguintes países fazem parte
do Mercosul: Brasil, Argentina,
Paraguai, Uruguai e Venezuela
Frase
sintaticamente
correta
O Brasil está localizado na
América Central
Frase
sintaticamente
correta
Os serguintes países faz parte do
Mercosul: Brasil, Argentina,
Paraguai, Uruguai e Venezuela
Frase
sintaticamente
incorreta
 Se você escrever a palavra “seguintes" com a letra
"r" (serguintes), este é um erro sintático
 Se você não conjugar o verbo com o sujeito em
uma frase, terá um outro erro sintático
Em linguagem natural a sintaxe
é conhecida como Gramática
• Considere o comando para a criação e
declaração de uma variável, em Java
int idade;
• Considere o comando para a atribuição
de valor à uma variável, em Java
• idade = 10;
Estes comandos estão sintaticamente
corretos, na linguagem de
programação Java
idade
idade
10
 Considere o comando para a criação e declaração
de uma variável, em Java
Int idade;
Erro: Int
int idade
Erro: Falta ;
• Considere o comando para a atribuição de valor à
uma variável, em Java
•idade := 10;
Erro: :=
•idade = 10
Erro: Falta ;
Estes comandos estão sintaticamente
incorretos, na linguagem de programação
Java
Durante o início do aprendizado de
uma linguagem de programação, é
natural demorar muito tempo
procurando erros de sintaxe,
• Conforme o programador ganhar
experiência, entretanto, cometerá
menos erros e os encontrará mais
rapidamente;
•
 Semântica estuda o significado das palavras ou
frases
Semanticamente
corretas
 Considere as frases:
- O Sol é uma estrela
- Na Física Quântica há o
conceito de superposição
- Aquela manga é
azul
- Vi uma pessoa
no parque com
binóculo
- Tem dia que de noite é
assim mesmo
- Pá daqui, pá dali
Depende...
Semanticamente
incorretas
• Considere os comandos, em Java
•int idade;
•idade = 10;
Comandos sintática
e semanticamente
corretos
• Considere os comandos, em Java
•int idade;
•idade = 10.7;
Comando de atribuição
semanticamente
incorreto
• Há erros de semântica relacionados ao
raciocínio/lógica do programa,
• Para este tipo de erro, o programa vai executar
com sucesso, no sentido de que o computador não
irá gerar quaisquer mensagens de erro,
• Mas ele não fará a coisa certa. Fará exatamente o
que o programador mandar
• A proximidade que a linguagem de
programação tem com a humana determina
sua classe (o nível):
• Linguagem de máquina (primeira geração)
• Linguagem assembly - de montagem
(segunda geração)
• Linguagem de alto nível (terceira geração)
• Linguagem de muito alto nível (quarta
geração)
• Linguagem de máquina é o código que o
computador executa diretamente,
• É composta de 0´s e 1´s, e neste caso é
conhecida como linguagem binária,
• A linguagem de máquina é escrita de acordo
com as características de um determinado
processador,
• Por isto é totalmente dependente do hardware, e
do fabricante do processador;
• Instruções de linguagem de máquina são
representadas por códigos na forma de
palavras binárias. Por exemplo:
•0100010100011101010101000010010
101...
LINGUAGEM DE MÁQUINA – HEXADECIMAL
Exemplo de programa em hexadecimal
Execução direta pela
máquina, sem
tradução
• Linguagem Hexadecimal: seqüência de
bits pode ser representada por números
hexadecimais
•Notação em hexadecimal
• 1011000000000001b = B001h
Programação impraticável para escrita e
leitura (mesmo com hexadecimal)... O
que fazer??
• A linguagem assembly (linguagem de montagem)
permite que o programador utilize nomes (chamados
mnemônicos) e símbolos em lugar dos números,
• Utiliza palavras abreviadas (mnemônicos) indicando
operações
•MOV R1, R2
• mnemônico MOV (abreviação de MOVE)
• dois registradores como parâmetros: R1 e R2
• processador comanda o movimento do conteúdo de R2
para R1
• equivalente à instrução Java R1 = R2;
ADD R1, R2
• mnemônico ADD (abreviação de ADDITION)
• dois registradores como parâmetros: R1 e R2
• processador comanda a adição do conteúdo de R1 ao
conteúdo de R2 e o resultado é armazenado em R1
• equivalente à instrução em Java R1=R1+R2;
•Simplificações da linguagem assembly:
• escolhe nomes descritivos para as posições de
memória,
• usa mnemônicos para representar códigos de
operação;
• A conversão da linguagem assembly para a
linguagem de máquina se chama montagem
• E é feita por um programa chamado montador
(ou assembler)
Linguagem de
Montagem
(Assembly)
Programa Montador
(Assembler)
Linguagem
de Máquina
• A linguagem assembly é também única
para cada tipo de CPU (processador),
• Utiliza instruções de baixo nível que
operam com registros e memórias
diretamente,
• Não pode ser reutilizada em famílias de
processadores diferentes,
• Famílias geralmente mantém um certo
nível de interoperabilidade
•Família x86 processador Pentium
suporta o assembly do 80486, que
suporta o do 80386...;
• Aplicações para a linguagem assembly:
• Controle de processos com resposta em tempo real
• devido à possibilidade de gerar programas mais
eficientes
• Comunicação/transferência de dados:
• devido à possibilidade de acessar diretamente o
hardware
• Otimização de sub-tarefas da programação de alto
nível
• um programa não precisa somente ser escrito em
linguagem assembly ou linguagem de alto nível
• Linguagens de alto nível apresentam
uma sintaxe mais próxima da linguagem
natural ,
• Usam palavras reservadas extraídas do
vocabulário corrente (int, public, if, ...)
class HelloWorld
{
public static void main (String[] args) {
System.out.println (“HelloWorld”);
}
}
Permitem a manipulação dos dados nas
mais diversas formas:
• números inteiros,
•reais,
•matrizes, etc...
• A linguagem assembly trabalha com bits
e bytes, armazenados em memória;
•
• Algumas linguagens de programação, e o ano em
que foram desenvolvidas:
• Os programas escritos nessas linguagens são
convertidos para a linguagem de máquina através
de um programa compilador, ou de um
interpretador
Linguagem de
Alto Nível
Compilador ou
interpretador
Linguagem
de Máquina
• As linguagens de quarta geração têm uma
estrutura mais próxima da linguagem humana do
que as linguagens de programação de alto nível
• Definem “o que” deve ser feito, e não “como”
deve ser feito
• Como exemplo de linguagens de quarta geração
tem-se:
• linguagens de consulta a banco de dados,
• linguagens de prototipação (ferramentas
case);
Linguagens de Consulta
As linguagens de consulta foram desenvolvidas para
manipular bases de dados. Exemplo: linguagem SQL
Apresenta os dados dos campos nome e telefone da tabela
Funcionario:
select nome, telefone FROM Funcionario;
Computadores atuais são capazes de executar
somente programas em uma linguagem de nível
baixo, a linguagem de máquina
Linguagem de
Alto Nível
(Código Fonte)
Análise sintática
e semântica
class HelloWorld
{
public static void main
(String[]args)
{
System.out.println(“HelloWorld”);
}
}
Linguagem de
Máquina
(Código
Executável)
Execução
Como fazer esta tradução? Do código
fonte para o código executável?
Linguagem de
Alto Nível
(Código Fonte)
Análise sintática
e semântica
class HelloWorld
{
public static void main
(String[]args)
{
System.out.println(“HelloWorld”);
}
}
Linguagem de
Máquina
(Código
Executável)
Execução
Compilação e interpretação são
os processos pelos quais o código
fonte é traduzido em código de
máquina
Há ainda a possibilidade de uma
mescla das duas (em um sistema
híbrido), como é o caso da
linguagem Java;
Código Fonte
Análise sintática
e semântica
Código
Executável
Zeros e uns...
Estas análises são feitas em cada linha
por vez
1. class HelloWorld{
2. public static void
main(String[] args) {
Execução linha 1
Execução linha 2
1. class HelloWorld{
Execução linha 1
2. public static void
main(String[] args) {
Execução linha 2
• As ações indicadas pelos comandos da
linguagem são diretamente executadas
• Existe, para executar cada ação possível, um
subprograma (escrito na linguagem de máquina do
computador hospedeiro)
• Um interpretador é um programa que
executa repetidamente a seguinte
seqüência:
• Obter o próximo comando do programa
• Determinar que ações devem ser
executadas
• Executar estas ações
• Características do processo de interpretação:
• Não gera um arquivo de código executável
• Toda a vez que for executar o programa, terá
que ler o código fonte
• É necessário ter o interpretador na máquina
onde o código fonte foi desenvolvido, bem
como onde o código fonte será executado
• É independente de plataforma
Código Fonte
Análise sintática
e semântica
Estas análises são feitas em todo o
código fonte, para depois gerar o
código executável
class HelloWorld
{
public static void main
(String[]args) {
System.out.println(“HelloWorld”);
}
}
Código
Executável
Zeros e uns...
Código Fonte
Análise sintática
e semântica
Código
Executável
Zeros e uns...
Programas escritos em linguagem de alto nível
são compilados para versões equivalentes em
linguagem de máquina, antes de serem
executados
INTERPRETAÇÃO
Vantagens
Desvantagens
Não gera um arquivo de código
executável; é comum que gere
bytecode
Toda vez que for executar o
programa, terá que ler o código fonte.
É independente de plataforma
(desde que o próprio
interpretador tenha sido
portado)
Quando comparada com a
compilação, a primeira vez da
execução de uma interpretação é
mais rápida. Mas as demais
execuções serão mais lentas
É necessário ter o interpretador na máquina onde o código fonte foi
desenvolvido, bem como onde o código fonte será executado
• Características do processo de compilação:
• A primeira vez que for executar um
programa será relativamente demorado,
pois será necessário compilá-lo,
• Mas nas próximas execuções, será mais
rápido
• Gera código executável,
• Como gera o executável, não é
necessário recompilar novamente para
executar o programa;
• Características do processo de compilação
(cont):
• É preciso ter um compilador na máquina
onde se desenvolve o programa, mas
não onde ele é executado
• É dependente de plataforma, pois o
código fonte gerado é preparado para
rodar em uma plataforma específica
(Windows, Linux, Apple, etc)
COMPILAÇÃO
Vantagens
Desvantagens
Gera código executável
Como gera o executável, não é
necessário recompilar
novamente para executar o
programa
A primeira vez que for executar
um programa será relativamente
demorado, pois será necessário
compilá-lo. Mas nas próximas
execuções, será mais rápido
É dependente de plataforma, pois o
código de máquina gerado é
preparado para rodar em uma
plataforma específica
COMPILAÇÃO
Vantagens
É preciso ter um compilador na
máquina onde se desenvolve o
programa, mas não onde ele é
executado
Desvantagens
A linguagem HTML(HyperText Markup
Language)
é compilada ou interpretada?
EXECUÇÃO
Java é uma linguagem compilada e interpretada
Código Fonte
HelloWorld.java
Compilador
javac.exe
Arquivo em
bytecode
HelloWorld.class
Windows
Java Virtual
Machine
(java.exe)
Interpretador
Linux
Unix
.....
BYTECODE (*.CLASS)
Bytecode existe para
garantir a portabilidade na
linguagem Java
Código Fonte
HelloWorld.java
Compilador
javac.exe
 O Bytecode gerado pode ser
transportado entre plataformas
distintas que suportam Java
Arquivo em
(Solaris, Linux, Windows, etc)
bytecode
 Esta portabilidade é importante,
HelloWorld.class
por exemplo, para a criação de
aplicações para a Internet
BYTECODE (*.CLASS)
A compilação ocorre apenas uma vez
Java
Bytecode
Java
Bytecode
Java
Bytecode
Java
Bytecode
Plataforma
Java para
Unix
Java
platform
for Unix
Unix
Workstation
Plataforma
Java para
Macintosh
Java
platform
for Unix
Plataforma
Java para
Windows
Java
platform
for Unix
PC Rodando
Windows
Plataforma
Java para
OS/2
Java
platform
for Unix
PC Rodando
OS/2
Macintosh
Código Fonte
HelloWorld.java
Compilador
javac.exe
. . . Arquivo
em
bytecode
HelloWorld.class
JAVA – INTERPRETAÇÃO
JAVA – COMPILAÇÃO E INTERPRETAÇÃO
JAVA – COMPILADORES JIT
 As primeiras JVM apenas interpretavam. E
por isto eram lentas
 Um programa Java típico era 10 vezes mais
lento do que um programa compilado em
código nativo
Foram criados compiladores que rodam em
tempo de execução (em conjunto com a JVM),
denominados Just-In-Time (JIT)
Os JITs traduzem/compilam partes de Bytecodes
em código de máquina
JAVA – COMPILADORES JIT
 As JVMs atuais analisam os Bytecodes à medida
que são interpretados
 Procuram trechos que são executados com maior
freqüência (hot spots)
 Um compilador JIT traduz os hot spots para
linguagem de máquina nativa
 Quando a JVM encontra estas partes compiladas
(hot spots), a execução é mais rápida
PARADIGMAS DE PROGRAMAÇÃO
Paradigmas de programação são maneiras de pensar
utilizados pelos programadores para conceber um
programa.
Um paradigma é um padrão conceitual que orienta
soluções de projeto e implementação, direcionando a
resposta a questões tais como:
O que é um programa?
Como são modelados e escritos?
• Um paradigma determina a visão que o
programador tem da execução de um programa
• Os paradigmas mais conhecidos são:
• Paradigma estruturado, ou imperativo
• Paradigma funcional
• Paradigma declarativo, ou lógico
• Paradigma orientado a objetos
PARADIGMA ESTRUTURADO, IMPERATIVO
 Primeiro paradigma a surgir, e ainda é o dominante
 Implementado com base na máquina de Von Neumann
Unidades
de
Entrada
Entrada
Dados
- Memória
-Processamento
de Dados
Programa
Estado
Unidades
de Saída
Resultados
Saída
PARADIGMA ESTRUTURADO, IMPERATIVO
Entrada
Programa
Saída
Estado
(3) Executa a ação
inicialmente solicitada
(1) Busca próxima
instrução
(2) Decodifica a
instrução
PARADIGMA ESTRUTURADO, IMPERATIVO
 O programador descreve a resolução de um
problema através de uma série de tarefas
elementares (comandos), que o computador pode
compreender e executar
leia (num1)
leia (num2)
se (num1 > num2)
então
imprima (num1)
senão
imprima (num2 é igual ou maior a num1)
PARADIGMA ESTRUTURADO, IMPERATIVO
 Ao final, a seqüência de comandos define a
resolução do problema
 A programação é dada por uma seqüência de
comandos que manipula um volume de dados
leia (num1)
leia (num2)
se (num1 > num2)
então
imprima (num1)
senão
imprima (num2 é igual ou maior a num1)
PARADIGMA ESTRUTURADO, IMPERATIVO
 Vantagens do paradigma imperativo:
• Modelagem “natural” de aplicações do mundo real
• Paradigma dominante e bem estabelecido
 Desvantagens do paradigma imperativo:
• o gap semântico é maior;
• Freqüentemente gera sistemas difíceis de serem
mantidos:
• As funções têm que conhecer a estrutura dos dados;
• Mudanças na estrutura dos dados acarreta alteração em todas
as funções relacionadas.
PARADIGMA ESTRUTURADO, IMPERATIVO
 Exemplos de linguagens que suportam o paradigma
imperativo:
 Fortran
C
 Perl (*)
 Python (*)
 Pascal
 Lisp (*)
(*) Também suportam outros paradigmas
PARADIGMA FUNCIONAL
 Qualquer computação é formulada em termos de
funções
n1 + n2
(+
n1
n2)
 Funções são aplicadas aos parâmetros, e retornam
um valor
 As variáveis são os parâmetros formais das funções
PARADIGMA FUNCIONAL
 Exemplo da média de uma sequência de números:
Divide( Soma(Numeros), Conta(Numeros) )
PARADIGMA FUNCIONAL
 Exemplos de linguagens que suportam o paradigma
funcional:
 LISP (*)
 Haskell
 Miranda
 ML – Meta Language
 Ocaml
 Erlang
(*) Lisp suporta vários paradigmas
• No paradigma declarativo são declarados os
resultados desejados, e não os procedimentos
para se chegar ao resultado,
• A partir disto o sistema deve encontrar o caminho
para chegar até o resultado esperado,
• Programar é fornecer dados da seguinte
natureza:
• axiomas (fatos incondicionais)
• regras para derivação de outros fatos, para
fazer perguntas ao computador
PARADIGMA LÓGICO
 Cenário: Um computador que responda perguntas
como se fosse um ser inteligente
 Perspectiva de um paradigma baseado no
raciocínio: o que se quer, em vez de como atingi-lo
 No paradigma lógico, programar é fornecer dados
da seguinte natureza:
 axiomas, que indicam alguns fatos sobre o
mundo
 regras para derivação de outros fatos
(inferência)
PARADIGMA LÓGICO
No modo de programação
homem(socrates).
%Socrates é um homem
mortal(X):-homem(X). % Todos os homens são
% mortais
No modo de pergunta (execução)
?- mortal(socrates).
Yes
O programa deve ter um grande volume de
informações, denominados de fatos, para que o
sistema chegue à solução
PARADIGMA LÓGICO
 Exemplos de linguagens que suportam o paradigma
lógico:
 Prolog
 GPSS
 Mercury (*)
(*) Mercury também suporta programação
funcional
• O programa é organizado em função de objetos,
• Objeto é uma entidade independente com uma
identidade e certas características próprias,
• Um objeto contém não só as estruturas de dados,
mas também as funções que sobre eles agem;
nome
nome
idade
lingua
idade
lingua
andar()
respirar()
alimentar()
falar()
andar()
respirar()
alimentar()
falar()
A comunicação entre objetos é feita através de
troca de mensagens
Ola João!! Como você
nome=Ita
está?
idade=39
lingua=Tupi/Port.
Nome=Joao
andar()
respirar()
alimentar()
falar()
idade=37
lingua=Port.
andar()
respirar()
alimentar()
falar()
Linguagem
de Máquina
FORTRAN
BASIC
COBOL ALGOL APL
LISP
ML
C
ADA
PASCAL
Scheme
GPSS
Prolog
SIMULA
C++
Smaltalk
IMPERATIVAS
FUNCIONAIS
DECLARATIVAS
OU LÓGICAS
Ada 95
Java
ORIENTADAS A
OBJETOS
Download