TDDD78 Viktiga begrepp i programmering / objektorientering

Storlek: px
Starta visningen från sidan:

Download "TDDD78 Viktiga begrepp i programmering / objektorientering"

Transkript

1 TDDD78 Viktiga begrepp i programmering / objektorientering

2

3 Repetition 3 En variabel består av: Ett symboliskt namn i programkoden En lagringsplats i minnet, som kan innehålla variabelns värde Python: längd = 10 höjd = 5 hälsning = "hello" färger = [red, green] Programkod längd höjd hälsning färger Minne vid körning 10 5 "Hello" [red, green]

4 Minnesadresser 4 Programkod Minne vid körning Varje värde "startar" på en specifik minnesaddress Minnesadresser hanteras "bakom kulisserna" "int längd = 10;" "lagra 32-bitars heltal 10 på adress " int: längd int: höjd String: hälsning List: färger "Hello" [red, green]

5 Minnesadresser 2 5 Programkod Minne vid körning I vissa språk kan man få veta minnesadresserna C: höjd == 5 &höjd == ("adressen till höjd") int: längd int: höjd

6 Pekare (1) 6 Programkod Minne vid körning En variabel av pekartyp kan innehålla en adress C: "pekare till int" heter "int*" int* höjdpekare = &höjd; Värdet blir adressen int: längd int: höjd int*: höjdpekare Värdet är adressen till ett annat värde i minnet

7 Pekare (2): Tilldelning 7 Programkod Minne vid körning Ändra pekarens värde ändra vart den pekar C: int* höjdpekare = &höjd; höjdpekare = &längd; int: längd int: höjd int*: höjdpekare

8 Pekare (3): Ändra i utpekat värde 8 Programkod Minne vid körning För att ändra i värdet på den utpekade adressen krävs alltså annan syntax C: int* höjdpekare = &höjd; *höjdpekare = 14; int: längd int: höjd int*: höjdpekare "*höjdpekare = 14" definieras som "läs pekarens värde (10004), lagra 14 på den adressen"

9

10 Pekare i Java 10 Namn Värde i minnet I Java är en objektvariabel alltid en pekare! Circle mycircle = new Circle(10, 20, 30); Circle: mycircle Skapa variabeln, låt den peka på obj. Object (data) header: x 10 y 20 r Skapa objektet (minne, konstruktor, ) mycircle är pekaren (4/8 bytes), inte objektet! Java gömmer dess numeriska värde (irrelevant för vår kod): Vi kan inte få fram talet 49152

11 Pekare i Java (2): Exempel 11 Namn Circle: c1 Värde i minnet Två cirklar: Circle c1 = new Circle(1,1,1); Circle c2 = new Circle(2,2,2); 5000 Circle: c2 Object (data) header: x 1 y 1 r Object (data) header: x 2 y 2 r

12 Pekare i Java (3): Tilldelning 12 Namn Circle: c1 Circle: c2 Värde i minnet Object (data) header: x 1 y 1 r c2 = c1; c1, c2 är pekare Tilldela c2 värdet av c1 sätt c2 till ändra vart c2 pekar Kommer inte att kopiera själva cirkeln, fält för fält! Object (data) header: x 2 y 2 r Kvarvarande objekt som ingen pekar på inte ett problem i Java (skräpsamling)

13 Pekare i Java (4): Ändra i utpekat värde 13 Namn Circle: mycircle Värde i minnet Kan ändra i värdet (objektet) som lagras på utpekad adress Ändrar aldrig hela objektet, alltid en medlem i taget Java: objekt punkt medlem mycircle.x = 4711; Object (data) header: x 4711 y 20 r mycircle.x x-värdet i det objekt som pekas ut av mycircle

14 Pekare i Java (5): Tilldelning 14 Namn Circle: c1 Värde i minnet c2.x = 100; Nu är c1.x också 100! Circle: c2 Object (data) header: x 100 y 1 r

15 Exempel: Trädstruktur 15 Trädstruktur: Nod 1 Nod 2 Nod 3 Nod 4 Nod 5 Alla noder ska veta vem föräldern är Kan inte innehålla föräldern men kan ha en pekare till den! class TreeNode { String name; // Pekare till en sträng TreeNode parent; // Pekare till en föräldernod

16 Exempel: Trädstruktur (2) 16 Nod 1 Minne name: Nod Nod 2 Nod 3 name: Nod parent: Med pekare: Många kan peka på samma föräldernod trots att noden bara lagras en gång name: Nod 3 parent:

17 Exempel: Trädstruktur (3) 17 Men nod 1 har ju ingen förälder! Vad ska parent ha för värde? Minne name: Nod 1 parent:??? name: Nod parent: name: Nod parent: 10000

18 Null-pekare 18 Alla objektpekare kan ha specialvärdet null Pekar "ingenstans" "inte applicerbart": Noden har ingen förälder "vi vet inte än" Minne name: Nod 1 parent: null Representeras ofta internt som adressen 0 Spelar ingen roll för oss I Java ser vi bara värdet null name: Nod 2 parent: Med pekare: Kan lätt ange avsaknad av värde name: Nod 3 parent:

19 Null-pekare Vad kan man göra om pekarens värde är null? 19 Använda själva pekarvariabeln if (this.parent == other.parent) // Jämför pekarnas värden (0 == 49152), // tittar inte efter något objekt // (Motsvarar operatorn "is" i Python) painter.draw(circle1) // Om circle1 == null, // får parametern till draw också värdet null Inte använda fälten och metoderna i objektet den pekar på! Den pekar ju inte på något objekt! this.parent = null; this.parent.name = "Hello"; // OK // Fel vid körning: NullPointerException parent:

20

21 Sammansättning 1 Anta att vi har en Point-klass: public class Point { private double x, y; public Point(double x, double y) { this.x = x; this.y = y; public double getx() { return x; public double gety() { return y; public double getdistfromorigin() { return Math.sqrt(x*x + y*y); 21

22 Sammansättning 2 Nu vill vi skapa en cirkelklass två alternativ: public class Circle { // Alla fält är primitiva typer, som tidigare private double x, y, r; public Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; Implementera allt från början class Circle { // Fält kan vara objekt private Point center; private double r; public Circle(Point center, double r) { this.center = center; this.r = r; Använd existerande punktklassen! Sammansättning = composition 22

23 Sammansättning 3 Med sammansättning: En cirkel har en punkt, eller består av en punkt (och en radie) Återanvändning av existerande kod (Point kunde vara komplicerad) Mindre upprepning bra! 23 Exempel i labben: Listor finns redan En kö har en lista där den kan lagra sina element Använd existerande punktklassen! class Circle { // Fält kan vara objekt private Point center; private double r; public Circle(Point center, double r) { this.center = center; this.r = r;

24 Sammansättning och delegering 24 Om man vill ge tillgång till "komponentens" funktionalitet: Delegera! Använd existerande punktklassen! class Circle { // Fält kan vara objekt private Point center; private double r; public Circle(Point center, double r) { this.center = center; this.r = r; public double getdistfromorigin() { return center.getdistfromorigin(); Vad är cirkelns avstånd till origo? Samma som punktens!

25 Sammansatt objektstruktur 1 I vissa språk: Sammansatta objekt är sammansatta i minnet class Circle { Point center; double radius; Circle c1 = new Circle(); 25 c1 Object header: x y (data) radius "Point-delen" 0.0 av en cirkel

26 Sammansatt objektstruktur 2 Men javas objektvariabler är alltid pekare! Ett "sammansatt" objekt består alltid av flera fullständiga objekt class Circle { En Circle består av Point center; en Point-pekare (inte en Point) double radius; en double Circle c1 = new Circle(); 26 c1 Object header: center radius (data) 0.0 Object header: x y (data)

27 Sammansatt objektstruktur 3 Detta har alla konsekvenser som vi såg för pekare tidigare Exempel: Två cirklar kan ha samma centrumobjekt Point center = new Point(10, 20); Circle c1 = new Circle(center, 7); Circle c2 = new Circle(center, 12); 27 c1 Object header: center radius (data) 7.0 Object header: x y (data) c2 Object header: center radius (data) 12.0

28 Vad ska {klassen, metoden, fältet uppfylla?

29 Kontrakt Kontrakt: Överenskommelse som anger Vad som ska tillhandahållas Vad som förväntas i utbyte Allmänna regler runt utbytet 29 Inom objektorienterad programmering: Vilka värden kan en metod ta emot? Vad garanterar metoden att den gör, om den får sådana värden? Vad returnerar den? Vad garanterar en klass angående sitt tillstånd och beteende?

30 Kod kan innehålla (vissa) formella kontrakt 30 class Circle { private double x, y, r; public Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; public double getarea() { return Math.PI * this.r * this.r ; Krav på input: Parametrarna måste vara av typ double Löfte om resultattyp: Returnerar alltid double Följer direkt från manifest typning Så vanligt att man oftast inte ens ser det som kontrakt

31 Varför räcker inte koden? 31 class Circle { private double x, y, r; public Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; public double getarea() { return Math.PI * this.r * this.r ; + Koden definierar exakt vad programmet gör! Varför räcker inte detta?

32 Varför räcker inte koden? (2) 32 class Circle { private double x, y, r; public Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; public double getarea() { return Math.PI * this.r * this.r ; Svårt att inse alla konsekvenser av tusentals rader kod + Kontraktet bör sammanfatta vad som garanteras, krävs

33 Varför räcker inte koden? (3) Vi är inte intresserade av vad koden gör! Mycket viktig konceptuell skillnad mellan: 33 Vad vi faktiskt gör (koden) Implementationsdetaljer Implementationsdetaljer Vad vi lovar att göra, och att fortsätta göra i all evighet (kontraktet) Buggar Buggar

34 Exempel 1: Sortering Exempel: Sortera strängar Input: [diverse, test, input, något, sortera] 34 Nu vill vi sortera: Primärt efter längd Sekundärt, om orden är lika långa i bokstavsordning Vi vill alltså få: [test, input, något, diverse, sortera] 5 tecken 7 tecken bokstavsordning inom varje grupp

35 Exempel 1: Metod 35 En metod: Börja med en lista ord [diverse, test, input, något, sortera] Sortera i bokstavsordning utan att tänka på längd [diverse, input, något, sortera, test] Sortera i längdordning utan att tänka på bokstäverna Generellt finns 4 möjliga resultat: [test, input, något, diverse, sortera] [test, något, input, diverse, sortera] [test, input, något, sortera, diverse] [test, något, input, sortera, diverse] Vi tänker bara på längden Ord med samma längd kan kastas om Med stabil sortering: Byt bara ordning på två element om det krävs [test, input, något, diverse, sortera] input fortfarande före något diverse fortfarande före sortera Löser vårt problem!

36 Exempel 1: Vad kan vi se i koden? Anta att en lista kan sortera sig Men det finns inget uttryckligt kontrakt måste läsa koden class List { void sort() { for (int i=0; i < strings.length-1; i++){ for (int j=1; j < strings.length-i; j++){ if (strings[j-1].compareto(strings[j]) > 0) { String temp = strings[j-1]; strings[j-1] = strings[j]; strings[j] = temp; 36 Aha sort() kör bubble sort, som är stabil! Då utnyttjar vi det!

37 Exempel 1: Vad är tillåtet? Senare: Någon vill förbättra listklassen! Bubbelsortering är ineffektivt 37 class List { Om vi har detta Får vi skriva om så här? class List { void sort() { // Utför bubble sort // (råkar vara stabil) void sort() { // Utför heap sort // (snabbare, men inte stabil) // Andra kanske förlitar sig på egenskaper koden "råkade" ha dilemma!

38 Kontrakt 1 Undvik genom kontrakt! Vissa språk har formellt stöd t.ex. Eiffel set_hour (new_hour: INTEGER) -- Set `hour' to `new_hour' require valid_argument: 0 <= new_hour and new_hour <= 23 do hour := new_hour ensure hour_set: hour = new_hour end 38 precondition postcondition Ofta får man istället använda dokumentationen Idealet: Bara det som står i kontraktet gäller titta aldrig på koden! class List { /** Sorterar listan efter ordlängd. */ void sort() { Här står inget om stabilitet. Då kan vi inte förutsätta det!

39 Kontrakt 2 Ju tydligare, desto bättre 39 class List { /** Sorterar listan efter ordlängd. Stabilitet garanteras inte. */ void sort() { Beskriv gärna mer om vad koden lovar och inte lovar

40 Exempel 2: Vad utlovas? Får jag ("Cirkel-användare") skicka in en negativ radie här? Ser inget som skulle orsaka problem Men vem vet hur klassen kan ändras i framtiden? 40 class Circle { double x, y, r; Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r;

41 Exempel 2: Vad är tillåtet? Får jag ("Cirkel-utvecklare") ändra min kod så här? Verkar rimligt att cirklar ska ha positiv radie Men kod som förut fungerade kommer nu att krascha! 41 class Circle { double x, y, r; class Circle { double x, y, r; Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; Circle(double x, double y, double r) { if (r <= 0.0) throw ; this.x = x; this.y = y; this.r = r;

42 Exempel 2: Kontrakt? Med kontrakttänkande: 42 class Circle { double x, y, r; /** Skapar en cirkel med angivna koordinater och radie. */ Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; Metoden tar emot double. Det står inget om begränsningar. Alltså lovar den att klara godtycklig double.

43 Exempel 2: Kontrakt? Med kontrakttänkande: 43 class Circle { double x, y, r; /** Skapar en cirkel med angivna koordinater och radie. Radien måste vara strikt positiv. */ Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; Lovar att klara strikt positiva radier. Kräver sådan input. Skickar du in annat är beteendet odefinierat (kan krascha, )

44 Grundregel för kontrakt: Dokumentera alltid vad koden kräver och vad den lovar

45 Relaterad grundregel: Dokumentera inte vad koden gör utan vad den ska göra (och gärna varför) Vi återkommer till kontrakt och löften flera gånger!

46

47 API API: Application Programming Interface Specifikation av hur en applikation kan använda / kommunicera med t.ex. operativsystemet, andra program, klassbibliotek, osv. 47

48 Javas klassbibliotek 48 Javas standardiserade klassbibliotek "Java Standard Edition API" 4241 färdiga klasser inom många områden Standardiserade fält, metoder,

49 Dokumentation Dokumentation: Skriven för att kunna implementeras igen av någon annan, bara genom att utgå ifrån beskrivningen! API-beskrivningen ska vara ett fullständigt kontrakt för exakt vad som krävs av varje klass och metod 49

50

51 Annoteringar 1 51 Annotateringar låter oss addera metadata till deklarationer Metadata inte kod, utan information om kod Associeras med klasser, metoder, variabler, parametrar, import javax.annotations.generated; public class MyGUI private JButton private void setup() { Medlemmarna har genererats av ett verktyg (t.ex. en GUI-byggare)

52 Annoteringar 2 Exempel: Kod som är deprecated Gammal, föråldrad, bör inte användas längre Deprecate = uttrycka ogillande void deprecatedmethod() { Används metoden ändå: Kompilatorn kan varna void usemeinstead() {

53 Annoteringar 3 53 Vissa annoteringar kan definiera eller stärka formella kontrakt import org.jetbrains.annotations.notnull; import org.jetbrains.annotations.nullable; public class TimeTools public static String gettimestring() { return ; Metoden kan inte returnera null Används av dataflödesanalys, påverkar varningar public static String gettimestring(@nullable Date date) { return ; Parametern får vara null metodkoden måste ta hand om null-värden

54 (access modifiers)

55 Bakgrund Tänk er en lista som garanterar att elementen är i sorterad ordning! 55 class SortedList { String[] elements; int size; String get(int pos) { return void add(string el) { int pos = findnewpositionfor(el); insertat(pos, el); Lagring för alla element Hämtar element Stoppar in element på rätt plats int findnewpositionfor(string el) { void insertat(int pos, String el) { med dessa hjälpmetoder

56 Att gömma information Ofta vill vi gömma delar av klasser och objekt 56 class SortedList { String[] elements; int size; int findnewpositionfor(string el) { void insertat(int pos, String el) { String get(int pos) { return Syns bara inuti själva klassen void add(string el) { int pos = findnewpositionfor(el); insertat(pos, el); Synligt utåt

57 Gömma: För att inte förvirra användarna Mindre synligt mer överskådligt 57 class SortedList { String[] elements; int size; int findnewpositionfor(string el) { void insertat(int pos, String el) { String get(int pos) { return Användaren behöver aldrig anropa findnewpos eller insertat Att de syns förvirrar, gör klassen oöverskådlig! void add(string el) { int pos = findnewpositionfor(el); insertat(pos, el); Detta måste användarna känna till för att använda klassen

58 Gömma: Minska åtaganden (kontrakt) Det vi har visat upp, måste vi normalt ha kvar 58 class SortedList { String[] elements; int size; int findnewpositionfor(string el) { void insertat(int pos, String el) { String get(int pos) { return Användarna behöver inte komma åt element via list.elements! Göm det enbart get/add används vi kan byta ut resten om vi vill frihet! void add(string el) { int pos = findnewpositionfor(el); insertat(pos, el); Detta ska utnyttjas av användarna, måste visas och finnas kvar

59 Gömma: Minska åtaganden (kontrakt) Det vi har visat upp, måste vi normalt ha kvar 59 class SortedList { String[] elements; int size; int findnewpositionfor(string el) { void insertat(int pos, String el) { Användarna behöver inte komma åt element via list.elements! Göm det enbart get/add används String get(int class SortedList pos) { return { vi kan byta ut resten om vi vill! ListNode first; void add(string ListNode el) findnewpositionfor(string { el) { Detta ska utnyttjas int pos = findnewpositionfor(el); void insertelementat(listnode pos, String el) { av användarna, insertat(pos, String el); get(int pos) { return måste visas void add(string el) { och Den finnas "publika" kvardelen ListNode pos = findnewpositionfor(el); insertelementat(pos, el); har kvar samma signatur

60 Gömma: För att uppfylla vårt kontrakt 60 /** * This class maintains a sorted list of elements. * As long as the contents of an element does not change, * elements will always be in sorted order. */ class SortedList { String[] elements; int size; int findnewpositionfor(string el) { void insertat(int pos, String el) { void add(string el) { int pos = findnewpositionfor(el); insertat(pos, el); Om användare kan anropa insertat med fel position blir listan osorterad Då bryter vi vårt löfte!

61 Hur gömmer vi information?

62 Att gömma data i Java Många OO-språk tillåter oss att gömma data I Java kan klasser, gränssnitt, fält och metoder vara: public alla har tillgång protected [nothing] private tillgång i underklasser + andra i samma paket tillgång i samma paket (används sällan) tillgång inom samma klass 62 public class SortedList { private String[] elements; private int size; private int findnewpositionfor(string el) { private void insertelementat(int pos, String el) { public void add(string el) { int pos = findnewpositionfor(el); insertelementat(pos, el); Vad hade private betytt utan OO? Vi lovar mindre i vårt kontrakt! Skapa ett stabilt gränssnitt för "allmänheten": add() Göm all info om implementationsdetaljer

63 Inkapsling 63 Två betydelser hos Inkapsling (Encapsulation) Koppla ihop data och funktioner Fundamentalt i OO Objekt: en kapsel som innehåller både data och funktioner Begränsa tillgång till medlemmar Genom accessmodifierare Vissa medlemmar är instängda i en ogenomskinlig kapsel, och kan inte ses eller utnytttjas från utsidan

64 Privata fält 64 Vanlig princip: Fält är implementationsdetaljer, ska vara privata Om det verkligen är rimligt att andra klasser ska komma åt fältvärden: Skapa en public accessor-metod (getter) vid behov Skapa en public mutator-metod (setter) vid behov Kan ändra intern representation: Ändra bara getter/setter, som är i samma klass private double diameter; /** Set the radius to r (must not be negative). */ public void setradius(final double radius) { if (r >= 0.0) diameter = 2 * radius; else throw new IllegalArgumentException("Negative radius: " + r); Kan lägga till konsistenskontroll

65 Namngivning: Getter, Setter Namngivning: 65 private double radius; private boolean visible; /** Set the radius to r (must not be negative). */ public void setradius(final double r) { if (radius >= 0.0) radius = r; else throw new ; public double getradius() { return radius; public boolean isvisible() { return visible; Setters: void setproperty( ) Getters: getproperty() Booleska getters: isproperty() Mer info:

66 Tillåtna publika fält Vissa anser att det finns undantag Rena datastrukturer (inte mycket beteende, osannolikt att det skulle ändras i framtiden) 66 public class Dimension { public int width; public int height;

67

68 Tre sorters variabel 68 Lokal variabel: Deklareras i en metod Varje metodanrop har sin egen "kopia" Två anrop till foo() egna värden på x Anropet avslutas variabeln frigörs Fält: Deklareras i en klass Varje instans (objekt) har sin egen "kopia" Två olika objekt egna värden på x Två anrop samma x! Objektet slängs bort variabeln frigörs Statiskt fält: I en klass, static Varje programkörning har sin egen "kopia" Ett enda värde lagras, i klassen istället för i ett objekt public class MyProg { public void foo() { int x = calcx(); public class MyProg { int x; public void foo() { drawat(x); public class MyProg { static int x; public static void foo() { print(x); Inte ett intuitivt nyckelord! Olika lagring, olika livstider!

69 Statiska fält 1: Namngivna konstanter Konstanter bör (nästan) alltid namnges Jämför läsbarhet: for (int i = 1; i <= 52; i++) { Alternativt: for (int i = 1; i <= decksize; i++) { Mycket viktigt för programunderhåll! 69

70 Statiska fält 2: Namngivna konstanter 70 Namngivna konstanter läggs oftast på klassnivå (static) public class Circle { public static final double PI = ; Circle c1 = new Circle(1, 2, 3); Circle c2 = new Circle(10,11,12); Namngivna konstanter: static i klassen final ändras inte namn stora bokstäver (WITH_UNDERSCORE) c1 c2 Header: (data) x 1 y 2 r 3 Header: (data) x 10 y 11 r 12 jonkv.graphics.circle Static field PI getcircum getarea setradius code code code Lagras en gång slösar inte utrymme

71 Statiska fält 3: "Globala" variabler Kan också användas till "globala" variabler, åtkomliga överallt 71 Varning! Globala variabler ger ofta problem! Använd dem bara i undantagsfall!

72 Statiska fält 4: Exempel Exempel: Hålla reda på antal cirklar som skapats c1 c2 public class Circle { public static final double PI = ; // constant pi public static int circlescreated = 0; // how many are created? public double x, y, r; public Circle(double x, double y, double radius) { this.x = x; this.y = y; this.r = radius; circlescreated++; Circle c1 = new Circle(1, 2, 3); Circle c2 = new Circle(10,11,12); Header: (data) x 1 y 2 r 3 Header: x y (data) jonkv.graphics.circle Static field circlescreated Static field PI getcircum getarea setradius code code code 72

73 Statiska fält 5: Att referera till dem För att referera till ett statiskt fält: public class Circle { public static final double PI = ; public static int circlescreated = 0; public double x, y, r; public Circle(double x, double y, double radius) { this.x = x; this.y = y; this.r = radius; circlescreated++; // constant pi // how many are created? Här räcker "circlescreated", eftersom fältet är i samma klass 73 public class CircleTest { public static void main(string[] args) { System.out.println("Circles created: " + Circle.circlesCreated); System.out.println("Pi is: " + Circle.PI); Här använder vi klassnamn.fält

74 Statiska fält 6: Inte så här För att referera till ett statiskt fält: Inte så här: Circle c = new Circle(); System.out.println("Circles created: " + c.circlescreated); 74 Missvisande: Ser ut som att circlescreated är ett "vanligt" instansfält!

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!

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! Pekare (till objekt) Objektvariabler är pekare vad är det? (Viktiga begrepp inte bara inom objektorientering!) Hur används pekare för att sätta samman objekt (composition)? TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se

Läs mer

Viktiga programmeringsbegrepp: Kontrakt

Viktiga programmeringsbegrepp: Kontrakt jonas.kvarnstrom@liu.se 2017 Viktiga programmeringsbegrepp: Kontrakt Vad lovar {klassen, metoden, fältet}? Kontrakt 2 Kontrakt: Överenskommelse som anger Vad som ska tillhandahållas Vad som förväntas i

Läs mer

TDDD78 Objektorientering: Lagring och livstid

TDDD78 Objektorientering: Lagring och livstid jonas.kvarnstrom@liu.se 2017 TDDD78 Objektorientering: Lagring och livstid Tre sorters variabel (1): Lokal 3 Deklareras i en metod Lokal variabel Varje anrop får sin egen "kopia": Två anrop till foo()

Läs mer

TDDD78 Viktiga begrepp, del 2

TDDD78 Viktiga begrepp, del 2 jonas.kvarnstrom@liu.se 2015 TDDD78 Viktiga begrepp, del 2 Identitet och likhet Är likhet och identitet samma sak? Oj, vi har samma kläder på oss idag! Nej, men likadana! Besserwisser 3 Detta är två rutor

Läs mer

TDDD78 Objektorientering i Java, del 3

TDDD78 Objektorientering i Java, del 3 TDDD78 Objektorientering i Java, del 3 Ärvning av implementation, inklusive abstrakta klasser Egenskaper hos Javas arvshierarki Att skriva kontrakt, och dess konsekvenser Att gömma information i ett objekt

Läs mer

Objektorientering: Lagring och livstid

Objektorientering: Lagring och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Objektorientering: Lagring och livstid Tre sorters variabler Tre sorters variabel (1): Lokal 2 Lokal variabel Deklareras inuti en metod Vid varje anrop

Läs mer

TDDD78 Objektorientering i Java, del 4. Hur vet man om två objekt är lika? Hur undviker man objekt och när?

TDDD78 Objektorientering i Java, del 4. Hur vet man om två objekt är lika? Hur undviker man objekt och när? TDDD78 Objektorientering i Java, del 4 Hur vet man om två objekt är lika? Hur undviker man objekt och när? jonas.kvarnstrom@liu.se 2016 Identitet och likhet Är identitet och likhet samma sak? Oj, vi har

Läs mer

Objektorientering: Lagring, räckvidd och livstid

Objektorientering: Lagring, räckvidd och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Objektorientering: Lagring, räckvidd och livstid Tre sorters variabler, två sorters metoder Räckvidd och livstid 2 Variabler (lokala och medlemsvariabler)

Läs mer

TDDD78 Objektorientering i Java, del 2

TDDD78 Objektorientering i Java, del 2 TDDD78 Objektorientering i Java, del 2 Objektvariabler är pekare vad är det? Hur används pekare för att sätta samman objekt (composition)? Hur används hierarkier för att modellera nära relaterade typer?

Läs mer

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private Inkapsling tumregler Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler Tobias Wrigstad (baserat på material från Tom Smedsaas) 5 november 2010 1. Man skall

Läs mer

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,

Läs mer

Föreläsning 5-6 Innehåll

Föreläsning 5-6 Innehåll Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]

Läs mer

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

public och private Obs: private inte skyddar mot access från andra objekt i samma klass. public och private En metod som är public får anropas från alla metoder i alla klasser. Ett attribut som är public får avläsas och ändras från alla metoder i alla andra klasser. En metod som är private

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

TDDD78 Objektorientering i Java, del 2

TDDD78 Objektorientering i Java, del 2 TDDD78 Objektorientering i Java, del 2 Objektvariabler är pekare vad är det? Hur används pekare för att sätta samman objekt (composition)? Hur används hierarkier för att modellera nära relaterade typer?

Läs mer

TDDD78 Introduktion till OOP i Java

TDDD78 Introduktion till OOP i Java jonas.kvarnstrom@liu.se 2014 TDDD78 Introduktion till OOP i Java Klasser Bilar är komplicerade vi tar cirklar som exempel 3 En klass i Java 4 För att modellera cirklar som objekt i Java: Skapa en cirkelklass

Läs mer

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid: Omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-17, TDA540 Dag: 2018-08-30, Tid: 14.00-18.00 Ansvarig: Examinator: Alex Gerdes Carlo A. Furia Förfrågningar:

Läs mer

TDDD78 Introduktion till OOP i Java

TDDD78 Introduktion till OOP i Java jonas.kvarnstrom@liu.se 2016 TDDD78 Introduktion till OOP i Java Klasser 3 Bilar är komplicerade vi tar cirklar som exempel (ritprogram?) En klass i Java För att lagra info om cirklar som objekt i Java:

Läs mer

DAT043 - Föreläsning 7

DAT043 - Föreläsning 7 DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar

Läs mer

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes Idag statiska metoder och variabler private/public/protected final, abstrakta klasser, gränssnitt, delegering wrapper classes ett lite större exempel Objectorienterad programmering Sida 1 Vad vi vet om

Läs mer

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser Hur används hierarkier för att modellera nära relaterade typer? Nu:

Läs mer

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:

Läs mer

Sammansatta datatyper Generics: Parametrisk polymorfism

Sammansatta datatyper Generics: Parametrisk polymorfism jonas.kvarnstrom@liu.se 2017 Sammansatta datatyper Generics: Parametrisk polymorfism Listor och arrayer 2 Enligt TDDD73: Många språk har både listor och arrayer även Java och Python! Exakta definitioner

Läs mer

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings

Läs mer

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 Pelle Evensen, Daniel Wetterbro 5 november 2009 Sammanfattning Denna vecka ska vi titta på abstrakta klasser kontra interface,

Läs mer

Föreläsning REPETITION & EXTENTA

Föreläsning REPETITION & EXTENTA Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder

Läs mer

Föreläsning 2, vecka 8: Repetition

Föreläsning 2, vecka 8: Repetition TDA 548: Grundläggande Programvaruutveckling Föreläsning 2, vecka 8: Repetition Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Idag Metoder och terminologi Referensvärden och arrays Interface och ritning

Läs mer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man

Läs mer

TDDD78 Introduktion till OOP i Java

TDDD78 Introduktion till OOP i Java jonas.kvarnstrom@liu.se 2017 TDDD78 Introduktion till OOP i Java Klasser 3 Bilar är komplicerade vi tar cirklar som exempel (ritprogram?) En klass i Java 4 För att lagra info om cirklar som objekt i Java:

Läs mer

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir

Läs mer

Föreläsning 6: Metoder och fält (arrays)

Föreläsning 6: Metoder och fält (arrays) TDA 545: Objektorienterad programmering Föreläsning 6: Metoder och fält (arrays) Magnus Myréen Chalmers, läsperiod 1, 2015-2016 I (föregående och) denna föreläsning Läsanvisning: kap 2 & 13 meddelanden

Läs mer

Parameteröverföring. Exempel. Exempel. Metodkropp

Parameteröverföring. Exempel. Exempel. Metodkropp Exempel atriangle.changesize (100, 50); // OK atriangle.changesize (100); // fel antal atriangle.changesize ( 1, 50); // fel datatyp char c = atriangle.getarea (); // fel datatyp Parameteröverföring I

Läs mer

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt Föreläsning 4 Klasser Och Objekt Klass Beskrivning av en objekttyp Beskriver egenskaper och beteende (fält och metoder) Klassen fungerar som en ritning Objekt skapas från klassbeskrivningen - instansieras

Läs mer

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

Läs mer

Typkonvertering. Java versus C

Typkonvertering. Java versus C Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då

Läs mer

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

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0.. Ett problem Kontrollstrukturer och er Hur sparas data T ex när man vill spara resultaten av en tävling Exempel med 3 deltagare: public class Competition private int result1; private int result2; private

Läs mer

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod

Läs mer

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

Klasser och objekt. Henrik Johansson. August 20, 2008

Klasser och objekt. Henrik Johansson. August 20, 2008 Föreläsning 5 Klasser och objekt Henrik Johansson August 20, 2008 Ett objekt är en modell av ett fysisikt eller ett tänkt ting. Objektet och det som vi kan göra med det beskrivs av en mall, en klass. Ett

Läs mer

1 Egna klasser. 1.1 En punkt-klass

1 Egna klasser. 1.1 En punkt-klass 1 Egna klasser Vi har bekantat oss med klasser genom att se hur vi kan använda olika klasser. I synnerhet klassen Scanner och klassen Math. För scannerklassen skapade vi en instans för att sedan utnyttja

Läs mer

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa 2203$( Föreläsning ii - Mer om Java bla this och konstruktorer Av Björn Eiderbäck Email: bjorne@nada.kth.se Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: 7906277 previous next Exempel: lampa Light1 #

Läs mer

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

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ orienterad programmering Föreläsning 3 Exempel: Telefonboken Fält som funktionsresultat Exempel Definiera static double[] vectorsum(double[] a, double[] b) Betrakta sedan följande kodavsnitt:... double[]

Läs mer

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1

Läs mer

(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

(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 (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

Java, klasser, objekt (Skansholm: Kapitel 2)

Java, klasser, objekt (Skansholm: Kapitel 2) Java, klasser, objekt (Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Objectorienterad programmering Sida 1 Vad är en klass? En klass är ett sätt att beskriva en mängd objekt och deras gemensamma

Läs mer

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning 2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer

Läs mer

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

Föreläsning 8: Exempel och problemlösning TDA 545: Objektorienterad programmering Föreläsning 8: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 De tre senaste föreläsningarna Läsanvisning: kap 2 & 13 meddelanden och

Läs mer

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap. Institutionen för Datavetenskap Göteborgs universitet HT2008 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 4 Exempel på listor (klassen ArrayList). Ett exempel med fält.

Läs mer

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i

Läs mer

Föreläsning 13 Innehåll

Föreläsning 13 Innehåll Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?

Läs mer

Lösningsförslag till tentamen

Lösningsförslag till tentamen Uppgift 1 Lösningsförslag till tentamen 110317 a) Sant. b) Falskt. I ett RAM-minne är åtkomsttiden densamma för alla minnesadresser. c) Falskt. TCP är ett protokoll på transportlagret. d) Falskt. Binärsökning

Läs mer

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer Exempel for (int antal=; antal < 75; antal++) System.out.println (antal); Arrayer for (int num=5; num

Läs mer

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU lösningsförslag till tentamen 2017-06-09 Tid: 8:30-12:30. Plats: SB. Ansvarig lärare: Fredrik Lindblad,

Läs mer

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

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser

Läs mer

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014 Introduktion till Datalogi DD1339 Föreläsning 2 22 sept 2014 Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 public class { public class { Åtkomst, public betyder fullt tillgänglig utifrån public

Läs mer

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 Hjälpmedel: Inga hjälpmedel är tillåtna

Läs mer

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER Logiska uttryck datatypen boolean Logiska uttryck kan ha två möjliga värden, true eller false. Variabler av typen boolean kan tilldelas

Läs mer

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? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? jonas.kvarnstrom@liu.se 2015 2014 jonas.kvarnstrom@liu.se

Läs mer

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

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 interface, motivation och bakgrund Antag att vi gör en generell listklass: public class List { protected static class ListNode { public

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016 Objektorienterad Programkonstruktion Föreläsning 2 2 nov 2016 Objekt - klass Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 Objekt - klass Objekt - klass Objekt - klass + Objekt - klass public class

Läs mer

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1) Föreläsning 10 STRING OCH STRINGBUILDER; VARIABLERS SYNLIGHET Att deklarera och att använda variabler När vi deklarerar en variabel, t ex int x; inför vi en ny variabel med ett namn och en typ. När namnet

Läs mer

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

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det? TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 2 Vad krävs? Hur fungerar det? Hur får en subtyp fungera egentligen? Krav på hierarkier 1 3 Får subtypen LinkedList sakna metoder från

Läs mer

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

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).

Läs mer

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

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser // En första version av BankKonto-klassen class BankKonto { private String namn; private long nr; private double saldo; private double ränta; // Klassen TestaBankKonto // Klassens uppgift är att skapa

Läs mer

Objektorienterad Programmering DAT043

Objektorienterad Programmering DAT043 Objektorienterad Programmering DAT043 Föreläsning 3 22/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Kom ihåg: Visa Javas API. Nämn att slidesens också har tillhörande text på kurshemsidan.

Läs mer

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

Variabler, värden och typer

Variabler, värden och typer 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

Läs mer

DAT043 - föreläsning 8

DAT043 - föreläsning 8 DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns

Läs mer

Ärvning av implementation. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva?

Ärvning av implementation. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva? Ärvning av implementation Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva? TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Implementationsarv 1: Klassnivåer

Läs mer

Teoretisk del. Facit Tentamen TDDC (6)

Teoretisk del. Facit Tentamen TDDC (6) Facit Tentamen TDDC30 2014-08-29 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är skillnaden mellan synligheterna public, private och protected? (1p) Svar:public: Nåbar för

Läs mer

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 TDDE11, 725G90/1 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder

Läs mer

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp

Läs mer

DAT043 Objektorienterad Programmering

DAT043 Objektorienterad Programmering DAT043 Objektorienterad Programmering Detta är en exempeltenta som innehåller gamla tentauppgifter av ungefär liknande slag som ni kan förvänta er se på ordinarie tenta i Del 1 respektive Del 2. Dock är

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på

Läs mer

Arrayer. results

Arrayer. results Arrayer 85 Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en array med N element med indexen till N-1 Exempel: 1

Läs mer

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

TDDD78, TDDE30, 729A Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices

TDDD78, TDDE30, 729A Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices Abstrakt klass eller gränssnitt? (1) 3 Gränssnitt Kan implementera flera Ingen

Läs mer

Objektsamlingar i Java

Objektsamlingar i Java 1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och

Läs mer

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? Introduktion till objektorientering Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten? TDDD78, TDDE30, jonas.kvarnstrom@liu.se 729A85 jonas.kvarnstrom@liu.se

Läs mer

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y; public interface Skrivbar { void skriv(); public class Punkt implements Skrivbar { public double x; public double y; public Punkt(double xx, double yy) { x = xx; y = yy; public Punkt() { @Override public

Läs mer

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering! Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering! Gränssnitt igen För att kunna ändra på olika delar av programmet utan att andra delar

Läs mer

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

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer. Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language

Läs mer

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten? Programmeringsteknik och Matlab Övning 4 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:

Läs mer

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12 Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 12 I torsdags: Klassen TelefonKostnad Exemplifierar objektorienterad design, metoder, konstruktorer static Standardklassen Math Matematiska

Läs mer

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Tentamen ID1004 Objektorienterad programmering May 29, 2012 Omtentamen för ID1004 Objektorienterad programmering HT11, 29 maj 2012, 09-13 Denna tentamen examinerar 3 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av 12 frågor. Varje fråga

Läs mer

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

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9 Listor Koffman & Wolfgang kapitel 2, avsnitt 2.1 2.3, 2.5 2.6 och 2.9 Figur 2.1, sid 63 java.util.list, med dess implementeringar 2 List och primitiva typer En array kan innehålla primitiva typer: int[],

Läs mer

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp Föreläsning 3-4 Innehåll Eempel på program med objekt Klass med main-metod Klasser Implementera (skriva programkod för) egna klasser Datatper Undervisningsmoment: föreläsning 3-4 övning 2 laboration 3-5

Läs mer

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

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer