Objektorientering i liten skala

Relevanta dokument
Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen Arv och polymorfi

TDDC76 - Programmering och Datastrukturer

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

C++ Objektorientering - Klasser. Eric Elfving

TDIU01 Programmering i C++

tentamensdags och lab 3

Programmering B med Visual C

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

C++ Slumptalsfunktioner + switch-satsen

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

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.

Föreläsning 3: Booleans, if, switch

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

TUTORIAL: KLASSER & OBJEKT

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

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

TDDC76 - Programmering och Datastrukturer

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

Detaljbeskrivning av Player

Introduktion till arv

TDDI82 - Projekt. Christoffer Holm. Institutionen för datavetenskap (IDA)

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen Arv och polymorfi

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

Programmering. Scratch - grundövningar

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

TDIU01 - Programmering i C++, grundkurs

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

Grundläggande programmering med C# 7,5 högskolepoäng

Objektorienterad programmering

OrganisaKon / Struktur / Ansvar!

Prova på-laboration i Ruby

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

Lab5 för prgmedcl04 Grafik

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Agenda. Objektorienterad programmering Föreläsning 13

JAVA Mer om klasser och objektorientering

Objektorienterad programmering D2

Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på

Det finns många flaggor till g++,

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

3. Välj den sprajt (bild) ni vill ha som fallande objekt, t ex en tårta, Cake. Klicka därefter på OK.

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

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

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 i TDP004 Objektorienterad Programmering Lösningsförslag

Introduktion C-programmering

Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

HI1024 Programmering, grundkurs TEN

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Mikael Bondestam Johan Isaksson. Spelprogrammering. med CDX och OpenGL

Laboration: Grunderna i MATLAB

Tentamen OOP

TDIU01 - Programmering i C++, grundkurs

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Programmering för språkteknologer II, HT2014. Rum

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Lösningsförslag till exempeltenta 1

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

För alla uppgifter på tentan gäller: Man får använda både standard-c++ (som till exempel har pekare som anges med * och objekt som skapas med new) och

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

5 Arv och dynamisk bindning FIGUR

JAVAUTVECKLING LEKTION 11

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

2D1339 Programkonstruktion för F1, ht 2003

Laboration 1: Figurer i hierarki

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

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

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Inkapsling (encapsulation)

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Föreläsning 6: Introduktion av listor

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

1 Klasser och objektorientering Vad är objektorientering?

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 20

kl Tentaupplägg

Transkript:

Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2012-10-24 Objektorientering i liten skala Mål I denna lab skall du skriva ett objektorienterat program. Programmet skall delas upp i klasser (en objektbeskrivning). Varje klass skall ha ett (och endast ett) ansvar. Klassen representerar något från verkligheten och vad man kan göra med det (ha det till). En klass kan också representera något abstrakt (t.ex. ett komplext tal). Ett exempel på ett påtagligt objekt är en kortlek. En klass som representerar en kortlek har ett ansvar - att hålla reda på korten i kortleken (representeras antagligen av någon slags lista med kort i klassen). Det man kan göra med en kortlek är att blanda den, och dra det översta kortet. Kanske kan man göra flera saker. Det är dock viktigt att dessa saker är hårt knutna till klassens ansvar. Att beräkna poäng på pokerhand är ett exempel på uppgift som inte har med kortleken att göra. Den uppgiften passar bättre till klassen pokerhand, pokerregler eller liknande. Saker man kan göra med en klass löses typiskt med medlemsfunktioner. När du är klar skall du kunna skapa en liten klass med en konstruktor, några medlemsfunktioner och några medlemsvariabler, samt kunna använda klassen från ett huvudprogram. För att få en bra struktur bör du använda en källkodsfil och en headerfil per klass, samt en källkodsfil för ditt huvudprogram. Läsanvisningar - Tommy Olsson - objektorientering i ett nötskal. - http://www.ida.liu.se/ tao/pub/prog/oop-nutshell.pdf - http://www.ida.liu.se/ tao/pub/lang/cpp/checklista-klassdesign.pdf - Klasser (class) - Medlemsvariabler (member variable) - Åtkomstskydd (public, private) - Medlemsfunktioner (member function, method) - Konstruktorer (constructor) - Headerfilen för den givna klassen Console - Slumpgenerering C (#include <cstdlib> // srand, rand; #include <ctime> // time) - Slumpgenerering C++ (#include <random> // std::random_device) - Viktiga begrepp du kan läsa om i t.ex. Code complete: - Abstraction, Information hiding, Encapsulation - Class responsibility, Coupling, Cohesion - Skillnad: Class, object, instance

Förberedande övning För att bekanta dig med klasser är det bra med lite förberedande övning. En lämplig övning är att göra om din lösning på lab 2, men nu skapa en klass för att representera ett komplext tal och vad man kan göra med det. En konstruktor och operationerna (medlemsfunktionerna) plus och minus kanske räcker för att du skall komma in i rätt tanke- och skrivsätt. Uppgift 1 - Pong Spelet Pong från 1972 var ett av de första riktigt framgångsrika datorspelen. Spelet går i ursprungsversion ut på att två spelare med var sin paddle styr en boll över en streckad linje som representerar ett nät. Du skall skapa en enklare variant för en spelare. Spelet i din version består av fyra väggar som formar ett rum, en boll och ett slagträ (eng. paddle ). Slagträt representeras av en linje framför nedersta väggen i rummet. Bollen placeras någonstans i rummet och rör sig med någon riktning och hastighet. Om bollen når en vägg eller slår emot slagträt så studsar den bort igen precis så som vi normalt förväntar oss. Spelaren skall kunna flytta slagträt i sidled åt vänster genom att trycka a, och i sidled åt höger genom att trycka d. Spelaren skall när som helst kunna avsluta spelet genom att trycka q. Om bollen når den nedre väggen är bollen ur spel och spelaren har förlorat. Målet är att hålla bollen i spel så länge som möjligt. Börja med att göra en objektorienterad analys och design. Implementera sedan ditt spel steg för steg. Det finns inga krav på att spelet skall vara vackert, häftigt eller roligt att spela. Kraven ligger på att koden skall vara välstrukturerad med väl separerade ansvarsområden (minst två egna klasser), samt lätt att läsa, förstå och ändra. I programmeringstermer skall du försöka uppnå high cohesion, low coupling och information hiding med din klassdesign (du når kanske inte hela vägen). Här kommer en lista med några steg på vägen. Tänk noga igenom vilken klass (eller huvudprogrammet) som skall ha ansvar för vad: 1. Ett grundprogram som ritar ut väggar och bollen på förutbestämd plats. 2. Lägg till att bollen rör sig i med förutbestämd fart och riktning. 3. Lägg till att bollen studsar mot väggar. 4. Lägg till slagträt på förutbestämd position. 5. Lägg till att slagträt kan flyttas i sidled. 6. Lägg till att bollen studsar även mot slagträt. 7. Vid start: Slumpa ut bollen inom ett fördefinerat område. 8. Vid start: Slumpa ut fart och riktning inom fördefinerade intervall. 9. Se till att programmet avslutar när det ska.

Du får så klart göra spelet häftigare än du behöver. Här kommer även en lista på möjliga utökningar: 1. Frivilligt: Ge väggarna olika studsegenskaper. 2. Frivilligt: Gör olika studs beroende på var bollen träffar slagträt och hur slagträt rör sig. 3. Frivilligt: Lägg till en andra spelare. 4. Frivilligt: Ersätt Console-klassen med en klass som nyttjar riktig grafik, t.ex. libsdl. 5. Frivilligt: Låt fantasin flöda... Figuren visar hur spelet skulle kunna se ut. Punkerna är tillagda i efterhand för att visa på hur bollen rört sig (punkterna är alltså inget du behöver programmera). +----------------------------------------------+ O o--------------------o +----------------------------------------------+ Filseparering Headerfiler har filändelsen.h och inkluderas från de källkodsfiler som behöver funktionaliteten. Headerfiler innehåller bara deklarationer som det är meningen att andra programmerare skall kunna använda. Allt annat göms (om möjligt) i motsvarande källkodsfil. Källkodsfilen innehåller definitioner av alla (medlems)funktioner och hjälpfunktioner. Headerfiler brukar ha en guard för att skydda mot dubbelinkludering. Denna nyttjar preprocessorinstruktioner. Du kan titta i de givna filerna för klassen Console hur det är gjort. En enkel guard brukar se ut som följer:

#ifndef MY_HEADER_H #define MY_HEADER_H // Alla deklarationer i filen my_header.h... #endif // MY_HEADER_H När du kompilerar ett program med flera filer måste du lista alla källkodsfiler som ingår på kommandoraden (men aldrig headerfiler!). I detta fall behöver du även programbiblioteket ncurses som inte är default (Console-klassen använder detta bibliotek). Kompileringskommandot kan till slut se ut så här (lägg till övriga bra flaggor själv): g++ pong.cc klassnamn1.cc klassnamn2.cc -lncurses Klassen Console Den givna klassen Console har ansvar för programmets in- och utdata (skärm/tangentbord). Deklarationer av de funktioner du kan använda hittar du i klassens public -del i headerfilen. Klassen ger möjlighet att placera tecken var som helst i terminalen. Övre vänstra hörnet har koordinaten (0, 0) och nedre högra hörnet har koordinaten (getw idth() 1, getheight() 1). Var nästa tecken placeras avgörs genom anrop till setp os(). Ett tecken skrivs sedan med put(). För att läsa tecken från tangentbordet används funktionen get(). Funktionen returner sant om ett tecken lästes, och själva tecknet ges tillbaka via referensparameter (utparameter). Om get() returnerar falskt betyder det att ingen tangent trycktes ned inom cirka 1/10 sekund. Detta tillåter en mycket rustik huvudloop i spelet : Console console; char command; bool game_over = false; while (! game_over ) if ( console.get(command) ) // process user input else // move ball Timingen kommer inte vara perfekt med detta och det finns risk att bollen antingen stannar eller flyttar sig fortare medan användaren trycker på knappar. Detta är inget vi bryr oss om men du får

naturligtvis försöka få till bra timing. Objektorientering i liten skala 2012-10-24