itop Föreläsning 1 Objektorienterad programvaruutveckling IT 1 CTH: TDA545 LP 1 Hösten 2013 Erland Holmström erland... at... chalmers.se Data & Informationsteknik Kurshemsida: www.cse.chalmers.se/edu/course/tda545/ Idag: Introduktion: Lärare, Hemsida, litteratur mm Kort Introduktion - What s it all about? Kurs innehåll... Läs: Kap 1 och 2 och gärna 3 Detta är kopior på OH bilder inte föreläsningsanteckningar. Det kan vara svårt att få ett sammanhang enbart utifrån dessa OH kopior. Jag trycker dem för att de som är på föreläsningen skall slippa (försöka) anteckna. Detta är alltså inte föreläsningsanteckningar utan saknar mycket av det som sägs, allt det som skrivs på tavlan och tex de färger som finns på OH bilderna. Är man på föreläsning kan man komplettera med detta själv. Jag trycker så att alla som kommer på föreläsning skall kunna få kopior. När det är slut där så är det slut men materialet finns ibland också på hemsidan. This are copies of my slides - not lecture notes. Lot s of stuff appears only on the blackboard and lots are only spoken, you may not be able to fully appreciate them without that. F1 1 F1 2 When mailing to me/us Give short answers to the following - your name, labgroup, course What's the problem! ("we have problems with our lab is not a good description, be more specific) For instance tell us! What were you trying to do?! What happend?! And Append any errors from the system (cut and paste)! Also: Append java code in a appendix if more than 10 lines or so, otherwise in text " Kurs bok: Introduction to Programming and Object Oriented Design Using Java, 3rd Edition Jaime Nino, Frederick A. Hosch ISBN: 978-0-470-12871-8 Säljs på Cremona / DC 499:- (2013) Läsanvisning finns på hemsidan Dessutom ingår allt stoff i " Föreläsningar, (övergripande teori, exempel) " Övningar (konkreta exempel i små grupper) " Labbar (självverksamhet med handledare) Och på slutet har vi en " Tentamen Bara tentamen och labbar måste göras, ingen närvaro krävs normalt. F1 3 F1 4
Allmänt om boken: itop Boken är lättläst och rätt välskriven om än lite pratig. I grova drag så ingår kapitlen 1-4, delar av 5 och 6, 7-11, delar av 12, 13, delar av 14, 15, 17, 18, delar av 19, supplement b, appendix i, se hemsidan för mer detaljer. Glöm inte läsa boken! Även om praktisk programmering är bästa sättet att befästa kunskaperna så måste man också läsa om allt det som inte funnit sin väg in i en övningsuppgift. Det är sådär 6-700 sidor att läsa, minst 100 sidor i veckan är alltså ett bra riktmärke). Det finns en avdelning i slutet av varje kapitel med chapter summary - bra repetition. Det finns en avdelning med self-study questions - gör så många du kan. Det finns också avdelningar med exercises efter varje kapitel gör så många du hinner. Att aktivt programmera är det bästa sättet att förstå hur det hänger ihop. F1 5 Gruppindelning Gruppindelning i Datorteknik A, B, C, D, E Gruppindelning i programmering Grupp 1, Grupp 2 Grupp A, D (37st 2012) Har inte programmerat förut, bara surfat, mailat. - Har inte programmerat förut, men känner mig säker med min dator, kan fixa saker. Grupp E (24st) Någon programmering tex en kurs på gymnasiet eller pulat lite själv men det var ett tag sedan så jag har nog glömt en del. Grupp B, C (57st) Flera kurser i programmering (tex på gymnasiet) och kan det vi lärde där ganska bra. Jag är en klippa på programmeringen från gymnasiet. Kan även objektorientering ganska bra. Grupp B, C = grupp 1: övning på torsdag Grupp A, D, E = grupp 2: övning på fredag " - Hitta labkompis inom din grupp. Försök också se till att ni har liknande ambition med programmeringen ( glad om jag klarar den skall inte jobba med jag vill ha 5a F1 6! Physics Datavetenskap! Electrical Engineering! Computer Sciences! Computer Engineering - Datorteknik! Computing Science Datavetenskap! Mathematics! Philosophy Physics - Electrical Engineering Nja inte mycket på IT Computer Engineering Dig o Dat, Maskinorienterad progr. Computing Science obj or progr oop fk, graf. gränssnitt, SE, datastrukturer, oo-systemutveckling, matem modellering Mathematics diskret matte, linj.algebra, analys, statistik Philosophy???? För att få en dator att lösa ett problem så måste man kunna abstrahera, modularisera, representera verkligheten och kunna hitta algoritmer och dessa måste programmeras dvs uttryckas i ett programspråk. För att representera verkligheten använder vi primitiva typer, klasser, relationer mm. Algoritmer behöver man för att lösa problem som - att planera tjänstgöringen för flygpersonal - hur hitta sidträffar snabbt (för tex en sökmotor) Programspråket är vårt sätt att uttrycka hur vi representerar saker i datorn samt hur vi uttrycker våra algoritmer tex med hjälp av kontrollstrukturerna. Även annat behövs tex verktyg för design av stora system. F1 7 F1 8
Kursinnehåll! Abstraktion, modularisering, (composition) programdesign och objektorientering! Enkla algoritmer! Massor med Java syntax för! enkla datatyper, kontrollstrukturer och beräkningsabstraktion (metoder)! Klasser, objekt, arv, interface, mm! Exceptions! Grafisk användargränssnitt! mm Kursen handlar dock om mycket mer än Java syntax. Tex hur man skriver program som är " korrekta (i rimlig grad) " läsbara och enkla att underhålla (för andra) " återanvändbara " rimligt effektiva " användarvänliga " klara i tid (gäller även labbar) composition: sammansättning, beståndsdel, the process of building a system using simpler parts or components Varför läser man en kurs i Java?! allmän kunskap om programmering i ett högnivåspråk är viktigt för en tekniker.! kunskaperna är allmängiltiga, kan tex användas när man programmerar matlab, C osv, Lätt att ta åt sig ett nytt språk när man kan lite om ett.! men det är bättre att lära sig programmera i ett språk som Java! övning i problemlösning mm apropå problemlösning... Från en kursenkät: Dåligt formulerade uppgifter. Lägg ner lite mer tid på att förklara vad du vill att vi skall göra. Det skulle innebära att vi får mer tid till att koda på övning för att vi inte behöver sitta och fundera på vad vi skall göra för något. Det är normalt att man måste ägna tid till att fundera ut *vad* som skall göras. Ni må tycka illa om det men så är det. Sen måste man också fundera ut *hur* det skall göras. F1 9 F1 10 Något om Abstraktion = subtraktion? Vi kan bara tänka på EN sak åt gången! Abstraktion är ett verktyg. Abstrahera = Att införa ett begrepp Ett begrepp fångar vad som är gemensamt Bortse från eller framhäva gemensamma och viktiga egenskaper hos en samling objekt och bortse från detaljer och konkret realisation. Abstraktioner Vi abstraherar varje dag på olika nivåer: atomer organ Sam katt djur levande organism primitiv syn på världen biologisk samling atomer (katten) namn på en specifik samling organ en större klass där Sam ingår en ännu större klass de flesta detaljer utelämnade Abstraktioner hjälper oss att fokusera på de för tillfället viktiga egenskaperna. Ex skottår det är en viktig egenskap hos ett årtal men vi behöver inte veta exakt hur man avgör om ett årtal är ett skottår för att kunna använda oss av egenskapen. " Varje steg representerar olika synsätt på samma objekt - olika abstraktionsnivåer. " Vilken nivå vi väljer att använda beror på våra behov för tillfället. " Varje nivå implementeras på en lägre nivå. F1 11 F1 12
Abstractions Computer Scientists build abstractions to " Extract common features " Hide irrelevant details " Control complexity " Protect integrity So abstraction is used to present simple consistent model. As teachers, we do the same thing! We abstract away from the complexities of material " Present simple consistent model " Slowly add complexity " Filling in exceptional cases later F1 13 Black box - tänkande En insida och en utsida: Gränssnittet (interfacet) är det som binder samman delarna. Interfacet har såväl syntax som semantik (specifikationen) " The interface of a black box should be fairly straightforward, well defined, and easy to understand. " To use a black box, you shouldn t need to know anything about its implementation; all you need to know is its interface. " The implementor of a black box should not need to know anything about the larger systems in which the box will be used.! En black box är ett sätt att uttrycka vissa steg i ett program på en högre abstraktionsnivå.! Vi kan abstrahera - gömma detaljer.! VAD inte HUR. Separerar användning från implementation. F1 14 Metoder som Svarta boxar Metod! Underprogram! funktion! procedur sqrt medel skottår Ett sätt att uttrycka vissa steg i ett program på en högre abstraktionsnivå. Ger direkt stöd för stegvis förfining. Vi kan abstrahera - gömma detaljer. VAD inte HUR. Separerar användning från implementation. Skall göra EN sak bra F1 15 Underprogram är begränsade => vi behöver större svarta boxar: Antag tex att vi behöver representera ett datum. Här räcker inte en metod (som ju skall göra en sak bra) för vi vill kunna göra flera saker med ett datum " skottår? " addera två datum " undersöka vilken veckodag ett viss datum inträffar " fråga efter nästa datum (nästa dag) " osv Vi behöver något kraftfullare. Något som i en enhet kan representera ett datum och dessutom alla dessa egenskaper hos ett datum. Klasser/Objekt modellerar hur vi tänker om den verkliga världen genom att stödja nedbrytningen av världen till hanterbara saker. F1 16
Objekt som Svarta boxar Identitet: hall-lampan Tillstånd: - tänd, släkt, sönder - Effekt: (40 / 60...W?) - Fattning: (E14 eller E24 fattning) Beteende : släck, tänd, effekt?, brinntid?... tänd släck tänd? svart box för släckt? hall-lampan effekt? fattning? " Ett sätt att uttrycka vissa steg i ett program på en högre abstraktionsnivå. " Vi kan abstrahera - gömma detaljer. " VAD inte HUR. Separerar användning från implementation. " Skall göra EN sak bra F1 17 Processor = person or electronic computer that actually performs the actions Computation = the sequence of actions the processor performs to accomplish some end. The sequence of actions is usually called an algorithm. Ett objektorienterat system är strukturerat runt sina objekt dvs funktionaliteten är distribuerad till systemets objekt. F1 18 Syntax och Semantik Språkets syntax och semantik måste beskrivas exakt. formen innebörden i det hur man får skriva man skriver 10/9 2007 2007 10/9 071009 September 10, 2007 9/10/07 eller 10/9/07 Olika form, samma innebörd eller... Abstraktionens syntax och semantik måste beskrivas noggrant: Ett datum på formen ååååmmdd med operationerna: år, månad, dag, skottår: alla med ett datum som parameter +: med två datum som parameter (dvs addera) datum: med år, månad och dag som parameter (för konstruktion av ett datum) osv F1 19 Syntax och semantik är viktigt Ja - det är svårt att programmera även för dem som redan kan, speciellt om man inte kan syntaxen/semantiken public class Problem { public static void main -> (String[] args) { // ---------------------- int antal = 0; for ( int i=1; i<10; i++ ) { antal = antal++; System.out.println(antal); } // end for // ---------------------- } // end main } // end Problem /* Vad skrivs ut och hur skrivs det ut? */ F1 20
Program = Satser Ett program byggs huvudsakligen upp av deklarationer och satser Enkla satser (enkla satser avslutas med ";") " Tilldelning " Metodanrop (av void metoder) " break ("Kortslutning" av loop/switch sats) " return <uttryck> (För att avsluta underprogram eller ge resultat från funktioner) " ; (Gör ingenting!) Sammansatta satser (avslutas INTE med ";" utom do-while ) " Villkorsats (if) " Flervalsats (switch) " Iterationssatser (for, while och do-while) " Blocksats ( {satser} ) 2 goda råd: - Gör dig en ordlista Du behöver plugga glosor programspråk, syntax, semantik, Abstraktion, modularisering, composition, objektorientering, datatyper, kontrollstrukturer, metoder, procedurer, funktioner, black box, interface, gränssnitt, föreläsningsanteckningar, datavetenskap, Cremona, DC,. - Läs boken! Du behöver läsa sådär 100 sidor per vecka. Du fixar inte det på söndag kväll... Och lös många uppgifter......du måste programmera. Tänk också på att 50 timmar per vecka är mycket! F1 21 F1 22 Från tidigare kursenkäter: - «I början av kursen (första 2-3 veckorna) skippade jag SIpassen och några övningspass för att fokusera på labbarna, då jag kände att jag behärskade momenten sedan förut. Kände dock senare att jag skulle ha gått på allt, eftersom det hade varit bra repetition.» - «Jag har nog lagt ner mer tid än de flesta. Men jag tycker inte att det varit någon börda, för det är så kul» - «Jag läste för lite hemma vilket medförde att föreläsningarna i för hög utsträckning rörde material jag inte stiftat bekantskap med tidigare. Då blir det svårt att ta till sig den kunskap som delgavs. - «Latade mig istället för att gå på övningar, vilket jag inte borde ha gjort» - «programmering tycker jag man lärde sig som bäst av att testa själv» - «Jag känner nu efteråt att anledningen till att jag klarat mig så bra som jag faktiskt har är att jag lagt ned mycket tid själv, utan min partner på labbarna. Vårt samarbete har fungerat väl, men jag har ändå varit noga med att skriva 100% av all kod själv (min partner har givetvis skrivit sin egen kod också), vilket jag nu känner har varit nödvändigt för att få nog praktisk erfarenhet av programmering för att klara mig.» Nästa föreläsning:! kort om objekt och klasser! Identifierare:! En identifierare är ett namn på saker! reserverade ord, litteraler! Variabler! En variabel är en minnesplats! med namn, typ och innehåll! Primitiva typer och Klasstyper! Deklarationer av variabler, objekt och konstanter! Aritmetiska uttryck, operatorer, prioritet, typomvandling, tilldelning! kort om färdiga objekt F1 23 F1 24