BC0505 Processamento da Informao BC T Universidade Federal
BC-0505 Processamento da Informação BC & T Universidade Federal do ABC
Hardware Versus Software 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
Classificação Geral de Software Tipo de Serviço Realizado • Tipos de software: • Software de sistema, ou sistema operacional • Software aplicativo • Editores de texto: Word, Word. Perfect, etc • Planilhas eletrônicas: Excel, Lotus 123, Quatro. Pro, etc • Apresentação: Power. Point, etc • Desenho: Corel. Draw, etc
Classificação Geral de Software Sistema Operacional (SO) 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
Classificação Geral de Software Sistema Operacional (SO) • 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
Classificação Geral de Software Aplicativo • Software aplicativo: programas desenvolvidos ou adquiridos pelos usuários para algum fim específico. Podem ser de natureza: • profissional, • educacional ou • mesmo de lazer;
Software Versus Programa 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 Definição 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 computador, fazendo com que ele compreenda e execute o que o programador determinar;
Linguagens de Programação Sintaxe e Semântica Uma linguagem (natural ou de programação) é formada por: • • Sintaxe • Semântica
Linguagens de Programação 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
Linguagens de Programação Sintaxe 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
Linguagens de Programação Sintaxe • 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 10
Linguagens de Programação Sintaxe Considere o comando para a criação e declaração de uma variável, em Java Int idade; Erro: 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
Linguagens de Programação Sintaxe 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 encontrará mais rapidamente; •
Linguagens de Programação 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
Linguagens de Programação Semântica • 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
Linguagens de Programação Semântica • 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
Linguagens de Programação Classificação • 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)
Linguagens de Programação Linguagem de Máquina-1ª 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;
Linguagens de Programação Linguagem de Máquina/Representação • Instruções de linguagem de máquina são representadas por códigos na forma de palavras binárias. Por exemplo: • 010001110101000010010 101. . .
LINGUAGEM DE MÁQUINA – HEXADECIMAL Exemplo de programa em hexadecimal
Linguagens de Programação Linguagem de Máquina/Representação Execução direta pela máquina, sem tradução
Linguagens de Programação Linguagem de Máquina/Hexadecimal • Linguagem Hexadecimal: seqüência de bits pode ser representada por números hexadecimais • Notação em hexadecimal • 10110000001 b = B 001 h Programação impraticável para escrita e leitura (mesmo com hexadecimal). . . O que fazer? ?
Linguagens de Programação Linguagem Assembly - 2ª Geração • 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 R 1, R 2 • mnemônico MOV (abreviação de MOVE) • dois registradores como parâmetros: R 1 e R 2 • processador comanda o movimento do conteúdo de R 2 para R 1 • equivalente à instrução Java R 1 = R 2;
Linguagens de Programação Linguagem Assembly (de Montagem) ADD R 1, R 2 • mnemônico ADD (abreviação de ADDITION) • dois registradores como parâmetros: R 1 e R 2 • processador comanda a adição do conteúdo de R 1 ao conteúdo de R 2 e o resultado é armazenado em R 1 • equivalente à instrução em Java R 1=R 1+R 2; • 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;
Linguagens de Programação Linguagem Assembly (de Montagem) • 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
Linguagens de Programação Linguagem Assembly (de Montagem) • 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 x 86 processador Pentium suporta o assembly do 80486, que suporta o do 80386. . . ;
Linguagens de Programação Linguagem Assembly (de Montagem) • 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 Programação Linguagens de Alto Nível-(3ª Geração) • 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 Hello. World { public static void main (String[] args) { System. out. println (“Hello. World”); } }
Linguagens de Programação Linguagens de Alto Nível 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; •
Linguagens de Programação Linguagens de Alto Nível • Algumas linguagens de programação, e o ano em que foram desenvolvidas:
Visão geral do histórico das linguagens
Linguagens de Programação Linguagens de Alto Nível • 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
Linguagens de Programação Linguagens de Muito Alto Nível-(4ª Geração) • 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 Programação Linguagens de Muito Alto Nível Linguagens de Consulta As linguagens de consulta foram desenvolvidas para manipular bases de dados. Exemplo: linguagem SQL Apresenta os dados campos nome e telefone da tabela Funcionario: select nome, telefone FROM Funcionario;
Linguagens de Programação Processamento de Linguagens 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 Hello. World { public static void main (String[]args) { System. out. println(“Hello. World”); } } Linguagem de Máquina (Código Executável) Execução
Linguagens de Programação Processamento de Linguagens 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 Hello. World { public static void main (String[]args) { System. out. println(“Hello. World”); } } Linguagem de Máquina (Código Executável) Execução
Linguagens de Programação Processamento de Linguagens 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;
Linguagens de Programação Interpretação 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 Hello. World{ 2. public static void main(String[] args) { Execução linha 1 Execução linha 2
Linguagens de Programação Interpretação 1. class Hello. World{ 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)
Linguagens de Programação Interpretação • 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
Linguagens de Programação Interpretação • 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
Linguagens de Programação Interpretação Estas análises são feitas em todo o código fonte, para depois gerar o código executável class Hello. World { public static void main (String[]args) { System. out. println(“Hello. World”); } }
Linguagens de Programação Interpretação 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 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
Linguagens de Programação Compilação • 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;
Linguagens de Programação Compilação • 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
Linguagens de Programação Compilação versus Interpretação A linguagem HTML(Hyper. Text Markup Language) é compilada ou interpretada?
EXECUÇÃO Java é uma linguagem compilada e interpretada Código Fonte Hello. World. java Compilador javac. exe Arquivo em bytecode Hello. World. class Windows Java Virtual Machine (java. exe) Interpretador Linux Unix. . .
BYTECODE (*. CLASS) Bytecode existe para garantir a portabilidade na linguagem Java Código Fonte Hello. World. 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, Hello. World. class por exemplo, para a criação de aplicações para a Internet
BYTECODE (*. CLASS) A compilação ocorre apenas uma vez Java Bytecode Plataforma Java para Unix Java platform for 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 Hello. World. java Compilador javac. exe. . . Arquivo em bytecode Hello. World. 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?
Paradigmas de Programação • 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 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 (num 1) leia (num 2) se (num 1 > num 2) então imprima (num 1) senão imprima (num 2 é igual ou maior a num 1)
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 (num 1) leia (num 2) se (num 1 > num 2) então imprima (num 1) senão imprima (num 2 é igual ou maior a num 1)
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 n 1 + n 2 (+ n 1 n 2) 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
Paradigmas de Programação Paradigma Declarativo, ou Lógico • 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). mortal(X): -homem(X). %Socrates é um homem % 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
Paradigmas de Programação Orientação a Objetos • 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 idade lingua andar() respirar() alimentar() falar()
Paradigmas de Programação Orientação a Objetos 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()
Paradigmas de Programação Linguagens Respectivas Linguagem de Máquina FORTRAN BASIC COBOL ALGOL APL LISP ML C IMPERATIVAS PASCAL Scheme GPSS Prolog SIMULA C++ Smaltalk ADA FUNCIONAIS DECLARATIVAS OU LÓGICAS Ada 95 Java ORIENTADAS A OBJETOS
- Slides: 75