Objektorienterad programmering Aletta Nylén http://user.it.uu.se/~aletta Epost: aletta.nylen@it.uu.se Rum: 1216
Kursinfo Lärare: Aletta Nylén Jesper Wilhelmsson Litteratur: Object-Oriented Software Development Using Java X. Jia Material från föreläsningar Hemsida: www.it.uu.se/edu/course/homepage/oop/ht06
Innehåll Den objektorienterade paradigmen OO programmerings metodik OO analys och design Principer för programmeringsspråk som ger stöd för OO Orientering om moderna tekniker som ofta förknippas med OO OO programmering i Java
Det är inte en kurs i Java moderna verktyg RUP, UML, patterns, extrem programmering, agila metoder men ni ska få en grund för att lätt på egen hand kunna sätta er in i dagens och morgondagens inne-metoder och verktyg!
Examination Programmeringsuppgifter - Java 1 mindre uppgift (20/11) 1 projekt uppdelat på 1 designredovisning (22/11) 2 uppgifter (1/12 och 15/1) Tentamen 15/12
Undervisning Föreläsningar Aletta objektorientering Jesper Java, uppgifter Labbar, 4 st Handledning Handledningstider Mail OBS! Be om hjälp när du kör fast!
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
Bra mjukvara Tillförlitlig (korrekt och robust) Klar i tid Lätt att underhålla (bygga ut, rätta buggar, ändra) Återanvändbar Användarvänlig Kompatibel (filformat, ) Effektiv (tid, minne, disk, ) Portabel Verifierbar Integritet
Underhåll 70% av kostnaden Viktiga faktorer: Flexibilitet Enkelhet Läsbarhet
Bra designmetoder stöder Modularitet Återanvändning
Modularitet önskade egenskaper Dela upp (decomposability) Sätta samman (composability) Förstå (understandability) Kontinuerliga moduler (continuity) Skydd (protection)
Modularitet fem principer Språkligt modulära enheter Få gränssnitt Små gränssnitt Tydliga gränssnitt Dold information
Återanvändbarhet problem Ekonomiskt en kund som får en återanvändbar produkt återkommer inte Organisatoriskt programmerare känner inte till kod som skrivits på andra avdelningar Tekniskt oftast behövs bara nästan samma kod
Återanvändbarhet enkla lösningar Öppen källkod vanligast i akademiska världen Återanvänd personal flytta programmerare mellan projekt för att utnyttja deras kunskap Återanvänd design
Återanvändbara moduler Variation i typer Variation i datastrukturer och algoritmer Flera relaterade operationer Operationer används utan kännedom om implementation Gemensamheter i grupper av implementationer
Återanvändbara moduler? Biblioteksrutiner Paket Överladdning Generiska moduler
Mjukvarusystem En modell Representation av relevant del av den riktiga världen Abstraktion av verkligheten Algoritm Fångar de beräkningar som ingår då modellen manipuleras eller bearbetas Resultatet av beräkningarna kan sedan återföras till verkligheten genom att man ger de olika enheterna i modellen mening
Begrepp Abstraktion Modularitet Inkapsling Software engineering Metoder för analys/design Dessa idéer fanns före OOP men har nu blivit en del av OOP.
Några språk med stöd för OO Simula-67 Norge 1967, byggde på Algol-60, avsett för simulering Smalltalk Alan Key, Xerox, 70-tal Introducerade begreppet objekt orienterad programmering Första GUIna skrevs i Smalltalk (och i Lisp) C++ Bjarne Stroustrup, Bell Labs, bygger på C med idéer från Simula och Algol-68 Eiffel, Objective C, Object Pascal, Self Java, Visual Basic.NET, C#
Programmeringsparadigmer Programmering = problemlösning (analys, design, implementation) Olika sätt att lösa problem olika paradigmer Ex. Funktionell programmering Procedurell programmering Logikprogrammering Objektorienterad programmering
Historisk återblick 50- och 60-talet: Algoritmer Kontrollflöde 70- och 80-talet: Data Dataflöde Objektorientering: Kombinerar data och beräkning Objekt = data + tillhörande beräkningar
Objektorienterad design är en metod som leder till mjukvaruarkitekturer baserade på de objekt som varje system eller subsystem manipulerar (snarare än på de funktioner de är tänkta att utföra) Ask not what a system does: Ask WHAT it does it to!
Problem Hur hittar man objekten? Hur beskriver man objekten? Hur beskriver man relationer och gemensamheter mellan objekt? Hur använder man objekt för att strukturera program?