Variabler, värden och typer

Relevanta dokument
Variabler, värden och typer

Variabler, värden och typer

Mer Java 2015

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Enkla datatyper minne

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Sammansatta datatyper Generics: Parametrisk polymorfism

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

TDDD78 Objektorientering i Java, del 2

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd!

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Parameteröverföring. Exempel. Exempel. Metodkropp

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Föreläsning 8: Aritmetik och stora heltal

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Programmering för språkteknologer I, VT2012. Rum

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

Övning2. Variabler. Data typer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal.

Objektorienterad programmering Föreläsning 4

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Klassdeklaration. Metoddeklaration. Parameteröverföring

OOP Objekt-orienterad programmering

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Classes och Interfaces, Objects och References, Initialization

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

TDDD78 Viktiga begrepp, del 2

TDDC77 Objektorienterad Programmering

Språket Python - Del 1 Grundkurs i programmering med Python

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Konvertering från sträng. Winstrand Development

Imperativ programmering. Föreläsning 2

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

TDDC77 Objektorienterad Programmering

TDDD78 Objektorientering: Lagring och livstid

Objektorientering: Lagring och livstid

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

TDA550 Objektorienterad programmering, fortsättningskurs. Föreläsning 1. Introduktion Variabler och typer

Studentportalen UNIX-konton (systemansvariga P4118) Lärare: Tom Smedsaas,

Lektion 4. Datateknik A, Java I, 5 poäng

1 Funktioner och procedurell abstraktion

Data, typ, selektion, iteration

Programmeringsteknik I

Föreläsning 2 - Intro till Java

TDDE44 Programmering, grundkurs

Extramaterial till Matematik Y

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

F4. programmeringsteknik och Matlab

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Programmering A. Johan Eliasson

Grunderna i stegkodsprogrammering

Objektorienterad programmering i Java

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

TDDD78 / 729A85 Objektorienterad programmering och Java. Kursinformation Java: Varifrån och varför? Java för Pythonprogrammerare

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

Introduktion till programmering och Python Grundkurs i programmering med Python

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

OBS! All teori i detta och följande dokument kompletteras med genomgångar på lektionerna. Så det är viktigt att närvara och göra egna anteckningar.

Typkonvertering. Java versus C

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Introduktion till Java

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Tvådimensionella fält

Objektorienterad programmering

Transkript:

Variabler, värden och typer Viktigt att förstå på djupet: För programmering i många språk, t.ex. Java För kommande objektorientering! jonas.kvarnstrom@liu.se 2017

Fråga kommentera avbryt!

Intro till variabler (1) Vad är en variabel? I begynnelsen fanns minnet som var fullt av heltal och minnesadressen (ett "index" för varje byte) STA 49152 // Lagra en byte på adress 49152 // Håll själv reda på att inget annat ska lagras där! LDA 49152 // Läs in en byte från adress 49152 // Håll själv reda på hur denna byte ska tolkas // (Heltal? Bokstav? Index i lista av färger? ) JMP 8282 // Hoppa till nästa instruktion på adress 8282 3 00000 64 kbyte minne 49152 (På denna sida: 6502-assemblerkod) 2 16 1 = 65535

Intro till variabler (2) 4 00000 Sedan uppfanns etiketten (label) colornum: // Översätts till en adress, kanske 37000,.byte 03 // när man vet var det finns plats STA colornum LDA colornum JMP colornum // Lagra på namngiven minnesadress // Oops, undrar vad färgnumret betyder // när det tolkas som en instruktion! En första nivå av abstraktion! 37000 64 kbyte minne Konkret adress, 37000 Abstrakt namn, colornum 65535

Intro till variabler (3) 5 Abstrahera språket mer en variabel: En lagringsplats (en eller flera bytes) Ett symboliskt namn på lagringsplatsen längd = 10 höjd = 5 Bara "vettiga" operationer är möjliga JMP colornum; längd höjd 10000 10003 10 10004 10007 5 Minne Minnesadressen kan bli osynlig i språket! Men den finns ändå där

Intro till variabler (4) 6 Kan stödja fler datatyper: Strängar Listor längd höjd 10000 10003 10 10004 10007 5 längd = 10 höjd = 5 hälsning = "hello" färger = [red, green] Minne hälsning 40000-40024 "hello" färger 50000-50020 [red, green]

Intro till variabler (5) Vi kan skriva över gamla värden längd = 10 höjd = 5 hälsning = "hello" färger = [red, green] längd höjd 10000 10003 10 47 10004 10007 5 7 längd = 47 # Samma variabel, # samma lagringsplats, # samma minnesadress (som vi oftast inte vet / bryr oss om!), # nytt värde hälsning 40000-40024 Minne "hello" färger 50000-50020 [red, green]

Variabler: Sammanfattning 8 Så: En variabel används för att lagra ett värde, och består av: En lagringsplats i minnet, där ett värde kan placeras Ett symboliskt namn på lagringsplatsen, som används i koden Python Programkod längd Minne vid körning 10 höjd 5 hälsning färger "Hello" [red, green] Variabel = en "låda" för ett värde: Värdet kan bytas ut (längd = 22), men det är fortfarande samma variabel

Värdetyper 10 Varje värde har en typ heltal, decimaltal, Vissa språk håller inte reda på den Assembler: Ingen typkontroll Värdetyp "sparas" inte, kontrolleras aldrig Inget fel signaleras Resultat: "Skumma värden" Exempel: Lagra decimaltal 3.5 4 bytes, hex 40 60 00 00 Läs som heltal, 4 bytes, hex 40 60 00 00 heltal 1 080 033 280

Värdetyper 11 Men de flesta, även Python, håller reda på värdets typ Även om man sällan skriver typnamnet Programkod Minne vid körning print(längd) print(10) heltalsutskrift Symboliskt namn (används i koden) längd Lagringsplats för ett värde int 00 00 00 0A 10 Heltal print(färger) print([red,green]) listutskrift räknare hälsning int 48 65 6A 21 1 214 605 857 str 48 65 6A 21 Hej! Heltal Sträng färger + 2 fel vid körning! färger list [red, green] Lista

Variabeltyper 12 I många språk har även variabeln en typ Gäller Java, C, C++, Pascal, Ada, Men inte Python Programkod Minne vid körning Symboliskt namn (används i koden) Lagringsplats för ett värde Heltal längd 10 Heltal Heltal höjd 5 Heltal Sträng hälsning "Hello" Sträng Lista färger [red, green] Lista

Variabeltyper latent typing manifest typing 13 Java: Manifest typsystem (variabeltyp anges explicit i koden) Python: Latent typsystem (bara värdet har en typ) längd är en heltalsvariabel som alltid innehåller ett heltal längd är en vad-som-helst-variabel som just nu innehåller ett heltal Varför variabeltyper? Varför ange dem explicit?

När vet man värdetypen? 14 Latent typsystem: Python Manifest typsystem: Java Kompilatorn vet mer (kan optimera mer effektivare) Vi vet mer (typerna är dokumentation)

Konsekvenser: Typkontroll 15 Python: Dynamisk typkontroll Java: Statisk typkontroll Går det att addera? Kolla värdetyp vid körning Om inte numeriskt: Signalera fel Går det att addera? Kolla variabeltyp vid kompilering Om inte numeriskt: Signalera fel dynamic type checking static type checking

Konsekvenser: Val av operation 16 Python: Dynamisk typkontroll Java: Statisk typkontroll Måste kolla vid körning: x heltal? Addera 10 direkt x är heltal! Addera direkt x flyttal? Konvertera 10 till 10.0, addera x annat? Signalera fel!

Konsekvenser: Minnesutrymme 17 Python: Dynamisk typkontroll Java: Statisk typkontroll Hur kolla typen hos b:s värde? Måste lagra typen med värdet Hur kolla typen hos b:s värde? Variabelns typ är int, värdet måste ju ha samma typ x heltal 10 int x 10 delvis därför kan ett heltal ta 24 bytes Ett heltal tar 4 bytes (int), 8 bytes (long)

Brasklapp 18 En brasklapp: Terminologin för typsystem är ofta otydlig och omtvistad Många termer brukar blandas ihop Statisk typning Statisk typkontroll Manifest typning Stark typning Det viktigaste är begreppen och dess konsekvenser Även dynamisk typning (Python) har fördelar! Mindre att skriva Mer flexibilitet i vissa fall

Primitiva (grundläggande) typer i Java 20 Heltalstyper lika på alla plattformar! Används sällan Vanligast! "L" indikerar "långt heltal" Två flyttalstyper skiljer i precision och storlek ± ± ± ± Övrigt

Stora tal 21 Operationer på heltal kan ge overflow "översvämning"! Operander av typ : Multiplikation av 32-bitarstal: 32 bitar slutresultat

Overflow 22 Varför overflow i Java, men inte Python? Historiskt "Så var det ju i C och C++" Effektivitet! Java: 32-bitars multiplikation, klar. Annars: Python: Testa storlek, allokera minne för resultat,

Använd större datatyp 23 Beräkningar använder den största av operandernas typer är en int (inget "L") 32 bitar slutresultat Kan verka korkat Sedan expanderas detta till 64 bitar men är mer förutsägbart: Resultat beror bara på operandernas typer

Använd större datatyp (2) 24 Beräkningar använder den största av operandernas typer Största operanden är long Expandera den andra "131072" till long Utför 64-bitars multiplikation Expandering tappar aldrig information sker automatiskt!

Farliga" typkonverteringar 25 Konstanter och funktioner i Math-klassen Kompileringsfel! Math.sqrt returnerar en double Att konvertera double till int kan tappa information "farligt" Måste uttryckligen be om konvertering!

Typkonvertering: Casting 26 Konvertera med en cast Beräkning, sedan trunkering (avhuggning) Beräknar värdet: (int) trunkerar detta till: Mer:

Utan casting 27 Byt variabeltyp Beräkningar Beräknar värdet: Skriver ut det

Vad är sant / falskt? 28 Python: Automatisk konvertering Java: Bara boolean-värden Ofta bekvämt Kan leda till misstag Mer att skriva Ibland tydligare Kan förhindra misstag

Bakgrund 30 Vissa typer ska bara ha några få fördefinierade värden Day: Monday, Tuesday,, Sunday Suit: Clubs, Diamonds, Hearts, Spades

Emulering 31 Kan emuleras på många sätt, t.ex. med heltalskonstanter Inte typsäkert! Stödjer nonsensoperationer Efter kompilering finns bara heltalen kvar svårare att tolka Värdet är 4 betyder det torsdag eller fredag? Eller kanske grönt, spader eller giraff?

Uppräkningstyper 32 Java har stöd för uppräkningstyper (enumerated types) Man räknar upp vilka värden som finns Sju enumkonstanter Inga nonsens-operationer tillgängliga Namngivningskonvention: ALL_CAPS för konstanter enum-konstant = enum constant

Uppräkningstyper: Typsäkerhet 33 Distinkt typ (inte int) typsäkerhet Håller reda på namn: Skriver ut "THURSDAY", inte 4

Uppräkningstyper: Index 34 Vi kan få ut index för ett värde

Uppräkningstyper 35 Vi kan få ut ett värde med givet namn och en lista på alla värden

Jämförelse 36 Sämsta lösningen: Konstanter utan namn Gammal lösning: Namngivna heltal Bäst, vid fixerade värden: Uppräkningsbar typ