Översikt Formalia Vad är objektorienterad programmering 729G06 Föreläsning 1 Objektorienterad programmering Definieria klasser Skapa och använda objekt Annika Silvervarg Ciltab, IDA, Linköpings universitet 1 2 Kursupplägg Kursinnehåll 4 Föreläsningar 3 laborationsförberedande lektioner i PUL (Lab1+2+4) 1 laborationsförberedande lektion i Sal (Lab3) 2 projektförberedande lektioner 5 tillfällen/lab (1-2 utan handledare) 10 tillfällen till projektet (3 utan handledare) Fö 1: Introduktion till objektorienterad programmering Fö2: Objektorienterad programmering ipython, klassdiagram, undantag, introduction till ärvning Fö 3: Ärvning, överskuggning, komplexa objekt, klassdiagram Lektion 1: Principer för objektorienterad analys och design Lektion 2: Genetiska algoritmer Fö 4: Händelsedriven GUI-programmering Fö 5: Introduktion till projektet, Objektorienterad design i projektet 3 4 Examination Programmering 4 labbar ipar, 1hp (U/G) Enskiltprojekt, 2hp (U/G/VG) 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 Kompletteringsdeadline för laborationer: 2015-06-05 Kompletteringsdeadline för projektet och uppsamlingstillfälle för laborationer: 2015-08-14 Uppsamlingstillfälle för projekt: 2015-09-25 Däreftergörs labserienom när kursen ges VT 16 Labassistenternarättar de labbar som skickats in till ett inlämningsdatum inom 10 arbetsdagar Bara har EN chans att komplettera! Skicka bara in laborationer som är kompletta! VG på projektetoch VG på logikenkrävs för att VG på kursen Programmeringsparadigm Programmeringsparadigm är en övergripandeteorieller fundamentalt arbetssätt kring hur program bör organiseras och struktureras språkoberoende aktiva och levande samtidigt (till skillnad från paradigm i vetenskapsfilosofiska sammanhang) lämpar sig olika bra för olika domäner och problem Exempel på programmeringsparadigm: Funktionell programmering Procedurell programmering Logik-programmering Objektorienterad programmering 5 6 1
Objektorienterad programmering Används i industrin Används som bas för stora projekt C++, Objective-C och Java är exempel på andra objektorienterade programmeringsspråk Abstraktion Att modellera ett problem och representera problemet Fokusligger intepåimplementationsdetaljerutanpåattskapaen meningsfull representation av problemet I funktionella och imperativa språk används ofta abstrakta datatyper som en abstraktionsmodell ADT (Abstrakt DataTyp) = datastruktur + funktioner 7 8 Varför räcker inte ADT:er? Det finns ingen hård koppling mellan data och dess funktioner -olika data kan skickas till alla funktioner vilket kan orsaka fel och buggar. Exempel Två abstrakta datatyper: bokochperson (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ärupp till programmerarenatthålla redanpå attingenkanlåna en kontakt, ellerbyta adresspåen boketc. 9 10 Objektorienterad programmering (OOP) Objekt istället för abstrakt datatyp Objektet ärifokus jämförtmed funktioner i fokus som vid funktionell programmering Man försöker relatera data och funktioner (= metoder) till objekt Objekt = Egenskaper + Beteenden (vadobjektet kangöraochvadman kangöramed objektet) Objekt, egenskaper och beteenden Klassens namn egenskaper beteenden 11 12 2
Objekt, attribut och metoder Objekt, attribut och metoder Klassens namn attribut age name metoder 13 14 Semiotiska triangeln(ogden & Richards 1923) I objektorienterad programmering Klass Variabel/ Referens Objekt 15 16 Klasser och objekt/instanser En klassären mall, en beskrivning avnågot somkan finnasivärlden. En klass beskriver vilka egenskaper (attribut) klassen har och vilka beteenden (metoder) den har Detsomfinnsivärldenärinstanser avklasser, även kallade för objekt, dessa kan lagras i variabler Objekt, egenskaper och beteenden age name 17 18 3
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 heter alltså konstruktorn () Konstruktorer "returnerar" nya objekt (returnerar egentligen inte, men man kan tänka så) 19 20 Vi skapar några hundar hund1: age: 0 name: Pluto (modul.)objekt.variabel (modul.)objekt.metod() a = [12, 3] a.append(4) Punktnotation hund2: age: 0 name: Lassie s = "hejsan" s.upper() 21 22 Testar hundarna Ändra värden hund1: age: 4 name: Pluto hund2: age: 8 name: Lassie 23 24 4
Testar hundarna metoden str () 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!) Getter och Setter för Objektorienterad systemutveckling Vad? Objekt består av egenskaper (attribut) och beteenden (metoder) Klasser är generella/abstrakta mallar och Instanser specifika objekt i världen Varför? Hur? Bra sätt att modellera många verkliga domäner och problem Underlättar modularisering, att designa och underhålla stora system 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