Begreber og Redskaber 1. Programmeringssprog Sprog = mængde af sætninger ?

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

Programmeringsparadigmer.
Begreber og Redskaber 1 BRP.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
1 Parsing. 2 Mål: Et program til indlæsning og beregning af aritmetiske udtryk Eksempel: Beregn (3*5 + 4/2) - 1 Løs et lettere problem først: Læs en streng.
Selve objektet versus referencen til objektet Nedarvning
Grundlæggende programmering Efterår 2001
Hvordan man skriver koden.
Sproghistorie Syntaks (struktur) Semantik (Indhold)
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Intro til C# apps Kodegennemgang af simpel C# app
FEN Sprog1 Lidt om sprog Definition: Et sprog over et endeligt alfabet  (sigma) er en mængde af strenge dannet af tegn fra . Eksempel: Lad.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Begreber og Redskaber 1. Emner i kurset Om sprog og sprogbeskrivelse Repræsentation af tal i maskinen –Heltal, negative tal, kommatal, logiske værdier.
Sprog og grammatik Et sprog L(G) er mængden af sætninger afledt af grammatikken G. Grammatik er en 4-tupel: G={N, ,P,S}. Hvor: N er et sæt af non-terminale.
Sproghistorie Syntaks (struktur) Semantik (Indhold)
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
GP 5, 26/ Grundlæggende programmering Efterår 2001 Forelæsning 5 onsdag 26/ kl. 9:15 – 12:00.
Begreber og Redskaber 1. Rettelse til sidst Sidst vrøvlede jeg lidt om algoritmer: Ordet stammer fra Abu Ja’far Mohammed ibn Musa al- Khowarizm der i.
Klasser.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
GP 3, 12/ Grundlæggende programmering Efterår 2001 Forelæsning 3 onsdag 12/ kl. 9:15 – 12:00.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Paradigmer i Programmering 1. Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
Begreber og Redskaber 1 BRP.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:
Begreber og Redskaber 1. Plan for kurset Formål –Give et begrebsmæssigt grundlag for programudvikling, samt overblik over udvalg af redskaber og metoder.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
GP4, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 4 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 2 – Mandag
Sproghistorie Syntaks (struktur) Semantik (Indhold)
Præsentationens transcript:

Begreber og Redskaber 1

Programmeringssprog Sprog = mængde af sætninger ?

Programmeringssprog Sprog = syntaks+semantik+pragmatik Syntaks: hvilken tekst der må stå Semantik: hvad det betyder Pragmatik: hvordan det bruges

Syntaksbeskrivelse Syntaksbeskrivelse: beskrivelse af de korrekte sætninger i sproget. idag Regulære udtryk Kontekstfri grammatikker (EBNF) Java’s syntaks

Formål Kunne læse syntaksbeskrivelse af Java –Nyttigt redskab i en værktøjskasse Forstå hvad en syntaksbeskrivelse er –Se om tekster er syntaktisk korrekt –Skrive syntaks ud fra eksempler Give et videre perpektiv –Historie –Videnskab mellem lingvistik og matematik

Syntaks Fra ccj2 2.2 Assignment variableName = expression; 6.1 The while statement while( condition ) statement Osv..

Syntaks Præcedens regler i*j+k*l Associativitet a-b-c(a-b)-c a=b=ca=(b=c) Dangling else –if() if() stmt; else stmt

Semantik Hvad betyder det? Hvad er forskellem på & og &&? Hvornår er to strenge ens? Hvordan virker % for negative tal? Osv...

Pragmatik Konventioner –Klassenavne med stort bogstav –Felter og metoder med små bogstaver –Konstanter med kun store bogstaver Ideomer –for(;;){.. if(..)break;..} God stil –Indrykninger, kommentarer,..

Et java program public class HelloWorld{ public static void main(String[] args){ // Hovedprogram! System.out.println(”Hej”); }

Bestanddele af program Variable og typer Regneudtryk Sætninger Underprogrammer Klasser Biblioteker

Typer Heltal ( int,..), Kommatal ( float, double ) 1.0 1E10 Logiske værdier ( boolean ) true false Tegn ( char ) ’c’ ’\n’ Tekststrenge ( String ) ”hello” Og så er der også klasser og objekter...

Variable Variable og typer –Variabel erklæring –int i; –Variabel initialisering –int i = 1; –Variabel tildeling –i = 1; –Variabel inkrementering –i++;

Udtryk Sammenligning ( ==,>=,,!= ) Aritmetik ( +,-,*,/,% ) Tildeling ( =,+=,++ ) Betinget udtryk ( ? : ) Eksempel int i = 3+4; boolean b = (i++ == 7);

Tekststrenge ”dette er en tekststreng” Sammenhæftning af strenge med + Næsten alt kan konverteres til tekststrenge, f.eks. når det står efter + Eksempel int i = 7; String s; s = ”i = ” + i;

Udskrivning System.out.println( udtryk ); System.out.println(); System.out.print( udtryk ); Udtryk er streng, tal, tegn, logisk værdi,.. Eksempel System.out.println(”Hello”);

Sætninger If: if( exp ) stmt else stmt While: while( exp ) stmt Do: do stmt while( exp ) For: for( exp;exp;exp ) stmt Switch: switch( exp ){ case exp: stmt..} Andet: break,continue,return,try

Hvad mer?? Klasser, nedarvning og beskyttelse Overlæsning, overskrivning, polymorfi Interface, abstrakte klasser Tabeller Undtagelser, parallelitet Et hav af standard klasser

Kan man skrive til programmer? Nå ja – men det er ikke helt let! Eksempel try{ DataInputStream in = new DataInputStream(System.in); String s = in.readLine(); System.out.println("Read : "+s); }catch(java.io.IOException e){}

Sprog Formelt vs. Naturligt sprog Programmering sker i formelle sprog Maskinel analyse af naturlige sprog er kompliceret aktivt forskningsfelt Eksempler på formelle sprog –Telefonnumre – adresser –HTML dokumenter –Java programmer

Notation Terminaler: Det der skal stå direkte i tekster (f.eks. Dele af Javaprogram ) –I EBNF f.ex. class Nonterminaler: dele af tekster som forklares andetsteds i grammatikken –I EBNF Expression

Mere notation EBNF udtryk bruger: –[.. ] mulighed 0-1 –{.. }gentagelse 0-flere –(.. |.. )valgmulighed EBNF regler har ofte formen Nonterminal: udtryk1 udtryk2 Det skal læses som: (udtryk1 | udtryk2)

Grammatik: udtryk Grammatikken for regneudtryk i MiniJava Expression : VarName | Number | ””” { Tegn } ””” | Expression ”+” Expression | Expression ”-” Expression | ”(” Expression ”)”

Udtryk: navne, tal Number : Ciffer { Ciffer } Ciffer : ”0” | ”1” | ”2” | ”3” | ”4” | ”5” | ”6” | ”7” | ”8” | ”9” VarName : Bogstav { Ciffer | Bogstav } Bogstav : ”a” | ”b” | ”c” |... Tegn : Bogstav | Ciffer | ”.” | ”,” |...

Udtryk Eksempler: ”hej verden” ( )+ 1+(1+(1+(1+1)))

Eksempel: udtryk Java udtryk: Afledning: Expression → Expression ”-” Expression Number Expression ”+” Expression 2 3 4

Eksempel: udtryk Javaudtryk: Alternativ afledning: Expression → Expression ”+” Expression Expression ”-” Expression Number 2 3 4

Grammatikken er rekursiv To regneudtryk kan sættes sammen med et ”+” eller et ”-” og tilsammen er det et regneudtryk. Rekursive definitioner kan være problematiske… Barbereren barberer alle de folk i byen som ikke barberer sig selv. Hvem barberer barbereren?

Fibonacci tal De to første fibonacci tal er 1 og 1. Et fibonacci tal er summen af de to foregående fibonacci tal. Definitionen er rekursiv. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 Rekursive definitioner er ok hvis det definerer noget ”større” ud fra noget ”mindre” og det ”mindste” er veldefineret uden rekursion. (”større”, ”mindre” og ”mindste” kan formaliseres som ordnede mængder i matematikken)

Tvetydig grammatik Grammatikken er tvetydig Dvs: Der findes tekststrenge som kan afledes på mere end en måde fra grammatikken. Tvetydighed er ikke et problem for hvad der er syntaktisk korrekt Tvetydighed er et problem når vi skal forklare semantikken af udtryk Tvetydighed afklares ved at specificere associativitet og præcedens af operatorer..

EBNF Extended Backus Naur Form 1963: Brugt i Algol rapport (Peter Naur ed.) John Backus medforfatter. (De brugte en simplere version uden ”{” og ”}”) Variant af Kontekst-fri grammatikker (Chomsky 1956) Variant brugt af Panini, indisk grammatiker ca. 300 BC, til beskrivelse af Sanskrit

Regulære udtryk Regulære udtryk er en variant af EBNF hvor man kun har et udtryk og ikke mulighed for ekstra regler Kendes fra søgninger i mange tekstbehandlingssystemer Bruger ofte lidt andre symboler: –(.. )* betyder gentag 0-flere gange –(.. )+ betyder gantag 1-flere gange –(.. )? betyder mulighed 0-1

Chomsky hierarkiet Type 0 sprog: Uindskrænkede sprog (sprog med en formel syntaks) Type 1 sprog: Kontekst-følsomme sprog (hvad der må stå hvor i tekster afhænger af kontekst) Type 2 sprog: Kontekst-frit sprog (sprog der kan beskrives med EBNF eller tilsv.) Type 3 sprog: Regulære sprog (sprog der kan beskrives ved en enkelt regel i EBNF eller tilsv. Dvs. regulære udtryk)

Chomsky Noam Chomsky: lingvist og samfundsdebatør (f. 1928) Chomsky hierarkiet er fra 1956 og primært tænkt til beskrivelse af naturlige sprog (vha transformationsgrammatikker..)

Et par resultater Sproget: ”ab”,”aabb”,”aaabbb”,... er kontekstfrit men ikke regulært. Sproget: ”abc”,”aabbcc”,”aaabbbccc”,.. er ikke kontekstfrit men kontekstafhængigt. Sprog1: ab a Sprog1 b

Et par resultater Der findes ingen generelle teknikker til at undersøge om to EBNF’er beskriver samme sprog (Det kan bevises at en sådan teknik heller ikke kan findes!) (det er et uafgørligt problem) En sådan teknik findes for regulære udtryk.

Hvad kan det bruges til? Regulære udtryk → søgninger i store datamængder Genkendelse kan klares af endelige automater (uden hukommelse) Kontekst fri sprog → oversættere, parsere Genkendelse kræver hukommelse Særligt effektive genkendere/parsere findes for klasser af kontekst-fri grammatikker (LL(1), LALR(1),..) De kan konstrueres automatisk ud fra grammatikken (YACC, Bison, Antlr)

Ord, ord, ord … SyntaksGrammatikGenkendelse SemantikEBNFParser PragmatikRegulært udtrykKontekstfrit sprog Formelt sprogSyntakstræRegulært sprog Naturligt sprogAfledningUafgørligt NonterminalTvetydigChomsky hierarki TerminalRekursion

Grammatik for MiniJava Program : ClassDef ClassDef : ”public” ”class” ClassName ”{” ”public static void main(String[ ] args){” Statements ”}” ”}” Statements : { Statement } Statement : Identifier ”(”Parameters ”)” ”;” | VarDef | VarName ”=” Expression ”;”

Grammatik fortsat VarDef : TypeName VarName ”;” | TypeName VarName ”=” Expression ”;” Parameters : | Expression { ”,” Expression } Expression : VarName | Number | ””” { Tegn } ””” | Expression ”+” Expression | Expression ”-” Expression | ”(” Expression ”)”

Grammatik fortsat Identifier : Name { ”.” Name } VarName : Name TypeName : Name ClassName : Name Name : følge af bogstaver og cifre der starter med bogstav Number : følge af cifre Tegn:..

Et Java Program public class A { public static void main(String[ ] args) { System.out.println(”Hello”); }

Afledning Program → ClassDef ClassDef → ”public” ”class” ClassName ”{” ”public static void main(String[ ] args){” Statements ”}” ”}” ClassName → ”A” Statements → Statement

Afledning fortsat Statement → Identifier ”(”Parameters ”)” ”;” Identifier → Name ”.” Name ”.” Name → ”System” ”.” ”out” ”.” ”println” Parameters → Expression { ”,” Expression } → Expression Expression → ””” Hello ”””

Syntakstræ (lettere beskåret) Program ClassDef public class ClassName { public static void main(String[ ] args){ Statements }} A Identifier ”(”Parameters ”)” ”;” System.out.println ”Hello”

Syntakstræer ”Program” er roden i træet Bladene i træet er ”terminalerne” Der sidder ”nonterminaler” i alle forgreninger Når det tegnes vokser det nedad med roden øverst Samler man bladene ved gennemløb af træet fra venstre til højre får man programteksten

Java Language Specification Findes på nettet – indeholder detaljeret beskrivelse af alle konstruktioner i java, syntaks, semantik og pragmatik Her følger et udkog med ca 2/3 af Java – de dele I får brug for… Kun syntaks og I EBNF format Der tages forbehold for fejl og mangler..

Et program består af klasser CompilationUnit: [ ”package” QualifiedIdentifier ”;” ] {ImportDeclaration } {ClassDeclaration } ImportDeclaration: ”import” Identifier { ”.” Identifier } [ ”.” ”*” ] ”;” ClassDeclaration: {Modifier } ”class” Identifier [ ”extends” Type ] [ ”implements” TypeList ] ClassBody Modifier: ”public” | ”protected” | ”private” | ”static” | ”abstract” | ”final” | ”native” | ”synchronized” | ”transient” | ”volatile” | ”strictfp”

En klasse består af metoder ClassBody: ”{” { ClassBodyDeclaration } ”}” ClassBodyDeclaration: ”;” [ ”static” ] Block {Modifier } MemberDecl MemberDecl: [ ”void” | Type ] Identifier FormalParameters BracketsOpt [ ”throws” IdentifierList ] ( Block | ”;” ) Type Identifier BracketsOpt [ ”=” VariableInitializer ] VariableInitializer: ”{” [VariableInitializer { ”,” VariableInitializer } [”,”] ] ”}” Expression

Metoder består af sætninger Block: ”{” { BlockStatement } ”}” BlockStatement : [ ”final” ] Type VariableDeclarator { ”,” VariableDeclarator } ”;” [Identifier ”:”] Statement VariableDeclarator: Identifier BracketsOpt [ ”=” VariableInitializer ] BracketsOpt: { ”[” ”]” } FormalParameters: ”(” [ FormalParameter { ”,” FormalParameter}] ”)” FormalParameter: Type Identifier BracketsOpt

Sætninger Statement: Block ”if” ”(”Expression ”)” Statement [else Statement] ”for” ”(” ForInit ”;” [Expression] ”;” ForUpdate ”)” Statement ”while” ”(”Expression ”)” Statement ”do” Statement ”while” ”(”Expression ”)” ”;” ”try” Block ( Catches | [Catches ] ”finally” Block ) ”switch” ”(”Expression ”)”{ SwitchBlockStatementGroups } ”synchronized” ”(”Expression ”)” Block ”return” [Expression ] ”;” ”throw” Expression ”;” ”break” [Identifier ] ”;” ”continue” [Identifier] ”;” Expression ”;” Identifier ”:” Statement

Typer, mm. Type: Identifier {. Identifier } BracketsOpt BasicType BasicType: ”byte” | ”short” | ”char” | ”int” | ”long” | ”float” | ”double” | ”boolean” Catches: CatchClause { CatchClause } CatchClause: ”catch” ”(” FormalParameter ”)” Block ForInit: Expression { ”,” Expression } [”final”] Type VariableDeclarator { ”,” VariableDeclarator } ForUpdate: Expression { ”,” Expression } SwitchBlockStatementGroups: { SwitchLabel {Statement } } SwitchLabel: ”case” Expression ”:” | ”default” ”:”

Udtryk Expression: Expression1 [AssignmentOperator Expression1] AssignmentOperator: ”=” | ”+=” | ”-=” | ”*=” | ”/=” | ”&=” | ”|=” | ”^=” | ”%=” | ” >=” | ”>>>=” Expression1: Expression2 [ ”?” Expression ”:” Expression1 ] Expression2 : Expression3 { Infixop Expression3 } Expression3 ”instanceof” Type Infixop: ”||” | ”&&” | ”|” | ”^” | ”&” | ”==” | ”!=” | ” ” | ” =” | ” >” | ”>>>” | ”+” | ”-” | ”*” | ”/” | ”%” Expression3: PrefixOp Expression3 ( Type ) Expression3 Primary {Selector } {PostfixOp } Selector: ”.” Identifier | ”[” Expression ”]” PrefixOp: ”++” | ”--” | ”!” | ”~” | ”+” | ”-” PostfixOp: ”++” | ”--”

Simple udtryk Primary: ”(” Expression ”)” ”this” [ Arguments ] ”super” [Arguments ] ”new” Identifier ”[” Expression ”]” { ”[” Expression ”]” } ”new” Identifier Arguments Identifier { ”.” Identifier } Arguments Arguments: ”(” [Expression { ”,” Expression } ] ”)”

Lidt historie Maskiner: 1. Generation: 1940 → –Radiorør, kviksølvrør, DASK Generation 1950 → –Transistorer, GIER Generation 1964 → –Integrerede kredsløb 4. Generation –Højt integrerede kredsløb VLSI, 5. Generation –Multiprocessormaskiner

Datamaskiner Tidlige mekaniske maskiner Babbage, Pascal, Zuse 30’erne. Teori: Turingmaskinen, Church, Curry, von Neumann. Beregnelige funktioner Beregningsmaskiner Eniac (43-44, USA) radiorør (19000stk) til beregning af kanonskud Zuse (1945, Tyskland) relæer Colosus (1943, Alan Turing, England) radiorør (1500stk) Krypto-analyse af Enigma koder

Datamaskiner Fra Universelle maskiner Programmerbare. EDVAC rapport 1944 EDSAC (Wilkes,Cambridge,England) ACE (Turing, Manchester, England) 1948 Transistoren 1964 Integrerede kredsløb 1970 Chip, Intel 4004 (2250 transistorer, 1280 ½byte data, 4k instruktioner)

Programmeringssprog Maskiner: 1. Generation: 1940’erne –Maskinkode 2. Generation –Assembler, AUTOCODE (1952) –Tidlige maskinspecifikke sprog 3. Generation 1954 → –Højniveausprog: Java, C, C++, Pascal, 4. Generation –Specielle programmeringsomgivelser til særlige formål 5. Generation –Naturligt sprog

Programmeringssprog Fortran, 1954 Cobol, Algol 1960 Basic 1964 C 1972 Simula 1967 Pascal 1972 C Java 1995 Andre sprog Logikprogrammering prolog 1972 Funktionsprogrammering Lisp 1960 ML, Haskell, Scheme