Ingen bildrubrik

January 9, 2018 | Author: Anonymous | Category: Engineering & Technology, Datavetenskap, Java Programming
Share Embed Donate


Short Description

Download Ingen bildrubrik...

Description

Programmering??

Handlar

mycket om att avbilda (modellera) objekt,fenomen och processer från den fysiska världen Vad har vi för byggstenar tillhands i detta arbete? 1

Anders Broberg, Programspråksteoridelen DVA Moment 2

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?

2

Anders Broberg, Programspråksteoridelen DVA Moment 2

Primitiva datatyper  

Sådana datatyper som inte kan definieras i termer av andra datatyper Heltal (integer) – Nästan alltid en exakt avbildning av hårdvaran så avbildningen är nästan trivial » 0001 0001 17 » 0000 0000 0



Decimal (special flytal) – Används i ”busiess applications (COBOL?) » Lagrar ett fixt antal decimaler   

3

Bättre noggrannhet Begränsat omfång minnesslöseri

Anders Broberg, Programspråksteoridelen DVA Moment 2

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 0.0..1000.0; » Type voltage is delta 0.1 range 12.0..34.5;

– 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

4

» Jämför med C där 0 är falskt och allt annat är sant i ett ”sanningsuttryck” Anders Broberg, Programspråksteoridelen DVA Moment 2

Mer primitiva datatyper 

Tecken – Lagras som numeriska värden (Heltal) – Olika koder » ASCII (0..127) 

A=65, B=66…a=97, 0..31 samt 127 är ej ”skrivbara”

» Unicode innehåller fler tecken används i Java 

Strängar – Värdet är en sekvens av tecken – Designfrågor » Är strängar en primitivtyp eller bara en specialvariant av array? » Är objektets längs statisk eller dynamsik?

– Vad kan man göra med strängar » » » » » »

5

Tilldelning Jämförelse (=, ”Hejsan” Referera till delsträngar Mönstermatchning Få information om längden

Anders Broberg, Programspråksteoridelen DVA Moment 2

Exempel på strängar i olika språk  

Pascal - Inte primitiv datatyp; tilldelning och jämförelse på strängar som är lagrade på som ”packed arrays” Ada, FORTRAN 77, FORTRAN 90, och BASIC – Primitiv datatyp, tilldelning, jämförelse, sammanslagning, samt delsträngsreferering finns – FORTRAN har även mönstermatchning



C och C++ - Inte primitiv datatyp – Använder teckenarrayer och biblioteksfunktioner för operationerna



SNOBOL4 (Ett språk för sträng manipulering) – Primitiv + många operationer på strängar inkl mönstermatchning



Perl – Kraftfull mönstermatchning mha. Reguljära uttryck



Java – String class (inte array av tecken som i C++)

6

Anders Broberg, Programspråksteoridelen DVA Moment 2

Mer om strängar (längd) 

Statisk längd - FORTRAN 77&90, Ada, COBOL, Pascal – Är alltid full alla tecknen är ockuperade



Begränsad Dynamisk längd - C och C++ – Man använder en null-tecknet för att markera strängslut – Kan lagra mellan 0 och maxtecken



Dynamisk längd - SNOBOL4 och Perl – Ingen maximal längd – Kräver mycket ”overhead”



Utvärdering av strängar – En hjälp för skrivbarheten – Som primitiv typ med statisk längd, väldigt billig att hantera, så varför inte ha dem?? – Dynamisk längd är bra, men är det värt kostnaden?



7

Implementationfrågor

Anders Broberg, Programspråksteoridelen DVA Moment 2

Ordnade typer (Användar definierade) 

En (ordnade typer) ordinaltyp är en typ som till omfånget av möjliga värden lätt kan avbildas på en mängd av heltal – Uppräkningsbara » En datatyp där användaren kan numrera alla möjlig värden, och värden är som symboliska konstanter » Designfråga

Skall en och samma symbolisk konstant kunna finnas i flera typdefinitioner?

» Utvärderingsfrågor 



Stöd för läsbarheten Stöd för tillförlitligheten -

– Delområdes » En ordnad delmängd av en ordnad typ » Designfråga 

8

Till vad och hur skall man kunna använda dem?

Anders Broberg, Programspråksteoridelen DVA Moment 2

Arrayer (Fält)    

Ordnad samling av homogena dataobjekt Varje element är identifierad genom sin position i samlingen relativt det första elementet Varje element (variabel) har alltså inget eget namn (anonyma variabler) Designfrågor – – – – – – –

9

Vilka typer kan man ha på referensobjektet? Är omfånget på referensuttrycken kontrollerade? När binds referensomfånget? När allokeras minnesutrymmet för arrayen? Vad är den maximala dimensionen på en array? Är det möjligt att initiera arrayobjekt? Vilka snitt är möjliga att göra?

Anders Broberg, Programspråksteoridelen DVA Moment 2

Arryer indexering 

Indexering: – Är en avbildning från indexmängden till värdemängden – Kan ses som en funktion(index)->värde



Arrayer är en form av tabeller

0 1 2 3 4 5 6 10

34 12 15 36 4 10 12

5 4 1 0 6 3 2

Anders Broberg, Programspråksteoridelen DVA Moment 2

Arryer syntax mm. 

FORTRAN, PLI, Ada använder paranteser – A(1..45)



De flesta andra använder hakparanteser – A[index] = 23;



Exempel på referenstyper i olika språk – FORTRAN och C - bara heltal som index – Pascal - vilken ordnad typ som helst » (int, boolean, char, enum)

– Ada - heltal och uppräkningsbara » inkluderat boolean och char

– Java - endast heltal (Java har inte enum. typer)

11

Anders Broberg, Programspråksteoridelen DVA Moment 2

Typer av Arrayer 



På samma sätt som för variabler så delas arrayer in i fyra olika kategorier efter livslängd, så delas arrayer in i fyra kategorier baserad på bindning av minnes och indexeringområde Oftast tillåter ett språk endast en av dessa varianter – Statiska » Både områdes och minnet binds statiskt » Ingen allokering/deallokering under exekvering » FORTRAN och Ada

– Fixed stackdynamisk » » » »

12

Indexeringsområdet binds statiskt Minnet binds när en deklarationssats påträffas/utförs under exekvering Lokala arrayer i Pascal, och lokals som inte är static i C Minneseffektivt, viss OH-för allokering/deallokering

Anders Broberg, Programspråksteoridelen DVA Moment 2

Typer av Arrayer forts. 

Stackdynamisk – – – – –



Heap (hög)-dynamisk – – – – – –

13

Minnet binds dynamiskt Indexeringsområdet binds dynamiskt Men båda är fix under hela livstiden Deklarations block i Ada Flexibelt - man behöver inte känna till storleken förrän arrayen skall användas i programmet Minnet binds dynamiskt Indexeringsområdet binds dynamiskt Och båda är dynamsika under hela livstiden Finns i FORTRAN 90 och Java Samt I APL och Perl så växer/minskar minnesutrymmet efter behov

Anders Broberg, Programspråksteoridelen DVA Moment 2

Arrayer max antal dimensioner   

FORTAN 1 tillåter max 3 dimensioner FORTAN 77 upp till 7 dimensioner C, C++, och Java tillåter bara 1 dimension men elementen kan vara arrayer => obegränsat med dimensioner – Var int x[ 2][4 ][ 5];



Andra språk så som Pascal, Modula-2 har ingen begränsning – Var x[0..2,0..3,0..4] of integer;

14

Anders Broberg, Programspråksteoridelen DVA Moment 2

Arrayer - initiering av värden  

Vanligtvis beskriver man en lista av elementvärden som stoppas in i arrayen i den ordning som elementen står i listan Exempel – FORTRAN - använder en speciell DATA sats eller stoppar in värden i /…/ i delaratioen – C och C++ - anger man värden innanför {….} – Kompilatorn kan räkna dem » int stuff[]={2,4,5,6,0}; » Calloc(antal,storlek) nollställer alla element

– Ada - positioner kan specificeras » SCORE: array(1..14,1..2) := (=>(24,10),2 =>(10,7) others=>(0,0)

– Pascal och Modula-2 - tillåter ingen arrayinitiering

15

Anders Broberg, Programspråksteoridelen DVA Moment 2

Operationer på arrayer 

Operationer på arrayer som helheter brukar inte vara så vanliga, trots att arrayer är viktiga i många tillämpningar inom vetenskapliga beräkningar. – FORTRAN 77 - har inga arrayoperationer – Ada - tilldelning RHS kan vara en arraykonstant eller arraynamn » Sammanslagning på 1D samt = och /=

– APL - ett exempel på språk med många operationer på arrayobjekt » » » » » »

Reverserar element i en vektor Reverserar kolumn/rad vektor elementen i en matris Transponerar en matris Inversen på en matris Innerprodukten mm. Möjlighet att enkelt bygga egna mha •

– FORTRAN 90 har en bred uppsättning av inbyggda (underprogram) för arrayoperationer » Matrismultiplikation » Vektor kryssprodukt, mm

16

Anders Broberg, Programspråksteoridelen DVA Moment 2

Arrayer - slices (snitt) 

Slices är ett sätt att referera till en del av en array – Det är en referensmekanism



Exempel – FORTRAN 90 » INTEGER MAT(1:4,1:4) » MAT(1:4,1) -> första kolumnen » MAT(2,1:4) -andra kolumnen

– Ada - fungera endast på 1D arrayer (vektorer) » LIST(4..35) 

Implementation (kursivt) – Accessfunktioen avbildar indexeringutrycken till adresser i arrayen – Rad-implementation » C, C++

– Kolumn-implemenation » FORTRAN

17

Anders Broberg, Programspråksteoridelen DVA Moment 2

Associativa arrayer 

Är en oordnad samling av dataelement (homogen) som är indexerade med en lika stor samling av värden (nycklar). – Lexicon » (Nyckel,värde)

– Finns i » Java, Perl 

Designfrågor – På vilken form är referenserna till elementen? anka – Är storleken statisk eller dynamisk

korp rödhake påfågel gås kråka stenbit

18

Anders Broberg, Programspråksteoridelen DVA Moment 2

34 12 15 36 4 10 0

View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF