Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Relevanta dokument
Föreläsning 2. Föreläsningen kommer ta upp valda delar av detta

Programmeringsteknik I

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Objektorienterad Programmering (TDDC77)

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Föreläsning 5-6 Innehåll

SMD 134 Objektorienterad programmering

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

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

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

Parameteröverföring. Exempel. Exempel. Metodkropp

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 )

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Sammanfattning och repetition utgående från typiska tentamensuppgifter

2D1339 Programkonstruktion för F1, ht 2004

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

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

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

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

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

Anteckningar 1: Grundläggande saker

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

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

Övning från förra gången: readword

F4. programmeringsteknik och Matlab

Sammanfattning och repetition utgående från typiska tentamensuppgifter

2D1342 Programkonstruktion för F1, ht 2006

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

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.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Tentamen OOP

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Del A (obligatorisk för alla)

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Objektorienterad programmering i Java

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

Typkonvertering. Java versus C

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

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

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

JAVAUTVECKLING LEKTION 4

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

TDIU01 - Programmering i C++, grundkurs

Programmeringsteknik I. Föreläsning 3: Klasser och arrayer

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Lösningsförslag: Instuderingsfrågor, del A

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

OOP Objekt-orienterad programmering

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

TDDC77 Objektorienterad Programmering

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 OOP

JAVA Mer om klasser och objektorientering

Iteration while-satsen

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

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

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

Föreläsning 3. Iteration while-satsen

Föreläsning 2, vecka 8: Repetition

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Tentamen ID1004 Objektorienterad programmering December 15, 2012

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

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

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Tentamen i Programmeringsteknik I

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

TDDC77 Objektorienterad Programmering

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

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.

Del A (obligatorisk för alla)

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

OOP Objekt-orienterad programmering

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

Transkript:

(22 januari 2016 F2.1 ) Föreläsning 2 Täcker material från lektion 1, 2, 3 och 4: Datatyper Aritmetik Tecken och strängar Klasser, Objekt Metoder Villkor, villkorssatser och iterationer main-metoden Kodstandard och kommentarer

(22 januari 2016 F2.2 ) Datatyper Primitiva typer: int, long, float, double, char, boolean,... Objekttyper: String, World, Turtle För de primitiva typerna gäller att de är inbyggda i språket (går inte att göra egna), de har väldefinierade värdemängder, de har ett antal operatorer som verkar på dem: (+, <, &&,... ) och det går att typkonvertera (implicit eller explicit) mellan dem (ej boolean). Alla uttryck (utom anrop av void-metoder) har en typ! Frågor

(22 januari 2016 F2.3 ) Klasser och objekttyper Klassen String: representerar textsträngar. Inbyggd i själva språket Klasserna World och Turtle: Definieras i programvara som ni hämtade första lektionen. Importeras automatiskt pga inställningarna som ni gjort i DrJava. Ni kommer att definiera många egna objekttyper (klasser) under kursens gång.

(22 januari 2016 F2.4 ) Klassen Math Klassen Math används för att samla ihop matematiska funktioner och konstanter man gör aldrig new Math(). Funktionerna anropas via klassnamnet. Exempel: Math.exp(3.5) Math.pow(sin(2.5),2) Math.PI + Math.sinh(x/2) Se Javadoumentationen

(22 januari 2016 F2.5 ) Klasserna World och Turtle Klasserna World och Turtle gör man vanligen objekt av. Objekt skapas med operatorn new. Exempel: World w = new World(400,400); Turtle t1 = new Turtle(w); Turtle t2 = new Turtle(w); Variablerna w, t1 och t2 håller reda på de skapade objekten ( referenser", pekare ).

(22 januari 2016 F2.6 ) Metoder Vi anropar metoder för att få reda på egenskaper hos objekten. Exempel: int dx = t1.getxpos() - t2.getxpos(); Vi anropar också metoder för att beordra objekten att utföra saker. Exempel: t1.enablepath(); Observera skillnaden mot när vi anropar metoder (funktioner) i klassen Math!

(22 januari 2016 F2.7 ) Parametrar Ibland vill man skicka information till metoden. För detta används parametrar. Exempel: t1.turn(45); t1.move(100); t1.turnto(0, 0); t2.setsize(2.0); t2.setcolor(255, 0, 0); Av anropen framgår dels vilket objekt som skall påverkas och dels eventuell information som skickas till metoden de aktuella parametrarna. Som aktuell parameter kan ett godtyckligt uttryck av rätt typ användas. Ex: t1.move((int)(math.random()*100));

(22 januari 2016 F2.8 ) Summering av metoder i klassen Turtle Hittills har vi sett: move(int n) turn(int n) turnto(int x, int y) setsize(double size) setcolor(int red, int green, int blue) disablepath() enablepath() Gå n steg framåt Ändra riktning n grader Sätt rikningen mot punkten (x,y) Sätt storlek Sätt färg Sluta rita spår Börja rita spår Frågor

(22 januari 2016 F2.9 ) Skriva egna metoder Exempel: /** * Draws a triangle with specified side length */ public void drawtriangle(int side) { this.move(side); this.turn(120); this.move(side); this.turn(120); this.move(side); DrJava Metoder har en synlighet i detta fall public en returtyp i detta fall void som anger att inget värde returneras 0 eller flera formella parametrar i detta fall 1 av typ int

(22 januari 2016 F2.10 ) Metoder Metoder måste alltid placeras i en klass I DrJava har man den klass som man vill redigera definitionsrutan En metod kan innehålla lokala variabler. Existerar bara i metoden och glöms bort när man lämnar metoden. Man måste alltid kompilera koden innan den kan användas

(22 januari 2016 F2.11 ) Strängar samt utmatning i terminalfönster Generellt sätt att få se resultat från ett program. Exempel: String namn="tom"; System.out.print("Välkommen "); System.out.print(namn); System.out.print(! ); System.out.println(); Kortare: String namn="tom"; System.out.println("Välkommen " + namn +! ); Observera: println får en sträng som bildats genom konkatenering Frågor

(22 januari 2016 F2.12 ) Algoritmer En algoritm är en följd av väldefinierade instruktioner för hur en uppgift skall lösas. Vilka är de väldefinierade instruktionerna? Beror på! I Java är det uttryck (konstanter, variabler, metodanrop kombinerade med operatorer. Ett uttryck blir en sats när det följs av ett semikolon (undantag: interaktionrutan i DrJava) Exempel: metoden drawtriangle ovan.

(22 januari 2016 F2.13 ) Algoritmformuleringar Det finns följande generella sätt att formulera algoritmer med hjälp av de tillgängliga instruktionerna: sekvens utför en följd av instruktioner i tur och ordning (ex: satserna i drawtriangle) selektion välj mellan olika alternativa sekvenser iteration upprepa en sekvens ett antal gånger abstraktion sätt ihop en algoritm enl ovanstående punkter och ge hopsättningen ett namn (ex: drawtriangle)

(22 januari 2016 F2.14 ) Selektion: if-satsen Utför satser om ett visst villkor är sant if ( villkor ) { satser Exempel: Beräkna max av två tal max = x; if (y > x) { max = y;

(22 januari 2016 F2.15 ) Selektion: if-satsen Variant: Utför olika satser beroende på om ett visst villkor är sant eller ej. if ( villkor ) { satser else { satser Exempel: if (y > x) { max = y; else { max = x;

(22 januari 2016 F2.16 ) Selektion: if-satsen Båda exemplen ovan förutsätter att variabeln max liksom x och y är deklarerade i förväg. Varför är det för fel på nedanstående två exempel? if (y > x) { double max = y; else { double max = x; if (y > x) { double max = y; else { max = x;

(22 januari 2016 F2.17 ) if-satsen: Exempel Satserna i grenarna är godtyckliga satser t ex if-satser Exempel: Beräkna det minsta värden x, y och z if (x < y) { if (x < z) { min = z; else { min = x; else { if (y < z) { min = y; else { min = z; Fast enklare: min = x; if (y<min) { min = y; if (z<min) { min = z; eller min = Math.min(x, Math.min(y, z));

(22 januari 2016 F2.18 ) Selektion: if-satsen En metod som tar två heltalsparametrar och som returnerar -1 om den första är minst, 0 om de är lika och 1 om den första är störst: public int compare(int x, int y) { int result; if (x < y) { result = -1; else if (x == y) { result = 0; else { result = 1; return result; public int compare(int x, int y) { if (x < y) { return -1; else if (x == y) { return 0; else { return 1; När en return-sats utförs lämnas metoden.

(22 januari 2016 F2.19 ) if-satsen: Ytterligare en variant på compare-metoden public int compare(int x, int y) { if (x < y) { return -1; else if (x == y) { return 0; return 1; Övning: Skriv en metod double maxroot(double a, double b) som beräknar och returnerar den största av rötterna till ekvationen x 2 + ax + b = 0. Metoden ska ge en felutskrift om komplexa rötter. (Fråga: Varför inte båda rötterna?)

(22 januari 2016 F2.20 ) Iterationer I java finns det tre konstruktioner för upprepning av kod: while, for och do. Här tar vi upp while-satsen while ( villkor ) { satser Exempel: Beräkna x upphöjt till 10 int i = 1; double p = 1; while (i <= 10) { p = p*x; i++;

(22 januari 2016 F2.21 ) main-metoden Antag att jag vill skapa en värld med några paddor och låta de gå omkring på något sätt dvs lite new, några move, turn,... Var skall jag göra detta? Två möjligheter: i interaktionsrutan eller i en metod Interaktionsrutan passar bra för att skriva enskilda uttryck men besvärligare när det blir många uttryck och satser. Dessutom: finns bara i DrJava. Alltså: i en metod!

(22 januari 2016 F2.22 ) main-metoden Var skall metoden placeras? Måste vara i en klass! Klassen Turtle? Objekt ur klassen Turtle representerar en padda. Onaturligt med en vanlig objektmetod skapar båda världar och paddor. Alternativen är då att antingen göra en klassmetod eller skriva en ny klass t ex kallad TestTurtles

main-metoden i klassen Turtle En klassmetod hör till klassen som helhet, inte till enskilda objekt. Anges som static i metodhuvudet. Exempel: public class Turtle {... public static void main() { World w = new World(500,500); Turtle t1 = new Turtle(w); Turtle t2 = new Turtle(w); int step = 30; int i = 1; while (i<20) { t1.move(step); t1.turn(-15); t2.move(step); t2.turn(15); i++; Körs med kommandot Turtle.main() i interaktionsrutan DrJava (22 januari 2016 F2.23 )

(22 januari 2016 F2.24 ) main-metod i klassen Turtle Hur kör man ett program om man inte har en interaktionsruta? Det finns en definierad startmetod i Java. Den heter main som i föregående exempel men den har en array-parameter. Metodhuvudet ser typiskt ut så här: public static void main(string[] args) Man kan fortfarande köra den från interaktionsrutan men det vanliga sättet är att använda Run-knappen. Observera att metoden måste deklareras exakt som ovan för (parametern args får heta något annat) för att det skall fungera med Run-knappen.

(22 januari 2016 F2.25 ) main-metod i annan klass public class TestTurtles { public static void main(string[] args) { World w = new World(500,500); Turtle t1 = new Turtle(w); Turtle t2 = new Turtle(w); int step = 30; int i = 1; while (i < 20) { t1.move(step); t1.turn(-15); t2.move(step); t2.turn(15); i++; Klassen innehåller en enda metod main-metoden Det är den aktuella klassens main-metod som körs vi Run DrJava

(22 januari 2016 F2.26 ) Tidsfördröjning Om man vill se vad som händer varje steg kan man lägga in en fördröjning i loopen: public static void main(string[] args) throws InterruptedException { World w = new World(500,500); Turtle t1 = new Turtle(w); Turtle t2 = new Turtle(w); int step = 30; int naptime = 500; int i = 1; while (i < 20) { t1.move(step); t1.turn(-15); t2.move(step); t2.turn(15); i++; Thread.sleep(napTime); DrJava

(22 januari 2016 F2.27 ) Kodstandard: Namngivning Namn på metoder, variabler, klasser mm skall vara vettiga! Undvik nationella tecken i namn! Metoder och variabler skall ha liten begynnelsebokstav! Klassnamn skall ha stor begynnelsebokstav! Använd stor bokstav (eller understrykningstecken) för att öka läsbarheten i långa namn (Ex: InterruptedException) Namngivna konstanter skrivs med stora bokstäver (Ex: Math.PI)

(22 januari 2016 F2.28 ) Kodstandard: Layout Indentera raderna systematiskt och enhetligt. Tips: Select All följt av tab-tecken fixar hela filen! Skriv alltid ny sats på ny rad! Skriv inte längre rader än syns i ett normalt fönster. Max 80 tecken är ett traditionellt maxvärde. Bryt på vettiga ställen! Kommatecken skall alltid följas av blanktecken! Omge alltid operatorer med låg prioritet men blanktecken

(22 januari 2016 F2.29 ) Kodstandard: layout Placering av klammertecknen enligt exemplen: Antingen if (x < y) {... else if (y == y) {... else {... eller if (x < y) {... else if (y == y) {... else {... Varför kodstandard? Läsbarhet!

Kodkommentarer är viktigt men Kommentera inte det som är uppenbart från koden! Förutsätt att den som läser koden kan Java. Se till att kommentarerna inte skymmer koden! Felaktiga kommentarer är värre än inga kommentarer! Bra namngivning, struktur och layout gör att koden behöver ett minimum av kommentarer! Försök inte förklara dålig kod med kommentarer skriv om koden! Det finns en särskild typ av kommentarer s k javadoc-kommentarer som används för att automatiskt generera dokumentationssidor. Se kommentarerna i klassen Turtle för exempel! DrJava Turtle-dokumentationen (22 januari 2016 F2.30 )