Anders Broberg, Programspråksteoridelen DVA Moment 2 1 Variabler Abstraktion av en minnescell En förvaringslåda som kan beskrivas med 6 attribut –Namn.

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

INTRODUKTION TILL PROGRAMMERING
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
Funktioner och programorganisation
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
De fundamentala datatyperna
Datatyper C# C/C++ Java VB Fortran Pascal bool boolean Boolean
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning.
Föreläsning 4 Python: mera om funktioner och parametrar
Polymorfism.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Att programmera i språket Java
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
i olika programmeringsspråk
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Programmering B PHP Lektion 2
Föreläsning 11 Arrayer.
1 Funktioner Nr 3 Funktionstyper, högre ordningens funktioner och polymorfism.
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Programmering B PHP Lektion 2
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
1 Joomla © 2009 Stefan Andersson 1. 2 MÅL 2 3 Begrepp Aktör: en användare som interagerar med webbplatsen. I diagrammet till höger finns två aktörer:
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Namnrum, räckvidd och rekursion Linda Mannila
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Presentation of I. Name: Disputerat nu vår Forskningsintresset är:
F. Drewes, Inst. f. datavetenskap1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Föreläsning 4 Klasser Och Objekt.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
Anders Broberg, Programspråksteoridelen DVA Moment 2 1 Epost: Hemsida: Tel: Rum: D438.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Anders Sjögren Deklarationsområde och funktioner.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
OOP&M - teori1 OOP&M – Föreläsning 3 kap 2-4 Repetition Föreläsning-datayper-syntax-tilldelning.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Presentationens avskrift:

Anders Broberg, Programspråksteoridelen DVA Moment 2 1 Variabler Abstraktion av en minnescell En förvaringslåda som kan beskrivas med 6 attribut –Namn –Adress –Värde –Typ –Livslängd –Räckvidd (scope)

Anders Broberg, Programspråksteoridelen DVA Moment 2 2 Bindning Def: En bindnig är en association, såsom mellan ett attribut och en enhet, eller mellan en operation och en symbol Def: Bindningstid är den tid (tillfälle) som bindning sker Exempel på bindningstider –Språkdesign »En operator binds till en symbol –Språkimplementation »Binder typer till en representation –Kompileringstid »Binder en variabel till en typ i C och Java –Tid för laddning »Binder minnesceller till static variabler i C och variabler i FORTAN 77 –Exekveringen »Bindning av icke statiska variabler till minnesceller

Anders Broberg, Programspråksteoridelen DVA Moment 2 3 Statisk vs. Dynamisk bindning Def: en bindning är statisk om det inträffar för exekvering och bibehålls oförändrad genom hela exekveringen Def: En bindning är dynamisk om den sker under exekveringen eller förändras under exekveringen av programmet

Anders Broberg, Programspråksteoridelen DVA Moment 2 4 Typ-bindningar Innan en variabel kan refereras i ett program måste den bindas till en datatyp –Hur är typen specificerad? –När sker bindningen? Vid statisk bindning av typer till variabel –Explicit deklaration via en sats i programmet »int x; i C –Implicit deklaration är en ”default” mekanism för att specifiera typer på variabler »I FORTRAN 77 och tidigare så används första bokstaven i namnet som en sådan mekanism (i,j,k,l,m,n) är heltalsnamn

Anders Broberg, Programspråksteoridelen DVA Moment 2 5 Dynamisk typ-bindning Högersidan bestämmer typen på variabeln –A = 5 integer –A = 4.4 float –LIST < lista –LIST <- 17 heltal Finns i APL Fördel –Flexibilitet, man kan tex. Vid inläsning av data => dynamisk typ-bindning att all typer kan godtas utan test Nackdel –Tillförlitligheten påverkas negativt då färre fel kan upptäckas före exekvering

Anders Broberg, Programspråksteoridelen DVA Moment 2 6 Mer om bindning Typinferens –Används i ML, Miranda, Haskell »Typerna härleds utifrån kontexten som referensen sker »Det måste framgå i kontexten vad som menas implicit eller explicit Minnesbindning –När binds minnesadressen till variabeln »Allokering - att ta en cell från en pol av lediga celler´ »Deallokering - att lämna tillbaka celler till polen av lediga celler Explicit som i C, C++, Skräphantering så som i Java, ML En variabels livstid är tiden som den är bunden till en speciell minnescell

Anders Broberg, Programspråksteoridelen DVA Moment 2 7 Kategorier av variabler pga. Livstid Statisk Stackdynamisk Explicit ”heap”-dynamisk Implicit ”heap”-dynamisk

Anders Broberg, Programspråksteoridelen DVA Moment 2 8 Variabler med statisk minnesbindning Bindning till en minnescell före exekvering och behåller den under hela exekveringen –static variabler i C och alla variabler i FORTRAN 77 –Effektivt »(direktadressering är möjlig) »Ingen ”runtime overhead” pga. allokering och deallokering –Tillåter inte rekursion –Historiekänsliga underprogram –Inte så flexibelt

Anders Broberg, Programspråksteoridelen DVA Moment 2 9 Stackdynamisk Bindning till en minnescell för variabler skapas när variabeldeklarationer analyseras under exekvering –Om det är skalärer så binds alla attribut förutom adressen statiskt –Lokala variabler i Pascal och C i underprogram Detta tillåter rekursion Kostsam hantering av allokering och avallokering Inte historiekänsliga underprogram Ineffektiv referensmekanism (indirekt adressering)

Anders Broberg, Programspråksteoridelen DVA Moment 2 10 Explicit ”heap”-dynamisk Heap --högen är en samling med minnesceller som inte är så organiserade eftersom dess användning inte är förutsägbar Explicit allokering deallokering av celler från heapen Specificerad av programmeraren Bindnigen sker under exekveringen Namnlösa variabler Stödjer dynamisk minneshantering Ineffektiv och osäker stor risk för svåra fel/bugar

Anders Broberg, Programspråksteoridelen DVA Moment 2 11 Implicit ”heap”-dynamisk Allokering och deallokering sker genom tilldelning av satser Alla variabler i APL Väldigt flexibelt Mycket overhead, alla attribut är dynamiska Nästan omöjligt att upptäcka fel

Anders Broberg, Programspråksteoridelen DVA Moment 2 12 Typkontroll Måste generalisera begreppen operander och operatorer till att inkludera underprogram och tilldelningar Def: Typkontroll är en aktivitet som försäkrar att operander för en operator är av kompatibla typer Def: En kompatibel typ är en som är en legal för operatorn eller tillåts att under språkregler konverteras implicit, av kompilatorgenererad kod till en legal typ. Denna automatiska konvertering kallas för coercion Ett typfel är en applicering av en operator på en operand av felaktig typ Om all typbindning är statisk, kan nästan all typkontroll ske under kompilering (statiskt) Om typbindningen är dynamisk, måste typkontrollen ske dynamisk under exekveringen

Anders Broberg, Programspråksteoridelen DVA Moment 2 13 Starkt typade språk Ett språk är starkt typat om typfel alltid upptäcks Man upptäckter missanvändning av variabler som leder till typfel -> ökad tillförlitlighet FORTRAN 77 är inte starkt typat, –EQUIVALENCE Pascal är inte starkt typat –Variant records C och C++ är inte heller starkt typat –Unioner, typkontroll av parametrar kan undvikas Ada och Java är nästan starkt typade språk

Anders Broberg, Programspråksteoridelen DVA Moment 2 14 Dynamisk typbindning Ger mycket flexibilitet Till en kostnad för effektivitet och tillförlitligheten –Senarelagd felupptäckt

Anders Broberg, Programspråksteoridelen DVA Moment 2 15 Typkompabilitet Används vid typkontroll –Dvs inget typfel om operanderna inte är typkompatibla Två typer av typkompabiliet –Namnekvivalens »Två variabler har kompatibla typer om de är i samma deklaration eller använder samma typnamn »Lätt att implementera »Väldigt restriktivt angreppssätt »Delmängder av heltal (arrayindex) är inte kompatibla med heltal »Formella parametrar måste vara av samma typ som deras motsvarande aktuella parametrar (Pascal) –Strukturekvivalens »Två variabler är typkompatibla om de har identisk struktur »Svårare att implementera »Flexiblare

Anders Broberg, Programspråksteoridelen DVA Moment 2 16 Strukturekvivalens??? Cirkeldefinierade?? Två struct/record som bara skiljer i fältnamn?? Två arrayer som är lika stora men indexeras inom olika delområden av heltal Är två uppräkningstyper kompatibla om deras komponenter stavas olika Man kan inte skilja mellan typer av samma struktur

Anders Broberg, Programspråksteoridelen DVA Moment 2 17 Typkompabilitet i olika språk Pascal -vanligtvis struktur, men i några fall namnekvivalens (formella parametrar) C - strukurekvivalens, med undantag för records Ada - restriktiv form av namn –Härledda typer tillåter typer med samma struktur att vara skilja sig åt –Anonyma type är alla unika även i A,B: array (1..10) of INTEGER

Anders Broberg, Programspråksteoridelen DVA Moment 2 18 Scope (synlighet/räckvidd) Scope/räckvidd för en variabel är inom det område den är synlig (där det går att referera den) Icke lokala variabler(globala) i en programdel är de variabler som är synbara där men inte är deklarerade där Räckviddsregler för ett språk bestämmer hur referenser till namn är associerade till variabler Statisk räckvidd och dynamisk räckvidd

Anders Broberg, Programspråksteoridelen DVA Moment 2 19 Statisk räckvidd Baseras på programtexten Att koppla en namnreferens till en variabel så måste du (eller kompilatorn) hitta deklarationen av den Sökprocessen –Först lokalt –Sedan utöka räckvidden successivt tills man hittar en deklaration med det sökta namnet –Omslutande statiskt räcviddsområde kallas för statiska förfäder(static ancester) –Den närmsta förfader kallas för statisk förälder (static parent) Dölja variabler –Variabler med samma namn som ligger närmare en enhet döljer ”äldre” variabler –C++ och Ada tillåter access till dessa gömda variabler Block - en metod för att skapa statisk räckvidd inom en program enhet -- från Algol 60

Anders Broberg, Programspråksteoridelen DVA Moment 2 20 Evaluering av statisk räckvidd MAIN A C D B E

Anders Broberg, Programspråksteoridelen DVA Moment 2 21 Dynamsik räckvidd Baseras på anropssekvensen i programmet och inte dess textuella layout Man söker tillbaka genom anropande underprogram tills man hittar en deklaration av en variabel main var x interger; Sub1 var x integer; … call sub2 end sub1 sub2 … x = y*x+15; end sub2 call sub1 end main

Anders Broberg, Programspråksteoridelen DVA Moment 2 22 Utvärdering av dynamsik räckvidd (Scoping) Den främsta fördelen är bekvämlighet för programmeraren Den största nackdelen är att det blir svårare att läsa programmet dvs. läsbarheten påverkas negativt Samma användning av en variabel i ett subprogram kan referera till olika icke lokala variabler vid olika anrop av subprogram Räckvidd (scope) och livslängd (lifetime) är två begrepp som är nära relaterade, men de är två olika begrepp –Statisk räckvidd är ett spatialt begrepp meddans livslängd är ett temporalt begrepp

Anders Broberg, Programspråksteoridelen DVA Moment 2 23 Referensomgivning för en sats Den samling av namn som är synliga i satsen kallas för referensomgivning Statisk räckvidd –Alla lokala variabler plus alla variabler som är synliga i alla omslutande ”räckvidder” Dynamisk räckvidd –Alla lokala variabler plus alla synliga variabler i alla aktiva underprogram

Anders Broberg, Programspråksteoridelen DVA Moment 2 24 Namngivna konstanter En variabel som binds tills sitt värde bara när det binds till minnesadressen –För att öka läsbarheten och det gör det lättare att modifiera i koden man behöver bara ändra på ett ställe där konstanten deklareras Pascal tillåter bara tecken inga uttryck; –CONST PI = Modula-2 och FORTRAN 90 : tillåter konstantvärdes uttryck Ada, C++ och Java: tillåter att definiera konstanter med vilka uttryck som helst Både statiska bindning av konstanter manifestade

Anders Broberg, Programspråksteoridelen DVA Moment 2 25 Variabelinitiering Binda ett värde till en variabel vid samma tillfälle som variabel är binds till minnet kallas för initiering Detta sker oftast i variabeldeklarationen –Ada »Sum:FLOAT := 0.0; –C » int antal= 0;

Anders Broberg, Programspråksteoridelen DVA Moment 2 26 Datatyper FORTRAN 1 (1956) - hade INTEGER, REAL, arrays Ada (1983) - Gav programmeraren möjlighet att skapa unika typer för varje kategori av variabel –Närmar oss abstrakta datatyper En deskriptor är en samling av attribut till en variabel (namn, typ,adress,..) –Om alla attributen är statiska behövs deskriptorn bara vid kompileringen annars så behövs hela eller delar av den under exekveringen. Designfrågor för alla datatyper –Hur skall man referera till variabler (syntaxen)? »X=3.14; »X:= 3.14; »Y = x+3; –Vilka operationer är definierade för och hur är de specificerade?

Anders Broberg, Programspråksteoridelen DVA Moment 2 27 Primitiva datatyper Sådana datatyper som inte kan definieras i termer av andra datatyper (enkla datatyper), heltal, flyttal, sanningsvärden Heltal (integer) –Nästan alltid en exakt avbildning av hårdvaran så avbildningen är nästan trivial » » Decimal (special flytal) –Används i ”busiess applications (COBOL?) »Lagrar ett fixt antal decimaler Bättre noggrannhet Begränsat omfång minnesslöseri

Anders Broberg, Programspråksteoridelen DVA Moment 2 28 Mer primitiva datatyper Flyttal –Modellerar reella tal, men är endast en aproximation –Språk för vetenskapliga beräkning brukar åtminstone ha två flyttalstyper ibland fler –Vanligtvis lika som hårdvaran men inte alltid en del språk så som Ada tillåter noggrannhets spec. i koden. »Type SPEED is digits 7 range ; »Type voltage is delta 0.1 range ; –Implementationsmässigt så delas ett flyttal upp i en decimaldel och en exponentdel »Decimaldelen styr noggrannhet »Exponentdelen styr storleken Boolean -sanningsvärden –sant eller falskt, o eller 1 –Kan implementeras som bitas, men oftast används en hel byte –Ökar läsbarheten i koden om true/false finns »Jämför med C där 0 är falskt och allt annat är sant i ett ”sanningsuttryck”