Introduktion till objektorienterad programmering
Transcription
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