U.S. Naval Historical Center Photograph.

Slides:



Advertisements
Apresentações semelhantes
Programação II Licenciatura de Ciências da Computação Padoca Calado
Advertisements

Estruturação de Linguagens (Pascal e C++)
PROGRAMAÇÃO DE COMPUTADORES
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Introdução à Ciência da Computação Linguagens de Programação.
Estruturas de Repetição
Paulo Marques Hernâni Pedroso
Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Evolução dos SGBD’s (2ª Parte).
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
TC – DEI, 2005/2006.
Programação Orientada aos Objectos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra Set/2005 Uma Introdução Usando.
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Software Básico Silvio Fernandes
LABORATÓRIO DE PROGRAMAÇÃO
Linguagens de Programação Orientadas a Objetos
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Programação Básica em Java
Ricardo Jacobi Linguagem C Introdução Linguagens de Programação Fatores de Qualidade em Software Estilos de Programação Manutenção em Software Histórico.
Introdução a Informática
INTRODUÇÃO À PROGRAMAÇÃO
Linguagens de programação
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Curso Sistemas de Informação I Disciplina: Arquitetura de Software
Universidade Federal do Espírito Santo
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
Linguagens de Programação
Aula 3 Evolução da Principais Linguagens
Aula 2 Aspectos Preliminares
Laboratório de Programação de Computadores I
Classes e objetos P. O. O. Prof. Grace.
O Portal do Estudante de Computação
Paradigmas de programação
JAVA: Conceitos Iniciais
PROGRAMAÇÃO I UNIDADE 1.
C# Universidade Federal de Santa Catarina INE5612 – Desenvolvimento de Sistemas Orientados a Objetos II Filipe S Ghisi, Guilherme Welter, Matheus Porto,
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
1 Funções de intervalo. Primeiro contacto com o C e o C++ Uma função de intervalo é uma aplicação f: [a,b] [a,b] definida de forma recursiva x n+1 =f(x.
Funções de intervalo. Primeiro contacto com o C e o C++
1. 2 História do C e C++ O C (e actualmente também o C++) é a linguagem que está na base do sistema operativo Unix (e todos os seus clones). Foi inventada.
JAVA Linguagem Ambiente de Desenvolvimento
Métodos de Construção de Software: Orientação a Objetos
Teoria e Implementação de Linguagens Computacionais – IF688
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Professor: Márcio Amador
02/08/2011 Professor Leomir J. Borba- –
Ambiente de Execução - Rotinas
Orientação a Objetos Parte I
Aula 1 - Fundamentos Java SE Instituto Metodista Izabela Hendrix Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Gilmar Medeiros – Agosto/2009.
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Linguagem Pascal Prof. Sérgio Rodrigues.
Paradigmas de Linguagens de Programação
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Algumas notas sobre a linguagem de programação C
Aula 1 – Profª Danielle Costa
STRINGS Dilvan Moreira (baseado no livro Big Java e Z. Liang)
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Introdução a Programação Orientada a Objetos
Sistemas Operativos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra 2006/2007 Breve Introdução à Linguagem C.
Programação em Java Prof. Edvan Chaves.
Introdução a linguagem de Programação Java. Linguagens de Programação Linguagens de máquina(muito difíceis de usar e compreender) – Comanda ações do computador.
Evolução das Principais Linguagens de Programação
Módulo II Capítulo 1: Orientação a Objetos
Influencias sobre o Projeto da Linguagem
ESTADO DE MATO GROSSO SECRETARIA DE ESTADO DE EDUCAÇÃO ESCOLA ESTADUAL PROFESSORA EDELI MANTOVANI ENSINO MÉDIO INTEGRADO Á EDUCAÇÃO PROFISSIONAL TÉCNICO.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Fundamentos de Programação1 Aula N. 01 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Introdução e elementos principais”
Ewerton Patrick, Fernando Henrique, Jéssica Rebeca.
Transcrição da apresentação:

U.S. Naval Historical Center Photograph. Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard University, 9 September 1945. The operators affixed the moth to the computer log, with the entry: “First actual case of bug being found”. They put out the word that they had “debugged” the machine, thus introducing the term “debugging a computer program”. In 1988, the log, with the moth still taped by the entry, was in the Naval Surface Warfare Center Computer Museum at Dahlgren, Virginia. U.S. Naval Historical Center Photograph. http://www.history.navy.mil/index.html TC – DEI, 2005/2006

TC – DEI, 2005/2006

Linguagens de Programação -- Compilação e Execução -- Paulo Marques pmarques@dei.uc.pt http://www.dei.uc.pt/~pmarques Tecnologia dos Computadores 2005/2006

Compilação Compilador Programa numa Linguagem de Alto Nível Programa Código Máquina (calendario.c) (gcc) (calendario.exe) TC – DEI, 2005/2006

Compilador Traduz uma linguagem de alto nível na linguagem máquina da arquitectura destino Depois de compilado, o programa é específico da máquina onde corre As linguagens de programação de alto nível é fornecerem ao programador um conjunto de instruções que estão próximo da sua forma de pensar e do seu domínio de aplicação Em 1995 estavam inventariadas cerca de 2300 linguagens (comp.lang.misc) TC – DEI, 2005/2006

Funcionamento de um Compilador Compiler TC – DEI, 2005/2006

Programa de Alto Nível em Pascal Program gcd(Input, Output); Var i, j : Integer; Begin Read(i, j); While i<>j Do If i>j Then i := i - j; Else j := j - i; WriteLn(i) End. Calcula o Máximo Divisor Comum entre dois números. TC – DEI, 2005/2006

Análise Lexical A análise lexical reconhece a estrutura de um programa sem olhar ao seu significado. O compilador lê os caracteres do programa e agrupa-os em tokens, que são as unidades mais pequenas significativas de um programa tokens do programa Program gcd ( Input , Output ) ; Var i , j : Integer ; Begin Read ( i , j ) ; While i <> j Do If i > j Then i := i - j ; Else j := j - i ; WriteLn ( i ) End . TC – DEI, 2005/2006

Parsing A fase seguinte do compilador é organizar os tokens numa árvore de parsing que representa a estrutura de alto nível do programa. Os tokens têm de ser compatíveis com a gramática da linguagem. Árvore de parsing TC – DEI, 2005/2006

TC – DEI, 2005/2006

Geração de código O último passo consiste na geração de código. O compilador percorre a árvore, gerando as instruções máquina A geração de código pode ser feita: Para assembly do processador. Nesse caso é necessário correr um assembler sobre o ficheiro resultante. Directamente para código máquina. Nesse caso obtém-se directamente o executável da máquina. Para uma máquina virtual. Nesse caso a máquina virtual traduz just-in-time de uma linguagem intermédia para código máquina. TC – DEI, 2005/2006

Exemplo de Código Final (ou quase!) Código Assembly Código Máquina TC – DEI, 2005/2006

Máquinas Virtuais Na máquina virtual existe um just-in-time compiler (JIT) que antes de executar o código o traduz em código máquina do processador alvo Gcd.java Compilador javac Gcd.class Máquina Virtual java Gcd.class JIT TC – DEI, 2005/2006

Máq. Virtuais – Portabilidade de Código TC – DEI, 2005/2006

Máq. Virtuais – Portabilidade de Código (2) TC – DEI, 2005/2006

Máquinas Virtuais  A favor  Contra Permitem independência da arquitectura da máquina onde o código vai correr Permitem fazer verificações de segurança sobre o código Na maioria das vezes oferecem gestão automática de memória Carregamento dinâmico de código  Contra Em muitos casos existe perda de performance ao utilizar uma máquina virtual No caso do Java, fica-se limitado a uma linguagem (o que não acontece em .NET!) TC – DEI, 2005/2006

» I don’t know what the language of the year 2000 will look like, but I know it will be called FORTRAN « C.A.R. Hoare TC – DEI, 2005/2006

Linguagens de Programação -- Paradigmas -- Paulo Marques pmarques@dei.uc.pt http://www.dei.uc.pt/~pmarques Tecnologia dos Computadores 2005/2006

Paradigmas de Programação Actualmente existem quatro paradigmas de linguagens de programação em uso comum: Imperativas (e.g. C, Pascal, Fortran) Funcionais (e.g. LISP, Scheme) Lógicas/Declarativas (e.g. Prolog) Orientadas-aos-Objectos (e.g. Java, C++, C#) Hoje em dia a indústria é dominada pelos paradigmas Imperativo e Orientado-aos-Objectos TC – DEI, 2005/2006

Evolução das Linguagens de Programação TC – DEI, 2005/2006

Linguagens Imperativas Para programar um computador diz-se que… PROGRAMA = ESTRUTURAS DADOS + ALGORITMOS No programa existem variáveis que representam os dados Existe um conjunto de instruções que sucessivamente, a cada instrução, altera o valor das variáveis, manipulando os dados Segue de forma bastante próxima o modelo básico de funcionamento do processador Exemplos: C, Pascal, Fortran TC – DEI, 2005/2006

Estrutura Típica de uma Linguagem Imperativa int factorial; int n; int i; void main() { scanf(“%d”, &n); factorial = 1; for (i=1; i<=n; i++) factorial = factorial*i; printf(“%d”, factorial); } A primeira parte do programa consiste na declaração dos dados A segunda parte do programa consiste nas instruções que manipulam os dados Nota: apesar de não mostrado aqui, normalmente existem variáveis (dados) locais e globais TC – DEI, 2005/2006

Tipos de Instruções Declaração de variáveis Controlo de fluxo - Selecção (if, switch, …) Iteração (for, while, do-while, …) Chamada de Funções e Procedimentos TC – DEI, 2005/2006

Funções e Procedimentos É um pequeno sub-programa dentro de um programa. Não tem valor de retorno. Função: É como se fosse um procedimento, mas tem um valor de retorno, calcula algo. TC – DEI, 2005/2006

Passagem por Valor e por Referência As funções/procedimentos têm parâmetros de entrada. Os parâmetros podem ser passados por valor ou por referência. Na passagem por valor, apenas o valor é passado. Dentro da rotina, alterações na variável não afectam a variável original. Na passagem por referência, a variável que se encontra no parâmetro representa a variável original. Alterações na variável são reflectidas na variável original. TC – DEI, 2005/2006

Passagem por Valor (C++) void factorial(int n) { for (int i=n-1; i>1; i--) n = n*i; printf(“n! = %d\n”, n); } void main() { int n = 5; factorial(n); printf(“n = %d\n”, n); } Ao chamar-se a função factorial(), o valor de n é copiado para dentro da função. Não existe nenhuma relação entre a variável n do factorial e a variável n do programa principal excepto o seu valor inicial. Imprime… n! = 120 n = 5 TC – DEI, 2005/2006

Passagem por Referência (C++) void factorial(int& n) { for (int i=n-1; i>1; i--) n = n*i; printf(“n! = %d\n”, n); } void main() { int n = 5; factorial(n); printf(“n = %d\n”, n); } Ao chamar-se a função factorial(), a variável n representa a variável original com a qual se chama o programa (note-se que não têm de ter o mesmo nome). Alterações feitas sobre variável na função reflectem-se na variável original! Imprime… n! = 120 n = 120 TC – DEI, 2005/2006

Personalidades… John Backus John Backus, desenvolveu o FORTRAN circa 1957, na IBM Foi a primeira linguagem de alto nível digna desse nome Era suposto levar 6 meses a fazer, levou mais de 2 anos – ninguém sabia as técnicas básicas de implementar um compilador, aprenderam aqui. BNF: Backus-Naur Form TC – DEI, 2005/2006

Dennis Ritchie (& Brian Kernighan) Em 1967, M. Richards desenvolve a linguagem BCPL Em 1970, Ken Thompson implementa o núcleo sistema operativo UNIX em Assembly! A primeira linguagem/compilador escrita para Unix foi a B, uma variante do BCPL Dennis Ritchie (Bell Labs) reconhece a necessidade de implementar o próprio sistema operativo usando uma linguagem de alto nível: inventa o C, uma evolução do B A linguagem C é altamente apropriada para programação de sistema Dennis Ritchie e Brian Kernighan escrevem a bíblia do C: “The C Programming Language” Dennis Ritchie Brian Kernighan TC – DEI, 2005/2006

Linguagens Funcionais Não existem atribuições de variáveis: tudo é feito invocando funções Tradicionalmente são utilizadas em cálculo simbólico / Inteligência Artificial Tipicamente tem suporte directo para trabalharem com Listas de Símbolos Exemplos: LISP, ML, Scheme Em termos de indústria não tiveram grande aceitação, embora se encontrem alguns locais (e.g. AutoCAD, Emacs ) TC – DEI, 2005/2006

Exemplo: Factorial em LISP Não tem definição de tipos/variáveis Não tem instruções de iteração Não tem instruções de atribuição (Quase) Tudo são definições de funções Uso forte de recursividade A primitiva básica é a lista! (defun fact (x) (if (<= x 0) 1 (* x (fact (- x 1))) ) ) (+ (* 2 4) (/ 4 3)) TC – DEI, 2005/2006

LISP Criado por John McCarthy em 1959 A principal ideia era a manipulação de símbolos utilizando listas directamente na linguagem LISP = LIST PROCESSING (+ 5 (* 2 5)) A primeira tentativa chamava-se FLPL (Fortran List Processing Language) As funcionalidades que McCarthy queria eram: Expressões condicionais (ifs) Recursividade Listas Garbage Collection Escreveu um artigo onde definia o LISP e a sua função base eval Uma aluno dele notou que era possível implementar o eval na prática, o que deu origem ao LISP! TC – DEI, 2005/2006

Programação Lógica O programador não diz como é que se resolve um problema. Apenas diz: Quais são os factos Quais são os teoremas que descrevem o sistema O interpretador/compilador encarrega-se de encontrar a solução para as interrogações feitas ao programa Isto implica que na sua forma pura: Não existem atribuições Não existe controlo de fluxo Linguagem mais conhecida: PROLOG Também é fortemente baseada em listas Utilização: Inteligência Artificial TC – DEI, 2005/2006

PROLOG – Raciocinar sobre Famílias Factos e teoremas (o que é dado ao sistema): pai(carlos, antonio). pai(antonio, jose). pai(miguel, antonio). avo(X,Y) :- pai(X,Z), pai(Z,Y). irmao(X,Y) :- pai(X,Z), pai(Y,Z). Interrogações (o que perguntamos ao sistema): ?- pai(carlos, X). X = antonio; no ?- avo(carlos, X). X = jose; ?- irmao(carlos, X). X = miguel; TC – DEI, 2005/2006

PROLOG – Calcular um Factorial Factos e Teoremas fact(N,1) :- N =:= 1. fact(N, Resultado) :- N > 1, K is N-1, fact(K, FactK), Resultado is N*FactK. TC – DEI, 2005/2006

Programação Orientada aos Objectos Os grandes problema da programação imperativa, estruturada: Grande Acoplamento! Baixa Coesão! f() f() m() f() f() h() j() f() f() g() f() l() p() f() f() k() Dados (/Estruturas de Dados) Temos os dados, e o programa é constituído por milhares de funções que… -- Ou manipulam directamente esses dados -- Ou trocam imensos valores por parâmetro TC – DEI, 2005/2006

Programação Orientada aos Objectos Em OOP (Object-Oriented Programming), as funções estão encapsuladas juntamente com os dados a que podem (e devem aceder) l() f() Dados Dados m() g() q() h() f() Dados g() h() TC – DEI, 2005/2006

Programação Orientada aos Objectos A principal ideia das objectos é que: Apenas as funções relacionadas com os dados lhes podem aceder Reduzir o acoplamento e aumentar a coesão Isto é, permitir a construção de software em projectos de larga escala, de forma consistente e fácil de gerir Para além disso, é muito mais natural pensar em termos de objectos e suas relações do que em termos de dados e algoritmos Programação estruturada: PROGRAMA = DADOS + ALGORITMOS Programação orientada aos Objectos PROGRAMA = OBJECTOS + RELAÇÕES TC – DEI, 2005/2006

Fundamentos da OOP Noção de Classe e Objecto Herança Polimorfismo TC – DEI, 2005/2006

Noção de Classe e Objecto Uma classe representa um grupo de coisas Exemplo: Pessoa, Automóvel É sempre um NOME Uma classe tem operações associadas: métodos Os métodos representam acções sobre uma entidade, logo são VERBOS Um objecto (ou instância) representa uma coisa em particular de um grupo. Exemplo: “Paulo Marques”, “43-23-XM” TC – DEI, 2005/2006

Classes e Objectos (Java) class Pessoa { private String nome; private int idade; Pessoa(String nomePessoa, int idadePessoa) { nome = nomePessoa; idade = idadePessoa; } public void identifica() { System.out.println(nome + “: ” + idade); Pessoa cliente1 = new Pessoa(“António”, 32); Pessoa cliente2 = new Pessoa(“José”, 23); cliente1.identifica(); cliente2.identifica(); TC – DEI, 2005/2006

Herança É possível definir especializações de uma classe base. Chama-se a isso “classe derivada”. A classe derivada contém tudo o que a base contém, mas com informação/métodos adicionais class Patrao extends Pessoa { private String codigoCofreEmpresa; … public void abreCofre() { … } } class Empregado extends Pessoa { private String balcao; … public void abreBalcao() { … } } Patrao boss = new Patrao(“António”, 32); Empregado ze_ninguem = new Empregado(“José”, 23); boss.identifica(); ze_ninguem.identifica(); boss.abreCofre(); ze_ninguem.abreBalcao(); TC – DEI, 2005/2006

Polimorfismo Capacidade de objectos diferentes se comportarem de forma diferente face à mesma chamada de método class Patrao extends Pessoa { … public void identifica() { System.out.println(“--- PATRAO ---”); System.out.println(nome + “: ” + idade); } (…) Pessoa p; p = boss; p.identifica(); p = ze_ninguem; class Empregado extends Pessoa { … public void identifica() { System.out.println(“--- EMPREGADO ---”); System.out.println(nome + “: ” + idade); } TC – DEI, 2005/2006

Um pouco de História… Alan Kay Um dos pais da programação orientada aos objectos SmallTalk, Laboratórios da XEROX em Palo Alto, 1972 Também inventou o conceito de computador pessoal, GUI e Portátil… (sim, para além da programação orientada aos objectos…) A ideia de computador pessoal era RADICAL! "There is no reason anyone would want a computer in their home." (Ken Olsen, Digital Equipment Corp, 1977) As ideias da programação orientada aos objectos, de Kay, vêm da Biologia!!! TC – DEI, 2005/2006

Um pouco de História… Bjarne Stroustrup Bjarne Stroustrup queria ter classes e objectos na linguagem C Criou um pré-processador que compilava a sua linguagem “C with Classes” para C 1984, Bell Labs, C++ Alguns dos problemas do C++ é que é horrivelmente grande, complicada de utilizar e muito fácil de cometer erros/gerar código de baixa qualidade TC – DEI, 2005/2006

Um pouco de História… JAVA Em 1991 a Sun começa um projecto para construir uma linguagem para sistemas embebidos Linguagem Oak, James Gosling, Sun Microsystems Em 1994 a Internet começava a mostrar sinais promissores. O projecto Oak é adaptado para a Internet  Nasce o Java em 1995 Filosofia do JAVA: Ser parecido com o C/C++ Eliminar radicalmente tudo o que há de mau (ou considerado mau) no C++ Adicionar ideias brilhantes de outros sistemas (Carregamento dinâmico de código, Máquina Virtual, Garbage Collection, Threads, …) TC – DEI, 2005/2006

Leitura Recomendada  Niklaus Wirth – Criador, entre outras coisas, do Algol-W, Pascal, MODULA e Oberon. A linguagem Pascal foi extremamente influente em termos de linguagens de programação Niklaus Wirth é conhecido pela sua determinação em tornar as coisas o mais simples e elegantes possíveis TC – DEI, 2005/2006

Para saber mais… Computer Science – An Overview Capítulo 5 (5.1, 5.2, 5.3, 5.4, 5.5, 5.7) Computer Science Illuminated Capítulo 8 (8.1, 8.2, 8.3, 8.4) TC – DEI, 2005/2006