Programvaruteknik. Programspråk. Skriptspråk. Inkapsling OOP. Abstraktion. Typsystem. Parallellism. Dynamisk typning. Concurrency

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

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

Arv. Objektorienterad och komponentbaserad programmering

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

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

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

OOP Objekt-orienterad programmering

Imperativ programmering. Föreläsning 4

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

(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

Objektorienterad Programmering (OOP) Murach s: kap 12-16

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

Classes och Interfaces, Objects och References, Initialization

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

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

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

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Laboration 1 - Grunderna för OOP i Java

Objektorienterad Programmering (TDDC77)

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

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

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

Klasshierarkier - repetition

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

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

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

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

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

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

Objektorienterad Programmering (TDDC77)

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Instuderingsuppgifter läsvecka 2

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

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

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Objektorienterad programmering i Java

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

TDDD78 Viktiga begrepp, del 2

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

Historik: OOP. Objektorientering. Historik: OOP (forts) En Dum Fråga

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

Polymorfi. Objektorienterad och komponentbaserad programmering

Objektorienterad programmering

Objektorienterad programmering. Grundläggande begrepp

Konstruktion av klasser med klasser

Föreläsning 9: Arv och UML

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

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

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Objektorienterad Programmering (TDDC77)

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

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

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

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

Modeller, Objekt och Klasser

Imperativ programmering. Föreläsning 2

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

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

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

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

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

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

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

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

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

Introduktion till arv

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

TENTAMEN OOP

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

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

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Tommy Färnqvist, IDA, Linköpings universitet

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

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

Inledande programmering med C# (1DV402) Introduktion till C#

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Arv Murach s: kap 14

DAT043 - Föreläsning 7

Klasshierarkier. Klasser kan byggas på redan definierade klasser

OOP Objekt-orienterad programmering

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

SMD 134 Objektorienterad programmering

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

Transkript:

Inkapsling Programspråk OOP Skriptspråk Programvaruteknik Abstraktion Typsystem Parallellism Concurrency Dynamisk typning objektorienterad programmering

The ACM SIGPLAN conference on Systems, Programming, Languages and Applications: Software for Humanity (SPLASH) embraces all aspects of software construction and delivery to make it the premier conference at the intersection of programming, languages, and software engineering. OOPSLA (Object-Oriented Programming, Systems, Languages & Applications) is an annual ACM research conference. OOPSLA mainly takes place in the United States, while the sister conference of OOPSLA, ECOOP, is typically held in Europe.

Dave Clarke ersätter mig på 2 3 föreläsningar info i Piazza

Introduktion till OO Tobias Wrigstad tobias.wrigstad@it.uu.se Föreläsning 15

What is object-oriented software Objects are like people. They're living, breathing things that have knowledge inside them about how to do things and have memory inside them so they can remember things. And rather than interacting with them at a very low level, you interact with them at a very high level of abstraction [...]

Ole Johan Dahl Kristen Nygaard

Jacob Palme

Alan Kay

i i := 5. [i > 0] whiletrue: [ Transcript show: ((i*2) asstring) ; cr. i := i - 1. ]. whiletrue: ablock ^self value iftrue: [ ablock value. [self value] whiletrue: [ablock value]. ].

Objekt Gäst A, gäst B, gäst C Kypare A, kypare B, Kock A, Tallrikar med mat En massa bord En massa stolar Dukar, glas, bestick,

Objektorienteringens grundkoncept Aktiva och passiva objekt Meddelandesändning Aggregering Inkapsling Arv Polymorfism

Objektorienteringens grundkoncept Aktiva och passiva objekt Aktiva: serveringspersonal, gäster, kockar Passiva: maten, stolarna, borden, etc. Meddelandesändning Aggregering Inkapsling Arv Polymorfism

Objektorienteringens grundkoncept Aktiva och passiva objekt Meddelandesändning Mellan aktiva objekt: beställa mat Aktiva passiva objekt: dra ut stol, äta, lyfta en gaffel Aggregering Inkapsling Arv Polymorfism

Objektorienteringens grundkoncept Aktiva och passiva objekt Meddelandesändning Aggregering Ett bord består av en bordsskiva och fyra ben Ett middagssällskap består av flera gäster Inkapsling Arv Polymorfism

Objektorienteringens grundkoncept Aktiva och passiva objekt Meddelandesändning Aggregering Inkapsling En gäst kan inte interagera direkt med kökspersonalen Hur maten lagas (Det är inte uppenbart att det är hästkött i lasagnen, jmf. abstraktion) Arv Polymorfism

Objektorienteringens grundkoncept Aktiva och passiva objekt Meddelandesändning Aggregering Inkapsling Arv En Gäst är en Person, en Kypare är en Person, en Kock är en Person Om P(Person) P(Gäst) P(Kypare) P(Kock) Polymorfism

Objektorienteringens grundkoncept Aktiva och passiva objekt Meddelandesändning Aggregering Inkapsling Arv Polymorfism Olika objekt kan ha samma gränssnitt Olika maträtter smakar olika, personer agerar olika, etc. Kockarna går också på restaurang som gäster, man kan dricka vin ur ölglas

Koncept Objekt Klasser ritningar för objekt

Koncept Objekt Världen består av objekt (som består av objekt ) som skickar meddelanden till varandra Objekt av samma sort grupperas i klasser som beskriver hur objekten fungerar Relationer mellan objekt: aggregering (objekt har referenser till andra objekt) Ett objekts byggstenar är inte direkt åtkomliga (inkapsling) Klasser ritningar för objekt

Koncept Objekt Världen består av objekt (som består av objekt ) som skickar meddelanden till varandra Objekt av samma sort grupperas i klasser som beskriver hur objekten fungerar Relationer mellan objekt: aggregering (objekt har referenser till andra objekt) Ett objects byggstenar är inte direkt åtkomliga (inkapsling) Klasser ritningar för objekt Beskriver inte bara vad ett objekt innehåller (tillstånd) utan också dess beteende Relationer mellan klasser: arv (En pudel är en hund är ett djur är ett ) Hur en klass är uppbygd internt är inte synligt utifrån (inkapsling)

Procedurell programmering f(x) du bestämmer nu skall jag göra f på datat x Objektorienterad programmering x.f() du ber snälla objekt x, utför f

Statisk bindning i C f(x) gcc väljer f beroende på x:s typ vid kompilering Dynamisk bindning i Java x.f() VM:en väljer f beroende på vad som finns i x under körning!

Introduktion till OOP med Java Tobias Wrigstad tobias.wrigstad@it.uu.se

En liten Java-parlör Svenska Engelska Svenska Engelska Objekt Object Metodspecialisering Overriding Klass Class Överlagring Overloading Arv Inheritance Överskuggning Shadowing Instansvariabel / fält Instance variable / field Klasshierarki Class hierarchy Metod Method Aggregering Aggregation Superklass / basklass Super class / base class Typomvandling Type cast Subklass / härledd klass Sub class / derived class Polymorfism Polymorphism Abstrakt klass Abstract class Barnklass Child / sub / derived class Superanrop Super call Instantieras Instantiate

Tolka Javakompilatorns felmeddelanden! <Filnamn.Java>:<Radnummer>: error: <Beskrivning av felet> <information om var det uppstår> <övrig hjälpinformation om tillämpligt> Mall CommonCompilerErrors.java:66: error: cannot find symbol LinkedList mylist; ^ Exempel symbol: class LinkedList location: class ErrorThree

Förstå kompilatorns språk Kompilatorn säger Betyder i regel cannot find symbol Felstavat namn, eller namnet är inte synligt ännu, t.ex. inte importerat in, alt finns inte method X cannot be applied Argumentlistans typer fel (för få argument, fel ordning, fel argument?) incompatible types Typen på högersidan är inte kompatibel med den till vänster. Är de subtyper? X cannot be converted to String Glömt att anropa tostring()?

Objekt En samling data (tillstånd) samt operationer som opererar på datat Man kan skicka meddelanden till ett objekt Objektet väljer själv vad som skall utföras som svar på ett meddelande Objekt-orienterad design är data-driven design Vilka aktörer finns det? Hur är de relaterade med arv, aggregering, användning, etc. (mer senare)

Klass (finns i nästan alla OO-språk) En klass är en ritning från vilken man kan bygga oändligt många objekt Medlemmar Instansvariabler (även fält) Metoder En klass är ung. som en strukt + alla funktioner som opererar på strukten Saker vi skall prata om senare Relationer mellan klasser Åtkomstmodifikatorer Arv Instansiering: att skapa ett objekt från en klass

Java Utvecklades av Sun (James Gosling) under 90-talets början, släpptes 1995 Några designprinciper för Java Enkelt, objektorienterat och familjärt Robust och säkert Arkitekturoberoende och portabelt Snabbt Tydligt Klassen Foo måste ligga i Foo.java

Ett första Java-program /** * @author Tobias Wrigstad (tobias.wrigstad@it.uu.se) * @date 2013-10-01 */ public class Hello { String who = null; public Hello (String who) { this.who = who; } public void greet() { System.out.println("Hello " + who); } public static void main(string args[]) { if (args.length > 0) { Hello hello = new Hello(args[0]); hello.greet(); } else { System.out.println("Usage: java Hello <who>"); } } }

Koncept Klass Objekt Instansvariabel Konstruktor Metod Main-metod Arrayer är objekt Instantiering Metodanrop Åtkomstmodifierarere En vettig sträng-typ /** * @author Tobias Wrigstad (tobias.wrigstad@it.uu.se) * @date 2013-10-01 */ public class Hello { String who = null; public Hello (String who) { this.who = who; } public void greet() { System.out.println( Hello + who); } public static void main(string args[]) { if (args.length > 0) { Hello hello = new Hello(args[0]); hello.greet(); } else { System.out.println("Usage: java Hello <who>"); } } }

Kompilera och köra Kompilatorn javac Förstår beroenden Kompilerar till Java-bytekod Programmet måste köras i den virtuella maskinen $ javac Hello.java $ ls Hello.java Hello.class $ java Hello Usage: java Hello <name> $ java Hello Tobias Hello Tobias! $ Programmet java Tar som argument namnet på en klass med en main-metod

Länkad lista i C Varje link är en mallokerad struct list value 4 next value 5 next En länk pekar ut sin nästa länk En uppsättning funktioner som opererar på alla delar av listan first last value 9 next NULL Länkad lista i Java Varje länk är ett objekt En länk refererar sin nästa länk :List first next :Link last next :Link next :Link Listobjekten och länkobjekten har separat tillstånd och definierar ett eget beteende

Observationer Två klasser: List och Link List-objekt aggregerar länk-objekt Rekursion och iteration som i C (märk att det rekursiva anropet växlar mottagare!) Privat och publik åtkomst Kräver set- och get-metoder i Link för privata medlemsvariabler

Referenser pekare En referens är ett handtag till ett objekt det är inte en adress till en plats i minnet Alla valida pekare i C pekar inte på det de skall (eller något alls) Alla referenser i Java pekar alltid på det de skall och på någonting! Referensen null är inte adressen 0 Den är inte heller ett booleskt värde Referenser möjliggör automatisk minneshantering (GC)

Automatisk minneshantering Java hanterar minnet automatiskt new ClassName( ) allokerar automatiskt nog med minne på heapen När sista referensen till ett objekt tas bort är objektet skräp När minnet blir fullt städas skräp bort automatiskt för att lämna plats för nya objekt Alltså: Ingen malloc (new allokerar alltid på heapen, åtminstone vad du vet!) Ingen free

Förrädiskt likt C Syntaxen vald för att göra det enkelt för C och C++-programmerare att programmera Java Många konceptuella skillnader (Java är mer likt Smalltalk än C++) Men: vi kan ta med oss mycket från C! While, for, if, switch, variabeldeklarationer, funktionsyntax, primitiva typer, etc. I stort sett vet ni redan hur man programmerar Java, bara inte hur man programmerar objektorienterat i Java! Tag er i akt så ni inte programmerar C i Java!