SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
OOP MED
Dagens föreläsning
Dagens agenda
• Att se världen som klasser
och objekt
• Att representera världen i kod
• Hur klasser och objekt fungerar
i Python
• Att programmera OOP i Python
• Hur fungerar det i ett
större perspektiv?
ATT SE VÄRLDEN I
KLASSER OCH OBJEKT
Har ni börjat göra det än?
EN KLASS ÄR KOD SOM
SPECIFICERAR EN DATATYP MED
ATTRIBUTE OCH METODER.
ATT MODELLERA VÅRA
PROGRAM
OBJEKTORIENTERADE
Vad kan ni såhär långt?
ATT REPRESENTERA
VÄRLDEN I KOD
Genom olika datatyper
Datatyper
■ Nummer 1, 5, 7, 234
■ Strängar ”Hej”, ”Anton”, ”Pyhton”, ”Glass är gott”
■ Boolska värden True, False
■ Listor [1, 2, 3, 4, 5, ”hej”, ”på”, ”dig]
■ Lexikon {”namn”: ”Anton”, ”ålder”: 29}
Att beskriva mig genom olika datatyper
■ anton = ”Anton är 29 år och bor i Lund. Han gillar att sport, teknik och att resa.”
johan = ”Johan är 38 år och bor i Malmö. Han gillar datorer, scouting och språk.”
Att beskriva mig genom olika datatyper
INTE SÅ SMIDIGT…
Men listor och lexikon då?
Beskriva mig genom en lista
Beskriva mig genom ett lexikon
GANSKA BRA?
Men jag vill ha en egen datatyp!
Varför OOP?
■ Vi beskriver väldigt ofta ”verkliga” objekt i kod
– Lättare att göra i OOP
– Kan beskriva inte bara hur objekten ser ut, utan även hur de får agera
■ Källkoden blir ofta enklare att hantera
– All relevant kod på samma ställe
■ Med OOP är det enkelt att återanvända kod
– Vi vill ju inte uppfinna hjulet eller skriva om kod igen…
■ Väldigt många större projekt, byggs enligt OOP
Att jobba med OOP
1. Identifiera en sak
2. Beskriv saken
3. Skapa instanser (objekt) av saken
EXEMPEL
En taxibil
Att beskriva en taxibil
Attribut
■ Namn på chaufför Sträng
■ I tjänst Bool
■ Antal passagerare Nummer
■ Städer Lista
Metoder
■ Plocka upp passagerare
■ Släppa av passagerare
■ Aktivera taxibilen för körningar
■ Avaktivera taxibilen för körningar
■ Ange namn på taxichaufför
■ Hämta namn på taxichaufför
■ …
SKAPA ETT KLASSDIAGRAM
FÖR VÅR KLASS
Vi behöver… ett klassnamn!
Vi behöver… ange vilka attribut vi ska
ha!
Attributen för klassen
Metoden __init__
■ __init__ är en speciell metod i Python
■ Metoden är konstruktor för klassen som den finns inuti
■ __init__ körs varje gång ett objekt skapas från klassen
Skapar ett nytt
objekt
Funktionen
__init__ kalls på
Koden i __init__-
funktionen körs
myTaxi = Taxi(”Anton”) self.driver = ”Anton”
…
Skapa ett objekt av klassen
Titta närmre på skapande av objektet
Att beskriva en taxibil
Attribut
■ Namn på chafför Sträng
■ I tjänst Bool
■ Antal passagerare Nummer
■ Städer Lista
Metoder
■ Plocka upp passagerare
■ Släppa av passagerare
■ Aktivera taxibilen för körningar
■ Avaktivera taxibilen för körningar
■ Ange namn på taxichafför
■ Hämta namn på taxichafför
■ …
Metoder (beteende) för en klass
■ Metoder i en klass fungerar på samma sätt som en funktion, fast man skickar alltid
med self som första parameter
■ En metod tar kan, efter parametern self, ta emot hur många parametrar som helst
Ännu en metod
Att beskriva en taxibil
Attribut
■ Namn på chafför Sträng
■ I tjänst Bool
■ Antal passagerare Nummer
■ Städer Lista
Metoder
■ Plocka upp passagerare
■ Släppa av passagerare
■ Aktivera taxibilen för körningar
■ Avaktivera taxibilen för körningar
■ Ange namn på taxichafför
■ Hämta namn på taxichafför
■ …
VI TAR OCH TESTAR! =)
Övning! Skriv en klass som beskriver en
buss – och skapa sedan bussar
■ Instruktioner
■ 1) Börja med att skapa ett klassdiagram
■ 2) Skapa en klass för en buss i Python
■ 3) Skapa två bussar (objekt) av klassen
buss i Python, de ska ha olika antal
platser och färg.
■ En buss ska skapas med antal platser, en färg, och körs av en busschafför som har
ett namn. Nya passagerare kan gå in in bussen och existerande passagerare kan
lämna bussen. Antalet passagerare på bussen kan inte vara färre än 0 och inte fler
än antalet platser i bussen. Skriv även en funktion som visar hur många lediga
platser det finns i bussen.
Objekt- vs. klassvariabler
■ I Python finns det variabler som är specifika för varje objekt och variabler som är
specifika för klassen (och tillgängliga för att objekt).
– T.ex. kanske vi vill veta hur många taxibilar som finns?
Övning! Uppdatera er bussklass
■ Instruktioner
■ 1) Börja med att skapa en klassvariabel
■ 2) Öka klassvariabeln varje gång en ny
buss skapas (i __init__ funktionen)
■ 3) Skapa en @classmethod som skriver
ut antalet bussar
■ Vi vill nu ha koll på antalet bussar som har skapats!
BONUS! FUNKTIONEN
__STR__
Att skriva ut en ”vänlig” beskrivning av ett objekt (som en sträng)

Contenu connexe

Plus de Anton Tibblin

Plus de Anton Tibblin (20)

VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbteknikerVT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
 
VT24 - Responsiv design & Ramverk inom webbutveckling
VT24 - Responsiv design & Ramverk inom webbutvecklingVT24 - Responsiv design & Ramverk inom webbutveckling
VT24 - Responsiv design & Ramverk inom webbutveckling
 
DA395A - VT24 - JavaScript & Document object model
DA395A - VT24 - JavaScript & Document object modelDA395A - VT24 - JavaScript & Document object model
DA395A - VT24 - JavaScript & Document object model
 
VT24 - DA395A - Kursintroduktion: Flerplattformsapplikationer med webbtekniker
VT24 - DA395A - Kursintroduktion: Flerplattformsapplikationer med webbteknikerVT24 - DA395A - Kursintroduktion: Flerplattformsapplikationer med webbtekniker
VT24 - DA395A - Kursintroduktion: Flerplattformsapplikationer med webbtekniker
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med Python
 
HT23 - DA354A - Fil- och felhantering
HT23 - DA354A - Fil- och felhanteringHT23 - DA354A - Fil- och felhantering
HT23 - DA354A - Fil- och felhantering
 
HT23 - DA354A - Listor och lexikon
HT23 - DA354A - Listor och lexikonHT23 - DA354A - Listor och lexikon
HT23 - DA354A - Listor och lexikon
 
HT23 - DA354A - Kursintroduktion
HT23 - DA354A - KursintroduktionHT23 - DA354A - Kursintroduktion
HT23 - DA354A - Kursintroduktion
 
HT23 - DA106A - Användbarhet (2)
HT23 - DA106A - Användbarhet (2)HT23 - DA106A - Användbarhet (2)
HT23 - DA106A - Användbarhet (2)
 
HT23 - DA106A - Användbarhet 1
HT23 - DA106A - Användbarhet 1HT23 - DA106A - Användbarhet 1
HT23 - DA106A - Användbarhet 1
 
HT23 - DA106A - Ramverk & Bibliotek
HT23 - DA106A - Ramverk & BibliotekHT23 - DA106A - Ramverk & Bibliotek
HT23 - DA106A - Ramverk & Bibliotek
 
HT23 - DA106A - Introduktion till JavaScript
HT23 - DA106A - Introduktion till JavaScriptHT23 - DA106A - Introduktion till JavaScript
HT23 - DA106A - Introduktion till JavaScript
 
HT23 - DA106A - Responsiv webbutveckling
HT23 - DA106A - Responsiv webbutvecklingHT23 - DA106A - Responsiv webbutveckling
HT23 - DA106A - Responsiv webbutveckling
 
HT23 - DA106A - Layout (2)
HT23 - DA106A - Layout (2)HT23 - DA106A - Layout (2)
HT23 - DA106A - Layout (2)
 
HT23 - DA106A - Layout med CSS (1)
HT23 - DA106A - Layout med CSS (1)HT23 - DA106A - Layout med CSS (1)
HT23 - DA106A - Layout med CSS (1)
 
Introduktion till CSS
Introduktion till CSSIntroduktion till CSS
Introduktion till CSS
 
HTML - Tabeller och formulär
HTML - Tabeller och formulärHTML - Tabeller och formulär
HTML - Tabeller och formulär
 
Introduktion till HTML
Introduktion till HTMLIntroduktion till HTML
Introduktion till HTML
 
Kursintroduktion
KursintroduktionKursintroduktion
Kursintroduktion
 
LocalStorage - GeoLocation - Media
LocalStorage - GeoLocation - MediaLocalStorage - GeoLocation - Media
LocalStorage - GeoLocation - Media
 

HT19 - DA361A - OOP med Python (1)

  • 2. Dagens föreläsning Dagens agenda • Att se världen som klasser och objekt • Att representera världen i kod • Hur klasser och objekt fungerar i Python • Att programmera OOP i Python • Hur fungerar det i ett större perspektiv?
  • 3.
  • 4. ATT SE VÄRLDEN I KLASSER OCH OBJEKT Har ni börjat göra det än?
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. EN KLASS ÄR KOD SOM SPECIFICERAR EN DATATYP MED ATTRIBUTE OCH METODER.
  • 14. ATT REPRESENTERA VÄRLDEN I KOD Genom olika datatyper
  • 15. Datatyper ■ Nummer 1, 5, 7, 234 ■ Strängar ”Hej”, ”Anton”, ”Pyhton”, ”Glass är gott” ■ Boolska värden True, False ■ Listor [1, 2, 3, 4, 5, ”hej”, ”på”, ”dig] ■ Lexikon {”namn”: ”Anton”, ”ålder”: 29}
  • 16. Att beskriva mig genom olika datatyper ■ anton = ”Anton är 29 år och bor i Lund. Han gillar att sport, teknik och att resa.” johan = ”Johan är 38 år och bor i Malmö. Han gillar datorer, scouting och språk.”
  • 17. Att beskriva mig genom olika datatyper
  • 18.
  • 19. INTE SÅ SMIDIGT… Men listor och lexikon då?
  • 20. Beskriva mig genom en lista
  • 21. Beskriva mig genom ett lexikon
  • 22. GANSKA BRA? Men jag vill ha en egen datatyp!
  • 23. Varför OOP? ■ Vi beskriver väldigt ofta ”verkliga” objekt i kod – Lättare att göra i OOP – Kan beskriva inte bara hur objekten ser ut, utan även hur de får agera ■ Källkoden blir ofta enklare att hantera – All relevant kod på samma ställe ■ Med OOP är det enkelt att återanvända kod – Vi vill ju inte uppfinna hjulet eller skriva om kod igen… ■ Väldigt många större projekt, byggs enligt OOP
  • 24. Att jobba med OOP 1. Identifiera en sak 2. Beskriv saken 3. Skapa instanser (objekt) av saken
  • 25.
  • 26.
  • 27.
  • 29. Att beskriva en taxibil Attribut ■ Namn på chaufför Sträng ■ I tjänst Bool ■ Antal passagerare Nummer ■ Städer Lista Metoder ■ Plocka upp passagerare ■ Släppa av passagerare ■ Aktivera taxibilen för körningar ■ Avaktivera taxibilen för körningar ■ Ange namn på taxichaufför ■ Hämta namn på taxichaufför ■ …
  • 31. Vi behöver… ett klassnamn!
  • 32. Vi behöver… ange vilka attribut vi ska ha! Attributen för klassen
  • 33. Metoden __init__ ■ __init__ är en speciell metod i Python ■ Metoden är konstruktor för klassen som den finns inuti ■ __init__ körs varje gång ett objekt skapas från klassen Skapar ett nytt objekt Funktionen __init__ kalls på Koden i __init__- funktionen körs myTaxi = Taxi(”Anton”) self.driver = ”Anton” …
  • 34. Skapa ett objekt av klassen
  • 35. Titta närmre på skapande av objektet
  • 36. Att beskriva en taxibil Attribut ■ Namn på chafför Sträng ■ I tjänst Bool ■ Antal passagerare Nummer ■ Städer Lista Metoder ■ Plocka upp passagerare ■ Släppa av passagerare ■ Aktivera taxibilen för körningar ■ Avaktivera taxibilen för körningar ■ Ange namn på taxichafför ■ Hämta namn på taxichafför ■ …
  • 37. Metoder (beteende) för en klass ■ Metoder i en klass fungerar på samma sätt som en funktion, fast man skickar alltid med self som första parameter ■ En metod tar kan, efter parametern self, ta emot hur många parametrar som helst
  • 39. Att beskriva en taxibil Attribut ■ Namn på chafför Sträng ■ I tjänst Bool ■ Antal passagerare Nummer ■ Städer Lista Metoder ■ Plocka upp passagerare ■ Släppa av passagerare ■ Aktivera taxibilen för körningar ■ Avaktivera taxibilen för körningar ■ Ange namn på taxichafför ■ Hämta namn på taxichafför ■ …
  • 40. VI TAR OCH TESTAR! =)
  • 41. Övning! Skriv en klass som beskriver en buss – och skapa sedan bussar ■ Instruktioner ■ 1) Börja med att skapa ett klassdiagram ■ 2) Skapa en klass för en buss i Python ■ 3) Skapa två bussar (objekt) av klassen buss i Python, de ska ha olika antal platser och färg. ■ En buss ska skapas med antal platser, en färg, och körs av en busschafför som har ett namn. Nya passagerare kan gå in in bussen och existerande passagerare kan lämna bussen. Antalet passagerare på bussen kan inte vara färre än 0 och inte fler än antalet platser i bussen. Skriv även en funktion som visar hur många lediga platser det finns i bussen.
  • 42. Objekt- vs. klassvariabler ■ I Python finns det variabler som är specifika för varje objekt och variabler som är specifika för klassen (och tillgängliga för att objekt). – T.ex. kanske vi vill veta hur många taxibilar som finns?
  • 43.
  • 44. Övning! Uppdatera er bussklass ■ Instruktioner ■ 1) Börja med att skapa en klassvariabel ■ 2) Öka klassvariabeln varje gång en ny buss skapas (i __init__ funktionen) ■ 3) Skapa en @classmethod som skriver ut antalet bussar ■ Vi vill nu ha koll på antalet bussar som har skapats!
  • 45. BONUS! FUNKTIONEN __STR__ Att skriva ut en ”vänlig” beskrivning av ett objekt (som en sträng)