Introduktion till objektorienterad programmering

2015-03-29
Översikt
• Formalia
• Vad är objektorienterad programmering
• Definieria klasser
729G06 – Föreläsning 1
• Skapa och använda objekt
Objektorienterad programmering
Annika Silvervarg
Ciltab, IDA, Linköpings universitet
2
1
Kursupplägg
Kursinnehåll
• 4 Föreläsningar
• Fö 1: Introduktion till objektorienterad programmering
• 3 laborationsförberedande lektioner i PUL (Lab1+2+4)
• Fö 2: Objektorienterad programmering i Python, klassdiagram,
undantag, introduction till ärvning
• 1 laborationsförberedande lektion i Sal (Lab3)
• Fö 3: Ärvning, överskuggning, komplexa objekt, klassdiagram
• 2 projektförberedande lektioner
• Lektion 1: Principer för objektorienterad analys och design
• 5 tillfällen/lab (1-2 utan handledare)
• Lektion 2: Genetiska algoritmer
• 10 tillfällen till projektet (3 utan handledare)
• Fö 4: Händelsedriven GUI-programmering
• Fö 5: Introduktion till projektet, Objektorienterad design i projektet
3
Examination
Programmeringsparadigm
• Programmering
•
4 labbar i par, 1hp (U/G)
•
Enskilt projekt, 2hp (U/G/VG)
• Programmeringsparadigm är…
• en övergripande teori eller fundamentalt arbetssätt kring hur program
bör organiseras och struktureras
• Följande ordinarie inlämningsdatum gäller för laborationerna i kursen:
•
Mån v 16 kl 8.00
•
Mån v 18 kl 8.00
•
Mån v 20 kl 8.00
•
Mån v 21 kl 8.00
4
• språkoberoende
• aktiva och levande samtidigt (till skillnad från paradigm i
vetenskapsfilosofiska sammanhang)
• Kompletteringsdeadline för laborationer: 2015-06-05
• lämpar sig olika bra för olika domäner och problem
• Kompletteringsdeadline för projektet och uppsamlingstillfälle för laborationer: 2015-08-14
• Exempel på programmeringsparadigm:
• Uppsamlingstillfälle för projekt: 2015-09-25
• Därefter görs labserien om när kursen ges VT 16
• Funktionell programmering
• Labassistenterna rättar de labbar som skickats in till ett inlämningsdatum inom 10 arbetsdagar
• Procedurell programmering
• Bara har EN chans att komplettera! Skicka bara in laborationer som är kompletta!
• Logik-programmering
• Objektorienterad programmering
• VG på projektet och VG på logiken krävs för att VG på kursen
5
6
1
2015-03-29
Objektorienterad programmering
Abstraktion
• Används i industrin
• Att modellera ett problem och representera problemet
• Fokus ligger inte på implementationsdetaljer utan på att skapa en
meningsfull representation av problemet
• Används som bas för stora projekt
• C++, Objective-C och Java är exempel på andra objektorienterade
programmeringsspråk
• I funktionella och imperativa språk används ofta abstrakta datatyper
som en abstraktionsmodell
• ADT (Abstrakt DataTyp) = datastruktur + funktioner
7
Varför räcker inte ADT:er?
8
Exempel
• Det finns ingen hård koppling mellan data och dess funktioner - olika
data kan skickas till alla funktioner vilket kan orsaka fel och buggar.
• Två abstrakta datatyper: bok och person
(t ex om vi vill skapa ett bibliotekssystem)
• Alla funktioner ligger på samma nivå:
• create_book(), create_contact()
• borrow_book(), return_book(), change_address() etc.
• Det är upp till programmeraren att hålla redan på att ingen kan låna
en kontakt, eller byta adress på en bok etc.
9
Objektorienterad programmering (OOP)
10
Objekt, egenskaper och beteenden
• Objekt istället för abstrakt datatyp
• Objektet är i fokus jämfört med
funktioner i fokus som vid funktionell programmering
Klassens namn
• Man försöker relatera data och funktioner (= metoder) till objekt
• Objekt = Egenskaper + Beteenden
(vad objektet kan göra och vad man kan göra med objektet)
egenskaper
beteenden
11
12
2
2015-03-29
Objekt, attribut och metoder
Objekt, attribut och metoder
Klassens namn
Dog
attribut
age
name
metoder
talk()
13
Semiotiska triangeln (Ogden & Richards 1923)
14
I objektorienterad programmering
Klass
Variabel/
Referens
Objekt
15
Klasser och objekt/instanser
16
Objekt, egenskaper och beteenden
• En klass är en mall, en beskrivning av något som kan finnas i världen.
• En klass beskriver vilka egenskaper (attribut) klassen har och
vilka beteenden (metoder) den har
Dog
• Det som finns i världen är instanser av klasser,
även kallade för objekt,
dessa kan lagras i variabler
age
name
talk()
17
18
3
2015-03-29
Definition av en klass
Konstruktorer: Att skapa objekt av en klass
• Anropa klassens konstruktor, den speciella metod som skapar
instanser av en klass
• Konstruktorn heter samma sak som klassen
För klassen Dog heter alltså konstruktorn Dog()
• Konstruktorer "returnerar" nya objekt
(returnerar egentligen inte, men man kan tänka så)
19
20
Punktnotation
Vi skapar några hundar
• (modul.)objekt.variabel
hund1:
• (modul.)objekt.metod()
Dog
age: 0
name: ”Pluto”
• a = [1 2, 3]
• a.append(4)
talk()
hund2:
• s = "hejsan"
Dog
• s.upper()
age: 0
name: ”Lassie”
talk()
22
21
Testar hundarna
Ändra värden
hund1:
Dog
age: 4
name: ”Pluto”
talk()
hund2:
Dog
age: 8
name: ”Lassie”
talk()
23
24
4
2015-03-29
metoden __str__()
Testar hundarna
• Metoden __str__() berättar för python att hur instanser av klassen
ska representeras som text
• Om den inte är definierad returneras en beskrivning av objektets typ
samt var i minnet den finns
t.ex. '<__main__.Test instance at 0x101c1d290>'
• Om man definierar __str__() kan man bestämma hur objekt av en
klass ska representeras som sträng
25
Exempel på __str__
Några ord om getters/setters
• Det "pythonska" sättet att koda är att inte använda getters/setters.
• Dock är getters/setters vanliga i många objektorienterade språk och
ett bra sätt att kapsla in/gömma data i syfte att göra det lättare att
omfaktorera kod (t ex byta datatyp från lista till dictionary)
• Man använder
hund1.get_name() istället för hund1.name, och
hund1.set_name(”Fido”) istället för hund1.name = ”Fido”
(även inne i klassens metoder!)
Objektorienterad systemutveckling
Getter och Setter för Dog
• Vad?
• Objekt består av egenskaper (attribut) och beteenden (metoder)
• Klasser är generella/abstrakta mallar och Instanser specifika objekt i
världen
• Varför?
• Bra sätt att modellera många verkliga domäner och problem
• Underlättar modularisering, att designa och underhålla stora system
• Hur?
• OO Analays – Förstå domänen och problemet, identifiera objekt
• OO Design – Designa klasser och hur de relaterar till varandra
• OO Programmering – Implementera klasser och instanser
29
30
5