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

Relevanta dokument
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?

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

TDDD78 Introduktion till OOP i Java

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

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

Personal Objektorienterad programmeringsmetodik 5DV081 5DV109

TDDD78, TDDE30, 729A Introduktion till objektorienterad programmering i Java

Programmering B med Visual C

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

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

Arrayer (fält)

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

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

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

(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

Classes och Interfaces, Objects och References, Initialization

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

TDDD78 Viktiga begrepp, del 2

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

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

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Klasser och objekt, referenser Grundkurs i programmering med Python

Objektorientering: Lagring, räckvidd och livstid

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

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

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

Variabler, värden och typer

Föreläsning 2, vecka 8: Repetition

TDDD78 Objektorientering i Java, del 2

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

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

TDIU01 - Programmering i C++, grundkurs

Imperativ programmering. Föreläsning 4

Variabler, värden och typer

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

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

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

TDDD78 Introduktion till OOP i Java

Objektorienterad Programmering (TDDC77)

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

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

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

TDDD78 Introduktion till OOP i Java

Sammansatta datatyper Generics: Parametrisk polymorfism

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

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

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

Objektorientering: Lagring och livstid

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Repetition av OOP- och Javabegrepp

Objektorienterad programmering Föreläsning 4

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

TDDC76 - Programmering och Datastrukturer

Programmering A. Johan Eliasson

Repetition av OOP- och Javabegrepp

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Objektorienterad programmering i Java

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

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

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

TDIU01 Programmering i C++

Tentamen OOP

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

OOP Objekt-orienterad programmering

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

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

Sätt att skriva ut binärträd

Tentamen ID1004 Objektorienterad programmering April 7, 2015

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

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3-4 Innehåll

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Laboration 1: Figurer i hierarki

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Objektorienterad Programmering (TDDC77)

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

TDDD78 Objektorientering: Lagring och livstid

Parameteröverföring. Exempel. Exempel. Metodkropp

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

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

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

Anteckningar 1: Grundläggande saker

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

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

Transkript:

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 2015 2014 Perpektiv 1: Från verkligheten till objektorientering

Mojänger 3 Verkligheten innehåller mojänger

Mojängers egenskaper Mojänger har ofta intressanta egenskaper 4 Längd/höjd Färg Motorstyrka Toppfart Strömtålighet Maxfrekvens egenskaper = properties, attributes

Mojänger som gör något En del mojänger kan göra något 5 Accelerera/decelerera Köra till en plats Slå på helljuset Stänga av vindrutetorkarna Gå till en plats Äta Spotta

Terminologi 6 Vi behöver terminologi! Vi har en mängd individuella objekt (bilen ABC123, bilen XYZ789, ) Varje sort av objekt är en klass (klassen bilar, klassen kameler, ) Objekt är instanser av en klass Objekt som tillhör samma klass har samma egenskaper och funktionalitet (alla bilar har någon färg, kan köra) En objektorienterad syn på den fysiska världen

Organisation 7 När vi skriver program om/för mojänger Googles autonoma bilar: Vi kan organisera dem som klasser! // Samla all bilrelaterad kod // närmare koppling // till verklighetens objekt och klasser class Car { // egenskaper double length, height; double topspeed; // funktionalitet void driveto(location loc) { } void setlights(boolean on) { } } klass = class

Organisation 8 När vi skriver program om/för mojänger Googles autonoma bilar: Vi skapar objekt vid behov, genom att instansiera klassen: Car mycar = new Car(); Car other = new Car(); mycar.driveto(home); Varje bil har: Samma beteenden (kod) Samma egenskaper (längd, höjd) Egna värden (olika längd) instansiera = instantiate

jonas.kvarnstrom@liu.se 2015 2014 Perspektiv 2: Från datatyper till objektorientering

Primitiva datatyper Alla språk har en eller flera primitiva datatyper, t.ex.: Heltal 4711 Flyttal 3.1415926535 Tecken Sanningsvärden a, b, c, true, false Primitiv: grundläggande, ursprunglig, odelbar, 10

Sammansatta datatyper: Motivering Nu vill vi lagra information om en bil Många egenskaper för varje bil Längd, höjd, toppfart, färg, 11 Vill ändå representera det som en enhet En funktion ska ta en bil som en parameter, inte som 4 olika variabler: void addtodatabase(car c) { } Behöver sammansatta datatyper sammansatta datatyper = composite datatypes

Sammansatta datatyper Lösning 1: Använd generella sammansatta datatyper Python-exempel: Listor def skapa_bil(längd, höjd, toppfart, färg): return ["bil", längd, höjd, toppfart, färg] minbil = skapa_bil( ) 12 Men enligt språket är datatypen inte bil utan lista "lista av vad som helst" [ bil, 4.7, 1.6, ] [ månad, 10] [1, 1, 2, 3, 5, 8, 13] Språket ser ingen skillnad på dessa: De är generella listor! För att kontrollera om en lista är en bil: Uppfinn egen typkontroll! En lista är en bil om första elementet är strängen "bil def är_bil(lista): fordon = [ bil, cykel, moped, flygplan ]?

Sammansatta datatyper Lösning 1: Använd generella sammansatta datatyper Python-exempel: Listor def skapa_bil(längd, höjd, toppfart, färg): return ["bil", längd, höjd, toppfart, färg] minbil = skapa_bil( ) 13 Olika värden är indexerade numeriskt minbil[3] = 200 # Trimma, ändra toppfart def sättmaxfart(bil, fart): bil[3] = fart sättmaxfart(minbil, 200) Numrera om om värden tas bort eller läggs till

Sammansatta datatyper (3) Lösning 2: Skapa nya typer Pascal: Poster (records) 14 Type bil = Record längd, höjd, toppfart: Real; färg: Color; End; Var minbil : bil; minbil.toppfart := 200 Posten har medlemmar som är namngivna fält (finns även i Python) Kan deklarera en variabel av typ bil, inte av typ lista Tillåter statisk typkontroll Egenskapers värden tas fram via namn, inte via index post = record medlem = member fält = field

Sammansatta datatyper (4) Nästa exempel: Datum Skapa först en datatyp Exempel i "C-liknande" språk: struct struct Date { int year; int month; int day; } 15 Skapa några instanser av typen Date date1; Date date2; Exempel i "C-liknande" språk year: 0 month: 0 day: 0 year: 0 month: 0 day: 0

Sammansatta datatyper (5) Fler exempel på sammansatta datatyper Vanliga, "fundamentala" typer String Generella behållare List, Queue, Stack Specialiserade typer för I/O, nätverk, GUI, databasprogrammering, InputStream, Thread, URL, Window, TextField, Connection, ResultSet Och typer specifika för ett visst program Driver, Car, Wheel Shape, Rectangle, Circle Customer, BankAccount, Transaction Literal, Conjunction, Disjunction, Quantifier 16 Nu har vi samlat ihop information men hur bearbetar vi den?

Utan OO: Funktioner Utan OO: Vi hanterar datumen med funktioner Exempel i "C-liknande" språk boolean isdivisibleby(int large, int small) { return (large % small) == 0; } 18 boolean isleapyear(date date) { if (isdivisibleby(date.year, 4) &&!isdivisibleby(date.year, 100)) return true; if (isdivisibleby(date.year, 400)) return true; return false; } Vanlig syntax: post punkt medlem date punkt year

Utan OO: Exempel 19 add(mydate, 14); if (isleapyear(mydate)) { } anrop Vår kod Operationer på datum: Funktioner boolean isleapyear(date date) { return ((date.year % 4 == 0) && (date.year % 100!= 0) (date.year % 400 == 0)); } int dayssincetoday(date) { } void add(date, days) { } Inspekterar och manipulerar utifrån mydate year: 2021 month: 12 day: 31 Varje post består bara av passiva data!

OO 1: En utökning till poster Med (klassbaserad) objektorientering: Post-typer blir klasstyper med två sorters medlemmar Fält eller medlemsvariabler, precis som tidigare Metoder eller medlemsfunktioner, nära kopplade till datatypen Exempel i "C-liknande" språk 21 class Date { int year; int month; int day; Vilken information innehåller ett datum? } int dayssincetoday() { } boolean isleapyear() { } void add(days) { } Vad kan man göra med ett datum? klass = class fält = field medlemsvariabel = member variable metod = method medlemsfunktion = member function

OO 2: Be objektet att göra något 22 Själva värdet kallas inte post utan objekt otherdate year: 2000 month: 1 day: 1 dayssincetoday() isleapyear() add(days) pastdate year: 1973 month: 4 day: 17 dayssincetoday() isleapyear() add(days) mydate year: 2021 month: 12 day: 31 Objektet "manipulerar sig självt" dayssincetoday() isleapyear() add(days) Vår kod Date pastdate = ; pastdate.add(14); if (pastdate.isleapyear()) ; Vanlig syntax: objekt punkt medlem Vi kan be datumet tala om för oss: Infaller du under ett skottår? Fundamental princip: Klassen bestämmer över sina objekt (kan förhindra manipulation utifrån) Grunden för ärvning, overriding, polymorfism, inkapsling,