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?

TDDD78 Introduktion till OOP i Java

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

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

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

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

Programmering B med Visual C

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

Introduktion. Byggstenar TDBA

Objektorienterad programmering Föreläsning 4

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

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

F2: Krav på objektorienterat språk

Arrayer (fält)

UML 1(5) Introduktion till Unified Modeling Language. 1 Bakgrund och historik

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

Objektorientering: Lagring, räckvidd och livstid

Personal Objektorienterad programmeringsmetodik 5DV081 5DV109

TDDD78 Objektorientering i Java, del 2

TDDD78 Viktiga begrepp, del 2

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Objektorientering: Lagring och livstid

Sammansatta datatyper Generics: Parametrisk polymorfism

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

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

Classes och Interfaces, Objects och References, Initialization

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

Repetition av OOP- och Javabegrepp

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

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

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

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

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programmering (TDDC77)

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Repetition av OOP- och Javabegrepp

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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.

Objektorienterad Programmering (TDDC77)

Imperativ programmering. Föreläsning 4

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.

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

Föreläsning 2, vecka 8: Repetition

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

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

Variabler, värden och typer

Variabler, värden och typer

Inkapsling (encapsulation)

TDDD78 Introduktion till OOP i Java

TDDD78 Objektorientering: Lagring och livstid

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

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

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

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

Föreläsning 15: Repetition DVGA02

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

Objektorienterad programmering i Java

OOP Objekt-orienterad programmering

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

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

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

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

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

Tentamen i Objektorienterad modellering och design

Tommy Färnqvist, IDA, Linköpings universitet

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

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

Objektsamlingar i Java

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

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

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

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

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

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

TDDD78 Introduktion till OOP i Java

TDIU01 - Programmering i C++, grundkurs

Klasser och objekt, referenser Grundkurs i programmering med Python

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

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

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

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

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

Föreläsning 4 Innehåll

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

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

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

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

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

Introduktion till Java

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

Sätt att skriva ut binärträd

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

Transkript:

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 2016 2014 Perspektiv 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 Antal pucklar Längd på ögonfransar 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 individer, 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 2016 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 Från Python-kursen: Listor till allt! def skapa_bil(längd, höjd, toppfart, färg): return ["bil", längd, höjd, toppfart, färg] minbil = skapa_bil( ) 12 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] Enligt språket har dessa samma typ: 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 Från Python-kursen: Listor till allt! 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 namngivna medlemmar (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 Deklarera först en datatyp en "ritning", talar om hur typen ser ut Exempel i "C-liknande" språk: struct struct Date { int year; int month; int day; } 15 Skapa några instanser av typen allokerar minne 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, GUI, databasprogrammering, InputStream, Window, Connection, 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 Själva posten 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,

jonas.kvarnstrom@liu.se 2016 2014 UML: Unified Modeling Language En mycket kort introduktion

Stora program Program kan vara stora Rader kod enligt http://www.informationisbeautiful.net/visualizations/million-lines-of-code/ Unix 1.0: 10 000 Photoshop 1.0: 120 000 Windows 3.1: 2 500 000 Firefox: 9 700 000 Open Office: 23 000 000 Typisk bil, 2013 100 000 000 Google 2 000 000 000 (uppskattat) 24 Hur håller man koll på detta? Metoder för modellering Visualisering av modeller kräver standardiserad notation

Historik 25 Tidigt 90-tal: Tre vanliga metoder och notationer för OO-modeller James Rumbaugh: Object-modeling technique (OMT) Grady Booch: Booch-metoden Ivar Jacobson: Object-Oriented Software Engineering (OOSE) 1995: Anställda på samma företag, kända som The Three Amigos 1996: För många metoder långsammare spridning av OO Ledde konsortium som skapade Unified Modeling Language, UML Ingen utvecklingsmetod ett (delvis visuellt) språk

UML-diagram 26

UML: Diagramtyper Vi fokuserar på en enkel form av klassdiagram! 27

Enkelt klassdiagram Strukturen hos en enskild klass: 28 elements: Object[] length: int ArrayList size() : int get(int amount): Object add(object element): Object set(int index, Object element): void Attribut Klassnamn Operationer (metoder)

Mer senare Vi återkommer med utökade klassdiagram Relationer mellan instanser Relationer mellan klasser 29