Introdução a Linguagens de Programação



Documentos relacionados
LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

Curso Técnico em Redes

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Introdução. Sumários. Objectivos da cadeira. História das linguagens de programação. Classificação das Linguagens de programação

1. NÍVEL CONVENCIONAL DE MÁQUINA

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas)

Paradigmas de Programação

Linguagens de Programação. Introdução. Carlos Bazilio

Algoritmos. Cláudio Barbosa

INF1621 Linguagens de Programação I

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

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

MC-102 Aula 01. Instituto de Computação Unicamp

Organização de Computadores Software

Organização e Arquitetura de Computadores I. de Computadores

O Hardware e o Software do Computador

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Linguagens de. Aula 01. Profa Cristiane Koehler

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

Programação de Computadores III

Introdução à Programação de Computadores

Engenharia de Software

Paradigmas de Linguagens de Programação

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

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

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

1.1. Organização de um Sistema Computacional

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

Sistemas Operacionais

AULA 3 Introdução ao Software

ALP Algoritmos e Programação. . Linguagens para Computadores

ECO039 Linguagens Formais

Fonte (livro-texto): Conceitos de Linguagens de Programação, 4ed. Robert W. Sebesta

EMENTAS DAS DISCIPLINAS

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

Projeto Pedagógico do Bacharelado em Ciência da Computação. Comissão de Curso e NDE do BCC

Conteúdo Programático de PHP

Computador Máquina que processa uma grande quantidade de dados com rapidez e precisão.

Programação de Computadores

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Nesta aula... Analisamos na ultima aula a evolução e caraterísticas de computadores e linguagens de programação. Nesta aula iremos ver:

Introdução a Informática. Prof.: Roberto Franciscatto

FundamentosemInformática

Disciplina: Organização de computadores

Noções de. Microsoft SQL Server. Microsoft SQL Server

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Algoritmos e Programação I

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

Prof. Marcelo Machado Cunha

Disciplina: Introdução à informática Profª Érica Barcelos

Figura 1 - O computador

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1.

Paradigmas de Linguagens de Programação. Aspectos Preliminares

COMPILADORES E INTERPRETADORES

Lição 1 Introdução à programação de computadores

Banco de Dados. Uma coleção de dados relacionados [ELMASRI/NAVATHE]

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

O modelo do computador

Everson Scherrer Borges João Paulo de Brito Gonçalves

Softwares de Sistemas e de Aplicação

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

3. O NIVEL DA LINGUAGEM DE MONTAGEM

UNIVERSIDADE FEDERAL DA BAHIA INSTITUTO DE MATEMATICA DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO LINGUAGENS DE APLICAÇÃO COMERCIAL SILAS QUEIROZ SILVA

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Resolução de problemas e desenvolvimento de algoritmos

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

Abstrações e Tecnologias Computacionais. Professor: André Luis Meneses Silva /msn: andreluis.ms@gmail.com Página: orgearq20101.wordpress.

Introdução à Lógica de Programação

Wilson Moraes Góes. Novatec

Parte II Introdução a Linguagens de Programação

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Conceitos básicos de programação

Sistemas Operacionais Introdução. Professora: Michelle Nery

Figura 01 Kernel de um Sistema Operacional

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Introdução. Paradigmas de Linguagens de Programação. Heloisa de Arruda Camargo. Motivos para estudar os conceitos de linguagens de programação

O que veremos nesta aula? Principais Aspectos de Sistemas Operacionais. Visão geral de um sistema computacional

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

1

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Roteiro. Arquitetura. Tipos de Arquitetura. Questionário. Centralizado Descentralizado Hibrido

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Introdução aos Computadores

16/09/2012. Agenda. Introdução. Introdução. Tipos de Software (Básico) Tipos de Software. Curso Conexão Noções de Informática

Introdução à Engenharia de Computação

Sistemas Operacionais. Conceitos de um Sistema Operacional

Arquiteturas RISC. (Reduced Instructions Set Computers)

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

ICC Introdução para JavaScript

Conceitos de Banco de Dados

EMENTAS DAS DISCIPLINAS

ESTUDO SOBRE AS LINGUAGENS DE PROGRAMAÇÃO HOSPEDEIRAS SUPORTADAS PELA FERRAMENTA HTML. Aluno: Rodrigo Ristow Orientador: Wilson Pedro Carli

Arquitetura dos Sistemas de Informação Distribuídos

Transcrição:

Introdução a Linguagens de Programação Prof a.dra.thatyana de Faria Piola Seraphim Universidade Federal de Itajubá thatyana@unifei.edu.br

Dados Importantes O material com todas as informações referentes à disciplina, podem ser encontrados na página: Datas Importantes: Nota: http://www.thatyana.unifei.edu.br Prova 01 25/09. Prova 02 13/11. Substitutiva 27/11. P1+P2 2

Referências Bibliográcas Allen B. Tucker; Robert E. Noonan. Linguagens de Programação: Princípios e Paradigmas. McGrawHill. 2 a Edição. Marcus Vinícius Midena Ramos; João José Neto; Ítalo Santiago Vega. Linguagens Formais: Teoria, Modelagem e Implementação. Editora Bookman. 2009. Harry R. Lewis; Christos H. Papadimitriou. Elementos da Teoria da Computação. Editora Bookman. 2 a Edição. Paulo Blauth Menezes. Linguagens Formais e Autômatos. Editora Bookman. 5 a Edição. Michael Sipser. Introduçao à Teoria da Computação. Editora Thompson. 2 a Edição. Tiarajú Asmuz Diverio; Paulo Blauth Menezes. Teoria da Computação: Máquinas Universais e Computabilidade. Editora Bookman. 2 a Edição.

Tópicos da Disciplina Programação Imperativa Programação Orientada a Objetos Programação Funcional Programação Lógica Programação Orientada a Eventos Programação Concorrente

Introdução O estudo dos princípios e fundamentos de linguagens de programação é essencial para qualquer prossional de programação. É a partir desse estudo que as características especícas de cada linguagem podem ser identicadas, permitindo que programas sejam desenvolvidos. Características desejáveis para linguagens de programação podem ser identicadas e cuidadosamente descritas, para serem incorporadas às linguagens novas ou já existentes. Assim como ocorre com as linguagens naturais (português, inglês, etc.), as linguagens de programação permitem seu estudo partindo de dois extremos opostos: Poliglota iletrado. Linguista teórico.

Introdução Poliglota Iletrado É uente em diversos idiomas. É um iletrado em assuntos de linguística. Assim, é incapaz de abstrair e generalizar as estruturas linguísticas presentes nos diversos idiomas que ele domina. Para um poliglota iletrado aprender um novo idioma é sempre difícil e penoso. O poliglota iletrado é prático.

Introdução Linguista Teórico Entende muito bem as estruturas linguísticas presentes em qualquer idioma. O que lhe possibilita apreciar essas estruturas em diferentes idiomas, sejam eles, conhecidos ou ainda por conhecer. Estuda essas estruturas e teoriza a respeito delas. Entretanto, é incapaz de utilizar confortavelmente os idiomas estudados em uma conversação uente. Se restringe a ser teórico.

Introdução Programação de Computadores Poliglota iletrado: consegue programar utilizando diversas linguagens, mas tem diculdades para explorar de forma eciente os recursos especícos oferecidos por aquelas linguagens. Linguista teórico: consegue explicar e analisar cada um dos recursos especícos de cada linguagem de programação; porém, sente grande diculdade em programar em qualquer linguagem. O objetivo desta disciplina é apresentar e estudar os principais paradigmas de programação através das linguagens.

Introdução Para armazenar um algoritmo na memória do computador e para que ele possa comandar as operações a serem executadas é necessário que ele seja programado. O algoritmo deve ser escrito para uma linguagem que o computador possa entender. Os computadores só podem executar diretamente os algoritmos escritos em linguagem de máquina. Linguagem de Máquina: é um conjunto de instruções capazes de ativar diretamente os dispositivos eletrônicos do computador.

Introdução A linguagem de máquina tem vários inconvenientes: é diferente para cada tipo de computador, pois depende de sua arquitetura; é extremamente rudimentar e exige que, mesmo as operações mais simples ainda sejam renadas, para expressá-las em termos de registros, acumuladores e outros dispositivos da máquina; a linguagem de máquina é expressa em forma numérica (binária ou hexadecimal), o que a torna pouco expressiva para alguns usuários. Nos primeiros computadores, a linguagem de máquina era a única opção para a programação. Logo surgiu a idéia de escrever programas em linguagem simbólica, conhecida também como Linguagem Assembly ou linguagem montadora.

Introdução Na Linguagem Assembly as instruções não são expressas apenas por números, mas também por letras e símbolos. O posicionamento dos dados e instruções na memória é também feito de forma simbólica. Para controlar o computador, um programa em Assembly, deve primeiro ser transformado em linguagem de máquina. Programa Montador ou Assembly : programa que transforma cada comando da linguagem Assembly em um comando da linguagem de máquina. Com o sucesso da linguagem Assembly, os primeiros pesquisadores criaram linguagens em que a programação era feita através de uma notação matemática e de algumas palavras da língua inglesa. Deixando ao próprio computador a tarefa de traduzir o programa para a linguagem de máquina, através de um programa chamado compilador.

Introdução A primeira linguagem que teve ampla aceitação é a linguagem FORTRAN (FORmula TRANslation) que surgiu em 1957 e é ainda hoje utilizada. Existe uma grande vantagem, além da facilidade, em escrever programas em linguagens de alto nível: a sua independência da máquina a ser usada. O programador não precisa se deter em particularidades do computador que irá usar. Um programa escrito em linguagem de alto nível, geralmente com poucas alterações, é aceito por qualquer computador. A escolha da linguagem de programação a ser usada em um computador depende da existência de um programa: Compilador: programa que traduz o algoritmo escrito na linguagem escolhida para a linguagem de máquina. Interpretador: programa que interpreta cada comando do programa e execute uma série de instruções que a ele correspondem.

Introdução A existência de compiladores ou interpretadores para diversas linguagens, a escolha pela linguagem a ser usada pode ser: pela preferência ou mais familiaridade do programador para com a linguagem; pela linguagem melhor implementada no computador; ou mesmo pela linguagem mais adequada para o tipo de aplicação que se deseja fazer. Para se resolver um problema em um computador, o mais importante do que a escolha da linguagem de programação é o desenvolvimento de um algoritmo adequado. O algoritmo deve ser desenvolvido objetivando sobretudo a clareza, permitindo que os erros cometidos sejam detectados o quanto antes, evitando excessivas revisões e visando facilitar futuras modicações.

Paradigmas de Programação Paradigma: é um padrão de pensamento que guia um conjunto de atividades relacionadas. Paradigma de programação: é um padrão de resolução de problemas que se relaciona a um determinado gênero de programas e linguagens. Existem quatro paradigmas de programação distintos e fundamentais que evoluíram nas últimas décadas: Programação Imperativa. Programação Orientada a Objetos. Programação Funcional. Programação Lógica.

Paradigmas de Programação Programação Imperativa: é o paradigma de programação mais antigo e bem desenvolvido. Surgiu com os primeiros computadores na década de 1940. Seus elementos espelham diretamente as características arquiteturais dos computadores modernos (modelo computacional clássico de von Neumann). Neste modelo, tanto o programa quanto as suas variáveis são armazenados juntos, e o programa contém uma série de comandos para: executar cálculos, atribuir valores a variáveis, obter entradas, produzir saídas ou redirecionar o controle para outro ponto nessa série de comandos. As linguagens de programação imperativas predominantes incluem Cobol, Fortran, C, Ada, Pascal e Perl.

Paradigmas de Programação Programação Orientada a Objetos: este paradigma fornece um modelo no qual um programa é uma coleção de objetos que interagem entre si, passando mensagens que transformam seu estado. A passagem de mensagens permite que objetos de dados se tornem ativos em vez de passivos, característica que ajuda a distinguir melhor a programação orientada a objetos da imperativa. O encapsulamento de objetos, herança e a passagem de mensagens são componentes fundamentais da programação orientada a objetos. Exemplos de linguagens de programação orientadas a objetos são: Smalltalk, C++, Java, C# e Python.

Paradigmas de Programação Programação Funcional: modela um problema computacional como uma coleção de funções matemáticas, cada uma com um espaço de entrada (domínio) e o respectivo resultado (faixa). Emergiu como um paradigma distinto no início da década de 1960. Sua criação foi motivada pela necessidade dos pesquisadores no desenvolvimento de inteligência articial e em seus subcampos: computação simbólica, prova de teoremas, sistemas baseados em regras e processamento de linguagens naturais. Essas necessidades não eram bem atendidas na época pelas linguagens imperativas. Exemplos de linguagens funcionais são: Lisp, Scheme, Haskell e ML.

Paradigmas Computacionais Programação Lógica (declarativa): surgiu como um paradigma distinto nos anos 70. Permite que o programador modele um problema declarando qual resultado o programa deve obter, em vez de como ele deve ser obtido. Essas linguagens são chamadas de linguagens baseadas em regras, já que as declarações do programa se parecem mais com um conjunto de regras ou restrições sobre o problema, em vez de uma sequência de comandos a serem executados. Interpretar as declarações de um programa lógico cria um conjunto de todas as soluções possíveis para o problema que ele especica.

Paradigmas de Programação Programação Lógica: Duas características são: Não-determinismo: um programa não-determinístico pode encontrar várias soluções para um problema em vez de apenas uma. Backtracking : possibilita o não-determinismo dos programas, sendo implícito em todos os programas. Este mecanismo já está dentro do interpretador Prolog. A principal linguagem de programação lógica é o Prolog.

Paradigmas de Programação Além dos quatro paradigmas, alguns tópicos para o projeto de linguagens de programação são destacados: Programação Orientada a Eventos. Programação Concorrente. Programação Orientada a Eventos: os programas não controlam a sequência na qual ocorrem eventos de entrada; em vez disso, eles são escritos para reagir a qualquer sequência de razoável de eventos. Um programa orientado a eventos é apenas um programa cujo comportamento é inteiramente determinado por questões de manipulação de eventos. A manipulação de eventos está frequentemente acoplada ao paradigma orientado a objetos, embora ela ocorra dentro do paradigma imperativo. O exemplo mais comum é a interface gráca do usuário.

Paradigmas de Programação Programação Orientada a Eventos Os dados de entrada governam a sequência de operações que são executadas pelo programa, mas o programa não determina a ordem da sequência de entrada. Um programa acionado por eventos é projetado para executar indenidamente, ou pelo menos até que o usuário selecione o botão de saída. Programas acionados por eventos também controlam aplicações baseadas na Internet, por exemplo, um sistema de reservas de uma empresa aérea. A programação orientada a eventos é também usada em dispositivos de telefonia móvel, motores de automóveis, sistema de navegação em aviões e sistemas de segurança residencial. Em sistemas de navegação de aviões, os eventos que causam respostas programadas incluem mudança na direção, velocidade do vento ou temperatura, ou seja, eventos que não ocorrem em qualquer ordem determinada ou previsível. Linguagens: Delphi, Visual Basic, Java e Tcl/Tk.

Paradigmas de Programação Programação Concorrente: pode ocorrer dentro do paradigma imperativo, orientado a objetos, funcional ou lógico. A concorrência ocorre quando o programa possui uma coleção de elementos assíncronos que podem compartilhar informações ou sincronizar entre si em intervalos de tempo. A concorrência também ocorre dentro de um processo individual como a execução paralela de diferentes iterações de um laço. Linguagens de programação concorrente incluem SR, Linda, e High Performance Fortran.

Histórico das Linguagens Década de 1940: As primeiras linguagens de programação foram as linguagens de máquina e as linguagens assembly dos primeiros computadores. Década de 1950: marcou o início da era das linguagens de ordem mais elevada (HOL em inglês). Uma HOL se distingue de uma linguagem de máquina ou assembly porque seu estilo de programação é independente de alguma arquitetura de máquina especíca. As primeiras linguagens de ordem mais alta foram Fortran, Cobol, Algol e Lisp. Fortran e Cobol sobreviveram e se desenvolveram bastante desde o seu surgimento no nal da década de 1950. Ainda existem muitos códigos legados destas linguagens. Lisp teve substancialmente seu uso diminuído e Algol desapareceu completamente.

Histórico das Linguagens Os projetos inovadoras dessas primeiras linguagens tiveram grande inuência sobre suas sucessoras. Exemplos: A demonstração de Fortran de que notação algébrica poderia ser traduzida em código eciente agora é admitida como padrão. A introdução da estrutura de registros em Cobol. O projeto de Pascal para a compilação em um passo. A demonstração em Algol de que uma gramática linguística poderia denir formalmente sua sintaxe. A maior motivação para o desenvolvimento de linguagens de programação nas últimas décadas foi a rápida evolução da demanda de poder computacional e as novas aplicações por parte de uma grande e diversa comunidade de usuários.

Histórico das Linguagens Exemplos de comunidades: Inteligência Articial: se preocupa com o desenvolvimento de programas que modelam o comportamento da inteligência humana, a dedução lógica e a cognição. A manipulação de símbolos, as expressões funcionais e o projeto de sistemas de prova lógica têm sido os objetivos centrais deste trabalho em andamento. Os paradigmas da programção funcional e da programação lógica se desenvolveram bastante por intermédio dos esforços dos programadores de IA. Linguagens de programação funcional proeminentes nos últimos anos incluem Lisp, Scheme, ML e Haskell. Prolog, na área de programação lógica, tem sido o ator principal, e a Prolog tem tido pouca inuência sobre o projeto de linguagens em outras áreas de aplicação.

Histórico das Linguagens Educação: nas décadas de 1960 e 1970, diversas linguagens importantes foram projetadas com o objetivo principal de ensinar programação aos alunos, destacando-se Basic e Pascal. Estas linguagens têm sido substituídas nos últimos anos nos currículos educacionais por linguagens de apelo comercial como C, C++ e Java. Ciência e Engenharia: a comunidade de programação cientíca e de engenharia desempenhou um papel importante no início da história da computação e continua a desempenhar um papel importante atualmente. Os primeiros programas foram escritos na década de 1940 para prever as trajetórias balísticas durante a 2 a Guerra Mundial. Esses programas foram escritos primeiramente em linguagem de máquina e assembly, por matemáticos.

Histórico das Linguagens Até hoje, a comunidade cientíca permanece como uma atividade central na história da programação e das linguagens de programação. O domínio de seus problemas se refere principalmente à execução de cálculos complexos de forma muito rápida e precisa. Os cálculos são denidos por modelos matemáticos que representam fenômenos cientícos e são implementados principalmente por meio do uso do paradigma de programação imperativa. Quanto mais complexo o fenômeno cientíco se torna, maior a necessidade de linguagens de programação e computadores altamente sosticados e paralelos.

Histórico das Linguagens Ciência e Engenharia: A programação concorrente é fortemente motivada pelas necessidades de tais aplicações cientícas. Algumas linguagens, como High Performance FortranHPF, suportam programação concorrente por meio da inclusão de recursos a uma linguagem básica amplamente usada (Fortran). Sistemas de Informação: programas projetados para instituições gerenciarem seus sistemas de informação provavelmente são os mais prolícos do mundo. Os sistemas de informação têm sido desenvolvidos em linguagens de programação como Cobol e SQL. Cobol (Common Business Oriented Language ) foi projetada primeiramente no nal da década de 1950 e usa a língua inglesa como base de sua sintaxe, suportando um estilo de programação imperativo.

Histórico das Linguagens Sistemas de Informação: SQL (Structured Query Language) emergiu na década de 1980 como uma ferramenta de programação declarativa para especicação de bancos de dados, geração de relatórios e recuperação de informações. SQL é a linguagem usada para a especicação e a recuperação de informações de bancos de dados relacionais. Sistemas e Redes: programadores de sistemas projetam e realizam a manutenção do software básico que executa os sistemas: Componentes do sistema operacional, software de rede, compiladores e depuradores de linguagens de programação, máquinas virtuais e interpretadores, sistemas embarcados e de tempo real.

Histórico das Linguagens Sistemas e Redes: Esses tipos de softwares estão intimamente relacionados com as arquiteturas de máquinas especícas. A maioria desses programas é escrita em C, permitindo que os programadores cheguem a um nível muito próximo do nível de linguagem de máquina. A programação de sistemas é geralmente feita com o uso do paradigma de projeto imperativo, mas os programadores de sistemas também devem lidar com a programação concorrente e orientada a eventos. Linguagens de script são largamente usadas atualmente para uma diversidade de tarefas de sistema. Exemplo: um programa awk pode ser projetado rapidamente para vericar a consistência em um arquivo de senhas de uma máquina Unix. Principais linguagens de script são awk, Tcl/Tk e Python.

Histórico das Linguagens World Wide Web: a área mais dinâmica para novas aplicações de programação é a Internet, que é o veículo que permite o comércio eletrônico e uma ampla gama de aplicações acadêmicas, governamentais e industriais. Linguagens de programação que suportam a computação centrada na Web usam a programação orientada a eventos, que promove a interação sistema-usuário. As linguagens de programação que suportam computação centrada na Web incluem Perl, PHP, Visual Basic, Delphi, Java e Python.