48
TC – DEI, 2005/2006 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 “debuggedthe 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 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

Embed Size (px)

Citation preview

Page 1: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

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

Page 2: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Page 3: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

Linguagens de Programação-- Compilação e Execução --

Paulo [email protected]://www.dei.uc.pt/~pmarques

Tecnologia dos Computadores 2005/2006

Page 4: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Compilação

Compilador

Programanuma

Linguagem deAlto Nível

Programaem

Código Máquina

(calendario.c) (gcc) (calendario.exe)

Page 5: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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)

Page 6: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Funcionamento de um Compilador

Compiler

Page 7: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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 DoIf i>j Then

i := i - j;Else

j := j - i;

WriteLn(i)End.

Calcula o Máximo Divisor Comum entre dois números.

Page 8: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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

Program gcd ( Input , Output ) ; Var i, j : Integer ;Begin Read ( i ,j ) ; While i<> j Do If i> j Then i :=i - j ; Elsej := j - i; WriteLn ( i )End .

tokens do programa

Page 9: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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

Page 10: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Page 11: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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.

Page 12: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Exemplo de Código Final (ou quase!)

Código Assembly

Código Máquina

Page 13: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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

Compiladorjavac

Gcd.java Gcd.class

Máquina Virtual

javaGcd.class

JIT

Page 14: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Máq. Virtuais – Portabilidade de Código

Page 15: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Máq. Virtuais – Portabilidade de Código (2)

Page 16: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Máquinas Virtuais

A favor 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!)

Page 17: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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

Page 18: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

Linguagens de Programação-- Paradigmas --

Paulo [email protected]://www.dei.uc.pt/~pmarques

Tecnologia dos Computadores 2005/2006

Page 19: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 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 paradigmasImperativo e Orientado-aos-Objectos

Page 20: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Evolução das Linguagens de Programação

Page 21: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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 dadosExiste um conjunto de instruções que sucessivamente, a cada instrução, altera o valor das variáveis, manipulando os dadosSegue de forma bastante próxima o modelo básico de funcionamento do processadorExemplos: C, Pascal, Fortran

Page 22: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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 doprograma consiste na declaração dos dados

A segunda parte doprograma consiste nas instruções que manipulamos dados

Nota: apesar de não mostrado aqui, normalmente existem variáveis (dados) locais e globais

Page 23: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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

Page 24: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Funções e Procedimentos

Procedimento: É 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.

Page 25: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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.

Page 26: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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 dafunção. Não existe nenhuma relaçãoentre a variável n do factorial e a variável n do programa principal exceptoo seu valor inicial.

Imprime… n! = 120 n = 5

Page 27: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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(), avariável n representa a variáveloriginal 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 nafunção reflectem-se na variável original!

Imprime… n! = 120 n = 120

Page 28: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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

Page 29: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Dennis Ritchie (& Brian Kernighan)

Em 1967, M. Richards desenvolve a linguagem BCPLEm 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 BA linguagem C é altamente apropriada para programação de sistemaDennis Ritchie e Brian Kernighan escrevem a bíblia do C: “The C Programming Language”

Dennis Ritchie

Brian Kernighan

Page 30: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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 )

Page 31: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Exemplo: Factorial em LISP

Não tem definição de tipos/variáveisNão tem instruções de iteraçãoNão tem instruções de atribuição(Quase) Tudo são definições de funçõesUso forte de recursividade

A primitiva básica é a lista!

(defun fact (x) (if (<= x 0) 1 (* x (fact (- x 1))) ))

(+ (* 2 4) (/ 4 3))

Page 32: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

LISP

Criado por John McCarthy em 1959A 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!

Page 33: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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

Page 34: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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;no

?- irmao(carlos, X).X = miguel;no

Page 35: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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.

Page 36: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Programação Orientada aos Objectos

Os grandes problema da programação imperativa, estruturada: Grande Acoplamento! Baixa Coesão!

Dados (/Estruturas de Dados)

f() g() h() f()

f()

f() m()f()f()j()

l() f() f()f()

k()p()

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

Page 37: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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)

Dadosf()

g()h()

Dadosf()

g()h()

Dadosl()

m()q()

Page 38: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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

Page 39: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Fundamentos da OOP

Noção de Classe e Objecto

Herança

Polimorfismo

Page 40: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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”

Page 41: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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();

Page 42: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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();

Page 43: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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); }}

class Empregado extends Pessoa { … public void identifica() { System.out.println(“--- EMPREGADO ---”); System.out.println(nome + “: ” + idade); }}

(…)

Pessoa p;

p = boss;p.identifica();

p = ze_ninguem;p.identifica();

Page 44: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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!!!

Page 45: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

TC – DEI, 2005/2006

Um pouco de História… Bjarne Stroustrup

Bjarne Stroustrup queria ter classes e objectos na linguagem CCriou 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

Page 46: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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 1995Filosofia 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, …)

Page 47: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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

Page 48: TC – DEI, 2005/2006 Moth found trapped between points at Relay # 70, Panel F, of the Mark II Aiken Relay Calculator while it was being tested at Harvard

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)