Objektorienterad programmering
|
|
- Helen Sundberg
- för 6 år sedan
- Visningar:
Transkript
1 Objektorienterad programmering Föreläsning 5: mer om metoder och abstraktioner Dr. Alex Gerdes Dr. Carlo A. Furia Hösttermin 2016 Chalmers University of Technology
2 Några meddelande Man får inte ändra klassen Robot, Location, osv i lab 2 Handledarna rättar efter deadlinen
3 Sammanfattning föreläsning 4 Abstraktion, top-down design Gränssnitt av en metod Parameteröverföring För- och eftervillkor Kopiera/klistra -> larm!
4 Abstraktion
5 Abstraktion = subtraktion Det är svårt att tänka på flera nivåer samtidigt Abstraktion är ett verktyg som underlättar Abstraktion = subtraktion - En abstraktion innebär att man bortser från vissa omständigheter och detaljer i det vi betraktar, för att bättre kunna uppmärksamma andra för tillfället mer väsentliga aspekter Abstraktioner hjälper oss att fokusera på de för tillfället viktiga egenskaperna
6 Black-box tänkande x sqrt x year leapyear true eller false a b average Medelvärdet av a och b Är ett sätt att uttrycka vissa steg i ett program på en högre abstraktionsnivå På en hög abstraktionsnivå är det vad som görs som är det intressanta, inte hur det görs Ger direkt stöd för stegvis förfining Varje abstraktion (black-box) skall endast göra en sak och göra denna bra
7 Black-box tänkande En black-box har en insida och en utsida: - Gränssnittet (interfacet) är det som binder insidan och utsidan - Gränssnittet 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å
8 Elimineringsspelet Mexico
9 Problemställning I tärningsspelet Mexico deltar minst två spelare och spelet är ett elimineringsspel. När spelet börjar har alla spelare lika mycket pengar att spela med (= startavgift, dvs de pengar som spelaren riskerar att förlora). En omgång går till på så sätt att varje spelare kastar två 6-sidiga tärningar. Spelaren som får lägst poängvärde förlorar omgången och måste lägga en i förväg fastställd insatsen i potten. Detta upprepas tills endast en av spelarna har pengar kvar. Denne är vinnaren och får hela potten. För att beräkna poängvärdet, beräknas först den sammanlagda tärningssumman. Detta görs genom att först multiplicera värdet på tärningen med högst poäng med 10 och sedan addera värdet på tärningen med lägst poäng. Har tärningarna poängen 3 och 4 erhålls tärningssumman 43, har tärningarna poängen 5 och 5 erhålls tärningssumman 55, osv. Tärningssumman ligger till grund för att beräkna poängvärdet. Tärningssummornas poängvärde från högsta till lägsta är enligt: 21, 66, 55, 44, 33, 22, 11, 65,, 61, 54,, 51, 43, 42, 41, 32, 31 Högsta poängvärdet är alltså tärningsvärdet 21 (som kallas Mexico ), följt av paren (i numerisk ordning), följt av övriga tärningsvärden (i numerisk ordning).
10 Uppgiften Du är med och utvecklar en datorversion av spelet Det behövs en metod som tar två tärningssummor och returnerar den tärningssumma som har lägsta poängvärdet Din uppgift är att utveckla en sådan metod! Vad är det första som du måste göra? Bestämma (specificera) gränssnittet för metoden!
11 Bestämma gränssnitt Har du tillräckligt med information för att specificera gränssnittet? Nej, du måste komma överens med den som beställt (skall använda) metoden om metodens namn, om metoden skall vara en klassmetod eller en instansmetod, samt metodens synlighet Låt oss säga att detta resulterar i att metoden skall ha namnet lowestscorevalue, samt vara en privat klassmetod: private static int lowestscorevalue(int score1, int score2) Vidare måste vi dokumentera vad metoden gör och eventuella föroch eftervillkor! // before: score1 and score2 are valid Mexico scores // after: returns the score with lowest score value private static int lowestscorevalue(int score1, int score2)
12 Det färdiga gränssnittet Nu är alla förutsättningar givna för att: - du skall kunna påbörja arbetet med att utveckla metoden - du eller andra utvecklare skall kunna skriva kod för att testa metoden - andra utvecklare kan nyttja metoden som en abstraktion i sitt utvecklingsarbete // before: score1 and score2 are valid Mexico scores // after: returns the score with lowest score value private static int lowestscorevalue(int score1, int score2)
13 Testdriven programutveckling Testdriven programutveckling innebär att man skriver testerna för koden innan koden skrivs När koden som skrivits går igenom testerna gör koden det den skall göra; koden kan dock behöva omstruktureras (refactoring) för att få koden snyggare och bättre (t.e. mer lättläst) Ett test beskriver vad som skall göras medan implementationen beskriver hur det ska göras; testerna blir därmed en del av specifikationen Eftersom testet skrivs innan implementationen blir designen av gränssnittet gjort utifrån en brukarens perspektiv Testerna blir verkligen skrivna, vilket inte alltid är fallet om man skriver dem efteråt Skriv en testmetod: private static void testlowestscorevalue() för att testa metoden lowestscorevalue
14 Testdriven programutveckling private static void testlowestscorevalue() { System.out.println(lowestScoreValue(21, 32) + " : should be 32"); System.out.println(lowestScoreValue(66, 21) + " : should be 66"); System.out.println(lowestScoreValue(43, 33) + " : should be 43"); System.out.println(lowestScoreValue(33, 55) + " : should be 33"); System.out.println(lowestScoreValue(65, 22) + " : should be 65"); System.out.println(lowestScoreValue(53, 54) + " : should be 53");
15 Testdriven programutveckling private static boolean testlowestscorevalues() { return testlowestscorevalue(21, 32, 32) && testlowestscorevalue(66, 21, 66) && testlowestscorevalue(43, 33, 43) && testlowestscorevalue(33, 55, 33) && testlowestscorevalue(65, 22, 65) && testlowestscorevalue(53, 54, 53); private static boolean testlowestscorevalue(int x, int y, int exp) { int result = lowestscorevalue(x, y); boolean passed = result == exp; if (passed) System.out.println("Ok!"); else System.out.println("Failed: " + result + " should be " + exp); return passed;
16 Implementation Börja med att ställa dig frågan: Har jag löst något liknande problem tidigare? // before: score1 and score2 are valid Mexico scores // after: returns the score with lowest score value private static int lowestscorevalue(int score1, int score2) public static int maxvalue(int a, int b) { int result; if (a > b) result = a; else result = b; return result; public static int minvalue(int a, int b) { int result; if (a < b) result = a; else result = b; return result;
17 Implementation Metoden lowestscorevalue skall bestämma det minsta av två numeriska värden. Dessa numeriska värden beräknas från score1 respektive score2. Specificera en abstraktion som beräknar dessa numeriska värden: // before: score is a valid Mexico score // after: returns the comparison value of score private static int scorevalue(int score) // before: score1 and score2 are valid Mexico scores // after: returns the score with lowest score value private static int lowestscorevalue(int score1, int score2) { int low; if (scorevalue(score1) < scorevalue(score2)) low = score1; else low = score2; return low;
18 Implementation Problemet vi har är att för varje tärningssumma 21, 66, 55, 44, 33, 22, 11, 65,, 61, 54,, 51, 43, 42, 41, 32, 31 beräkna ett numeriskt värde (heltal) p.s.s. att dessa värden överensstämmer med ovan givna ordning på tärningssummorna Någon idéer om hur detta skall gå till? // before: score is a valid Mexico score // after: returns the comparison value of score private static int scorevalue(int score) 21, 66, 55, 44, 33, 22, 11, 65,, 61, 54,, 51, 43, 42, 41, 32, 31 Inbörder rätt ordning Inbörder rätt ordning Sätt till 1000 Multiplicera med , 660, 550, 440, 330, 220,110, 65,, 61, 54,, 51, 43, 42, 41, 32, 31
19 Implementation // before: score is a valid Mexico score // after: returns the comparison value of score public static int getscorevalue(int score) { int comparisonvalue; if (score == 21) comparisonvalue = 1000; else if (score / 10 == score % 10) comparisonvalue = score * 10; else comparisonvalue = score; return comparisonvalue;
20 Abstraktioner på en annan nivå
21 Behov av "större" svarta boxar än metoder Ett objekt har beteenden: - de operationer som kan göras på objektet - implementeras mha metoder Ett objekt har tillstånd ( värde ): - robotens riktning - robotens fysiska plats - robotens hastighet move() turnleft() makedark() makelight() ondark() robot frontisclear() atendofworld() getlocation() setdelay(int t)
22 Black-box tänkande Metod void move() boolean frontisclear() void turnleft() void makedark() void makelight() boolean ondark() int getdirection() void makedark() boolean atendofworld() Location getlocation() void setdelay(int t) Användning förflyttar sig ett steg framåt, om roboten hamnar utanför världen eller i en mur fås ett exekveringsfel returnerar true om det är möjligt för roboten att göra move() utan att ett exekveringsfel erhålls, annars returnera false vrider sig 90 åt vänster färgar rutan den står på till mörk, om rutan redan är mörk fås ett exekveringsfel färgar rutan den står på till ljus, om rutan redan är ljus fås ett exekveringsfel returnerar true om roboten står på en mörk ruta, annars returneras false returnerar robotens riktning färgar rutan den står på till ljus, om rutan redan är ljus fås ett exekveringsfel returnerar true om det är omöjligt för roboten att göra move() utan att hamna utanför världen, annars returneras false returnerar robotens position i världen som ett objekt av typen Location sätter hastigheten med vilken roboten rör sig
23 Swap
24 Problem I världen som skapas av klassen Swapper befinner sig roboten i ett scenario enligt den vänstra av de två figurerna bredvid. Roboten är placerad i början av en korridor och dess uppgift (som implementeras av metoden swapall) är att byta plats på färgerna på cellerna som finns på ömse sidor om korridoren (se högra bilden bredvid). Efter slutförd uppgift skall roboten återvända till sig ursprungliga startposition. Du skall bryta ner uppgiften i delproblem och utveckla kraftfullare abstraktioner (metoder) än de operationer som roboten tillhandahåller. Före Efter
25 Problem Roboten skall kunna utföra sin arbetsuppgift i en godtycklig värld med samma principiella uppbyggnad som världen i figurerna bredvid. Var noggrann med att beskriva vad varje metod gör och vilka för- respektive eftervillkor som gäller (t.ex. vilken riktning roboten måste ha innan metoden anropas, och vilken riktning roboten får efter anropet). Välj också med omsorg lämpliga och beskrivande namn på metoderna. När man löser ett problem är det sällan man finner den optimala lösningen direkt. När man väl har en lösning är det därför viktigt att reflektera över om det finns andra bättre lösningar. I det problem som ni just har blivit förelagda, kan antalet operationer som roboten behöver utföra vara ett mått på hur bra lösningen är. Ju färre operationer desto bättre.
26 Lös problemet swaptwocells(); Handfallen? Rådvill? Kommer inte igång? Förenkla problemet! Titta på en mindre instans av problemet! Fokusera på vad som skall göras, inte på hur det skall göras! Finn abstraktioner! swaptwocells(); robot.move(); swaptwocells(); swaptwocells(); robot.move(); swaptwocells(); robot.move(); swaptwocells();
27 Metoden swapall // Swapping colors on all across cells in the corridor. // before: the robot is located at the beginning of the corridor, // facing the corridor // after: the robot has the same location and facing the same direction public void swapall() { boolean finished = false; while (!finished) { swaptwocells(); if (!atendofcorridor()) robot.move(); else finished = true; returntostartposition(); // before: robot is at the end of the corridor, // facing the wall // after: robot is at the beginning of the // corridor, facing the corridor private void returntostartposition() // Swapping colors of two across cells. // before: robot is in the corridor // facing the corridor // after: robot is in the corridor facing // the corridor private void swaptwocells() // after: returns true if the robot is at the // end of the corridor, otherwise false public boolean atendofcorridor()
28 Metoden atendofcorridor // after: returns true if the robot is at the end of the // corridor, otherwise false public boolean atendofcorridor() { return!robot.frontisclear();
29 Metoden swaptwocells När behöver färgerna på cellerna bytas? När cellerna har olika färg! Kan uttryckas som leftcellisdark()!= rightcellisdark() Alternativt leftcellisdark() ^ rightcellisdark() // return: true if the cell on left side of the robot is dark, otherwise false // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private boolean leftcellisdark() // return: true if the cell on right side of the robot is dark, otherwise false // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private boolean rightcellisdark()
30 Metoden swaptwocells // Swapping colors of two across cells // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private void swaptwocells() { if (leftcellisdark()!= rightcellisdark()) changecolors(); // Return true if the cell on left side of the robot is dark, otherwise false // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private boolean leftcellisdark() // Return true if the cell on left side of the robot is dark, otherwise false // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private boolean leftcellisdark() // Change color of the cell on left side and of the cell on right side // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private void changecolors()
31 Metoden leftcellisdark // Returns true if the cell on left side of the robot is dark, otherwise false // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private boolean leftcellisdark() { robot.turnleft(); robot.move(); boolean isdark = robot.ondark(); turnaround(); robot.move(); robot.turnleft(); return isdark; // before: none // after: robot is facing the opposite direction private void turnaround()
32 Metoden turnaround // before: none // after: robot is facing the opposite direction private void turnaround() { robot.turnleft(); robot.turnleft();
33 Metoden rightcellisdark // Returns true if the cell on right side of the robot is dark, // otherwise false // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private boolean rightcellisdark() { turnright(); robot.move(); boolean isdark = robot.ondark(); turnaround(); robot.move(); turnright(); return isdark; // before: none // after: robot has turned 90 degree to right public void turnright()
34 Metoden turnright // before: none // after: robot has turned 90 degree to right public void turnright() { turnaround(); robot.turnleft();
35 Metoden swaptwocells // Change colors of the cells on left side and on right side of the robot // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private void changecolors() { changecolorofleftcell(); changecolorofrightcell(); // Change color of the cell on left side of the robot // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private void changecolorofleftcell() // Change color of the cell on right side of the robot // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private void changecolorofrightcell()
36 Metoden changecolorofleftcell // Change color of the cell on left side of the robot // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private void changecolorofleftcell() { robot.turnleft(); robot.move(); switchcolor(); turnaround(); robot.move(); robot.turnleft(); // Switch color of the cell // before: none // after: if the cell the robot is at was dark it has become light, // and if the cell was light it has become dark private void switchcolor()
37 Metoden changecolorofrightcell // Change color of the cell on right side of the robot // before: robot is in the corridor facing the corridor // after: robot is in the corridor facing the corridor private void changecolorofrightcell() { turnright(); robot.move(); switchcolor(); turnaround(); robot.move(); turnright();
38 Metoden switchcolor // Switch color of the cell // before: none // after: if the cell the robot is at was dark it has become // light, and if the cell was light it has become dark private void switchcolor() { if (robot.ondark()) robot.makelight(); else robot.makedark();
39 Metoden returntostartposition // before: robot is at end of the corridor, facing the wall // after: robot is at beginning of the corridor, facing the // corridor private void returntostartposition() { turnaround(); gotoendofcorridor(); turnaround(); // before: robot is in the corridor, facing the corridor // after: robot is at the end of the corridor, facing the wall private void gotoendofcorridor()
40 Metoden gotoendofcorridor // before: robot is in the corridor, facing the corridor // after: robot is at the end of the corridor, facing the wall private void gotoendofcorridor() { while (!atendofcorridor()) { robot.move();
41 Demo: Swapper
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
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
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
Föreläsning 4. Föreläsning 4
Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras Föreläsning 4 Top-Down Design Metoder Parameteröverföring I objektorienterad
Föreläsning 4. Top-Down Design Metoder Parameteröverföring. Metoder Parameteröverföring
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
Laboration 2. Objektorienterad programmering. Syfte
Laboration 2 Objektorienterad programmering Syfte Syftet med dessa uppgifter är att få övning i att använda en färdig klass samt att bryta ner ett programmeringsproblem i små meningsfulla delproblem, dvs
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
Objektorienterad programmering
Objektorienterad programmering Föreläsning 4: metoder och top-down design Dr. Alex Gerdes Dr. Carlo A. Furia Hösttermin 2016 Chalmers University of Technology Några meddelande Bara några dagar kvar till
Metoder och top-down design
Metoder och top-down design Föreläsning 4 TDA540 - Objektorienterad Programmering Meddelande Bara några dagar kvar till laboration 1 deadlinen Läs textboken, läsanvisningar finns på hemsidan Kom ihåg flödet:
Programmeringsteknik F1/TM1
f1pt Välkommen till Programmeringsteknik F1/TM1 CTH: TIN212 LP 2-3 2016/17 F1 introduktion Erland Holmström erland... at... chalmers.se Data & Informationsteknik Kurshemsida: www.cse.chalmers.se/edu/course/tin212/
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
Föreläsning 1: Introduktion
TDA 545: Objektorienterad programmering Föreläsning 1: Introduktion Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Vad handlar kursen om? Det här är en grundkurs i programmering. Programmering språket
Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper
Tentamen Programmeringsteknik I 2017-10-23 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes
Vad kännetecknar en god klass F12 Nested & En odelad, väldefinierad abstraktion Uppgiften kan beskrivas kort och tydlig Namnet är en substantiv eller adjektiv som beskriver abstraktionen på ett adekvat
1 Comparator & Comparable
1 Comparator & Comparable 1.1 Implementation av Comparable Att implementera Comparable innebär att man gör objekt av sin klass jämförbara med andra och att det därmed antas existera en naturlig ordning
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta
Föreläsning 12: Exempel och problemlösning
TDA 545: Objektorienterad programmering Föreläsning 12: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag Problemlösning, dvs hur man ska tänka för att hitta lösning int mängd/set
TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 TDDE11, 725G90/1 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder
Föreläsning 3: Booleans, if, switch
TDA 545: Objektorienterad programmering Föreläsning 3: Booleans, if, switch Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Påminnelse om klasser och objekt Boll boll1 = new Boll(5,12); skapar ett nytt
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl
Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:
Omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-16, TDA540 Dag: 2017-08-24, Tid: 14.00-18.00 Ansvarig: Examinator: Alex Gerdes Carlo A. Furia Förfrågningar:
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
Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper
Tentamen Programmeringsteknik I 2017-10-23 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU
DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU lösningsförslag till tentamen 2017-06-09 Tid: 8:30-12:30. Plats: SB. Ansvarig lärare: Fredrik Lindblad,
F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander
F6 Objektorienterad design ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se långa ord AKTIVITETER I PROGRAMVARUUTVECKLING Iterativ utveckling Kravspecifikation Design Implementation Testning
Repetition av OOP- och Javabegrepp
ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir
TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2
TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 Pelle Evensen, Daniel Wetterbro 5 november 2009 Sammanfattning Denna vecka ska vi titta på abstrakta klasser kontra interface,
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
Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:
Omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-16, TDA540 Dag: 2017-04-12, Tid: 14.00-18.00 Ansvarig: Examinator: Alex Gerdes Carlo A. Furia Förfrågningar:
Tentamen, EDAA10 Programmering i Java
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDAA10 Programmering i Java 2017 04 20, 14.00 19.00 Anvisningar: Preliminärt ger uppgifterna 4 + 6 + 13 + 7 + 15 = 45 poäng. För godkänt
Repetition av OOP- och Javabegrepp
ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir
Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004
Lösningsförslag Programmeringsmetodik, KV: Java och OOP 17 januari 2004 Examinator: Johan Karlsson Skrivtid: 9-15 Hjälpmedel: En av följande böcker: Barnes & Kölling: Objects First With Java a practical
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
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,
Sökning och sortering
Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: 2:a september 200, klockan 8:30-12:30. Plats: V Ansvarig lärare: Katarina Blom, tel 772 10 0. Läraren besöker tentamen kl 9:30
TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 TDDE11, 725G90 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder
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
Tentamen, EDA501/EDAA20 Programmering M MD W BK L
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDA501/EDAA20 Programmering M MD W BK L 2017 05 31, 8.00 13.00 Anvisningar: Preliminärt ger uppgifterna 9 + 12 + 10 + 9 = 40 poäng.
Tentamen ID1004 Objektorienterad programmering May 29, 2012
Omtentamen för ID1004 Objektorienterad programmering HT11, 29 maj 2012, 09-13 Denna tentamen examinerar 3 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av 12 frågor. Varje fråga
Tentamen i Objektorienterad programmering
CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar
Typkonvertering. Java versus C
Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då
Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling
Göteborg, Magnus Myréen, 2014-10- 15 Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Fulltentamen vitsord: 3=28p, 4=38p, 5= 48p, max 60p. Max
Den som bara har en hammare tror att alla problem är spikar
Introduktion Föreläsning (Weiss kap. -4) Många begrepp blir det Introduktion till kursen Exempel: Datastrukturen mängd Generiska Den som bara har en hammare tror att alla problem är spikar Vilken
OOP Objekt-orienterad programmering
OOP F4:1 OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder Metoder - subrutiner OOP F4:2 Kod som utför en viss operation. Ligger i olika klasser och anropas via operatorn.
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
Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.
Tentamen i EDAF60 29 oktober 2018 Skrivtid: 14-19 Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas. Skriv inte med färgpenna enda tillåtna färg är svart/blått/blyerts.
Mer om klasser och objekt
Klassvariabler och klassmetoder En klass kan innehålla klassvariabler och klassmetoder. TDA143 I1 Programmerade system Föreläsning 5 (OH-bilder 5) Mer om klasser och objekt Christer Carlsson Det som skiljer
Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.
(7) Objektinteraktion Objektorienterad programmering Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt. Mål Efter övningen skall du kunna konstruera ett program med flera
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar
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
Inlämningsuppgift MiniPlotter
LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap EDAA01 Programmeringsteknik fördjupningskurs Inlämningsuppgift MiniPlotter I den här uppgiften ska ett program som ritar grafer av matematiska funktioner
Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.
TDA550 - Objektorienterad programvaruutveckling, fk Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone. Uppgift 1 Icke-muterbarhet kontra
Lösningsförslag övning 2.
Objektorienterad programmering, Z1 Lösningsförslag övning 2. Uppgift 1. public class SIUnits { public static double yardspermeter = 1.093613; public static double poundperkilo = 2.204623; public static
Objektorienterad programutveckling, fk
till tentamen P r e l i m i n ä r 1 (6) Kurs Objektorienterad programutveckling, fk Program DAI2 Läsår 2017/2018, lp 2 Examinator Uno Holmer Uppgift 1 (7 p) Metoden i tesen bryter mot designprincipen separation
TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P
UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr
Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista
Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista Abstrakt stack Abstrakt kö Länkade listor Abstrakta datatyper Det är ofta praktiskt att beskriva vilka operationer man vill kunna göra på sina
Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.
Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen
Tentamen i Introduktion till programmering
Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:
Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.
(16 februari 2016 F5.1 ) Dagens text Programmeringsteknik Mer om Scanner-klassen Dialogrutor (klassen JOptionPane) Bubbelsortering ArrayList Omslagsklasser Arbetsexempel (16 februari 2016 F5.2 ) Pokertärningar
Del A (obligatorisk för alla)
Del A (obligatorisk för alla) A1. Ringa in rätt svarsalternativ eller skriv svar i ruta om sådan a) Satsen double x = (int)(1 + 3/2.0) + 3.; resulterar i b) Satsen int x = (int)(1 + 3/2.0) + 3.; resulterar
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,
Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9
Quicksort Koffman & Wolfgang kapitel 8, avsnitt 9 1 Quicksort Quicksort väljer ett spcifikt värde (kallat pivot), och delar upp resten av fältet i två delar: alla element som är pivot läggs i vänstra delen
OOP Objekt-orienterad programmering
OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public
Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!
Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering! Gränssnitt igen För att kunna ändra på olika delar av programmet utan att andra delar
Enkla variabler kontra referensvariabel
Enkla variabler kontra referensvariabel En variabel är ett namngivet minnesutrymme i datorns primärminne. En variabel som används för att representera en primitiv datatyp kallas för enkel variabel. Deklarationssatsen
DAT043 Objektorienterad Programmering
DAT043 Objektorienterad Programmering Detta är en exempeltenta som innehåller gamla tentauppgifter av ungefär liknande slag som ni kan förvänta er se på ordinarie tenta i Del 1 respektive Del 2. Dock är
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Prioritetskö Heap Representation som
public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }
Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)
DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion
DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/3 2014 Innehåll Kursöversikt Javarepetition/Javaintroduktion UML - klassdiagram-introduktion i anslutning till Java-exemplen Kursmål,
Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!
Tentamen Programmeringsteknik II 2014-01-09 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja
Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,
Exempel: Kappsäcksproblemet Backtracking Dynamisk programmering Föreläsning (Weiss kap..-) Kan man ur en grupp föremål F,,F N med vikterna V,,V N välja ut en delgrupp som väger exakt M kilo? Exempel: föremål
Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Tentamen Programmeringsteknik I 2012-09-01 Skrivtid: 0900-1200 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till
Kurskod D0010E Datum 2012-05-15 Skrivtid 5tim
LULEÅ TEKNISKA UNIVERSITET Tentamen i Objektorienterad programmering och design Totala antalet uppgifter: 5 Lärare: Håkan Jonsson, 491000, 073-820 1700 Resultatet o entliggörs senast: 2012-05-29. Tillåtna
Metoder (funktioner) Murach s: kap Winstrand Development
(funktioner) Murach s: kap 6 2013-01-23 1 Winstrand Development Metoder I C# kan vi dela in koden i block en kodsekvens ska köras likadant på flera ställen i applikationen. Detta block kallas för en metod
Classes och Interfaces, Objects och References, Initialization
Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class
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ösningsförslag: Instuderingsfrågor, del D
Uppgift 1. Objektorienterad programmering, Z1 Lösningsförslag: Instuderingsfrågor, del D a) Inget fält behövs. Man kan läsa in ett tal i taget och addera dessa till summan. b) Här behövs ett fält. c) Här
Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016
Objektorienterad Programkonstruktion Föreläsning 2 2 nov 2016 Objekt - klass Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 Objekt - klass Objekt - klass Objekt - klass + Objekt - klass public class
Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER
Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER Logiska uttryck datatypen boolean Logiska uttryck kan ha två möjliga värden, true eller false. Variabler av typen boolean kan tilldelas
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
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
TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).
1 (7) TENTAMEN: Objektorienterad programmering Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad. Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen. Ordna bladen i uppgiftsordning.
Institutionen för TENTAMEN CTH HT-14 Datavetenskap 2014-08-28 TDA540. Tentamen för TDA540 Objektorienterad programmering
Institutionen för TENTAMEN CTH HT-14 Datavetenskap 2014-08-28 TDA540 Tentamen för TDA540 Objektorienterad programmering DAG: 14-08-28 TID: 14:00 18:00 Ansvarig: Joachim von Hacht och Christer Carlsson
TDDD78 Viktiga begrepp, del 2
jonas.kvarnstrom@liu.se 2015 TDDD78 Viktiga begrepp, del 2 Identitet och likhet Är likhet och identitet samma sak? Oj, vi har samma kläder på oss idag! Nej, men likadana! Besserwisser 3 Detta är två rutor
Laboration 3 GUI-programmering
Laboration 3 GUI-programmering Syfte Erbjuder studenterna en möjlighet att lära sig grunderna i gränssnittsprogrammering i Java. Genomförande Genomförs individuellt eller i grupp om 2 personer. Uppskattad
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack
Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2
AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga
Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs
Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera först talet 37 med 2. Använd heltalsdivision. Det ger kvoten
public och private Obs: private inte skyddar mot access från andra objekt i samma klass.
public och private En metod som är public får anropas från alla metoder i alla klasser. Ett attribut som är public får avläsas och ändras från alla metoder i alla andra klasser. En metod som är private
Föreläsning 2. Länkad lista och iterator
Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF
Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)
Grundläggande programmering med C# Provmoment: Ladokkod: Tentamen ges för: 7,5 högskolepoäng TEN1 NGC011 Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) (Ifylles av student) (Ifylles av student)
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:
Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering
Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-6, TDA540 Dag: 207-0-24, Tid: 4.00-.00 Uppgift a) En abstrakt klass kan inte instansieras,
Obligatorisk uppgift 5
(5 oktober 2018 Symbolisk kalkylator 1 ) Obligatorisk uppgift 5 En kalkylator som hanterar uttryck symboliskt dvs värden är uttryck inte bara tal. Uppgiften exemplifierar: objektorientering återanvändning
Objektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning XIV: Undantag, Design Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Hashing Undantag Design Outline Hashing Undantag Design En frukt
Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.
Outline Objektorienterad Programmering (TDDC77) Föreläsning XIV: Undantag, Design Ahmed Rezine IDA, Linköpings Universitet Undantag Design Hösttermin 2017 En frukt har ett namn Man kan lägga en frukt i
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
Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel
Objekt Instansvariabler Instansmetoder Klassvariabler Klassmetoder Inkapsling Föreläsning 6 Vad är ett objekt? Ett objekt har egenskaper, som kallas för objektets attribut Egenskaperna beskriver tillsammans