Forelesere. Velkommen til programmeringsspråkenes verden IN211. Praktiske opplysninger. Faglige forutsetninger. Ragnhild Kobro Runde

Like dokumenter
Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

IN 211 programmeringsspråk H 99

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

2 Om statiske variable/konstanter og statiske metoder.

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

2 Om statiske variable/konstanter og statiske metoder.

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Semantisk Analyse del III

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

Velkommen til. INF våren 2016

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Dagens tema: Kjøresystemer II

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Skal bindes opp til en deklarasjon av samme navn

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

UNIVERSITETET I OSLO

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

Del 1 En oversikt over C-programmering

Programmeringsspråket C

Anbefalt litteratur: Pensum-bøker: Forelesere: Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

INF1000: Forelesning 7. Konstruktører Static

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

Datatyper og typesjekking

Kap 6.4: Typesjekking Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 19. og 23. mars Dagens tema: Typer og typesjekking

IN 147 Program og maskinvare

IN 147 Program og maskinvare. Velkommen til IN 147. Program- og maskinvare

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Datatyper og typesjekking

Datatyper og typesjekking

Programmeringsspråket C Del 3

INF1000: Forelesning 7

Programmeringsspråket C Del 3

Runtimesystemer Kap 7 - I

IN våren 2018 Tirsdag 16. januar

Datatyper og typesjekking

INF5110. Oblig 2 presentasjon

Programmeringsspråket C Del 3

Obligatorisk Innlevering 2

Programmeringsspråket C Del 3

Kapittel 1 En oversikt over C-språket

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Skal bindes opp til en deklarasjon av samme navn

INF våren 2017

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Kap 6.3: Symboltabellen Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 17. mars Dagens tema:

IN våren 2019 Onsdag 16. januar

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

Runtimesystemer Kap 7 - I

Generiske mekanismer i statisk typede programmeringsspråk

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

INF1000 Eksamensforberedelser og -tips. Høst 2014 Siri Moe Jensen

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Plan: Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) Funksjonelle språk. Innføring i ML. typer enkle funksjoner (Fortsetter med ML i to uker til)

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

Runtime-omgivelser Kap 7 - I

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

Hva er kompilering? Dagens tema. En kompilator En kompilator leser Minila koden og lager Flok koden.

UNIVERSITETET I OSLO

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

INF1000 : Forelesning 1 (del 2)

Hjemmeeksamen 2 i INF3110/4110

INF Oblig 2 semantikksjekk og kodegenerering

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Anatomien til en kompilator - I

Dagens tema: INF2100. Syntaksanalyse. Hva annet gjør en kompilator? Sjekking av navnebruk. Testutskrifter

AlgDat 10. Forelesning 2. Gunnar Misund

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

Transkript:

Forelesere Velkommen til programmeringsspråkenes verden IN211 Ragnhild Kobro Runde e-post: ragnhilk@ifi.uio.no Kontor: 3345 Gerhard Skagestein e-post: gerhard@ifi.uio.no Kontor: 3402 IN211-Innledning-1 IN211-Innledning-2 Praktiske opplysninger Faglige forutsetninger Undervisning Forelesninger: Mandager 1415 1600 Gruppeundervisning: 1 dobbeltime Første gruppetimer: Tirsdag 27. august I tillegg: Selvstudium! (3 vekttall 12 timer i uken) Oppdatert informasjon http://www.ifi.uio.no/in211/ Husk nyhetsgruppen: ifi.in211 IN115 (rekursjon, lister, trær, ) Kunne programmere Java Kunne lese litt C Kunne skrive enkel PHP (INF102) IN211-Innledning-3 IN211-Innledning-4

er hentet fra Pensum Ghezzi & Jazayeri: Programming language concepts (tredje utgave) John Wiley & Sons, 1998 Krogdahl & Ore: Om syntaks og syntaksanalyse, kompendium 47. Kan kjøpes i bokhandelen Bjørn Kristoffersen: Funksjonell programmering i standard ML, kompendium 61. Kan leses og skrives ut fra kursets hjemmeside. I tillegg: Forelesninger, obligatoriske oppgaver og ukeoppgaver I IN211 vil vi ta for oss Hvordan man beskriver et språk Hva som skjer bak kulissene Eksempler på ulike typer språk: o PHP: Skriptspråk o Java: Prosedyrespråk, objektorientert språk o ML: Funksjonelt språk o Prolog: Logisk språk o pluss litt om diverse andre språk IN211-Innledning-5 IN211-Innledning-6 Programvare må være pålitelig o Skrivbarhet o Lesbarhet o Enkelhet o Sikkerhet o Robusthet Språkkvaliteter Klassifikasjon av programmeringsspråk Beregningsmodell (computational model) logisk funksjonell Programvare må være vedlikeholdbar o Faktorerbarhet o Lokalitet imperativ abstrakte datatyper klasser og objekter moduler Programorganisering (modulariseringsprinsipp) Programvare må kjøre effektivt o Optimaliserbar Jf. Ghezzi & Jazayeri avsnitt 1.5 IN211-Innledning-7 IN211-Innledning-8

Neumann-arkitektur og programmeringsspråk Programmerernes behov Neumann-abstraksjoner Binærkoding Assemblerkoding Høynivåkoding Programmeringsspråk 1 Programmeringsspråk 2 Programmeringsspråk 3 abstraksjoner 0010 0101 0000 0111 1100 0101 1110 setacc 0; add 3; add 7; add 12; add 5; store R;// ord 1110 R = 3+7+12+5; Inn/ut Lager CPU Hent instruksjon Utfør instruksjon Lagre resultat buss IN211-Innledning-9 Instruksjonssett: 0010 setacc add 0101 store IN211-Innledning-10 Regneark Andre abstraksjonsparadigmer Funksjonell programmering ML: fun fact(0) =1 fact(n) = nfact(n-1); Logisk programmering PROLOG: loves(vincent,mia). loves(marcellus,mia). jealous(x,y) :- loves(x,z), loves(y,z).?- jealous(marcellus,w). Hvorfor flere paradigmer? Analyse- og designparadigmet bør være tilpasset problemet o Oppgavene er ulike i størrelse, kompleksitet samt hva slags problem som skal løses Programmeringsomgivelsene må passe til behovene o Det er ulike krav til hastighet, plass, sikkerhet, o Programmerere er ulike! Run-time-system Dersom analyse- og designparadigmet ligger nært programmeringsspråkparadigmet, blir programmeringen enkel I motsatt fall må programmet også implementere konsepter i analyse- og design-paradigmet IN211-Innledning-11 IN211-Innledning-12

Model Driven Architecture eksekverbar UML Syntaks vs. semantikk : RegistreringsVindu : KursRegistrering kurstilbudet : kurset : Kurs : Student KursTilbud 1: "Angi kurs" 2: MeldPåKurs(student, kurs) 3: GyldigKurs(kurs) 4: [gyldigkurs=true] ErKursetFullt() 5: [ErKursetFullt = false] ForutsetterKurs() : Påmelding 6: KursSomForutsettes 7: [ForutsetterKurs=false] new(student, kurset) 8: ØkAntallP åmeldt() 9: MeldPåKurs=true 10: "Studenten er påmeldt" Kurs Student kurskode navn navn adresse vekttall forutsetterkurs() 1 kursdeltaker 1 KursTilbud semester Påmelding forelesningsplan gruppe antallplasser 1 antallpåmeldt økantallpåmeldt() erkursetfullt() kompilering Forutsetter + andre UMLdiagrammer Syntaks o Språkets alfabet o Regler for hvordan symbolene i dette alfabetet skal settes sammen Semantikk o Meningsinnholdet i programteksten Java (?) Run-time-system Syntaksen er den enklere delen av et programmeringsspråk. Semantikken er mer komplisert, og skjuler gjerne de virkelig betydningsfulle forskjellene mellom språkene. IN211-Innledning-13 IN211-Innledning-14 Binding Eksempler på bindinger Programmer består av entiteter med tilhørende attributter (egenskaper) Eksempler: o En variabel har et navn og en type o En rutine har et navn og formelle parametre (med typer) o En setning har assosierte aksjoner I språkdefinisjonen: Betydningen angis i språkets definisjon Eksempel: I Java representerer int et heltall som er et kjent matematisk begrep. Dermed vet vi hvordan +, etc. skal oppføre seg I implementasjonen: Implementøren foretar et valg. Eksempel: I C er det implementasjonen som bestemmer hvor mange byte som brukes for en int. Å sette verdien til et slikt attributt kalles binding Binding kan skje på fire stadier o I språkdefinisjonen o I implementasjonen av språket o Ved kompilering o Under kjøring Statiske bindinger Dynamisk binding Under kompileringen: Betydningen kan endres fra program til program, men er konstant så lenge programmet kjøres. Eksempel: I Pascal er typen Integer predefinert, men den kan redefineres i et program Under kjøring: Betydningen kan endres under kjøring Eksempel: I PHP kan typen for en variabel endres under kjøring IN211-Innledning-15 IN211-Innledning-16

Variabler og deres semantikk En variabel følgende egenskaper (sett fra en programmerers synspunkt) o Navn o Skop o Levetid o Type o Adresse i lageret o Verdi Navn En variabel får navn i en deklarasjon Eksempler på deklarasjoner int antall; Integer antall; Noen språk (som PHP, FORTRAN) krever ingen eksplisitt deklarasjon. Variablen blir deklarert implisitt første gang den påtreffes. Tilsvarende betraktninger gjelder også for funksjoner IN211-Innledning-17 IN211-Innledning-18 Skop Skopregler Enhver deklarasjon har sitt skop Skopet er den delen av programmet der deklarasjonen er synlig Hvilke deler skopet omfatter, bestemmes av språkets skopregler Språk C Skopet for variabler fra deklarasjonsstedet til avslutningen på blokken Skopet for funksjoner, metoder og klasser fra deklarasjonsstedet til avslutningen på blokken Enhver forekomst av en variabel kan kun være i skopet til én deklarasjon med samme navn Simula Java blokken fra deklarasjonsstedet til avslutningen på blokken blokken blokken PHP fra deklarasjonsstedet til avslutningen av funksjonen/scriptet(dynamisk) hele scriptet Lokale redeklarasjoner kan gi hull i skopet IN211-Innledning-19 IN211-Innledning-20

Skop fra deklarasjonsstedet - C #include<stdio.h> int x = 1; void f( ) { printf("x=%d\n", x); int main( ) { int x = 2; f( ); Skrives det ut 1 eller 2? Problemer med skop à la C Hvordan kan to funksjoner kalle hverandre når de først er kjent etter deklarasjonen? Løsningen er å tillate separat deklarasjon av signaturen float f2(int a, int b); int f1(float x){ f2(, ) float f2(int a, int b) { f1( ) IN211-Innledning-21 IN211-Innledning-22 begin integer x = 1; Skop i hele blokken Simula begin procedure P1; begin OutText("1. x="); OutInt(x,0); OutImage; end P1; integer x=2; P1; end; OutText("2. x="); OutInt(x,0); OutImage; end Hva skrives ut? Dynamisk skop: En forekomst binder til den sist evaluerte deklarasjon som ikke er avsluttet (med funksjonsavslutning eller avslutning på scriptet) Dynamisk skop - PHP <?php $pi = 3.1415; $x = 1; print ("1. x=".$x."<br>"); function skrivnoe( ) { print ("4. x=".$x."<br>"); $x=omkrets(3); print ("5. x=".$x."<br>"); print ("2. x=".$x."<br>"); $x=2; print ("3. x=".$x."<br>"); skrivnoe( ); function omkrets($r) { global $pi; return $r$pi; print ("6. x=".$x."<br>");?> IN211-Innledning-23 IN211-Innledning-24

Levetid Type En variabels levetid: Den tiden den opptar plass i lageret. Faller vanligvis sammen med tiden programmet er i variablens skop. En variabels type: Angir et sett av mulige verdier og mulige operasjoner på disse De fleste språk har statisk typing typen bindes ved kompilering Unntak: o En variabel lever selv om den er midlertidig skjult av en annen variabel med samme navn Noen språk har dynamisk typing typen kan forandres under kjøring (eks.: PHP) Hvordan beskrives typen ved implisitte deklarasjoner? o Noen språk har nøkkelord som gir utvidet levetid (som static i C, Java og PHP) o Ved å bruke dynamisk allokering (new i Java, malloc i C) får programmereren full kontroll over levetiden o PHP: Dynamisk typing skal ikke angi noen type o FORTRAN: Typen bestemmes ut fra første bokstav i variabelnavnet IN211-Innledning-25 IN211-Innledning-26 Variablers l-verdi og r-verdi Initialverdi y = x + 2; Hvilken verdi har en variabel når den opprettes? På venstre side av tilordningsoperatoren står y for lagerplassen for y kalt y s l-verdi På høyre side står x for verdien som er lagret i x kalt x s r-verdi I de fleste programmeringsspråk er evalueringen av x, som gir verdien som er lagret i x, implisitt Literaler, som for eksempel 2, har ingen l-verdi og kan derfor ikke stå på venstre side av tilordningsoperatoren Noen språk (for eksempel C) inneholder konstruksjoner som tillater l-verdier på høyre side av tilordningsoperatoren: y = &x; Noen muligheter: o En tilfeldig verdi (gitt av hva som lå i lageret fra før) o En fast verdi (0 i Simula) o En initialverdi må alltid oppgis (Modula-3) o Det er umulig å bruke en variabel på høyre side av tilordningsoperatoren og som argument til metoder før den har fått en verdi (Java) IN211-Innledning-27 IN211-Innledning-28