Introdução a Programação Funcional



Documentos relacionados
Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

Introdução à Engenharia de Computação

Sistemas Operacionais

Organização de Computadores 1. Prof. Luiz Gustavo A. Martins

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 1

Representação de Algoritmos - Linguagens de Programação

Computador E/S, Memória, Barramento do sistema e CPU Onde a CPU Registradores, ULA, Interconexão interna da CPU e Unidade de controle.

Introdução à Engenharia de Computação

1 INTRODUÇÃO 1.1 CONCEITO DE PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO

Introdução à Sistemas Operacionais. Glauber Magalhães Pires

Ambiente de Simulação Virtual para Capacitação e Treinamento na Manutenção de. Disjuntores de Subestações de Energia Elétrica,

Formação de Administradores de Redes Linux LPI level 1. Aula 2 SENAC TI Fernando Costa

Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Introdução. Prof. MSc. Hugo Souza

Paradigmas de Linguagens de Programação

Breve Histórico & Conceitos Básicos

Computador Digital Circuitos de um computador (Hardware)

CONCEITOS BÁSICOS SOBRE PROGRAMAÇÃO Programação Orientada a Objetos (POO)

Problema: Solução: Vantagens da estruturação em Níveis: Introdução INTRODUÇÃO À ARQUITETURA DE COMPUTADORES. Introdução

Algoritmos e Programação Parte Teórica

Introdução a Banco de Dados Aula 03. Prof. Silvestri

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

Organização de Computadores Software

Programação Orientada a Objeto

Descrição do Produto. Altus S. A. 1

Introdução à Arquitetura de Computadores

Linguagens de Programação

Introdução à Arquitetura de Computadores IFES Campus Serra

Programação de Computadores. Turma CI-180-B. Josiney de Souza.

MATA49 Programação de Software Básico

Sistemas Operacionais. Prof. André Y. Kusumoto

Introdução à Computação: Sistemas de Computação

Paradigmas de Programação

Conceitos básicos da linguagem C

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética

Linguagem de Montagem 2. Operações e Operandos

Disciplina: Redes de Comunicação. Curso Profissional Técnico de Gestão e Programação de Sistemas Informáticos. Setembro 2013

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues

Sistemas Operacionais

LINX POSTOS AUTOSYSTEM

Carga horária : 4 aulas semanais (laboratório) Professores: Custódio, Daniel, Julio foco: introdução a uma linguagem de programação Linguagem Java

QUALIDADE DE SOFTWARE

Linguagem de Programação

Algoritmos e programação

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

Apresentação. Rio de Janeiro, 19 de fevereiro de 2002 Waldemar Celes

Algoritmos e Técnicas de

Arquitetura de Computadores Moderna

3 Revisão de Software

Casos de uso Objetivo:

Capítulo 7 Nível da Linguagem Assembly

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza

Nível do Sistema Operacional

Linguagem de Montagem

Algoritmos DCC 119. Introdução e Conceitos Básicos

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Planificação de. Aplicações Informáticas B

Linguagem de Programação Orientada a Objeto. Introdução a Orientação a Objetos Professora Sheila Cáceres

Curso de Especialização em Tecnologia da Informação. Engenharia de Software

Ementas Disciplinas Eletivas

Conceito de Rede e seus Elementos. Prof. Marciano dos Santos Dionizio

Programador Web - Pronatec

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

ESCOLA ESTADUAL IRMAN RIBEIRO DE ALMEIDA SILVA VOLMIR CARDOSO PEREIRA LUCIENE MARIA DA SILVA

No projeto das primeiras redes de computadores, o hardware foi a principal preocupação e o software ficou em segundo plano.

JavaScript (ou JScript)

Introdução sobre Scilab

Sumário. Parte I Filosofia e Modelagem Orientada a Objetos... 23

Organização de Computadores 1

5 Apresentando a linguagem C

Implementando uma Classe e Criando Objetos a partir dela

Sistemas Operacionais. Curso Técnico Integrado Profa: Michelle Nery

Plano de Trabalho Docente Componente Curricular: Desenho Auxiliado por Computador II

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova;

UNIP - UNIVERSIDADE PAULISTA. Arquitetura de computadores

2. Conceitos e Arquitetura de Bancos de Dados

Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior

ARQUITETURA DE COMPUTADORES. EMENTA Prof. Benito Piropo Da-Rin

UFRPE Prof. Gustavo Callou

Programação Funcional. Aula 5. Funções Recursivas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Figura 01 Kernel de um Sistema Operacional

Elementos da Linguagem C#

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.

Lógica para a Programação - 1º semestre AULA 01 Prof. André Moraes

Introdução às Linguagens de Programação

Conceitos Básicos sobre Sistemas Operacionais

ALGORITMOS MEMÓRIA, VARIÁVEIS E CONSTANTES, OPERADORES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br

Algoritmo e Técnica de Programação - Linguagem C

2-Introdução e Conceitos Básicos das TIC

Curso Superior de Sistemas de Telecomunicações Unidade São José. Disciplina: Síntese de Sistemas de Telecomunicações 7º Fase

Usando um Simulador da Máquina de Turing Claudio Kirner 2010

Transcrição:

UNIPAC - Universidade Presidente Antônio Carlos Departamento de Sistemas de Informação Wendell Pereira da Silva

Objetivos Gerais Iniciar os estudos sobre o paradigma da programação funcional. Construir uma base para estudos auto-motivados para disciplinas que exijam programação de computadores.

Objetivos Específicos Formalizar conceitos primários da disciplina de programação de computadores. Apresentar o paradigma da Programação Funcional, usando a linguagem Haskell, manipulando exemplos de programas elementares usando a aplicação HUGS 98 - um pequeno interpretador da linguagem Haskell.

Tópicos Abordados Linguagem de Programação - Breve Introdução. Programação Funcional - Introdução a Linguagem Haskell com o HUGS 98.

Linguagens de Programação Principal Motivação: A utilização da linguagem natural para comunicação entre seres humanos e computares e atualmente inviável devido a inúmeros fatores, dentre eles: - Ambigüidades da linguagem natural. - Alta complexidade de análise / processamento / resposta. Principal Função: Oferecer uma interface de comunicação entre o homem e a máquina (computador), estabelecendo as regras de formação de sentenças e os significados válidos.

Linguagens de Programação Múltiplos Níveis de Atuação Máquina Multínivel-Computador Nk - Máquina Virtual Mk... N3 - Máquina Virtual M3 N2 - Máquina Virtual M2 Programas Lk: interpretados por interpretador em Mi (inferior), ou traduzidos para Li de nível inferior. Programas L3: interpretados por interpretador em M2 ou M1, ou traduzidos para L2 ou L1. N1 - Máquina Virtual M1 N0 - Computador real M0 Programas L0 são executados diretamente pelos circuitos eletrônicos

Linguagens de Programação Múltiplos Níveis de Atuação Exemplo Arquitetura Exemplo 5 - Linguagem orientada para problemas 4 - Linguagem de Montagem 3 - Sistema Operacional Compilador Montador Interpretação 2 - Máquina Convencional 1 - Microprogramação 0 - Lógica digital Microprograma Hardware

Linguagens de Programação Compiladores e Interpretadores Um COMPILADOR é um programa que TRADUZ uma linguagem S (origem) para uma linguagem T (alvo). Tarefas dividida em fases distintas Código Fonte (Sentenças na Linguagem a ser Traduzida) Código Alvo Executável pela máquina de nível inferior Fase de Análise Geração de Código Léxica Sintática Fase de Síntese Otimização INTCODE Tab.Símbolos Sintaxe Abstrata

Linguagens de Programação Compiladores e Interpretadores Um INTERPRETADOR é um programa que executa cada sentença de uma linguagem S (origem) sobre uma máquina virtual M que define uma linguagem m (alvo). Sentença na linguagem sendo interpretada Execução da sentença gerada sobre a máquina (linguagem) alvo da interpretação Análise da sentença Léxica Sintática Análise Semântica Código intermediário, preparação para execução

Linguagens de Programação Características - Suporte à abstração - Facilidade no Aprendizado - Consistência - Clareza - Auto-documentável - Robustez - Manipulação de Exceções - Modularidade

Programação Funcional - Ênfase no Uso de Funções Matemáticas - Enfatiza o que fazer em vez do como fazer (programação declarativa) - Alto poder de avaliação de expressões e reconhecimento de padrões - Formalismo nas definições - Altamente auto-documentável - Modelagem bastante razoável para problemas complexos - Facilidade nas definições recursivas

Programação Funcional - Introdução ao HUGS HUGS (Haskell Users Gofer System) - interpretador da linguagem Haskell Winhugs

RUGS98 - Um Breve Sumário Técnico - Implementa um subconjunto de Haskell - Lazy Evaluation (Avaliação por demanda) - Inúmeros tipos de dados e funções predefinidas - Sistema manipulador de tipos polimórficos. - Funções de I/O sofisticadas. - Alta portabilidade-win32, UNIX, LINUX, MAC... - Leve (Pequeno) - Garbage Collector (coleta de lixo automática) - Modular - Funciona em modo read-eval-print - Interface Gráfica

Testando Algumas Características do HUGS O primeiro módulo que Hugs carrega é `PRELUDE.HS`. Nele podemos encontrar as primitivas básicas que esse sistema provê. O Prompt do HUGS permanece em: Prelude> indicando que está pronto para ser usado.

Comandos do Interpretador Existem vários comandos que o interpretador pode executar. Certamente, para os nossos propósitos, os comandos :load, :reload, :edit, :quit serão os mais usados para a carregar os programas que elaborarmos. Uma lista completa dos comandos é apresentada com :?

Arquivos do Interpretador Formato texto - Código Fonte da Linguagem Extensões Default (padrões):.hs - Haskell Source.lhs - Literate Haskell Source

Identificadores Os identificadores são os nomes definidos pelo programador, ou seja, não é definido como uma palavra-reservada e/ou símbolo reservado da linguagem. Exemplos: nome1, v1, x, funcaox, funcaox Note que funcaox e funcaox são identificadores distintos em Haskell, o que significa que Haskell é case sensitive (sensível ao caso: maiúscula/maiúscula)

Tipos de dados Os tipos de dados definem classes de dados. Exemplo de tipos básicos: UNIPAC :: String 1234 :: Integer True :: Bool [1,2,3,4,5] :: [Integer]

Exercícios... Pesquisar sobre Haskell. dica de site: http://www.haskell.org Tarefas - O que é Haskell? - Onde Haskell tem sido utilizada? - Ler o artigo A Gentle Introduction To Haskell.

Bibliografia TANENBAUM, Andrew S. Organização Estruturada de Computadores, São Paulo 3ª. Edição Prentice/Hall do Brasil 1995 A Gentle Introdution to Haskell - http://www.haskell.org HUGS For Beginners - http://www.hugs.org