Övningar Dag 2 En första klass

Relevanta dokument
Introduktion till arv

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

OOP Objekt-orienterad programmering

Programmeringsteknik med C och Matlab

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

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

C++ Objektorientering - Klasser. Eric Elfving

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Tentamen OOP

OOP Objekt-orienterad programmering

Att använda pekare i. C-kod

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

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

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Malmö högskola 2007/2008 Teknik och samhälle

Objektorienterad programmering i Java

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

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

Objektsamlingar i Java

TUTORIAL: KLASSER & OBJEKT

TDDC76 - Programmering och Datastrukturer

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

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

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

Parameteröverföring. Exempel. Exempel. Metodkropp

Objektorienterad programmering D2

1 Klasser och objektorientering Vad är objektorientering?

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

TDDC76 - Programmering och Datastrukturer

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

TDIU01 Programmering i C++

1 Funktioner och procedurell abstraktion

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Programmering A. Johan Eliasson

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

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

Tentamen. Grundläggande programmering i Java A 5p, DTAA

JAVA Mer om klasser och objektorientering

Klasser och objekt i C#

Föreläsning 6: Introduktion av listor

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

TDIU01 - Programmering i C++, grundkurs

Metoder (funktioner) Murach s: kap Winstrand Development

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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 bänken.

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.

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Skizz till en enkel databas

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Föreläsning 1 & 2 INTRODUKTION

Dynamisk bindning och polymorfism

Objektorienterad programmering

Objektorienterad programmering

Objektorienterad programmering Föreläsning 5

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Föreläsning 4: Poster

trafiksimulering Intro OU5 trafiksimulering

För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print.

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

Malmö högskola 2008/2009 CTS

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

TDDD78 Objektorientering: Lagring och livstid

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Objektorienterad programmering

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

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

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Objektorientering: Lagring, räckvidd och livstid

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

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

Funktionens deklaration

Inledande programmering med C# (1DV402) Tärningarna ska kastas

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

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

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

Tentamen i Programmering grundkurs och Programmering C

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Föreläsning 13 Innehåll

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

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

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Sätt att skriva ut binärträd

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

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

Chapter 3: Using Classes and Objects

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

TDIU01 - Programmering i C++, grundkurs

Lab5 för prgmedcl04 Grafik

Objektorientering: Lagring och livstid

19. Skriva ut statistik

Transkript:

Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt bygga en klass. Vi kan därmed se likheter och skillnader. Det intressanta blir sen att se vilka fördelar vi kan se i detta sätt att bygga datatyper. Enkelt kan vi se en klass som en sammansatt datatyp där vi har kopplat inte bara variabler samman utan även funktioner. Övning 1 Skapa ett projekt som heter FirstClass. Klipp in koden som finns i triangles.cpp. Denna fil innehåller en struct som representerar en triangel med en bas och en höjd. Separata funktioner används för att skapa en triangel och för att beräkna dess area. Provkör programmet och studera koden så att du förstår vad den gör. Övning 2 Ovanför main-funktionen, skriv in följande stubbe. class Triangle public: double base; double height; ; Detta är grunden till en klass. I main-funktionen innan return skriv in följande. cout << "Tringle as a class" << endl; Triangle tobj; tobj.base = 20.0; tobj.height = 5.0; cout << "Arean är " << tobj.base * tobj.height / 2.0 << endl; Kompilera och se till att exemplet fungerar. Notera likheten med struct. Begrepp: När vi deklarerar variablen tobj allokeras (reserveras) samtidigt minne för de variabler som finns i klassen. Detta kallas att ett objekt instanseras. Vi har skapat ett objekt av klassen Triangle. Detta objekt lagras i variabeln tobj.

Kurs i C++ Sid 2 (5) Övning 3 Vi går direkt vidare och kopplar en funktion till vår klass. Sist i klassen lägg till följande. double getarea() return base * height / 2.0; I main-funktionen, ändra din utskrift till cout << "Arean är " << tobj.getarea() << endl; Kompilera och se att exemplet fungerar. Vad har vi just gjort? Först kan vi notera att funktionen getarea() kan läsa base och height som ligger i klassen utan att vi behöver ha dessa eller variabeln tobj som parameter. Vi kan också se att vi kan anropa funktionen getarea() direkt på variabeln tobj precis som vi tidigare gjorde med variablerna base och height. Vi har knutit en funktion till objekt av klassen Triagle. Begrepp: En funktion som är knuten till ett objekt, kallas för metod. Variablerna i objektet kallas attribut. De metoder som deklareras i klassen kan anropas på objekt. Övning 4 När objektet skapas, t.ex. när vi skapar en variabel av klassen, så vill vi nästan alltid att variablerna i objektet också får startvärden. Detta är en nackdel med struct. Om vi glömmer att sätta startvärden på variablerna så kan svårhittade fel uppstå. Detta har man åtgärdat i och med införandet av objekt. När ett objekt skapas, så anropas alltid en speciell metod (funktion knuten till objektet) som kallas konstruktor. Konstruktorn kan även ha parametrar. Det gör att vi i denna metod kan sätta startvärden på våra attribut (variablerna i objektet). Vi ska skapa en konstruktor. Före getarea() skriv in följande. Triangle() base = 10.0; height = 5.0; I main-funktionen, ta bort raderna där du sätter värden på tobj.base och tobj.height. Kompilera och se att du fortfarande får en area som är 25,0.

Kurs i C++ Sid 3 (5) Några saker kan vi alltså notera om konstruktorn. 1) Konstruktorn har samma namn som klassen. 2) Konstruktorn anropas automatiskt när objektet skapas (när vi deklarerar variabeln tobj). 3) Konstruktorn returnerar inget (inte ens void). Övning 5 Alla trianglar bör knappast vara 10x5 stora. Vi vill kunna styra detta när triangeln skapas. Det innebär också att konstruktorn behöver parametrar. Detta går utmärkt. Lägg till parametrarna b och h i parameterlistan till konstruktorn. Triangle(double b, double h) base = b; height = h; Det här gör också att konstruktorn måste få argument när den anropas, alltså när objektet skapas. När skapas det? Jo, när vi skapar variabeln tobj. Alltså ändra den raden till följande. Triangle tobj(10.0, 5.0); Testa att ändra argumenten till konstruktorn och notera att arean ändras. Konstruktorer kan ha parametrar. Argument måste då anges när objektet skapas. Övning 6 En stor nackdel med struct är att variablerna i den kan ändras av vem som helst till vad som helst. En fördel med klasser är att vi kan styra åtkomsten, alltså vilka funktionen som kan ändra våra variabler i datatypen. Ordet public i klassen vi har skrivit indikerar att de attribut (variabler) och metoder (funktioner) som finns listade efteråt är publika. Det innebär att alla funktioner i programmet kan komma åt och använda dessa. I klassen, ändra public till private och testa att kompilera. Visst får du flera fel? Kompilatorn kommer bl.a. att hävda att konstruktorn Trinagle() är privat och därför inte kan anropas.

Kurs i C++ Sid 4 (5) Låt private stå kvar, men före Triangle() lägg till public:, så att det ser ut så här: class Triangle private: double base; double height; public: Triangle(double b, double h) base = b; height = h; double getarea() return base * height / 2.0; ; Se till att exemplet kompilerar nu. Voilà! Vi har en klass och skapar objekt!! Vi reglerar åtkomst med public och private. Privata attribut och metoder kan enbart kommas åt av metoder på det egna objektet eller objekt av samma klass. Övning 7 Skapa en metod, void setbase(double newb), som gör att vi kan ändra värdet attributet base. Gör samma sak för height. Du kan även skapa funktioner för att få deras värden. Hur? Övning 9 Skapa ett nytt projekt som heter Calendar. Kopiera koden från timestamp.cpp och skriv om koden så att det blir en klass som heter Timestamp. Klassen bör ha en konstruktor som sätter timmar och minuter, samt metoderna void tick() och void step(int h, int m), int getminutes() och int gethours(). Använd gärna step() både i konstruktorn och i tick.

Kurs i C++ Sid 5 (5) Övning 10 Utgå från filen car.cpp och skapa ett projekt. Skriv sedan om koden så att du använder en klass istället. Utöka car-klassen så att den lagrar antalet hästkrafter också, samt hur många hjul som drivs (dvs tvåhjulsdrift kontra fyrhjulsdrift). Lägg till lämpliga metoder för att ändra och hämta deras värden. Ändra deklarationen av klassen så att det inte finns något attribut speed, lägg istället till två nya attribut time och distance, som representerar mätvärden som kan användas för att beräkna speed. Vilka funktioners innehåll måste ändras för att det skall fungera? Använd gärna en privat hjälpfunktion här. Måste något ändras i main-programmet?