Introduktion till Java

Relevanta dokument
Introduktion till Java. (del1)

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Objektorienterad programmering i Java

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Introduktion till Java

(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

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

OOP Objekt-orienterad programmering

Tommy Färnqvist, IDA, Linköpings universitet

Arrayer. results

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

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

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

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

Föreläsning REPETITION & EXTENTA

Samlingar Collection classes

Repetition av OOP- och Javabegrepp

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Sammansatta datatyper Generics: Parametrisk polymorfism

Classes och Interfaces, Objects och References, Initialization

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

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Repetition av OOP- och Javabegrepp

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

OOP Objekt-orienterad programmering

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

OOP Objekt-orienterad programmering

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

Föreläsning 5: Introduktion av pekare

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

TDIU01 - Programmering i C++, grundkurs

Typkonvertering. Java versus C

Föreläsning 5-6 Innehåll

Laboration 1 - Grunderna för OOP i Java

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3: Booleans, if, switch

DAT043 - föreläsning 8

F4. programmeringsteknik och Matlab

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Klasshierarkier - repetition

Imperativ programmering. Föreläsning 2

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Tentamen ID1004 Objektorienterad programmering May 29, 2012

TDDC77 Objektorienterad Programmering

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

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Länkade strukturer. (del 2)

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

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning 6: Introduktion av listor

[] Arrayer = Indexerad variabel

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

Konstruktion av klasser med klasser

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Föreläsning 3-4 Innehåll

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

JAVAUTVECKLING LEKTION 8

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Föreläsning 2. Länkad lista och iterator

Tentamen OOP

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Felsökning, UML. Översikt. Java starkt typat. Typomvandling (casting) Exempelhierarki. Stark typning

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Föreläsning 4 Innehåll

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

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

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.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Föreläsning 2, vecka 8: Repetition

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

TDDD78 Viktiga begrepp, del 2

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Transkript:

Översikt Introduktion till Java (del2) Vad är det som händer när man kör Java? Kompilator (före körning) Interpretator (under körning) Statisk vs. dynamisk variabelbindning Parameter-passing Call by value i Java Användbara datastrukturer Arraylistor Programmering tillämpningar och datastrukturer 2 Program i Java >> javac MyCode.java Producerar MyCode.class Filstruktur i NetBeans Maskin/operativsystems-beroende kod för Java Virtual Machine (JVM) >> java MyCode Koden tolkas (interpreteras) steg-försteg under körning Varje klassdefinition i egen fil Biblioteksfiler (paket) Programmering tillämpningar och datastrukturer 3 Programmering tillämpningar och datastrukturer 4 Kompilering JVM källkod Hello.class kompilator Hello.java Hello.class Unix Windows Darwin RAM RAM RAM CPU CPU CPU Javabytekod AMD Intel Mac Programmering tillämpningar och datastrukturer 5 Programmering tillämpningar och datastrukturer 6 1

Mjukvarudator Varför i två steg? Java Virtual Machine (JVM) Implementeras olika på olika plattformar Interpreterar Java-program (.class) Finns aldrig några maskinkodsfiler (exe-filer, eller bin-filer) för användarens program Interpretering Dels operativsystemsberoende Solaris, Darwin, Windows Dels hårdvaru-beroende Unix, Mac, PC Gäller speciellt grafiken 1. Kompilering av källkod (.java) Build (flera filer som ska kopplas samman) 2. Interpretering av bytecode (.class) Gör språket Java plattformsoberoende! Möjliggör dynamisk bindning Programmering tillämpningar och datastrukturer 7 Programmering tillämpningar och datastrukturer 8 Att köra program Compiling filsystem import java.util.*; mylist.add(elem); import java.util.*; java.util.mylist.add(elem); RAM cache förinladdning av material som snart kommer att behövas Djur d = getnext(mylist); d.presenteradig(); Djur d = getnext(mylist); d.presenteradig(); CPU metoddefinition Programmering tillämpningar och datastrukturer 9 Programmering tillämpningar och datastrukturer 10 Varför interpreterat? Polymorfism Polymorfism dvs. samma namn på metod i superklass och subklass Ex.vis. fågel.flyga och pingvin.flyga Problem: objekt skapas dynamiskt under körning Går inte att veta i förväg vilken flyga som ska länkas in i koden Fågel fågel; String fågeltyp; fågeltyp = JOptionPane.showInputDialog( Which bird do you want to create, Penguin (P) or Dove (D)?"); if (fågeltyp == P ) { fågel = new (); else { fågel = new Duva(); fågel.flyga(); Fågel.flyga() eller.flyga() Programmering tillämpningar och datastrukturer 11 Programmering tillämpningar och datastrukturer 12 2

Varför interpreterat? Variabelbindning Omöjligt att i förväg veta vilken metod (= kod) som kommer att behöva exekveras Kräver dynamisk bindning av variabel (t.ex. flyga) till innehåll (t.ex. koden för.flyga) Två sätt att veta till vilket värde en variabel ska bindas: 1. Bestäms av syntaktiska strukturen hos koden i filen 2. Bestäms av exekveringsflödet genom koden (kontrollstrukturen) Kan påverkas av if-then-satser, användarinput, etc. Dynamisk Programmering tillämpningar och datastrukturer 13 Programmering tillämpningar och datastrukturer 14 Variabelbindning (Lisp) Statisk bindning (let ((n 1)) (defun addn (z) (add n z)))... (let ((n 2)) Länka in detta n eftersom definitionen av addn sitter i den här omgivningen Variabelns värde bestäms av dess plats i programmet Binds inom närmast omslutande programblock där variabeln är deklarerad (addn 3)) detta n eftersom anropet sker i den här kontexten Kompilatorn ersätter variabeln med rätt värde eller kod i exe-filen Statisk bidning 4 Dynamisk bindning 5 Programmering tillämpningar och datastrukturer 15 Programmering tillämpningar och datastrukturer 16 Dynamisk bindning Ex. språk med statisk bindning Variabelns (funktionsnamns) värde kan inte säkert bestämmas förrän programmet körs Common Lisp använder statisk bindning Fria variabler binds vid definitionstillfället Löses genom dynamisk bindning Hela definitionsomgivningen skickas med när funktionen skickas som argument till annan funktion Implementeras genom interpretering, dvs. att programmet tolkas en sats i taget under körning Obs! InterLisp, etc. använder dynamisk bindning Programmering tillämpningar och datastrukturer 17 Programmering tillämpningar och datastrukturer 18 3

Java Parametrar argument Måste använda dynamisk bindning P.g.a. polymorfism Därför körs JVM interpreterat Plussidan: flexibilitet Nackdel: långsam Just-in-time kompilering ger något förbättrad prestanda Parameter (formell parameter) när en metod definieras public static int add(int a, int b) { Argument (aktuell parameter) vid anrop Math.add(3,4) Vid anrop: parametern ska bindas till argumentet (det aktuella värdet) Programmering tillämpningar och datastrukturer 19 Programmering tillämpningar och datastrukturer 20 Anropssätt Call-by-value Call-by-value Skicka värdet Kopia Call-by-name Skicka en referens Original Call-by-need Kompromiss Anrop: misse.sättålder(ålder+1); Steg1: Evaluera ålder+1 Steg2: Lägg värdet på anropsstacken (nytt värde, ny plats i minnet, ny referens till platsen) Steg3: Lämna över kontrollen till metoden, tillsammans med en pekare till stacken (och värdet) Programmering tillämpningar och datastrukturer 21 Programmering tillämpningar och datastrukturer 22 Call-by-name Viktigt om CBV eller CBN Anrop misse.sättålder(ålder+1); Steg1: Ersätt parametern på alla platser i metod-kroppen med ålder+1 Steg2: Börja exekvera metoden Steg3: Evaluera argumentet vid behov (dvs. om programmet hamnar där) Slipper evaluera farliga argument (som skulle ha gett oändlig loop) Argument kan komma att evalueras flera gånger onödigt public static void admission(boolean highachiever, int avggrade) { if (highachiever) { admittomastersprogram(); else { evaluate(avggrade);... public static void main(string[] args) { int[] results = new int[10]; // register results topstudent = true; // admission(topstudent, results[10]); Ger körfel om det evalueras! Programmering tillämpningar och datastrukturer 23 Programmering tillämpningar och datastrukturer 24 4

Call-by-need Jämförelse Lat evaluering Fördröjd evaluering tills argumentet faktiskt används i metoden Evalueras en gång (till skillnad mot CBN) Värdet sätts på anropsstacken Nästa gång bara att slå upp Kombinerar fördelarna med CBV och CBN Call-by-value Enkel Argumenten evalueras en gång före anrop Call-by-name Kan undvika vissa beräkningar Oändliga loopar Odefinierade operationer (div med 0) Ger ren semantik bevisbar programkorrekthet Call-by-need Programmering tillämpningar och datastrukturer 25 Programmering tillämpningar och datastrukturer 26 Java Skillnad på det som skickas Java kör call-by-value Primitiv variabel (ex. int, double, boolean) Innehåller själva värdet Referens Adress till ställe i datorns minne Programmering tillämpningar och datastrukturer 27 Programmering tillämpningar och datastrukturer 28 Variabler i Java CBV i praktiken call-by-reference int n String namn datorns RAM-minne 3F02E3A0 3F02E3A1 123 3F02E3A2 3F02E3A5 3F02E3A3 3F02E3A4 3F02E3A5 Kalle 3F02E3A6 CBV Evaluering ger själva referensen Binds vid anrop till parametern Både anroparen och den som anropas refererar då till samma objekt OBS! Den som anropades kan förstöra för anroparen Kan förändra objektet som de två referenserna pekar på Programmering tillämpningar och datastrukturer 29 Programmering tillämpningar och datastrukturer 30 5

Användbara datastrukturer Samling av data int[] minatelnummer = new int[30]; // allokering av tillräckligt // stort minnesutrymme refereras genom indexering ringa = minatelnummer[25]; // indexering Direktinitiering: int[] minalottonummer = {1 4 8 12 15; // allok genom initiering Programmering tillämpningar och datastrukturer 32 av typen int-array Snabb access Alla element tar lika stor plats int[] telnr new int[5]; plats för 5 element length-1 Går att räkna ut var n:te elementet ligger från startpunkten Datorn snabb på att ta fram data som ligger på en viss minnesadress, om man vet adressen Konstant åtkomsttid, oberoende av position i arrayen Programmering tillämpningar och datastrukturer 33 Programmering tillämpningar och datastrukturer 34 Objekt som innehåll public class { int ålder; String namn; public () { // konstruktor namn = a namn = p namn = a namn = n namn = andraensnamn = minarray[1].namn; Programmering tillämpningar och datastrukturer 35 Programmering tillämpningar och datastrukturer 36 6

Typomvandling (casting) Kan ha array av vad som helst int[] tel new int[10]; [] minaer [3]; Om man har blandade element Test med instaceof och typomvandling Object[] mina = new Object[5]; mina[0] = bok; // initiering mina[1] = pelle; if mina[0] instanceof Bok { Bok första = (Bok) mina[0]; första.bläddratill(42); Programmering tillämpningar och datastrukturer 37 Programmering tillämpningar och datastrukturer 38 MÅSTE allokera utrymme i förväg! String[] mystrings; mystrings = new String[10]; pekar på null Vad händer om 10 element visar sig vara för litet? String[] mystrings; mystrings = new String[10]; // fyll med inehåll mystringsbigger = new String[20]; // ny dubbel storlek System.arrayCopy(myStrings, 0, mystringsbigger, 0, 10); mystrings = mystringsbigger; GC tar hand om gamla string-arrayen Programmering tillämpningar och datastrukturer 39 Programmering tillämpningar och datastrukturer 40 Array av arrayer Array av arrayer double[][] matris = new double[3][5]; Egentligen en array av objekt, av typen array [0][0] [0][4] matris matris[0] [2][0] [2][4] matris[1] matris[2] Programmering tillämpningar och datastrukturer 41 Programmering tillämpningar och datastrukturer 42 7

Fördefinierad datatyp i Java Ger lite mer flexibilitet är arrays Baseras på arrays Snabbare åtkomst än för listor Bra om man vill Lägga till nya element Vad man inte kan göra Ändra längden (kapaciteten) Men ändå kunna komma åt elementen i vilken ordning som helst Då slängs gamla och en ny skapas Lägga in eller ta bort element utan att behöva flytta på andra element Programmering tillämpningar och datastrukturer 43 Programmering tillämpningar och datastrukturer 44 Användning jobbar med Object Kan inte lägga in primitiva datatyper Måste först slå in dem i en wrapper class new Integer(42); minatal = new (); int[] tal = {5, 7, 2, 15; int i; for (i = 0; i < tal.length; i++) { minatal.add(new Integer(tal[i])); i = 0; while (i < minatal.size()) { System.out.print(minaTal.get(i) + ", "); i++; wrapper class Programmering tillämpningar och datastrukturer 45 Programmering tillämpningar och datastrukturer 46 [0] [1] [2] [0] [1] [2] [3] data = k data = k data = e minabokstäver.add(new ( e )); minabokstäver.add(1, new ( a )); Programmering tillämpningar och datastrukturer 47 Programmering tillämpningar och datastrukturer 48 8

data = k data = a data = e data = c data = a data = e c = new ( c ); minabokstäver.set(0, c); minabokstäver.indexof(c); 0 Programmering tillämpningar och datastrukturer 49 Programmering tillämpningar och datastrukturer 50 Några metoder i data = c data = a data = e minabokstäver.indexof(l); 2 Object get(int index) Object set(int index, Object o) int size() boolean add(object o) void add(int index, Object o) indexof(object o) remove(int index) remove(object o) Programmering tillämpningar och datastrukturer 51 Programmering tillämpningar och datastrukturer 52 Generiska datatyper Generic types <Fågel> minafåglar = new <Fågel>(); // fill the list <Fågel> for (i = 0; i < minafåglar.size(); i++) { Fågel f = minafåglar.get(i); // no need to downcast Without initialization: compiler error when trying to do add(); Programmering tillämpningar och datastrukturer 53 Programmering tillämpningar och datastrukturer 54 9