Föreläsning 16. Tobias Wrigstad

Relevanta dokument
Föreläsning 22. Tobias Wrigstad. Under huven på JVM. Bytekod. JIT. Reflection. Profiling.

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

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

Classes och Interfaces, Objects och References, Initialization

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Programmering för språkteknologer II, HT2011. Rum

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

F4. programmeringsteknik och Matlab

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

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

OOP Objekt-orienterad programmering

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

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

Att skriva till och läsa från terminalfönstret

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Lösningar för tenta 2 DAT043,

Föreläsning 8: Exempel och problemlösning

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

OOP Objekt-orienterad programmering

Objektorienterad programmering i Java

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

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

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

LULEÅ TEKNISKA UNIVERSITET

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

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

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

TDDD78 Viktiga begrepp, del 2

Språkkonventioner och redigering av tal.

TDDC77 Objektorienterad Programmering

Tentamen FYTA11 Javaprogrammering

Tommy Färnqvist, IDA, Linköpings universitet

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

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

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

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

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

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

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Länkade strukturer. (del 2)

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.

Objektorienterad Programmering (TDDC77)

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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

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

(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

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

DAT043 Objektorienterad Programmering

SMD 134 Objektorienterad programmering

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

OOP Objekt-orienterad programmering

Tillämpad programmering

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

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

Imperativ programmering. Föreläsning 4

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Föreläsning REPETITION & EXTENTA

F1 - Introduktion. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Tentamen Programmering fortsättningskurs DIT950

Recitation 4. 2-D arrays. Exceptions

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

Programmering A. Johan Eliasson

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

Lösningar för tenta 3 DAT043,

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Föreläsning 4 Innehåll

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

Den som bara har en hammare tror att alla problem är spikar

Grundläggande programmering med C# 7,5 högskolepoäng

TENTAMEN OOP

Tentamen, EDAA20/EDA501 Programmering

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

Felhantering. Andra brott mot språkets regler. Man kan också i programmet bryta mot ett antal olika regler som gäller. Exempelvis:

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

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

Transkript:

Föreläsning 6 Tobias Wrigstad Imperativ och objektorienterad programmering

Vem använder Java? Källa: Tiobe

Källa: Tiobe

Källa: Tiobe

Java är plattformsoberoende Datatyper har en standardstorlek Samtliga klasser i standardbiblioteket finns på alla maskiner Javas minnesmodell är densamma på alla maskiner Ditt program kommer att bete sig likadant på din kompis dator Du behöver inte ens kompilera om programmet du kan flytta det rakt av Caveat: Gränssnittsprogram och OS-specifika tjänster C:\foo\bar.txt vs. /foo/bar.txt

Java är plattformsoberoende Type Default Size Example Literals boolea false bit true, false byte 0 8 bits (none) char \u0000 6 bits 'a', '\u004', short 0 6 bits (none) int 0 32 bits -2, -, 0,, 2 long 0 64 bits -2L, -L, 0L, L, 2L float 0.0 32 bits.23e00f, double 0.0 64 bits.23456e300d, Datatyperna är samma oavsett plattform

Automatisk minneshantering Objects know their size (but we may not!) new LinkedList(); Unreachable objects are reclaimed Unused objects are not /// This program does not leak LinkedList list = new LinkedList(); for (int i = 0; i < 000000; ++i) { list.add(new Object()); list = null; /// This program does might leak LinkedList list = new LinkedList(); for (int i = 0; i < 000000; ++i) { list.add(new Object());

Metadata En objekt känner sitt ursprung Object o = new Person(); o instanceof Person // true Class c = o.getclass(); c.newinstance(); // skapa en ny person Reflection och introspection Method m = o.getclass().getmethod( setname, String.class); ms.invoke(o, Barbara ) for (Method m : c.getmethods()) { if (m.startswith( test )) m.invoke(); and more, e.g., array.length

Inkapsling Namnbaserad inkapsling styr vem som får nämna ett visst namn Node är bara en valid typ inuti LinkedList Kräver aktivt ställningstagande från dig! Standard är package dvs. åtkomligt överallt från modulen public class Pair { private Object fst; private Object snd; Object getfst() { return this.fst; void setfst(object o) { this.fst = o; public class LinkedList { private Node first = new Node(); private class Node { Node next; Object element; public Node(Object o, Node n) { this.element = o; this.next = n; public void prepend(object o) { this.first = new Node(o, this.first);

Världens rikaste standardbibliotek(?) Sök på java 0 api KlassensNamn Genererat med JavaDoc utifrån kommentarer i källkoden inspiration för D9 Indelat i paket; viktigaste paket för er: java.lang Grundläggande objekt, och systemobjekt java.util Vanliga datastrukturer, StringTokenizer java.io I/O http://docs.oracle.com/javase/x/docs/api/

Hundratals paket Tusentals klasser

Stark typning Java är starkt typat (C svagt!) Vi kan inte behandla en typ som en annan Försök att göra så genererar ett tydligt fel under körning /// Type punning in C elem_t e; /// unknown content e.int_value = 42; float f = e.float_value; ///??? /// Type casting in C is abusive void *ptr = (void *)42; int i = (int) ptr; /// Bad type cast generates runtime error Object o = new Object(); Person p = (Person) o; /// Compiles ClassCastException

Parametrisk Polymorfism /// Revisiting previous examples and improving them! Person p = new Person(); Class<Person> cp = p.getclass(); Person p2 = cp.newinstance(); /// Revisiting previous examples and improving them! LinkedList<Person> list = new LinkedList<>(); ///!! list.add(new Object()); /// Will not compile Person p = list.first(); /// Revisiting previous examples and improving them! public class Person implements Comparable<Person> {...

Inga Segfaults Avrefererad null-pekare i Java: Exception in thread "main" java.lang.nullpointerexception at com.example.myproject.book.gettitle(book.java:6) at com.example.myproject.author.getbooktitles(author.java:25) at com.example.myproject.bootstrap.main(bootstrap.java:4) Uppslagning i array med index < 0 eller index >= array.length Exception in thread "main" java.lang.arrayindexoutofboundsexception at com.example.myproject.bookstore.getbook(bookstore.java:52) at com.example.myproject.bookstore.getlatest(bookstore.java:33) at com.example.myproject.bootstrap.main(bootstrap.java:7) Notera att programmet skriver ut vilken rad det kraschade på!

Exception Handling /// Bad type cast generates runtime error BufferedReader in = null; try { in = new BufferedReader(new FileReader("foo.in")); while (true) { node = node->next;... catch (NullPointerException e) { /// Went to far in the list! e.printstacktrace(system.err); finally { if (in!= null) { in.close();

Referenser Ingen pekararitmetik En referens kan inte skapas ur tomma intet Inga dangling pointers En pekare är en adress ett heltal ett offset från 0 En referens är ett handtag, en token genom vars försorg jag kan accessa ett objekt Ofta säger vi pekare ändå, att de är referenser är uppenbart av kontexten En null-pekare är inte någon referens, utan är avsaknaden av en referens

Jshell Från och med JDK 9 har Java äntligen fått en REPL (Read- Eval-Print Loop) Lek med Java i en interaktiv, levande miljö [writo649@trygger:6 ~]$ jshell Welcome to JShell -- Version 0.0.2 For an introduction type: /help intro jshell> 42 + 42 $ ==> 84 jshell> public class Test { publict Test(int i) { this.i = i; int i; Error: cannot find symbol symbol: class publict public class Test { publict Test(int i) { this.i = i; int i; ^-----^ Error: missing return statement public class Test { publict Test(int i) { this.i = i; int i; ^-------------^ jshell> public class Test { public Test(int i) { this.i = i; int i; created class Test jshell> Test t = new Test() Error: constructor Test in class Test cannot be applied to given types; required: int found: no arguments reason: actual and formal argument lists differ in length Test t = new Test(); ^ ^ jshell> Test t = new Test(42) t ==> Test@5e3a8624

Objektorientering? Förhoppningsvis kommer du också att uppskatta objektorientering

Stacken i Java vs. Stacken i C Ditt Java-program Ditt C-program Virtuell Maskin Operativsystem Operativsystem Hårdvara Hårdvara

Kompilera och köra ett Java-program $ javac MyProg.java Skapar en eller flera.class-filer varav en heter MyProg.class Ditt Java-program Virtuell Maskin $ java MyProg Startar den virtuella maskinen och laddar in MyProg och kör Operativsystem Hårdvara

Kompilera ditt Java-program public class Person { public String name; public Person(String name) { assert name!= null : "Name == null!"; this.name = name; public void setname(string name) { this.name = name; public String getname() { return this.name; public String tostring() { return "Person(" + this.name + ")"; public class Person { public java.lang.string name; static final boolean $assertionsdisabled; public Person(java.lang.String); public void setname(java.lang.string); public java.lang.string getname(); public java.lang.string tostring(); static {; javac Person.java Bytekod javap Person

Use the source, Luke! javap -c Person Compiled from "Person.java" public class Person { public java.lang.string name; static final boolean $assertionsdisabled; public Person(java.lang.String); Code: 0: aload_0 : invokespecial # // Method java/lang/object."<init>":()v 4: getstatic #2 // Field $assertionsdisabled:z 7: ifne 24 0: aload_ : ifnonnull 24 4: new #3 // class java/lang/assertionerror 7: dup 8: ldc #4 // String Name must not be null! 20: invokespecial #5 // Method java/lang/assertionerror."<init>":(ljava/lang/object; 23: athrow 24: aload_0 25: aload_ 26: putfield #6 // Field name:ljava/lang/string; 29: return public void setname(java.lang.string);

25: aload_ 26: putfield #6 // Field name:ljava/lang/string; 29: return public class Person { public String name; public void setname(java.lang.string); public Person(String name) { javap -c assert Person name!= null : "Name == null!"; 0: aload_0 this.name = name; : aload_ 2: putfield #6 // Field public name:ljava/lang/string; void setname(string name) { 5: return this.name = name; public String getname() { return this.name; Use the source, Luke! Code: public java.lang.string getname(); Code: 0: aload_0 : getfield #6 // Field public name:ljava/lang/string; tostring() { 4: areturn return "Person(" + this.name + ")"; public java.lang.string tostring(); Code: 0: new #7 // class java/lang/stringbuilder 3: dup 4: invokespecial #8 // Method java/lang/stringbuilder."<init>":()v 7: ldc #9 // String Person( 9: invokevirtual #0 // Method java/lang/stringbuilder.append:(ljava/lang/ // String;)Ljava/lang/StringBuilder; 2: aload_0 3: getfield #6 // Field name:ljava/lang/string; 6: invokevirtual #0 // Method java/lang/stringbuilder.append:(ljava/lang/ // String;)Ljava/lang/StringBuilder; 9: ldc # // String ) 2: invokevirtual #0 // Method java/lang/stringbuilder.append:(ljava/lang/ // String;)Ljava/lang/StringBuilder; 24: invokevirtual #2 // Method java/lang/stringbuilder.tostring:()ljava/lang/string; 27: areturn

Automatisk skräpsamling Mål: att ge programmeraren en illusion att minnet är oändligt Metod: identifiera skräp-data och frigör det automatiskt Definitionen av skräp: data som inte kan nås av programmet Mer formellt: objektet O är skräp om det inte finns någon väg i minnesgrafen från något rot (variabeln på stacken, globala variabler, o.dyl.) till O Två grundläggande sätt att göra automatisk skräpsamling: Referensräkning Tracing

Referensräkning Grundläggande idé: varje objekt sparar information om hur många som pekar till det När denna räknare når 0 ta bort objektet Varje gång en referens skapas/tas bort, manipulera referensräknaren: void *p = malloc(2048); // refcount void *x = p; // refcount 2 p = NULL; // refcount x = NULL; // refcount 0, free(x) Problem: Cykliska strukturer (se nästföljande sidor) Långlivat minne som manipuleras ofta kostar, fast vi aldrig tar bort det

Heap Root set 2 2

Heap Root set 2 vi tar bort denna 0 0

Heap Root set 2 0 0

Heap Läckage! Root set vi tar bort denna 2

Tracing GC: Mark-Sweep När minnet tar slut:. Följ rötterna och markera alla objekt som kan nås 2. Iterera över alla objekt och frigör alla som inte markerats i. Nästa bild visar markering i mark-fasen (.)

Root set Heap

Heap Root set vi tar bort denna

I nästa mark-fas markerar vi med annan färg Om något är grönt fortfarande efter denna fas är det skräp och skall tas bort

Heap Root set Dessa två kan nu säkert tas bort