Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 juni 2005 1
Vilka egenskaper vill vi att program ska ha? Förslag (en partiell lista): De ska... gå snabbt att skriva vara effektiva lösa uppgiften vara lätta att förstå vara lätta att ändra (nåt att tillägga eller ta bort?) 2
Viktiga egenskaper hos ett program (Meyer): 1. Korrekthet 2. Robusthet 3. Utökbarhet 4. Återanvändbarhet 5. Kompatibilitet Andra egenskaper: Effektivitet, portabilitet, testbarhet, säkerhet, användarvänlighet 3
Andra begrepp Idéer som fanns före OOP men som blivit en del av OOP: Abstraktion Modularitet Inkapsling Software engineering Metoder för analys, design 4
Abstraktion Abstrahera betyder att ta bort Exempel: konstruktioner i programspråk för aritmetik, proceduranrop etc, filsystem, I/O,... Idé: dölj den komplexa implementationen med ett gränssnitt som presenterar en enklare modell I ett större system vill man abstrahera olika delproblem. 5
Ett viktigt delmål: Modularitet 1. Att lösa ett problem genom att bryta ner det i delproblem (i moduler). 2. Att lösa ett problem genom att kombinera existerande moduler. 3. Att kunna förstå en del av ett program genom att bara studera någon eller några moduler. 4. En liten förändring av en problemspecifikation kan implementeras genom att ändra en eller ett fåtal moduler. 5. Fel i en modul påverkar endast ett fåtal moduler. 6
Om... När är ett program är inte modulärt? vi har misslyckats med att samla kod som är relevant för en del av systemet i ett litet antal moduler oklara gränssnitt mellan moduler kodduplicering likartad kod på många ställen i programmet 7
Software engineering Begreppet myntades i en NATO-konferens 1968. Problem: Software crisis Önskemål: Samma pålitlighet och produktivitet som i de traditionella ingenjörskonsterna (tex brobyggen, mekaniska konstruktioner,...) Lösning: Formalisera de olika stegen i programutvecklingen: Kravanalys, Design, Implementation, Testning, Underhåll 8
Historik: OOP Simula-67, Norge Byggde på Algol-60 Avsett för simulering Garbage collection, arv, klasser (faktiskt ganska likt Java) Smalltalk, Alan Kay, Xerox, 70-tal Introducerade begreppet objekt-orienterad programmering Allt är objekt Första GUIna skrevs i Smalltalk (och i Lisp) 9
Historik: OOP (forts) C++, Bjarne Stroustrup, Bell Labs Bygger på C med idéer från Simula och Algol-68 Saknar GC Eiffel, Bertrand Meyer Objective C, Object Pascal, Self 10
Principer för OOP (Alan Kay) Allt är ett objekt (dvs alla datastrukturer representeras som objekt). Ett program är en samling objekt Objekten kommunicerar genom att skicka meddelanden till varandra Varje meddelande är en begäran om en handling (aktion) som ska utföras Varje objekt har sitt eget minne Ett objekt kan bestå av andra objekt 11
Principer för OOP (forts) Varje objekt tillhör en klass En klass representerar ett visst beteende alla objekt som är n instanser av samma klass kan utföra samma aktioner. Klasser organiseras i en trädliknande arvshierarki. En klass ärver beteende och datastrukturer från tidigare klasser 12
Objekt, meddelanden, metoder 1. Ett OO program är en samling av interagerande objekt 2. Varje objekt står för en viss tjänst 3. Varje objekt associerar ett antal meddelanden till metoder 4. All kommunikation följer samma protokoll: (a) Ett objekt A (klient) skickar ett meddelande (en begäran) M till objektet B (b) B utför motsvarande metod (c) Kontrollen återgår till A 13
Informationsdöljning (inkapsling) En klient som skickar ett meddelande behöver inte veta hur begäran utförs, bara att den utförs Informationsdöljning är viktigt för återanvändbarhet Kunniga programmerare skapar generella byggstenar (klasser) 14
Klassen/objektet sett inifrån: Ett objekt av några datastrukturer och några funktionsdefinitioner Objektet (dvs den som implementerar klassen) har frihet att använda vilka tekniker som helst för att implementera beteendet Klientprogrammerare använder dem för att skapa objekt 15
Klassen/objektet sett utifrån Levererar en viss tjänst Tar ett visst ansvar (responsibility) Har ett visst beteende 16
Objekt och klasser 1. Varje objekt tillhör en viss klass (är en instans av en viss klass) 2. Klasser är statiska (dvs givna av programmet) 3. Objekt är dynamiska (skapas när programmet körs) 4. Ett objekts beteende definieras av dess klass 5. Ett objekts interna struktur definieras av dess klass 17
OOP jämfört med traditionell programmering Traditionell programmering: Programmet utför operationer på datastrukturer (modifiera ett element i en array, tex) OOP: Ett objekt får en begäran om att utföra en viss handling. Objektet utför aktionen (genom att modifiera lokalt data, eller skicka meddelanden till andra objekt.) Traditionell programmering: Data är globalt, eller lokalt till en funktion 18
OOP jämfört med traditionell programmering (forts) OOP: Allt data tillhör ett visst objekt Traditionell programmering: algoritmer som arbetar på data (verb viktiga) OOP: klasser (substantiv viktiga) ger modularitet gratis" 19
Hur hittar man objekten? När man skriver ett objektorienterat program, hur bestämmer man vad som ska representeras som objekt? Vi vill att objekt i programdesignen ska likna objekt i verkligheten: Nånting synligt eller påtagligt. Nånting väl avgränsat. Nåt som är målet för handlngar. 20
Hur bestämmer man klasstrukturen? En klass ärver från en annan klass om klassen den ärver ifrån representerar ett mera generellt begrepp Exempel: bilar-motorfordon, katter-däggdjur Man definierar ofta abstrakta klasser som inte har egna instanser för att fånga gemensamma egenskaper i olika klasser. 21
Hur bestämmer man klasstrukturen? (forts) Ett program kan skrivas så att det fungerar för alla klasser som ärver från en viss klass (gör det lätt att utöka programmet). Ibland kan det vara intressant att låta klasser ärva ifrån varandra även om det inte finns ett sånt samband (arv av implementation). 22
Vad får vi av OOP? Klassbegreppet ger oss ett sätt att modularisera programmet. Programmet kan förstås en klass i taget. Standardbibliotek definierar klasser som kan användas i nya program. Arv gör det möjligt att skriva program som fungerar även med klasser som kom till i efterhand. 23