Roboten Karel lär sig Java

Storlek: px
Starta visningen från sidan:

Download "Roboten Karel lär sig Java"

Transkript

1 Verónica Gaspes Högskolan i Halmstad 23 augusti 2010 Roboten Karel lär sig Java Tacksägelse Detta är en översättning och en anpassning till Högskolan i Halmstads programmeringsmiljö av delar av Karel the Robot Learns Java,ett material framtaget av Eric Roberts vid Stanford University för deras kurs Programming Methodology. Acknowledgement This is a translation and an adaptation to the programming environment at Halmstad University of parts of Karel the Robot Learns Java. The original was written by Eric Roberts at Stanford University for their course Programming Methodology. Kapitel 1: en introduktion. Vad är Karel? Karel är en mycket enkel robot som lever i en mycket enkel värld. Genom enkla kommandon kan Du styra den att genomföra vissa uppdrag i sin värld. Att beskriva dessa kommandon kallas för programmering. Till att börja med förstår Karel bara ett litet antal fördefinierade kommandon, men en viktig del av programmeringsprocessen består av att lära Karel nya kommandon som utökar dess förmågor. När Du programmerar Karel för att utföra ett uppdrag, måste Du skriva ner de nödvändiga kommandon på ett mycket exakt sätt så att roboten kan tolka det Du har instruerat den att göra. Speciellt måste de program Du skriver följa ett antal syntaktiska regler som definierar vilka kommandon och språkformer som är giltiga. Tillsammans utgör de fördefinierade kommandona och de syntaktiska reglerna Karels programmeringsspråk. Detta språk är konstruerat för att likna Java så mycket som möjligt för att underlätta övergången till det språk Du skall använda resten av läsperioden. Karels program har till stor del samma struktur och använder samma grundläggande element som Javaprogram gör. Den mest påtagliga skillnaden är att Karels programmeringsspråk är ytterst litet: det har mycket få kommandon och regler. Det är till exempel möjligt att lära ut hela språket på ett par timmar. Efter den tiden skall Du känna till allt Karel kan göra och hur man beskriver dessa handlingar i ett program. Detaljerna är lätt att behärska. Trots detta kommer Du att märka att problemlösning kan vara mycket utmanande. Problemlösning är programmeringens väsen; språket och reglerna är bara en mindre angelägenhet på vägen. I mer sofistikerade språk, som Java, finns det så många detaljer att dessa ofta blir fokus för kursen och det man skall lära sig. När detta sker, tenderar de mera kritiska aspekterna kring problemlösning att försvinna. Genom att börja med Karel kan Du fokusera på problemlösning från början. Karels värld Karels värld definieras genom gator som löper vågrätt (öst-väst) och avenyer som löper lodrätt (nord-syd). Karel kan bara befinna sig i en korsning mellan en gata och en aveny och måste vara vänd mot en av de fyra kompassriktningarna nord, syd, öst och väst. En typisk situation visas nedan. Här återfinns Karel vänd mot öst i korsningen mellan första gatan och första avenyn. 1

2 Flera andra delar av Karel s värld ses i denna exempel. Föremålet framför Karel är en beeper. Som de beskrivs i Rich Pattis bok är beepers plastic cones which emit a quiet beeping noise 1. Karel kan bara upptäcka en beeper om den är i samma korsning. De hedragna linjerna i diagrammet är murar. Murar tjänar som barriärer i Karels värld. Karel kan inte ta sig genom murar och måste istället ta sig runt dem. Karels värld är alltid omgiven av murar kring kanterna, men världen kan ha olika dimensioner beroende på de specifika problem Karel måste lösa. Vad kan Karel göra? När Karel lämnar fabriken kan den utföra ett mycket litet antal kommandon: move() Ber Karel att förflytta sig framåt ett kvarter. Karel kan inte utföra move()-kommandot om det finns en mur som blockerar hans väg. turnleft() Ber Karel att rotera 90 grader åt vänster (moturs). pickbeeper() Ber Karel att ta upp en beeper från en korsning och lagra den i sin säck, som kan innehålla ett oändligt antal beepers. Karel kan inte utföra kommandot om det inte finns en beeper i den aktuella korsningen. putbeeper() Ber Karel att ta en beeper från sin säck och ställa den i den aktuella korsningen. Karel kan inte utföra kommandot om det inte finns någon beeper i hans säck. De tomma parenteser som avslutar varje kommando är en del av den syntax som delas av Karel och Java och de används för att uttrycka anropandet av kommandot. Så småningom kommer Du när Du skriver program att ange extra information i mellanrummet mellan parenteserna, men sådan information är inte en del av Karels ursprungliga språk. Parenteserna skall därför vara tomma i Karels program, men Du måste komma ihåg dem i alla fall. Det är också viktigt att förstå att flera av dessa kommandon medför begränsningar i Karels aktiviteter. Om Karel försöker göra något ogiltigt, så som att ta sig genom en mur eller ta upp en beeper som inte finns där så uppstår ett fel. Vid ett sådan händelse visar Karel ett felmeddelande och utför inga av de resterande kommandona. Karels kommandon kan dock inte utföras i isolering. Innan Karel kan svara på kommandon måste de infogas i ett Karelprogram. Du skall snart få se några enkla Karelprogram, men innan dess är det nyttigt att berätta lite om den programmeringsfilosofi som ligger bakom denna implementation av Karels programmeringsspråk. Karel och det objektorienterade paradigmet I objektorienterad programmering fokuserar programmeraren på att modellera beteendet hos begreppsmässigt integrerade enheter kallade objekt. Objekt i ett programmeringsspråk kan motsvara fysiska objekt i verkligheten, men lika ofta representerar de mer abstrakta begrepp. Det centrala i varje objekt verkligt eller abstrakt är att det måste utgöra en meningsfull helhet 2. En av huvudfördelarna med det objektorienterat paradigmet är att det uppmuntrar programmerare att inse det grundläggande förhållandet mellan tillståndet hos ett objekt och dess beteende. Tillståndet hos ett objekt består av ett antal attribut som berör objektet och som kan förändras över tid. Till exempel kan ett objekt karakteriseras genom dess position, dess färg, dess namn och ett antal andra egenskaper. Med ett objekts beteende menas vilka sätt objektet reagerar på händelser i dess värld eller på kommandon från andra objekt. I objektorienterad programmering använder man i allmänhet begreppet meddelande för något som orsakar ett beteende hos ett objekt (fast det kan var tydligare att använda ordet kommando när det gäller Karel). Responsen på ett meddelande brukar innebära att tillståndet hos objektet ändras. Till exempel, om en av de egenskaper som ingår i ett objekts tillstånd är dess färg, så kommer objektet troligen att reagera på ett setcolor(blue) meddelande med att byta färg till blå. 1 plastkoner som ger ifrån sig ett dovt tutande ljud 2 must make sense as a unified whole 2

3 /* * File: BeeperPickingKarel.java * * The BeeperPickingKarel class extends the basic Karel class * by defining a "run" method with three commands. These * commands cause Karel to move forward one block, pick up * a beeper, and then move ahead to the next corner. import stanford.karel.*; public class BeeperPickingKarel extends Karel { pickbeeper(); Figur 1: Enkelt Karel-exempel för att plocka upp en enda beeper På många sätt är Karel en idealisk miljö för att illustrera det objektorienterade angreppssättet. Även om ingen har byggt en mekanisk variant av Karel, är det ändå lätt att föreställa sig en Karel i verkligheten. Karel är en robot och robotar är verkliga objekt. De egenskaper som definierar Karels tillstånd är dess position i världen, den riktning den pekar mot, och antal beepers i dess säck. Karels beteende definieras av de kommandon den reagerar på: move(), turnleft(), pickbeeper() och putbeeper(). Kommandot move() ändrar Karels position, turnleft() ändrar dess riktning, och de två sistnämnda kommandona ändrar antalet beepers i Karels säck och antalet beepers i den aktuella korsningen. Karels miljö tillhandahåller även ett användbart ramverk för att definiera ett av de centrala begreppen i objektorienterad programmering. Både i Karel och i Java är det väsentligt att skilja mellan klass och objekt. Det enklaste sättet att förstå skillnaden är att tänka på en klass 3 som ett mönster eller mall för objekt som delar ett gemensamt beteende och en gemensam samling tillståndsattribut. Som Du kommer att förstå i nästa kapitel så står ordet Karel i Karel program för klassen av robotar som kan reagera på kommandon move(), turnleft(), pickbeeper() och putbeeper(). När Du har en robot i världen, är denna robot ett objekt som är en specifik instans 4 av klassen Karel. I denna kurs skriver vi bara program där det bara förekommer en enda robot. Kapitel 2: att programmera Karel I dess enklaste form är ett Karelprogram en definition av en ny Karel-klass som beskriver en följd av fördefinierade kommandon som skall utföras när programmet körs. Ett mycket enkelt program visas i Figur 1 Programmet i Figur 1 består av flera delar. Första delen består av följande rader: 3 Översättarens inlägg: Klass (substantiv): grupp, avdelning; kategori, sort, art, typ. Klassa (verb): sätta i en speciell klass; klassificera 4 instance 3

4 /* * File: BeeperPickingKarel.java * * The BeeperPickingKarel class extends the basic Karel class * by defining a "run" method with three commands. These * commands cause Karel to move forward one block, pick up * a beeper, and then move ahead to the next corner. Dessa rader är ett exempel på ett kommentar, som är text skriven för att förklara programmets funktion för människor. Kommentarer i både Karel och Java börjar med tecknen /* och avslutas med tecknen. I detta exempel börjar kommentaren på första raden och löper över flera rader. Stjärnorna i början av mellan raderna behövs inte, men gör det lättare för människor att se hur långt kommentaren sträcker sig. I ett enkelt program är långa kommentarer onödiga för att programmets funktion är uppenbar, men de är extrem viktiga för att dokumentera större och mer komplexa program. Andra delen i programmet är raden import stanford.karel.*; Denna rad begär att programmet inkluderar alla definitioner i biblioteket stanford.karel 5. Detta bibliotek innehåller alla grunddefinitioner som behövs för att skriva Karel-program, såsom definitioner av operationerna move() och pickbeeper()(). Eftersom Du alltid behöver tillgång till dessa operationer, måste alla Karel-program Du kommer att skriva innehålla denna rad före resten av programmet. Sista delen i programmet består av följande klassdefinition: public class BeeperPickingKarel extends Karel { pickbeeper(); För att förstå denna definition hjälper det att titta närmare på dess struktur. Definitionen av klassen BeeperPickingKarel består av raden som börjar med public class och omfattar allt mellan klammern i slutet av den raden och klammern i sista programraden. Raden som inleder den nya klassen kallas för definitionens header och koden mellan klamrar kallas för definitionens kropp. I programmering är det ofta hjälpsamt att tänka på en given definition och dess kropp som separata idéer. I vårt exempel har definitionen av BeeperPickingKarel följande form, där hela kroppen har ersatts med en box som Du kan glömma för en stund: public class BeeperPickingKarel extends Karel { klassdefinitionens kropp Header-raden berättar mycket om klassen BeeperPickingKarel, även innan Du har sett vad kroppen innehåller. Det viktigaste nya begreppet i klassens header markeras av ordet extends som används både i Karel och i Java för att markera att den nya klassen är en utvidgning av en befintlig klass. Här säger klassheadern att BeeperPickingKarel är en utvidgning av standardklassen Karel som importeras från stanford.karel-biblioteket. När vi i objektorienterade språk definierar en ny klass genom utvidgning betyder det att den nya klassen (här BeeperPickingKarel) bygger på allt som den befintliga klassen (här Karel) erbjuder. I synnerhet garanterar det faktum att den utvidgar Karel att den nya klassen BeeperPickingKarel har följande egenskaper: 5 I Halmstads system finns biblioteket i filen karel.jar som delas ut via kursens hemsida 4

5 1. En instans av BeeperPickingKarel är också en instans av Karel. En instans av Karel representerar en robot som bor i ett värld av gator, avenyer, beepers, och murar. Robotens tillstånd består av dess position, riktning och antal beepers i sin säck. Eftersom BeeperPickingKarel är en utvidgning av Karel vet Du att en instans av BeeperPickingKarel också är en robot som bor i samma typ av värld och har samma tillståndsattribut. 2. En instans av BeeperPickingKarel skall per automatik reagera på samma kommandon som en instans av Karel gör (move(), turnleft(), pickbeeper(), putbeeper()). Med andra ord erhåller den nya klassen BeeperPickingKarel per automatik tillståndsattributen och beteendena hos klassen Karel från vilken den härstammar. Processen att bygga på struktur och beteende hos en moderklass kallas för arv. När en klass definieras med utvidgning kallas den nya klassen för en subklass av moderklassen. I vårt exempel, är BeeperPickingKarel en subklass av Karel. På motsvarande sätt kallas Karel för en superklass till BeeperPickingKarel. Tyvärr kan dessa ord vara förvirrande för nybörjarprogrammerare, som kan ledas att tro att en subklass är på något sätt mindre kraftfull än dess superklass, när det i verkligheten är precis tvärtom. En subklass ärver sin superklass beteende och kan därför reagera på alla kommandon som är tillgängliga för superklassen. En subklass brukar dessutom definiera nya kommandon som inte finns tillgängliga för superklassen. På det sättet har subklassen i vanliga fall mera funktionalitet än superklassen. Detta uttrycks bättre med begreppet utvidgning: en subklass utvidgar sin superklass och kan då lägga till ny funktionalitet till den. Nu när Du har lite grepp på vad klassutvidgning betyder blir det meningsfullt att titta närmare på kroppen i klassen BeeperPickingKarel. Kroppen består av följande rader pickbeeper(); Dessa rader står för en ny metod-definition, som beskriver följden av steg som behövs för att utföra metoden. Precis som i fallet med själva klassen BeeperPickingKarel, består metodens definition av två delar som kan betraktas var för sig. Första raden är metodens header och koden mellan klamrar är metodens kropp. Om Du bortser från kroppen, ser metodens definition så här: metod definitionens kropp De första två orden i headern, public och void, är en del av Javas syntaktiska struktur, och Du kan mycket väl välja att ignorera dem för tillfället. Nästa ord är den nya metodens namn. Med en metoddefinition menar man att instanser av den nya Karel-subklassen kan reagera på ett nytt kommando med det namnet. Klassen Karel svarar på metoderna move(), turnleft(), pickbeeper() och putbeeper; en BeeperPickingKarel svarar även på run(). Kommandot run() spelar en speciell roll i ett Karelprogram. När man startar ett Karelprogram genom java -classpath.:karel.jar BeeperPickingKarel så öppnas ett fönster som i Figur 2. Man trycker sedan på knappen Start Program. Då skapas det en instans av BeeperPickingKarel som placeras i världen och sedan anropas dess run() kommando. Effekten av att anropa run() definieras av kroppen av kommandotrun(); en följd av kommandon som roboten skall utföra i tur och ordning. I Figur 3 ser Du resultatet av att BeeperPickingKarel utför kommandot run() med start enligt tillståndet i Before. Att lösa ett intressantare problem Klassen BeeperPickingKarel definierad i Figur 1 gör inte så värst mycket. Låt oss försöka med något lite mer intressant. Säg att målet är att få Karel att plocka upp beepern och förflytta den från dess startposition i korsningen mellan andra avenyn och första gatan till 5

6 Figur 2: Gränsnittet till BeeperPickingKarel Figur 3: Före-och-efter diagram 6

7 Figur 4: Före-och-efter diagram för beeperforslande Karel Figur 5: Mot nord femte avenyn och andra gatan. Du skall alltså programmera en ny Karel-subklass som åstadkommer det som visas i diagram i Figur 4 De tre första kommandona i det nya programmet de som flyttar Karel framåt, plockar upp beepern och flyttar Karel fram till hyllan är samma som tidigare: pickbeeper(); Härifrån gäller det att vända åt vänster och klättra upp till hyllan. Detta är enkelt eftersom Karel har ett kommando turnleft() i sin repertoar. Att utföra turnleft() efter de föregående kommandona lämnar Karel vänd mot nord, fortfarande i korsningen mellan tredje avenyn och första gatan. Om Karel utför ett move() kommando skall han flytta sig ett steg mot nord. Du ser resultatet av detta i Figur 5. Härifrån skall Karel vända sig åt höger för att återigen vara vänd mot öst. Medan detta kan verka lika enkelt som att vända sig åt vänster, så finns det ett problem: Karels språk innehåller ett turnleft() kommando, men inget turnright() kommando. Det är som om Du har köpt en billig variant och upptäcker nu att den saknar viktiga funktioner. Här har Du ditt första tillfälle att börja tänka som en programmerare. Du har ett antal kommandon, men inte exakt vad Du behöver. Vad kan Du göra? Kan Du åstadkomma effekten av en turnright() med de möjligheter Du har? Svaret är förstås JA. Du kan åstadkomma effekten av att vända åt höger genom att vända åt vänster tre gånger. Efter tre vändningar kommer Karel att vara riktad åt rätt håll. Efter detta måste Du bara programmera Karel för att flytta sig till mitten av hyllan, lämna beepern där och flytta sig ytterligare ett kvarter. En fullständig implementation av BeeperTotingKarel ser Du i Figur 6. Att definiera nya metoder Även om klassen BeeperTotingKarel i Figur 6 visar att det är möjligt att utföra en turnright operation med bara hjälp av Karels inbyggda kommandon, är programmet inte 7

8 /* * File: BeeperTotingKarel.java * * The BeeperTotingKarel class extends the basic Karel class * so that Karel picks up a beeper from 1st Street and then * carries that beeper to the center of a ledge on 2nd Street. import stanford.karel.*; public class BeeperTotingKarel extends Karel { pickbeeper(); Figur 6: Program för att forsla en beeper till mitten på hyllan 8

9 särskilt uppenbart begreppsmässigt. I din mentala bild av programmets konstruktion, vänder Karel sig åt höger när den når hyllans topp. Det faktum att Du måste använda tre turnleft() kommandon är irriterande. Det vore mycket enklare om man kunde säga turnright() och att Karel skulle förstå detta. Programmet skulle inte bara bli kortare, men även lättare att läsa. Som tur är, låter Karels programmeringsspråk oss definiera nya kommandon genom att helt enkelt göra nya metoddefinitioner. När som helst när Du ser en följd av Karel-kommandon som gör något användbart så som att vända åt höger kan Du definiera en ny metod som utför denna följd av kommandon. Formatet för att definiera nya metoder är till stor del detsamma som för att definiera metoden run() i föregående exempel. En typisk metoddefinition ser ut så här: private void name() { kommandon som bygger metodens kropp I detta mönster står name för det namn Du väljer för den nya metoden. För att göra definitionen komplett återstår bara att föreskriva följden av kommandon mellan klamrarna. Till exempel kan Du definiera turnright() så här: private void turnright() { På liknande sätt kan Du definiera en metod för att få Karel att vända helt om: private void turnaround() { Det finns en uppenbar skillnad mellan dessa definitioner och definitionen av run som Du ser i Figur 7: metoden run är markerad som public, medan turnright är markerad som private. Skillnaden mellan dessa två markeringar är att offentliga 6 metoder kan anropas från utanför klassen, medan privata metoder inte kan det. Metoden run måste vara offentlig eftersom Karel-miljön måste kunna anropa ett run() kommando för att få saker att hända. I kontrast används turnright bara i annan kod som finns i klassen. Då kan definitionen markeras som privat. Det är god programmeringsvana att hålla definitioner privata när det är möjligt. Anledningen till detta är svår att se så här i början när de program Du skriver är korta. Grundidéen är att klasser så långt som möjligt ska kapsla in information. Detta betyder att klassen inte bara samlar information, den begränsar även tillgången till den. Stora program blir snabbt komplexa i termer av hur mycket detaljer de inbegriper. Om en klass är välkonstruerad, skall den försöka minska komplexiteten genom att gömma så mycket detaljer som den kan. Denna egenskap kallas för information hiding och är en grundbult i det objektorienterat tankesättet. Så här långt i dina programmeringsstudier kan Du tycka att dessa argument för inkapsling inte verkar så övertygande. Att definiera turnright och turnaround i varje program är lite plågsamt, särskild med tanke på att de är så användbara. Svårigheten i att göra dem mer tillgängliga ligger dock i att lista ut var man skall lägga definitionerna. Att markera definitionen av turnright som offentlig i klassen BeeperTotingKarel skulle inte hjälpa särskilt mycket. I ett objektorienterat programmeringsspråk kapslas de metoder som beskriver klassens beteende in i den klassen. Metoden turnright som finns i klassen vet hur man gör för att vända en instans av BeeperTotingKarel 90 grader åt höger, men den metoden kan inte tillämpas på en instans av klassen Karel eller någon av dess subklasser. I någon mening vill man lägga till turnright och turnaround till klassen Karel så att alla subklasser har tillgång till dem. Problemet med denna strategi är att Du inte nödvändigtvis har tillgång till klassen Karel, som är nödvändig om Du vill göra ändringar. Klassen Karel är en del av en bibliotek 6 public 9

10 /* * File: BeeperTotingKarel.java * * The BeeperTotingKarel class extends the basic Karel class * so that Karel picks up a beeper from 1st Street and then * carries that beeper to the center of a ledge on 2nd Street. import stanford.karel.*; public class BeeperTotingKarel extends Karel { pickbeeper(); /** * Turns Karel 90 degrees to the right. private void turnright() { Figur 7: Reviderad version av programmet för att forsla en beeper, med metoden turnright 10

11 i Stanford University som används i flera kurser där. Om Du gör ändringar i den kan Du göra så att andras program förstörs. På samma sätt, om Du längre in i kursen upptäcker att Du skull vilja lägga till funktionalitet till några av Javas standardklasser, skulle Du inte ha möjlighet till det eftersom dessa klasser tillhör Sun Microsystems. Det Du kan göra dock är att definiera en ny klass som har den nya funktionaliteten. Så om Du vill kunna använda turnright och turnaround i flera Karel-program skulle Du kunna definiera en ny klass som innehåller dessa metoddefinitioner och sedan skapa dina program genom att utvidga denna klass. Denna teknik illustreras i Figur 8 som består av två programfiler. Den första innehåller en klass definitions kallad NewImprovedKarel som har definitioner för turnright och turnaround som offentliga metoder så att andra klasser kan använda dem. Den andra är ytterligare en version av BeeperTotingKarel som utvidgar NewImprovedKarel och därför har tillgång till de nya metoderna. Paketet stanford.karel innehåller inte klassen NewImprovedKarel som den visas i Figur 8 men den har en klass SuperKarel som har metoderna turnright och turnaround samt ett antal andra som gör det möjligt för Dig att skriva mer intressanta program. I följande exempel utvidgas klassen SuperKarel för att ha tillgång till alla metoder. Andra delar av utvidgningen beskrivs i Kapitel 6. Nedbrytning Som ett sätt att visa mera av den kraft som följer med att kunna definiera nya metoder är det nyttigt att få Karel att göra något litet mer praktiskt än att frakta en beeper från en position till en annan. Vägbanorna kring Palo Alto är ofta i behov av reparation och det kan vara kul att se om Karel kan fylla i groparna i sin abstrakt värld. Till exempel, föreställ dig att Karel står på vägensom visas i vänstra delen av diagrammet i Figur 9, en korsning till vänster om en grop i vägen. Karel s jobb är att fylla gropen med en beeper och fortsätta mot nästa korsning. Diagrammet till höger i Figur 9 visar hur världen skall se ut efter programmet körts. Om Du är begränsad till de fyra fördefinierade kommandon skulle metoden run se ut så här: Du kan dock göra huvudprogrammet lättare att läsa genom att utvidga SuperKarel och använda metoderna turnright och turnaround. Detta visas i Figur 10. Vår första motivering för att definiera metoden turnright var att det var krångligt att upprepa tre turnleft() kommandon för att åstadkomma en vändning åt höger. Men att kunna definiera metoder har ett annat viktigt syfte, det öppnar upp för en av de viktigaste strategierna inom programmering processen att bryta ner ett stort problem i mindre bitar som är enklare att lösa. Denna process som bryter ner ett program i mindre bitar kallas för nedbrytning 7, och de delar av problemet kallas för delproblem 8. 7 decomposition 8 subproblems 11

12 /* * File: NewImprovedKarel.java * * The NewImprovedKarel class extends the basic Karel class * so that any subclasses have access to the turnright and * turnaround methods. It does not define any run method * of its own. import stanford.karel.*; public class NewImprovedKarel extends Karel { /** * Turns Karel 90 degrees to the right. public void turnright() { /** * Turns Karel around 180 degrees. public void turnaround() { /* * File: BeeperTotingKarel.java * * The BeeperTotingKarel class extends the basic Karel class * so that Karel picks up a beeper from 1st Street and then * carries that beeper to the center of a ledge on 2nd Street. import stanford.karel.*; public class BeeperTotingKarel extends NewImprovedKarel { pickbeeper(); 12 Figur 8: Förbättrad Karel samt ny version av forslande Karel

13 Figur 9: Gropfyllning /* * File: PotholeFillingKarel.java * * The PotholeFillingKarel class puts a beeper into a pothole * on 2nd Avenue. This version of the program uses no * decomposition other than turnright and turnaround, * which are inherited from SuperKarel. import stanford.karel.*; public class PotholeFillingKarel extends SuperKarel { turnaround(); Figur 10: Karel-program för att fylla i en enda grop 13

14 Till exempel kan problemet att fylla i en grop i vägen brytas ner i följande delproblem: 1. Flytta till gropen 2. Fyll gropen genom att lämna en beeper där 3. Flytta till nästa korsning Om Du tänker på problemet på det här viset kan Du använda metoddefinitioner för att programmet skall spegla din uppfattning av programstrukturen. Metoden run skulle kunna se ut så här: fillpothole(); Sambandet med nedbrytningen är uppenbar och allt skulle vara toppen om bara Karel förstod vad Du menar med med fillpothole(). Givet att vi kan definiera metoder är det enkelt att implementera fillpothole: private void fillpothole() { turnaround(); Det fullständiga programmet visas i Figur 11. Att välja rätt nedbrytning Du skulle kunna ha försökt med andra nedbrytningstrategier. Till exempel skulle Du kunnat skriva programmet så: approachandfillpothole(); där metoden approachandfillpothole helt enkelt är private void approachandfillpothole() { turnaround(); 14

15 /* * File: PotholeFillingKarel.java * * The PotholeFillingKarel class puts a beeper into a pothole * on 2nd Avenue. This version of the program decomposes * the problem so that it makes use of a fillpothole method. import stanford.karel.*; public class PotholeFillingKarel extends SuperKarel { fillpothole(); /** * Fills the pothole beneath Karel s current position by * placing a beeper on that corner. For this method to * work correctly, Karel must be facing east immediately * above the pothole. When execution is complete, Karel * will have returned to the same square and will again * be facing east. private void fillpothole() { turnaround(); Figur 11: Karel program för att fylla i en grop med metod fillpothole 15

16 Eller så skulle Du kunnat skriva programmet så här: fillpotholeyouarestandingin(); turnaround(); där kroppen för fillpotholeyouarestandingin är bara ett putbeeper() kommando. Vart och et av dessa program motsvarar en möjlig nedbrytning. Vart och ett löser problemet. Givet att alla versioner av programmet fungerar, vad är det som gör ett val av brytning problemet bättre än en annan? Det är i allmänhet svårt att välja hur man bryter ner ett program. Faktum är att ju mer komplexa problemen blir, desto kommer valet av lämplig nedbrytning att bli en av de svåraste delarna av programmeringen. Du kan ändå förlita dig till följande riktlinjer 1. Varje delproblem bör utföra en begreppsmässig enkel uppgift. Lösningen till ett delproblem kan kräva många kommandon och kan vara ganska komplex i termer av sin interna struktur. Även i dessa fall bör den åstadkomma någon konceptuell uppgift som i sig är enkel att beskriva. Ett gott tecken på om Du har lyckats med att hitta en rimlig uppgift kommer från det namn Du ger din metod. Om Du kan ganska exakt definiera dess effekt med hjälp av ett enkelt beskrivande namn har Du troligen valt en bra nedbrytning. Å andra sidan, om Du kommer på svåra namn som approachandfillpothole, är nedbrytningen troligen inte så lovande. 2. Varje delproblem bör utföra en uppgift som är så allmän som möjligt så att den kan användas i flera sammanhang. Om en nedbrytning leder till ett program som bara kan användas i exakt den situation som är för handen och en annan skulle fungera lika bra i ett antal situationer, Du bör troligen välja den mer generella. Kapitel 3: Styrsatser i Karel Tekniken att definiera metoder hur användbar den än är möjliggör inte att Karel löser några nya problem. Eftersom varje metodnamn bara är en förkortning för en specifik följd av kommandon, är det alltid möjligt att expandera ett program skrivet som en följd av metodanrop till ett enda huvudprogram som utför samma uppgift, fast programmet blir längre och svårare att läsa. Komandon oavsett om de är skrivna som ett enda program eller uppdelade i metoder exekveras fortfarande i en bestämd ordning som inte är beroende av tillståndet i Karel s värld. Innan Du kan lösa mer utmanande problem måste Du upptäcka hur man skriver program där denna strikt linjära, stegvisa ordning av operationer inte tillämpas. I synnerhet måste Du lära dig nya delar av Karels programmeringsspråk som gör det möjligt för Karel att undersöka sin värld och kunna ändra exekveringsmönstret därefter. Satser som påverkar ordningen i vilket ett program exekverar kommandon kallas för styrsatser 9. Styrsatser indelas ofta i två kategorier: 1. Villkorssatser 10. Villkorssatser anger att vissa satser i ett program skall utföras bara om ett visst villkor är uppfyll. I Karel anger man villkorlig exekvering med hjälp av en if sats. 2. Upprepningssatser 11. Upprepningssatser anger att vissa satser i ett program bör exekveras upprepade gånger; det bildar det som programmerare brukar kalla en loop. Karel stödjer två olika upprepningssatser: en for-sats som kan användas när man vill upprepa vissa kommandon ett givet antal gånger och en while-sats som kan användas när man vill upprepa en operation tills ett 9 control statements 10 conditional statements 11 iterative statements 16

17 Figur 12: Villkor som Karel kan kolla villkor gäller, uan att man vet hur många upprepningar som krävs. Detta kapitel presenterar var och en av dessa styrsatsformer i samband med problem inom Karels värld som visar på behovet för varje typ av sats. Villkorssatser För att få en uppfattning om var villkorssatser kan vara lämpliga, låt oss återgå till programmet med fillpothole i Kapitel 2. Innan Karel fyller i gropen i metoden fillpothole finns det ett antal villkor Karel skulle vilja kolla. Till exempel skulle Karel vilja kolla om ett annat arbetslag har redan fyllt i gropen, vilket betyder att det redan finns en beeper i den korsningen. I så fall behöver Karel inte lägga dit ytterligare en beeper. För att uttrycka dessa test i ett program Du behöver använda en if sats som ofta har följande format: if (villkorstest) { satser som skall exekveras bara om villkoret är sant Villkorstestet som visas i första raden måste ersättas av en av de tester Karel kan göra på sin omgivning. Resultatet av villkorstestet är antingen sant eller falskt. Om resultatet är sant utför Karel satserna mellan klamrarna; om resultatet är falskt gör Karel ingenting. De tester Karel kan göra visas i Figur 12. Observera att varje test har ett par tomma parenteser, som används i Karels programmeringsspråk för att visa att testet anropas. Observera också att varje villkor har en motsats. Till exempel så kan Du använda frontisclear för att kolla om vägen framför Karel är fri eller så kan Du använda frontisblocked för att kolla om det finns en mur som blockerar vägen. Villkoret frontisclear är sant när frontisblocked är falskt och vice versa. Att välja rätt villkor i dina program kräver att Du tänker på problemets logik och ser vilket villkor som är lättast att tillämpa. Du kan använda en if-sats för att ändra definitionen av metoden fillpothole så att Karel lägger en beeper bara om det inte redan finns en beeper i korsningen. För att göra detta villkorstest behöver Du testet nobeeperspresent. Om det inte finns någon beeper i korsningen bör Karel lägga dit en beeper; om det redan finns en beeper där bör Karel inte göra någonting. Den nya definitionen av fillpothole ser ut så här: private void fillpothole() { if (nobeeperspresent()) { turnaround(); 17

18 If satsen i detta exempel har flera kännetecken som är gemensamma för alla styrsatser i Karel. Styrsatsen börjar med en header, som anger typen av styrsats tillsammans med den extra information som behövs för att kontrollera programmets flöde. I exemplets fall är headern if (nobeeperspresent()) som visar att de satser som finns mellan klamrar skall utföras bara om testet av nobeeperspresent ger resultatet sant. Satserna inom klamrarna utgör styrsatsens kropp. Programmerare brukar skriva kroppen av en styrsats lite indragen i förhållande till headern. Indragningen gör det lättare att se vilka satser som påverkas av styrsatsen. Indragningen är extra viktig när kroppen av en styrsats innehåller andra styrsatser. Till exempel kan Du vilja göra ett extra test för att se om Karel har några beepers innan den ens försöker lägga ner en beeper. För att göra detta är allt Du behöver göra är att lägga till en extra if sats inom den befintliga, så här: if (nobeeperspresent()) { if (beepersinbag()) { I detta exempel utförs kommandot putbeeper() bara om det inte finns någon beeper i korsningen och Karel har beepers i sin säck. Styrsatser som förekommer inne i andra styrsatser kallas för nästlade. Utfallet av ett beslut i ett program behöver inte alltid vara att göra ingenting eller att utföra ett antal operationer. I vissa fall kan Du behöva välja mellan två alternativa tillvägagångssätt. För dessa fall har Karel en utökad variant av if satsen som ser ut så här: if (villkorstest) { satser som skall exekveras bara om villkoret är sant else { satser som skall exekveras bara om villkoret är falskt Denna form av if satsen illustreras av metoden invertbeeperstate som plockar upp en beeper om det finns en och lägger ner en beeper om korsningen är tom: private void invertbeeperstate() { if (beeperspresent()) { pickbeeper(); else { Upprepningssatser När Du löser Karel-problem kommer Du att märka att upprepning är en nödvändig del av din lösning. Om Du skulle programmera en robot som fyller i gropar skulle det inte vara så användbart att få den att fylla i bara en grop. Värdet i att använda en robot för sådana uppgifter kommer från att en roboten kan användas för att upprepade gånger fylla i grop efter grop. För att se hur upprepning kan användas i samband med ett programmeringsproblem, tänk på följande stiliserade väg där groparna är jämnt utsprida längst första gatan vid varje jämnt numrerade aveny: 18

19 Din uppgift är att skriva ett program som instruerar Karel att fylla i alla gropar längs denna väg. Observera att vägen tar slut vid den elfte avenyn, som betyder att Du vet exakt hur många gropar skall fyllas. Eftersom Du vet att det finns exakt 5 gropar är styrsatsen Du behöver en for sats, som anger att Du vill upprepa en operation ett i förväg bestämt antal gånger. Strukturen hos en for-sats verkar lite komplicerad eftersom den är mycket mer kraftfull än det som Karel behöver. Den enda version av for-syntaxen som Karel använder är for (int i = 0; i < count ; i++) { satser som måste upprepas där count är ett heltal som anger antal upprepningar. Till exempel, om Du vill ändra fillpothole programmet så att det löser det mer komplexa problemet att fylla i 5 jämnt fördelade gropar, är allt Du måste göra att ändra run metoden enligt: for (int i = 0; i < 5; i++) { fillpothole(); For-satsen är användbar bara när Du vet i förväg antalet upprepningar Du måste göra. I de flesta tillämpningar styrs antalet upprepningar av problemets natur. Till exempel är det inte troligt att den gropfyllande roboten alltid kan räkna med att det finns 5 gropar. Det vore mycket bättre om Karel kunde fortsätta att fylla i gropar tills den möter ett villkor som får den att sluta, som till exempel att komma till gatans slut. Ett sådant program skulle var mycket mer generellt och kunnat tillämpas på flera världar där groparna är jämnfördelade, så som För att skriva ett generellt program som fungerar i alla dessa världar, behöver Du använda en while sats. I Karel har en while sats följande form: while (test) { satser som skall upprepas Testet i headern väljs från villkoren som visas i Figur 12. I detta fall Karel måste kolla om vägen framför är fri genom att använda villkoret frontisclear. Om Du använder villkoret frontisclear i 19

20 en while-loop, kommer Karel att utföra loopen tills den når en mur. While-satsen gör det då möjligt att lösa det mer generella problemet för att laga vägen, så längre groparna förekommer vid alla jämnt numrerade avenyer och vägens slut är given av en mur. Klassen RoadRepairKarel som åstadkommer detta visas i Figur 13. Att lösa generella problem Hittills har de olika groplagningsprogrammen inte varit så realistiska för att de kräver vissa specifika villkor som till exempel jämnt fördelade gropar som troligen inte gäller i verkligheten. Om Du vill skriva ett mer generellt program som fyller gropar borde det fungera med färre restriktioner. Speciellt: Programmet bör fungera med vägar av godtycklig längd. Dessa program behöver ändå kunna veta när vägen tar slut. Groparna skall kunna förekomma i godtyckliga positioner längs vägen. Det skall inte finns några begränsningar vad gäller antalet gropar eller hur de är fördelade. En grop känns igen som en öppning i den mur som beskriver vägens yta. Befintliga gropar skall redan kunna vara lagade. Några gropar kan redan innehålla en beeper lämnad av ett tidigare arbetslag. I sådana fall bör Karel inte lämna ytterligare en beeper. För att ändra programmet så att det löser det mer generella problemet måste Du tänka nytt. Istället för att ha en loop i huvudprogrammet genom varje grop, behöver Du att Karel kollar varje korsning medan den går framåt. Om det finns en öppning vid en korsning bör Karel försöka fylla i gropen. Om det finns en mur kan Karel helt enkelt fortsätta till nästa korsing. Denna analys leder till att det generaliserade programmet bara KRÄVER en ändring i run metoden från Figur 13 while (frontisclear()) { if (rightisclear()) { fillpothole(); Men, som insekten vid koden antyder, är detta program inte riktigt rätt. Den innehåller ett logiskt fel den sort somprogrammerare brukar kalla för bugg. Buggen i detta exempel är ganska subtil och lätt att missa, trots att Du har testat programmet. Till exempel fungerar programmet rätt i följande värld, så som det visas i före-och-efter diagrammet 20

21 /* * File: RoadRepairKarel.java * * The RoadRepairKarel class fills a series of regularly * spaced potholes until it reaches the end of the roadway. import stanford.karel.*; public class RoadRepairKarel extends SuperKarel { while (frontisclear()) { fillpothole(); /** * Fills the hole beneath Karel s current position by * placing a beeper in the hole. For this method to * work correctly, Karel must be facing east immediately * above the hole. When execution is complete, Karel * will have returned to the same square and will again * be facing east. This version of fillpothole checks to * see if there is already a beeper present before putting * a new one down. private void fillpothole() { if (nobeeperspresent()) { turnaround(); Figur 13: Program för att laga en väg 21

22 I detta exempel verkar allt rätt. Om man låter bli att testa programmet vidare, skulle Du aldrig lägga märke till att om Du ändrar världen så att det finns en grop i sjunde avenyn så gör inte programmet rätt. I detta fall ser före-och-efter diagrammet ut så här: Karel slutar utan att fylla i sista gropen. Om Du kollar noggrant vad programmet gör, kommer Du att märka att Karel inte ens går ner i gropen för att kolla om den behöver fyllas. Vad är problemet? Om Du följer programmets logik kommer du att upptäcka att buggen finns i loopen inne i run metoden som ser ut så här: while (frontisclear()) { if (rightisclear()) { fillpothole(); Så fort Karel fyller i gropen i sjätte avenyn gör den ett move()-kommando och är tillbaka i headern på while-loopen. Då står Karel i korsningen mellan sjunde avenyn och andra gatan, där den är blockerad av gränsmuren. Eftersom frontisclear-testet ger falskt avslutas while-loopen utan att kolla sista segmentet längs vägen. Buggen i detta program är ett exempel på ett programmeringsproblem som kallas för staketstolpsfelet. Namnet kommer från det faktum att det tar en stolpe mer än det Du först tänker på för att inhägna ett visst avstånd. Hur många stolpar behöver Du, till exempel, för att bygga ett 100 meter långt staket om stolparna skall vara på 10 meters avstånd? Svaret är 11 som Du ser i följande diagram: Situationen i Karels världs har samma struktur. För att fylla i gropar längs en väg som har sju korsningar måste Karel kolla sju gropar men behöver flyttas bara sex gånger. Eftersom Karel börjar och slutar vid en gräns behöver den utföra ett move()-kommando mindre än antalet korsningar den måste kolla. När vi har väl upptäckt det, är det inte svårt att fixa felet. Innan Karel avslutar vid vägens slut, är allt som programmet måste göra att utföra ett extra test för en grop i sista korsningen, så som visas i Figur

23 /* * File: RoadRepairKarel.java * * This version of the RoadRepairKarel class fills an * arbitrary sequence of potholes in a roadway. import stanford.karel.*; public class RoadRepairKarel extends SuperKarel { while (frontisclear()) { checkforpothole(); checkforpothole(); /** * Checks for a pothole immediately beneath Karel s current * looking for a wall to the right. If a pothole exists, * Karel calls fillpothole to repair it. private void checkforpothole() { if (rightisclear()) { fillpothole(); /** * Fills the pothole beneath Karel s current position by * placing a beeper on that corner. For this method to * work correctly, Karel must be facing east immediately * above the pothole. When execution is complete, Karel * will have returned to the same square and will again * be facing east. This version of fillpothole checks to * see if there is already a beeper present before putting * a new one down. private void fillpothole() { if (nobeeperspresent()) { turnaround(); Figur 14: Program för att fylla i ojämnt sprida gropar 23

24 Kapitel 4: Stegvis förfining Vi kommer att diskutera det som presenteras här under kursens gång i samband med Java. Kapitel 5: Algoritmer Vi kommer att diskutera det som presenteras här under kursens gång i samband med Java. Kapitel 6: SuperKarel Så som den kommer från fabriken ligger Karel lite på den tråkiga sidan. Världen som speglar hårdvaran på den tid då Karel uppfanns är helt i svartvit. Mer än så, Karel uppträder alltid på ett deterministiskt sätt. Båda dessa saker gör det svårt att programmera Karel för att göra mer spännande saker. För att förenkla detta innehåller paketet stanford.karel en SuperKarel som har flera nya funktioner. Metoderna turnright och turnaround Som Du redan vet från Kapitel 2 innehåller klassen SuperKarel definitioner för turnright och turnaround. Även om det är lätt att definiera dem, kan det vara obekvämt att göra det i varje Karel-program. Och dessutom, SuperKarels implementation utnyttjar Karels interna metoder för att implementera dessa operationer på ett mer effektivt sätt. Om Du använder turnright i en klass som utvidgar SuperKarel kommer ditt program att göra en direkt höger vändning och inte gå genom processen att vända vänster tre gånger. Att använda färg Klassen SuperKarel låter Karel måla den korsning den står på genom instruktionen paintcorner(color); Värdet inom parenteserna som kallas för ett argument i programmeringsspråksterminologi kan vara en av följande Färgen null står för att korsningen inte har någon färg, vilket betyder att det lilla korset i mitten syns igenom. När Du skapar en ny Karel-värld har alla korsningar färgen null. SuperKarel förstår också ett nytt villkor cornercoloris(color), som är sant om den korsning som Karel står på har färgats med färgen color. Till exempel, Du skulle kunna färja Karels hörna röd med paintcorner(red); och sedan kan man utföra några kommandon bara i röda korsningar med if (cornercoloris(red)) { Satser som skall göras bara om korsningen är färgad röd 24

25 Slumpmässigt beteende SuperKarel definierar också ett nytt villkor random, som är sant hälften av tiden, men på ett oförutsägbart sätt. Till exempel, om Du exekverar följande satser if (random()) { paintcorner(yellow); else { paintcorner(magenta); Karel skall färga korsningen gul eller magenta, båda med lika sannolikhet. Om Du behöver större kontroll över hur ofta Karel utför en slumpartad händelse, kan randomvillkoret ta ett argument som är ett tal som anger sannolikheten för villkoret att vara sant. Såsom i statistik är sannolikheter tal mellan 0.0 och 1.0, där 0.0 anger att villkoret alltid ska vara falskt och 1.0 att det alltid ska vara sant. Om till exempel Du skulle vilja att Karel lägger ner en beeper 25% av tiden skulle Du kunna skriva if (random(0.25)) { Logiska operationer Allt eftersom Du skriver mer avancerade Karel-program kommer Du att upptäcka att det kan vara svårt att uttrycka vissa villkor när Du på svenska använder konnektiv som och och eller. Som ett exempel, försök skriva ett Karel while-sats som flyttar Karel tills den antingen blir blockerad av en mur eller finner en beeper. För att göra det enklare att skriva intressanta program tillåter Karel-språket användning av logiska operationer. Dessa är faktiskt en del av programmeringsspråket Java och inte en SuperKarel-utvidgning: && Motsvarar svenska ordet och. Motsvarar svenska ordet eller.! Motsvarar svenska ordet icke. Med dessa operationer är det lätt att skriva den föreslagna while satsen: while (frontisclear() && nobeeperspresent()) { 25

26 Appendix A: Karel Reference Card Hela Karel-språket på en sida. 26

Programmering. hh.se/db2004. SuperKarel, Nedbrytning & Styrsatser. Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering

Programmering. hh.se/db2004. SuperKarel, Nedbrytning & Styrsatser. Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Programmering hh.se/db2004 Föreläsning 2: SuperKarel, Nedbrytning & Styrsatser Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Center for Research on Embedded Systems IDE-sektionen

Läs mer

Att utvidga klasser. Programmering. Att utvidga klasser. Förvirring. hh.se/db2004

Att utvidga klasser. Programmering. Att utvidga klasser. Förvirring. hh.se/db2004 Programmering hh.se/db2004 Föreläsning 2: SuperKarel, Nedbrytning & Styrsatser Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Att utvidga klasser Man definierar en ny klass public

Läs mer

Administrivia. hh.se/db2004. 1 Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg)

Administrivia. hh.se/db2004. 1 Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg) Programmering hh.se/db2004 Föreläsning 1 Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Välkomna till en kurs i programmering! Att programmera är att få datorn att bete sig på

Läs mer

Administrivia. hh.se/db2004. 1 Verónica Gaspes (Kursansvarig) 2 Daniel Petersson (Labassistent) Examination. 1 Skriftlig tentamen (betyg)

Administrivia. hh.se/db2004. 1 Verónica Gaspes (Kursansvarig) 2 Daniel Petersson (Labassistent) Examination. 1 Skriftlig tentamen (betyg) Programmering hh.se/db2004 Föreläsning 1 Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Välkomna till en kurs i programmering! Att programmera är att få datorn att bete sig på

Läs mer

Programmering = modellering

Programmering = modellering Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras I objektorienterad programmering består denna värld av ett antal

Läs mer

Laboration 2. returnerar true om det är omöjligt för roboten att göra move() utan att. exekveringsfel erhålls, annars returnera false.

Laboration 2. returnerar true om det är omöjligt för roboten att göra move() utan att. exekveringsfel erhålls, annars returnera false. Laboration 2. I denna laboration skall ni programmera en robot som modelleras av den givna klassen Robot. En robot vistas i en enkel värld, som modelleras av klassen RobotWorld. Världen består av ett rutmönster

Läs mer

Mer om metoder och abstraktioner

Mer om metoder och abstraktioner Mer om metoder och abstraktioner Föreläsning 5 TDA540 - Objektorienterad Programmering Sammanfattning Abstraktion, top-down design Gränsnitt av en metod Parameteröverföring För- och eftervilkor (kompilera

Läs mer

Objektorienterad programmering

Objektorienterad programmering Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad

Läs mer

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv

Läs mer

Föreläsning 15: Repetition DVGA02

Föreläsning 15: Repetition DVGA02 Föreläsning 15: Repetition DVGA02 Vad handlar kursen om? Kursen kan i grova drag delas upp i tre delar: 1. Objekt-orienterad programmering 2. Grafiska användargränssnitt 3. Datastrukturer Dessutom genomsyras

Läs mer

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Kort om klasser och objekt En introduktion till GUI-programmering i Java Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på

Läs mer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET UMEÅ UNIVERSITET Datavetenskap 010824 TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET Datum : 010824 Tid : 9-15 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 40 (halva poängtalet krävs normalt

Läs mer

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,

Läs mer

Föreläsning 2. Operativsystem och programmering

Föreläsning 2. Operativsystem och programmering Föreläsning 2 Operativsystem och programmering Behov av operativsystem En dator så som beskriven i förra föreläsningen är nästan oanvändbar. Processorn kan bara ges enkla instruktioner såsom hämta data

Läs mer

NetBeans 7. Avsikt. Projektfönster

NetBeans 7. Avsikt. Projektfönster NetBeans 7 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om? Algoritmer och datastrukturer Allmänt om kursen Kort javagrund repetition - Klasser, metoder, objekt och referensvariabler, - Hierarkiska klass strukturer - Arrayer och arrayer av objekt - Collection ramverket

Läs mer

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas. Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod

Läs mer

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack 725G61 - Laboration 7 Implementation av ett API Johan Falkenjack December 13, 2013 1 Inledning Hittills i kursen har vi tittat på grundläggande programmering och grundläggande objektorientering. I den

Läs mer

Editering, Kompilering och Exekvering av Javaprogram

Editering, Kompilering och Exekvering av Javaprogram UMEÅ UNIVERSITET Institutionen för informatik B.1, Programmeringens grunder, 5 poäng Editering, Kompilering och Exekvering av Javaprogram Introduktion Syftet med kursmomentet Programmeringens grunder (B.1)

Läs mer

Parameteröverföring. Exempel. Exempel. Metodkropp

Parameteröverföring. Exempel. Exempel. Metodkropp Exempel atriangle.changesize (100, 50); // OK atriangle.changesize (100); // fel antal atriangle.changesize ( 1, 50); // fel datatyp char c = atriangle.getarea (); // fel datatyp Parameteröverföring I

Läs mer

Objektorienterad programmering Föreläsning 2

Objektorienterad programmering Föreläsning 2 Objektorienterad programmering Föreläsning 2 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Inläsning av data via dialogrutor Repetitioner (While-satsen och For-satsen) Nästlade

Läs mer

Laboration 1 - Grunderna för OOP i Java

Laboration 1 - Grunderna för OOP i Java Uppdaterad: 2006-08-31 Laboration 1 - Grunderna för OOP i Java Inledning Laborationen går ut på att lära sig grunderna för objektorienterad programmering, samt motsvarande språkkonstruktioner i Java. Labben

Läs mer

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14. Tentamen 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl 9.00 14.00, sal D31 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

1 Iteration. 1.1 for-satsen

1 Iteration. 1.1 for-satsen 1 Iteration Iteration innebär en upprepning, repetition av satser. Vi har nu sett hur en villkorssats kan välja att utföra ett satsblock beroende på om ett villkor är uppfyllt, selektion. För selektion

Läs mer

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell www.bjornregnell.se

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell www.bjornregnell.se Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell www.bjornregnell.se Mål Så enkelt som möjligt: låg tröskel Ett riktigt programmeringsspråk: inget tak Roliga uppgifter som går

Läs mer

NetBeans 5.5. Avsikt. Projektfönster

NetBeans 5.5. Avsikt. Projektfönster NetBeans 5.5 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4 Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14. Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

Beräkningsvetenskap föreläsning 2

Beräkningsvetenskap föreläsning 2 Beräkningsvetenskap föreläsning 2 19/01 2010 - Per Wahlund if-satser if x > 0 y = 2 + log(x); else y = -1 If-satsen skall alltid ha ett villkor, samt en då det som skall hända är skrivet. Mellan dessa

Läs mer

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

System.out.println(Jaså du har + antalhusdjur+  husdjur); if ( antalhusdjur > 5 ) System.out.println(Oj det var många); 1 Villkor och styrsatser I de program vi sett tidigare har programkörning inneburit att sats efter sats utförts i den ordning de skrivits i källkoden. Vi har inte kunna ändra programmets uppförande beroende

Läs mer

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2 Objektorienterad programmering E Algoritmer Linjär sökning Binär sökning Tidsuppskattningar Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk; dess syntax och semantik, bibliotek

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,

Läs mer

Objektorienterad programmering. Grundläggande begrepp

Objektorienterad programmering. Grundläggande begrepp Objektorienterad programmering Grundläggande begrepp Hur beskriver vi objekt? Vill ha en representationsoberoende beskrivning Abstrakta datatyper! Data Operationer Objekt Representerar en verklig eller

Läs mer

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... } Föreläsning 3 Arv Kategorisering Stora program leder till många klasser (tänk liknelsen med en affär med många varor). Att dela in saker i kategorier är en vanlig strategi för att hantera stora komplexa

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20.

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20. Umeå Universitet Datavetenskap Anders Broberg 130605 TENTAMEN Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg VT-13 Datum: 13-06-05 Tid: kl 16.00-20.00 Namn: Personnummer:

Läs mer

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering! Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering! Samlingar Vi kommer att behöva hantera samlingar av objekt - Har oftast använd Array (fält) - Bra om

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Introduktion till programmering SMD180. Föreläsning 9: Tupler Introduktion till programmering Föreläsning 9: Tupler 1 1 Sammansatta datatyper Strängar Sekvenser av tecken Icke muterbara Syntax: "abcde" Listor Sekvenser av vad som helst Muterbara Syntax: [1, 2, 3]

Läs mer

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

Introduktion till Jasmine 1.2 ODQL

Introduktion till Jasmine 1.2 ODQL Introduktion till Jasmine 1.2 ODQL I detta avsnitt beskrivs ett antal praktiska handgrepp som behövs för att köra Jasmine ODQL. 1 ODQL miljön Man kan enklast köra ODQL mot Jasmine från ett vanligt Command

Läs mer

MMA132: Laboration 2 Matriser i MATLAB

MMA132: Laboration 2 Matriser i MATLAB MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen

Läs mer

Objektsamlingar i Java

Objektsamlingar i Java 1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och

Läs mer

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser Abstrakta Klasser 1 God klassdesign placerar gemensamma attribut och metoder så högt som möjligt i hierarkin men ibland kan dessa egenskaper inte definieras fullständigt Abstrakta klasser innehåller ofta

Läs mer

Objektorienterad programmering. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4

Objektorienterad programmering. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4 Telefonboken Objektorienterad programmering Telefonboken igen, en bättre version Telefonboken, igen. Tvådimensionella fält. Exempel: femtonspelet. Modellklassen. Ett textbaserat program. Ett grafiskt program.

Läs mer

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till

Läs mer

Föreläsning 1, vecka 6: Abstraktion genom objektorientering

Föreläsning 1, vecka 6: Abstraktion genom objektorientering TDA 548: Grundläggande Programvaruutveckling Föreläsning 1, vecka 6: Abstraktion genom objektorientering Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Hur skulle ni implementera detta? (3D demo) Vi återkommer

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F9:1 OOP Objekt-orienterad programmering Föreläsning 9 Arv och klasshierarkier Polymorfism OOP F9:2 Djur - String namn - int vikt + String getnamn() + int getvikt() + void ökavikt(int x) Ko - int mjölkvolym

Läs mer

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i

Läs mer

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim  Agenda (halvdag) Objektorienterad programmering Föreläsning 8 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda (halvdag) Objektorienterad programutveckling Algoritmer Algoritmkonstruktionerna Relationer

Läs mer

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Är en-relation. Har en-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde Föreläsning 7 "Har en"-relation Arv "Har en" "Är en" Superklassen Object Överskuggning Fordonsexempel Seminarium 2 Relevanta uppgifter Uppgift 31 I exemplet Boll från förra föreläsningen gällde följande

Läs mer

Föreläsning REPETITION & EXTENTA

Föreläsning REPETITION & EXTENTA Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder

Läs mer

CS - Computer science. Datateknik Informationsbehandling Datalogi Datavetenskap (ÅA 2008)

CS - Computer science. Datateknik Informationsbehandling Datalogi Datavetenskap (ÅA 2008) CS - Computer science Datateknik Informationsbehandling Datalogi Datavetenskap (ÅA 2008) Vad datateknik INTE är: Att studera datorer Att studera hur man skriver datorprogram Att studera hur man använder

Läs mer

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg Introduktion till programmering D0009E Föreläsning 1: Programmets väg 1 Vad är en dator? En maskin vars beteende styrs av de innehållet (bitmönster) som finns lagrade i datorns minne (inte helt olikt förra

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion Introduktion till programmering D0009E Föreläsning 6: Iteration Multipel tilldelning Helt ok att tilldela en variabel flera gånger: bruce = bruce, bruce = 7 bruce Output: 7 Som tillståndsdiagram: bruce

Läs mer

Imperativ programmering. Föreläsning 4

Imperativ programmering. Föreläsning 4 Imperativ programmering 1DL126 3p Föreläsning 4 Imperativa paradigmer Ostrukturerad programmering Strukturerad programmering Procedurell programmering Objektorienterad programmering Klassbaserad programmering

Läs mer

Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Fredagen 13 januari 2012, 14.00 18.00. Jourhavande lärare: Björn von Sydow, tel 0722/391401. Inga hjälpmedel. Lösningar

Läs mer

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: KLASSER & OBJEKT TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan

Läs mer

Programmering för språkteknologer I, VT2012. Rum

Programmering för språkteknologer I, VT2012. Rum Programmering för språkteknologer I, VT2012 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.lingfil.uu.se/~evelina/uv/uv12/pst1/ Idag - Kursplan - Börja programmera - Lokala variabler - aritmetiska

Läs mer

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering och metoder Introduktion till objektorienterad programmering Markus Saers markus.saers@lingfil.uu.se orientering Deklarativ programmering Beskriver förutsättningarna för något Prolog Imperativ programmering

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

Tentamen, Algoritmer och datastrukturer

Tentamen, Algoritmer och datastrukturer UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och

Läs mer

Tentamen i Grundläggande programmering STS, åk 1 lördag 2002-05-25

Tentamen i Grundläggande programmering STS, åk 1 lördag 2002-05-25 Tentamen i Grundläggande programmering STS, åk 1 lördag 2002-0-2 Skrivtid: 09.00 14.00 Hjälpmedel: Inga Lärare: Anders Berglund. Elena Fersman besöker tentan vid två tillfällen: cirka kl. 10.30 samt cirka

Läs mer

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34 Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger

Läs mer

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14) Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter.

Läs mer

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006 Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006 Detta lösningsförslag är skrivet i stor hast, så det är möjligt att det innehåller en del slarvfel jag ber i så fall om ursäkt för

Läs mer

Java, klasser, objekt (Skansholm: Kapitel 2)

Java, klasser, objekt (Skansholm: Kapitel 2) Java, klasser, objekt (Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Objectorienterad programmering Sida 1 Vad är en klass? En klass är ett sätt att beskriva en mängd objekt och deras gemensamma

Läs mer

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är

Läs mer

Programmering. Den första datorn hette ENIAC.

Programmering. Den första datorn hette ENIAC. Programmering Datorn är bara en burk. Den kan inget själv. Hur får man den att göra saker? Man programmerar den. Människor som funderar ut program som fungerar. Datorn förstår bara ettor och nollor och

Läs mer

For-sats/slinga. Notis

For-sats/slinga. Notis Notis I koden för exemplen förekommer kommentarer. Kommentarer i Matlabkoden identieras med prexet %. Kommentarer är text/kod som Matlab bortse från. Alltså all text/kod som ligger till höger och på samma

Läs mer

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska Matlab-föreläsning 3 (4), 17 september, 2015 Innehåll Sekvenser (från förra föreläsningen) Upprepning med for-slingor och while-slingor Villkorssatser med if - then -else - Logik Sekvenser - repetion från

Läs mer

Föreläsning 8. Designmönster

Föreläsning 8. Designmönster Föreläsning 8 Designmönster Designmönster När man designar program kan det vara viktigt att förstå hur man tidigare gått till väga när man konstruerat program. Kännedom om dessa tillvägagångssätt kan snabba

Läs mer

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander F9 - Polymorfism ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Polymorfism - flerformighet Vi vet vad metoden heter (signaturen) Men vi vet inte vid anropet exakt vilken metod som faktiskt

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316

Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C Datatyp Aritmetiska operatorer Omvandling av typer Reserverade ord Mikael Djurfeldt Logiska operatorer

Läs mer

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php Introlektion PHP är ett av de enklare språken att lära sig just pga. dess dynamiska struktur. Det används för att bygga upp båda stora och mindre system. Några vanliga system som använder sig av PHP är

Läs mer

JAVA Mer om klasser och objektorientering

JAVA Mer om klasser och objektorientering JAVA Mer om klasser och objektorientering Begreppet package - paket Package används när man t ex vill skapa ett eget bibliotek med klasser. Sen är det då meningen att man ska importera detta paket i det

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

Läs mer

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 UML Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 UML Unified Modelling Language Grafiskt modelleringsspråk för att beskriva olika aspekter av objektorienterade system. Vi kommer

Läs mer

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel Idag Ett exempel Undantag Substitutierbarhet, subtyper, subklasser När val av metod beror av typerna hos två objekt Lite om överlagring Exempel, version 2 Notera: för samtliga figurer gäller: arean av

Läs mer

Statistik över heltal

Statistik över heltal Övningsuppgift Statistik över heltal Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande

Läs mer

Arduinokurs. Kurstillfälle 4

Arduinokurs. Kurstillfälle 4 Kurstillfälle 4 CW-generering Det här kan ses som överkurs men kan ändå vara roligt för att kunna generera CW på ett enkelt sätt. Det blir en hel del nytt men vi tar det steg för steg Som alla vet gäller

Läs mer

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det). LULEÅ TEKNISKA UNIVERSITET Tentamen i Objektorienterad programmering och design Totala antalet uppgifter: 5 Lärare: Håkan Jonsson, Tomas Johansson, 491000 Resultatet anslås senast 08-05-16 i A-huset. Tillåtna

Läs mer

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037) Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet

Läs mer

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter Inledande matematik för I1 MVE011 läsperiod 1 010 Matlab vecka övningsuppgifter Linjära ekvationssystem Matlab har många kraftfulla redskap för att hantera matriser och därmed också linjära ekvationssystem.

Läs mer

Språket Python - Del 1 Grundkurs i programmering med Python

Språket Python - Del 1 Grundkurs i programmering med Python Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR

Läs mer

Program & programmering

Program & programmering Program & programmering Vad är program? Satser och instruktioner, toggla igenom exempel Program på olika nivåer, för olika maskiner, för olika saker Tolka program; kompilator, intepretator, binärbytekod,

Läs mer

Tentamen , Grundläggande programmering i Java

Tentamen , Grundläggande programmering i Java Institutionen för informationsteknologi och medier Sid:1(3) Grundläggande programmering i Java Martin Kjellqvist Lösningsförslag, lösningsansatser Tentamen 2006-01-20, Grundläggande programmering i Java

Läs mer

Att skriva till och läsa från terminalfönstret

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer