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

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!

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

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

Enkla datatyper minne

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

Sammansatta datatyper Generics: Parametrisk polymorfism

TDDD78 Objektorientering i Java, del 2

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

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

Objektorientering: Lagring och livstid

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

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

Parameteröverföring. Exempel. Exempel. Metodkropp

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

Föreläsning 8: Aritmetik och stora heltal

TDDD78 Objektorientering: Lagring och livstid

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

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

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?

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

Repetition av OOP- och Javabegrepp

Objektorientering: Lagring, räckvidd och livstid

Repetition av OOP- och Javabegrepp

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

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

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

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

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

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.

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

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

Objektorienterad programmering Föreläsning 4

TDDD78 Viktiga begrepp, del 2

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

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?

Classes och Interfaces, Objects och References, Initialization

TDDC77 Objektorienterad Programmering

Konvertering från sträng. Winstrand Development

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

(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

Imperativ programmering. Föreläsning 2

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

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

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

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

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

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

TDDC77 Objektorienterad Programmering

Övning2. Variabler. Data typer

TDDE44 Programmering, grundkurs

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

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

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

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

Data, typ, selektion, iteration

Programmeringsteknik I

Föreläsning 2 - Intro till Java

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

Programmering A. Johan Eliasson

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

Grunderna i stegkodsprogrammering

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

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

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

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

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

Winstrand Development

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.

Sammansatta datatyper Generics: Parametrisk polymorfism

Typkonvertering. Java versus C

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Objektorienterad Programmering DAT043. Föreläsning 1 15/1-18 Moa Johansson

Objektorienterad programmering

F4. programmeringsteknik och Matlab

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

OOP Objekt-orienterad programmering

Objektorienterad programmering i Java

Heltalsrepresentation. Fler byggstenar. Overflow och Underflow. TvŒ-komplement. FlyttalsvŠrden. Fyra heltalstyper. Tecken-bit

TDDD78, TDDE30, 729A Tecken och strängar med och utan Java

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

kl Tentaupplägg

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

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! TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018

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) // Lagra en byte på adress 49152 // Håll själv reda på att inget annat ska lagras där! // 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? ) // 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) // Översätts till en adress, kanske 37000, // när man vet var det finns plats // 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 Bara "vettiga" operationer är möjliga 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 Minne

Intro till variabler (5) 7 Vi kan skriva över gamla värden # Samma variabel, # samma lagringsplats, # samma minnesadress (som vi oftast inte vet / bryr oss om!), # nytt värde Minne

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 Minne vid körning 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 heltalsutskrift Symboliskt namn (används i koden) Lagringsplats för ett värde Heltal listutskrift Heltal Sträng fel vid körning! 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 Heltal Heltal Heltal Sträng Lista Sträng 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 Dessutom: Typdeklarationer är dokumentation! 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)

Konsekvenser: För utvecklingsmiljöer 18 Bättre kodanalys t.ex. för komplettering (ctrl-shift-space) Mycket annat börjar på R, men bara dessa har rätt typ http://jetbrains.dzone.com/articles/top-20-code-completions-in-intellij-idea

Brasklapp 19 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 21 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 22 Operationer på heltal kan ge overflow "översvämning"! Operander av typ : Multiplikation av 32-bitarstal: 32 bitar slutresultat

Overflow 23 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 24 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) 25 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 26 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 27 Konvertera med en cast Beräkning, sedan trunkering (avhuggning) Beräknar värdet: (int) trunkerar detta till: Mer:

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

Vad är sant / falskt? 29 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 31 Vissa typer ska bara ha några få fördefinierade värden Day: Monday, Tuesday,, Sunday Suit: Clubs, Diamonds, Hearts, Spades

Emulering 32 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 33 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 34 Distinkt typ (inte int) typsäkerhet Håller reda på namn: Skriver ut "THURSDAY", inte 4

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

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

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