TDDD78 Objektorientering i Java, del 2
|
|
- Per Karlsson
- för 6 år sedan
- Visningar:
Transkript
1 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? jonas.kvarnstrom@liu.se 2017
2 Viktiga begrepp inte bara inom objektorientering
3 Motivation 3 Programmeringsuppgift: Lagra info om anställda Håll reda på varje anställds närmaste chef som också är en anställd! En första ansats:
4 Motivation (2): Innehåll? 4 Ser ut som att en innehåller en annan Jag Mitt namn Chefen Chefens namn
5 Motivation (3): Innehåll? 5 Kan bli problematiskt! Andra kan inte innehålla samma objekt! Jag Chefen Chefens chef Högsta chefen Hur får man stopp på det? Två platser i minnet olika objekt! Min kollega Samma chef!
6 Motivation (4): En bättre lösning 6 En anställd ska inte innehålla chefen, utan peka ut vem chefen är Jag Min kollega Chefen Chefens chef Högsta chefen Så: Hur pekar man på ett annat objekt?
7 Variabler och minnesadresser 7 Programkod Minne vid körning Använd minnesadresser! Finns alltid där "i bakgrunden": " " "lagra 32-bitars heltal 10 på adress " " "Skapa -objekt på adress " "
8 Variabler och minnesadresser (2) 8 Programkod Minne vid körning I vissa språk får man veta minnesadresserna C:
9 Pekare (1) 9 Programkod Minne vid körning En variabel av pekartyp kan innehålla en adress C: "pekare till " heter Värdet blir adressen Värdet är adressen till ett annat värde i minnet
10 Pekare (2): Tilldelning 10 Programkod Minne vid körning Ändra pekarens värde ändra vart den pekar C:
11
12 Objektvariabler är pekare 12 Java: En objektvariabel är alltid en pekare! Namn Värde i minnet 2. Skapa variabeln, låt den peka på obj. 1. Skapa objektet (minne, konstruktor, ) mycircle är egentligen pekaren (4/8 bytes), inte objektet! Java gömmer numeriska värdet (irrelevant för vår kod): Vi kan inte få fram talet 49152
13 Men vilka konsekvenser får detta?
14 Pekare i Java (1): Objektmedlemmar 14 Att komma åt medlemmar: T.ex. Beräknar ; går automatiskt vidare till objektet på plats Hittar fältet ; ändrar dess värde Namn Värde i minnet
15 Pekare i Java (2): Exempel 15 Namn Värde i minnet Anta två cirklar:
16 Pekare i Java (3): Tilldelning 16 Namn Värde i minnet är pekare Ändra pekarens värde ändra vart den pekar Sätter till Kommer inte att kopiera själva cirkeln, fält för fält! Kvarvarande objekt som ingen pekar på inte ett problem i Java (skräpsamling)
17 Pekare i Java (4): 17 Namn Värde i minnet Nu är också och är två variabler, pekar på samma objekt och är samma variabel! "Peter Dalenius" är en sträng "Kursens studierektor" är en annan Men de pekar ut samma person Om Peter Dalenius får ny chef, får kursens studierektor ny chef
18 Pekarexemplet (0) 18
19 Pekarexemplet (1) 19 Minne Med pekare: Många kan peka på samma objekt trots att själva objektet bara lagras en gång
20 Pekarexemplet (2) 20 Men anställd har ingen chef! Vad ska fältet ha för värde? Minne
21 Null-pekare 21 Objektpekare kan ha specialvärdet Pekar "ingenstans" "inte applicerbart": Noden har ingen chef "vi vet inte än" Minne Med pekare: Kan lätt ange avsaknad av värde
22 Null-pekare (2) 22 Vad kan man göra om pekarens värde är null? Använda själva pekarvärdet Inte använda fälten och metoderna i objektet den pekar på! Den pekar ju inte på något objekt!
23
24 Sammansättning 1 24 Anta en klass för 2D-positioner:
25 Sammansättning 2 25 Skapa en cirkelklass två alternativ: Implementera allt från början Använd existerande punktklassen! Sammansättning = composition
26 Sammansättning 3 26 Med sammansättning: En cirkel har en punkt, eller består av en punkt (och en radie) Slipper skriva om existerande kod Point kunde vara komplicerad, ha metoder som avstånd från origo, Mindre upprepning bra! Exempel i labb: Listor finns redan En kö har en lista där den kan lagra sina element
27 Sammansättning och delegering 27 Om man vill ge tillgång till "komponentens" funktionalitet: Delegera! Vad är cirkelns avstånd till origo? Samma som punktens, så delegera till den!
28 Sammansatt objektstruktur 1 28 I vissa språk: Sammansatta objekt är sammansatta i minnet "Point-delen" av en cirkel
29 Sammansatt objektstruktur 2 29 Men Javas objektvariabler är ju alltid pekare! Ett "sammansatt" objekt består egentligen av flera separata objekt En består av en -pekare (inte en ) en
30 Sammansatt objektstruktur 3 30 Konsekvenser: Som vi såg för pekare tidigare Exempel: Två cirklar kan ha samma centrumobjekt Två listor kan innehålla (pekare till) samma cirkel
31 Typhierarkier: Gränssnitt, ärvning, subtypspolymorfism,
32 Motivering 1: Verkligheten
33 Klasser med olikheter 33 Vi har pratat om klasser av objekt Tydliga olikheter separata klasser
34 Liknande objekt 34 Men om objekten är "ganska lika"? En klass: Generella motorfordon? Bra: Vi kan generalisera "Detta gäller alla motorfordon" Tre klasser: Bilar, bussar och lastbilar? Bra: Vi kan vara specifika "Detta gäller bara bussar" Fem klasser: Bil, lätt lastbil, tung lastbil, minibuss, buss?
35 Hierarkier av klasser 35 Vi kan ha hierarkier med både generella och specifika klasser! Fordon (gemensamma egenskaper) "is-a"-relation (en bil är en sorts motorfordon)
36 Hierarkier och delmängder 36 En bil är ett fordon Objekt av typ Fordon Objekt av typ Bil Alla bilar är fordon Cykel Buss Med denna hierarki: En Bil kan aldrig vara en Buss, är alltid ett Fordon
37 Motivation 2: Datastrukturer
38 Liknande datatyper (1) 38 Flera sätt att lagra listor! "Linjärt i minnet Länkad lista Snabbt att slå upp element 92000: Adress = liststart * elementstorlek Långsamt att stoppa in ett element: Måste flytta alla efterföljande element Långsamt att slå upp element 92000: Gå till start, följ pekare gånger Snabbt att stoppa in ett element: Ändra två pekare
39 Liknande datatyper (2) 39 Många olika implementationer: Mycket gemensamt t.ex. vilka metoder som finns Stora skillnader i kod (metoder, fält) olika klasser
40 Liknande datatyper (3) 40 Om vi måste ange exakt typ för parameter, returvärde:
41 Duck Typing Python 41 Duck Typing: When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck James Whitcomb Riley När jag ser ett objekt med get(), set(), extend(), då kallar jag det objektet en lista Vi har en ArrayList-klass Parametertyp anges inte kolla vid körning om extend() finns!
42 Utan Duck Typing 42 Java Måste ange parametertyp Behöver annat sätt att ange ArrayList eller LinkedList
43 Hierarkier 43 Lösning: Vill ha hierarkier även här Objekt av typ List ArrayList LinkedList SkipList
44
45 Interface: Intro 45 Ett interface (gränssnitt) är specifikation utan implementation Dokumentation anger krav för alla som implementerar List Metodsignaturer: Returtyp, namn, parametrar Inga fält, ingen metodkod Gränssnitt kan inte instansieras Det finns ingen kod för dess metoder! Metoder i ett gränssnitt är alltid (underförstått): tillgängliga för alla ej implementerade här
46 Interface: Hierarkier 1 46 Möjliggör en hierarki av datatyper! List: Detta ska alla listor klara Säger inte hur! LinkedList: Vanlig klass som uppfyller List-specifikationen
47 Interface: Hierarkier 2 47 Terminologi: List är supertyp till LinkedList LinkedList är subtyp till List supertyp = supertype subtyp = subtype
48 Interface: Vad vinner vi? 48 Kräv mindre! Lova mindre!
49 Interface 2: Implementation 49 En Java-klass kan implementera ett gränssnitt Ett löfte att uppfylla vad gränssnittet lovar ("kontrakt") Kompilatorn verifierar att metoderna finns Programmeraren verifierar att kontraktet i övrigt är uppfyllt Kan ha fler metoder än gränssnittet (håller ändå vad den lovar) implementera = implement
50 Interface 3: Typhierarki 50 En klass kan implementera flera gränssnitt Sortable och List är supertyper till LinkedList LinkedList är en subtyp till Sortable och List
51 UML: Klassdiagram med gränssnitt 51 UML-diagram: Klassrelationen realisering Ett gränssnitt är bara en beskrivning Klasser realiserar gränssnittet: Ger en konkret implementation Streckad pil, tom pilspets Medlemmar visas: Där de deklareras första gången Där de implementeras
52 Om man har flera "klassvarianter" med gemensam bas: Oftast bör man ha ett gränssnitt, så den gemensamma basen kan användas
53
54 Objekt med flera typer 54 Ett objekt har nu flera typer Varje är också av typen och Vilka effekter får det?
55 Peka på en subtyp 55 En objektvariabel kan peka på objekt av godtycklig subtyp En är ju en List Så vilken typ har variabeln egentligen? En objektvariabel kan pekas om till ett objekt av annan typ Så kan variabler byta typ?
56 Typer: Apparent / Actual Med typhierarkier: Variabel av typ Känt av kompilatorn 56 Variabelns typ kallas static / apparent type get() add() (no impl) (no impl) Statiskt: Variabelns typ är oföränderlig get() add() print() Värdet vid exekvering blir av typen [LL-get] [LL-add] [ ] Generellt bara känt vid körning Kan ändras under körning Objektets typ kallas dynamic / actual type
57 Dynamisk typ: Inte känd före körning 57
58 Synliga (tillgängliga) medlemmar 58 Givet en variabel, vilka metoder och fält är synliga? Variabel av typ get() add() (no impl) (no impl) I Java: De som finns i variabelns (uttryckets) typ! windows.get(), windows.add() get() add() print() Värdet vid exekvering blir av typen [LL-get] [LL-add] [ ] Kompilatorn vet inte att värdet kommer att vara en LinkedList Vi kan inte anropa windows.print()!
59 Statisk typkontroll 59 Så typkontrollen är fortfarande statisk
60 Vem vet mest? 60 Men tänk om vi vet mer än kompilatorn! Vi har listor av fåglar Vi stoppar in något först i listan Vi plockar ut det Men vi vet ju vad vi stoppade in där!
61 Att veta mer (2) 61 Vi kan tala om för kompilatorn vad vi vet! Använd en cast Denna cast är ett löfte: Fågeln är faktiskt en uggla!" Resultatet är en ny pekare till samma objekt Inte ett nytt "konverterat" objekt! Om man ljuger: (här finns dynamisk typkontroll, dvs. vid körningen!)
62
63 Namnbindning 63 Namnbindning: Givet en identifierare (namn), vilken variabel / fält / metod / menar vi? För variabler tar kompilatorn reda på detta: Detta är statisk bindning = tidig bindning: Sker före programmet körs
64 Bindning av metoder 64 Att binda metodnamn till implementation: Utan typhierarkier Variabelns typ = objektets typ Statisk bindning är möjlig Med typhierarkier Variabelns typ!= objektets typ Dynamisk bindning krävs Vilken variant av add()? Måste vara ArrayList:s! Känt vid kompileringen: Namnet add() kan statiskt bindas till en funktion av kompilatorn Vilken variant av add()? ArrayList:s? LinkedList:s? Okänt vid kompileringen: Namnet add() måste dynamiskt bindas till en funktion vid körning
65 Metodtabeller Varje objekt känner till sin klass Varje klass känner till sin metodkod 65 Klassinfo med metodtabell Virtual method table: vtable get() add() print() [LL-get] [LL-add] [ ]
66 Dynamisk bindning 66 Dynamisk bindning = sen bindning = dynamisk dispatch Objektets typ avgör Objektet talar (indirekt) om för oss var implementationen finns: get() add() print() [LL-get] [LL-add] [ ] get() add() [AL-get] [AL-add]
67 Subtypspolymorfism 67 Typhierarkin + sen bindning ger oss Subtypspolymorfism πολυμορφισμός = som har flera former Här: Ett metodnamn, deklarerat i en typ Flera implementationer, skrivna i subtyperna Kallas ofta enbart "polymorfism" men polymorfism är egentligen bredare begrepp
68 Overloading 68 Kontrasteras med överlagring = ad-hoc-polymorfism Samma namn, flera implementationer (för olika argumenttyper) Inte ett OO-begrepp mer allmänt! Alla varianter är kända vid kompileringen Ger statisk bindning
69
70 Hierarkier av klasser 70 Hierarkier kan ha flera nivåer Fordon (har toppfart) "is-a"-relation (en bil är en sorts motorfordon) Motorfordon (har motorstyrka)
71 Hierarkier och delmängder 71 Fortfarande alla x är y : Fordon Motorfordon Alla motorfordon är fordon Cykel Bil Buss
72 Interface-ärvning 1: Hierarkier 72 Vi såg typhierarkier i två nivåer Gränssnitt anger funktionalitet: Vad som är gemensamt för alla listor Klasser ger oss implementationer
73 Interface-ärvning 2: Gemensamt 73 Men har också något gemensamt med Hur deklarerar vi en variabel som kan peka på en lista eller en mängd?
74 Interface-ärvning 3: En nivå till 74 Genom ytterligare en nivå!
75 Interface-ärvning 4 Detta är interface-ärvning 75 Collection är ett superinterface till List List utökar eller ärver från Collection List är ett underinterface till Collection List extends or inherits from Collection List is a subinterface of Collection Ärver Adderar kontrakt/löften: Collection lovar att ha en add()-metod, egna löften: List lovar också
76 Interface-ärvning 5: Multipel ärvning 76 Multipel ärvning tillåts för gränssnitt multipel ärvning = multiple inheritance
77 UML-klassdiagram: Generalisering 77 Klassrelation: Generalisering (ärvning) List specialiserar Collection (lägger till nya krav, nya metoder) Collection generaliserar List Vanlig linje, tom pilspets
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
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:
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
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?
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
Ä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
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
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 2014 2017 jonas.kvarnstrom@liu.se
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
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =
TDDD78 Objektorientering i Java, del 3. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva?
TDDD78 Objektorientering i Java, del 3 Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva? jonas.kvarnstrom@liu.se 2017 Implementationsarv 1: Klassnivåer 3 Nu kan
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:
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
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
Sammansatta datatyper Generics: Parametrisk polymorfism
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Sammansatta datatyper Generics: Parametrisk polymorfism Extraavsnitt på svengelska Listor och arrayer 2 Enligt TDDD73 (tidigare Pythonkurs): Många språk
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! TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Fråga kommentera
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
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)
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
Objektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Överlagring (overloading) Arv
Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier
Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv
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
Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Klassen calculator Signatur Calculator
Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018
Subtyping och variance Objekt-orienterad programmering och design Alex Gerdes, 2018 Typer Java har två sorters typer primitiva typer och referens-typer. Primitiva typer är typer för värden: int, float
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()
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:
TDDD78 Viktiga begrepp i programmering / objektorientering
jonas.kvarnstrom@liu.se 2015 TDDD78 Viktiga begrepp i programmering / objektorientering Repetition 3 En variabel består av: Ett symboliskt namn i programkoden En lagringsplats i minnet, som kan innehålla
Föreläsning 4. Polymorfism. Polymorfism Dynamisk bindning Inkapsling Information hiding Access-metoder och mutator-metoder
Föreläsning 4 Polymorfism Dynamisk bindning Inkapsling Information hiding Access-metoder och mutator-metoder Statiska och dynamiska typer Den deklarerade typen hos en variabel är variabelns statiska typ.
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
Introduktion till arv
Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering
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 2016 2014 jonas.kvarnstrom@liu.se
UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.
Översikt UML Sekvensdiagram (dynamic structure) Informationsflöde genom programmet Användningsfall (use cases) Aktörers interaktion med systemet Paketdiagram Beroenden mellan paket abstrakta klasser Multipel
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
Generics och polymorfism. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Generics och polymorfism Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Live code Pair public class Pair { private A a; private B b; public A getfirst() { return a; public
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
Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!
Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering! Samlingar Vi kommer att behöva hantera samlingar av objekt - Har oftast använd Array (fält) - Bra om
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
Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.
-Algoritmer och Datastrukturer- Abstrakt datatyp Datatyp för en variabel Betecknar i ett programmeringsspråk den mängd värden variabeln får anta. T ex kan en variabel av typ boolean anta värdena true och
Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016
Subtyping, co- och contra-variance Objekt-orienterad programmering och design Alex Gerdes, 2016 Typer Java har två sorters typer primitiva typer och referens-typer. Primitiva typer är typer för värden:
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
Objektorienterad programmering. Grundläggande begrepp
Objektorienterad programmering Grundläggande begrepp Hur beskriver vi objekt? Vill ha en representationsoberoende beskrivning Abstrakta datatyper! Data Operationer Objekt Representerar en verklig eller
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
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
Föreläsning 15: Repetition DVGA02
Föreläsning 15: Repetition DVGA02 Vad handlar kursen om? Kursen kan i grova drag delas upp i tre delar: 1. Objekt-orienterad programmering 2. Grafiska användargränssnitt 3. Datastrukturer Dessutom genomsyras
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
Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser
Föreläsning 8 Arv och abstrakta klasser Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen (extends) Den nya klassen behåller alla egenskaper som den gamla
TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Introduktion till Java -- för Pythonprogrammerare Historia: C, C++ 3 Historia: Oak 1 4 1990: Sun Microsystems påbörjade projekt StarSeven Avancerad
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
Generics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Generics och polymorfism Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Live code Pair public class Pair { private A a; private B b; public A getfirst()
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
Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal
Tentamen DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl 10.00 13.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna
Objektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Instansiering Åtkomst Abstrakt datatyp UML Överlagring
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).
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
Arv och klassbibliotek
Arv och klassbibliotek Johan L Larsson Uppsala Universitet/KTH November 1999 jola@csd.uu.se 1 Klasser och objekt Car instantiates particularcar jola@csd.uu.se 2 Introduktion till arv Problem med modifikation
Subtyping, co- och contra-variance. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017
Subtyping, co- och contra-variance Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017 Idag pratar vi om statiska typer...om inte annat anges. Subtypsrelationen
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
Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).
3 Arv och gränssnitt 3.1 Vad innebär arv? Ett objektorienterat språk bygger på att programmeraren ges möjligheten att modellera verkligheten med hjälp av objekt. Objekt låter sig definieras i form av klasser.
TDDD78, TDDE30, 729A Introduktion till objektorienterad programmering i Java
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Introduktion till objektorienterad programmering i Java Klasser 3 Bilar är komplicerade vi tar cirklar som exempel (ritprogram?) En klass i Java 4 För
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
Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal
Tentamen DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl 14.00 17.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna
F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander
F9 - Polymorfism ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Polymorfism - flerformighet Vi vet vad metoden heter (signaturen) Men vi vet inte vid anropet exakt vilken metod som faktiskt
Felhantering TDDD78, TDDE30, 729A
Felhantering TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Felhantering 2 Ofta antar vi att allt ska fungera Alla filer vi behöver finns går att öppna Tillräckligt mycket minne finns Servrar som
Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag
Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 14 I torsdags & fredags: arrayer Deklaration, initiering, åtkomst Arrayer är referenser Arrayer som parametrar och returvärden Exempel
"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde
Föreläsning 7 "Har en"-relation Arv "Har en" "Är en" Superklassen Object Överskuggning Fordonsexempel Seminarium 2 Relevanta uppgifter Uppgift 31 I exemplet Boll från förra föreläsningen gällde följande
TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java
jonas.kvarnstrom@liu.se 2018 TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java Kursinformation Examinator, kursledare: Jonas Kvarnström Fråga kommentera avbryt! Utan OO har vi datastrukturer
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
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML
Målet Mer OOP Mer om klasser Några exempel UML Modularitet Språkligt modulära enheter Få gränssnitt Små gränssnitt Tydliga gränssnitt Dold information Återanvändbarhet Variation i typer Variation i datastrukturer
Imperativ programmering. Föreläsning 4
Imperativ programmering 1DL126 3p Föreläsning 4 Imperativa paradigmer Ostrukturerad programmering Strukturerad programmering Procedurell programmering Objektorienterad programmering Klassbaserad programmering
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
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
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[],
*Pekarvärden *Pekarvariabler & *
*Pekarvärden *Pekarvariabler & * Motivering Pekare är ett fundamentalt koncept i C (och C++) Multipla returvärden från funktioner. Arrayer hanteras via pekare Dynamiskt minne (kommer i slutet av kursen)
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
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
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
Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.
Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Att instansiera en klass Objekt I Man instansierar (skapar
Föreläsning 10. Pekare (Pointers)
Föreläsning 10 Pekare (Pointers) Dagens kluringar int a=5; int f(int b) a--; b++; return b; int main() int a=3; printf("%d,",f(a)); printf("%d",a); return 0; int f(int a) if(a==1) return a; else return
Föreläsningsmaterial (Arv) Skrivet av Andreas Lund
Föreläsningsmaterial (Arv) Skrivet av Andreas Lund Inledning Arv är ett begrepp som är tätt förknippat med objektorientering. Principerna bakom arv är grundade i högst vardagliga relationer mellan olika
Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista
Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Abstrakt stack Abstrakt kö Länkade listor Abstrakta datatyper Det är ofta praktiskt att beskriva vilka operationer man vill kunna göra på sina
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
Laboration 1: Figurer i hierarki
Laboration 1: Figurer i hierarki Bakgrund Två grundläggande tekniker i objektorienterad konstruktion är arv och komposition. Mål Laborationen har flera avsikter: 1. Ge kunskaper i hur program kan organiseras
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
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:
Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15
DAVA15 Objekt, klasser Vad är det? Vad är sambandet mellan dem? Vad är skillnaden mellan dem? Tillstånd Signatur Kommunikation Typ Fält, parametrar och lokala variabler Likheter och skillnader Räckvidd
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
Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018
Static vs Dynamic binding Override vs Overload Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018 Quiz: Gissa typen? Object o = new Square(100,100); Polygon p =
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
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
Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad
1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen
Analys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram
Analys och design med hjälp av CRC 83 Klassdiagram Objekt Ett objekt är en individuellt identifierbar entitet som kan vara konkret eller abstrakt. Ett objekt har tillstånd, beteende och identitet. Reellt,
Föreläsning 5: Introduktion av pekare
Föreläsning 5: Introduktion av pekare Det bör påpekas att det som tas upp i introduktionen inte är reella exempel på kod. Man anväder inte pekare till att peka på enstaka heltal som i exemplen nedan, men
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
Övningsuppgift. Repeterbara citat. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402
Övningsuppgift Repeterbara citat Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande
TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java
jonas.kvarnstrom@liu.se 2019 TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java Kursinformation Examinator, kursledare: Jonas Kvarnström Fråga kommentera avbryt! Utan OO har vi datastrukturer
Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll
Mera om generik Begreppet subtyp/supertyp i Java Innehåll Wildcards Vektorer och generik Supertyper för en viss klass C är alla klasser från vilka C ärver och alla interface som klassen implementerar.
Facit Tentamen TDDC (7)
Facit Tentamen TDDC30 2014-03-18 1 (7) Teoretisk del 1. (3p) "Snabba frågor" a) Varför kan man tänkas vilja dölja metoder och variabler med private? (0.5p) Svar:För att skydda interna variabler från ändringar