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

Relevanta dokument
Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

Föreläsning 5-6 Innehåll

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 3-4 Innehåll

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.

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

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

Föreläsning REPETITION & EXTENTA

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

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

Typkonvertering. Java versus C

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

Objektorienterad Programmering (TDDC77)

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

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

Föreläsning 1-2 innehåll

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 1 & 2 INTRODUKTION

Tentamen OOP

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

(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

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

SMD 134 Objektorienterad programmering

Föreläsning 9-10 Innehåll

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. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

1 Egna klasser. 1.1 En punkt-klass

OOP Objekt-orienterad programmering

Föreläsning 1 & 2 INTRODUKTION

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

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

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

Föreläsning 13 Innehåll

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

F4. programmeringsteknik och Matlab

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

Föreläsning 7-8 Innehåll

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

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Klassdeklaration. Metoddeklaration. Parameteröverföring

OOP Objekt-orienterad programmering

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

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Programmering A. Johan Eliasson

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

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

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

TENTAMEN OOP

TDDC77 Objektorienterad Programmering

Repetition av viktiga begrepp inom objektorienterad programmering

Parameteröverföring. Exempel. Exempel. Metodkropp

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

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.

Instuderingsfrågor, del D

1 Repetition av viktiga begrepp inom objektorienterad programmering

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

TDIU01 - Programmering i C++, grundkurs

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

Del A (obligatorisk för alla)

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

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

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

Föreläsning 2, vecka 8: Repetition

OOP Objekt-orienterad programmering

PROGRAMMERING-Java Omtentamina

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

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

Del A (obligatorisk för alla)

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

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

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen , Introduktion till Java, dtaa98, dtea53

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

Objektorienterad programmering i Java

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

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

OOP Objekt-orienterad programmering

2. Betrakta följande program, där fyra heltal läses från tangentbordet och några (ointressanta) beräkningar görs:

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

Hur ser ett Java-program ut?

Classes och Interfaces, Objects och References, Initialization

Malmö högskola 2008/2009 CTS

"if"-satsen. Inledande programmering med C# (1DV402)

Saker du ska kunna Föreläsning 13 & 14

Algoritmexempel. Föreläsning 5-7 Innehåll. Summering Mönster. Summering Exempel: alternerande harmoniska serien

TDDC77 Objektorienterad Programmering

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Transkript:

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 värdet av logiska uttryck: int n = scan.nextint(); boolean b1 = true; boolean b2 = false; boolean b3 = n < 5; Logiska uttryck används bl.a. som villkor i if- och while-satser. if (x < 5) {... while (true) {... George Boole (1815 1864)

Mer om logiska uttryck Ett logiskt uttryck kan vara en relation där man jämför värdet av två uttryck. Exempel: x < 5 Relationsoperatorer: < <= == >= >!= == lika med (jämför skillnaden mellan = och ==)!= skilt från

Logiska operatorer Logiska uttryck kan kopplas samman med operatorerna:! (icke / not) && (och / and) (eller / or) Exempel: if (x >= 0 && x <= 10) { System.out.println( x i intervallet [0..10] ); Ett och-uttryck är true om alla deluttryck har värdet true. Ett eller-uttryck är true om minst ett av deluttrycken har värdet true.

Ett mycket tråkigt gissningsspel Scanner scan = new Scanner(System.in); boolean correct = false; while (! correct) { int guess = scan.nextint(); if (guess == 42) { correct = true; System.out.println( Rätt! );

Ett mycket tråkigt gissningsspel, lite annorlunda Scanner scan = new Scanner(System.in); boolean correct = false; while (! correct) { int guess = scan.nextint(); correct = (guess == 42); System.out.println( Rätt! );

Övning på logiska operatorer Vilka värden tilldelas på respektive rad? boolean t1 =!true; boolean t2 =!t1; boolean t3 =!false; boolean t4 =!t3; boolean t5 = (t2 == t4); boolean t6 = t5 && t4; boolean t7 = t4 t3;

Augustus de Morgan de Morgans lagar (uttryckta i Java):!(a b) ==!a &&!b!(a && b) ==!a!b Se även Per Holm, Objektorienterad programmering och Java, s. 103 104.

Primitiva datatyper byte heltal (-128...+127) short heltal (-32768...+32767) int heltal (-2147483648...+2147483647) long heltal (ca -9*10 18... +9*10 18 ) float reella tal (tal med decimaldel) double reella tal (tal med decimaldel) boolean logiska värden (true eller false) char tecken (t.ex. 'a' eller 'A')

Tilldelningssatser och datatyper Variabeln och det nya värdet måste ha samma (eller kompatibel) typ. int i = 200; double r = 12.75; i = r + 2; // <--- fel typ, kompileringsfel En double-variabel kan emellertid ges ett heltalsvärde (konverteras till double): double r = 200; // heltal är reella tal Om tilldelningen inte kan göras utan information går förlorad måste man konvertera explicit: double r = 12.7; int a = (int) r; // talet avkortas till 12 int b = (int) Math.round(r); // avrundning till 13 round ger ett resultat av typen long som måste konverteras till typen int.

Heltalsdivision och rest a / b ger ett heltal som resultat om både a och b är heltal. Ex: 17 / 3 är lika med 5 (heltalsdivision) 17 % 3 är lika med 2 (rest vid heltalsdivision moduloräkning) 3 personer ska rättvist dela på 17 kakor. Alla får 5 kakor var och 2 kakor blir över.

Heltalsdivision: exempel Vad skrivs ut? int a = 5; int b = 6; double c = 1.2; double result = a/b + c; System.out.println( Resultatet är + result);

Rest vid heltalsdivision Uttryck Resultat Varför? 7 % 4 17 % 5 68 % 10 4 % 2 5 % 6

Udda eller jämnt? Hur kan man avgöra om ett heltal, x, är udda eller jämt? Scanner scan = new Scanner(System.in); int x = scan.nextint(); if (x % 2 == 0) { System.out.println("jämnt ); else { System.out.println("udda");

Åter till main-metoden public class Example { public static void main(string[] args) { System.out.println( Hej allesammans! ); Programmet är en klass Main-metoden är en metod som andra (men har en speciell uppgift) Main-metodens parameter är ett antal strängar (text). Sådana återkommer vi till senare

Exempel: klass med main-metod Ett Java-program innehåller en eller flera klasser. En av klasserna innehåller en main-metod. Exempel på ett program som använder klasserna SimpleWindow och Square: public class ClickAndDraw { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600, 600, A square"); w.waitformouseclick(); int x = w.getmousex(); int y = w.getmousey(); Square sq = new Square(x, y, 40); sq.move(10, 30); sq.draw(w);

Metoder: anropet och implementationen är två saker Java-kod står var? betyder sq.move(10, 30); bland Java-satser, exempelvis ett huvudprogram Metodanrop: När satsen körs anropas metoden move (på objektet sq) public void move(int dx, int dy) { x = x + dx; y = y + dy; I en klass Implementation av metoden: Berättar att klassen har en metod som heter move. Metoden tar två heltal som parametrar, och innehåller två satser.

Implementation av klasser: repetition från föreläsning 4

Implementera klasser övning Lägg till följande metod i klassen Square: /** Returnerar true om kvadraten har större area än other, i annat fall returneras false. */ public boolean biggerthan(square other) { çfyll i

Metoder, objekt och static En metod hör alltid hemma i en klass (t.ex. Square). Oftast anropas metoden på ett visst objekt (av rätt klass): Square sq = new Square(100, 130, 50); sq.move(5, 5); Det måste alltså finnas ett objekt att anropa metoden på. Ibland är detta opraktiskt. Vissa metoder har inget med objekt (och deras attribut) att göra. Exempel: metoderna i klassen Math.

Klassen Math long round(double x); typ abs(typ x); double sin(double x); double exp(double x); double pow(double x, double y); double log(double x); double sqrt(double x);... // x avrundat till // närmaste long-tal // absolutvärdet av x // "typ" kan vara en // godtycklig numerisk typ // sinus av x. Finns // även cos, tan... // e upphöjt till x // x upphöjt till y // ln(x) // kvadratroten ur x Konstanterna Math.PI och Math.E (e=2.718...) Metoderna är statiska. Anropas med t ex Math.abs(x)

Statiska attribut och metoder Statiska attribut finns bara i en upplaga för varje klass. Man kommer åt en statisk storhet med Klassnamn.namn, inte med referens.namn. Man skapar alltså inget objekt, utan använder klassen direkt. Exempel: double x = Math.pow(10, 4); double area = Math.PI * 20 * 20; Inuti klassen Math ser det ut så här: public class Math { public static final double PI = 3.14159265358979323846; public static double sin(double x) { // beräkning av sinus för x...

Åter till main-metoden public class Example { public static void main(string[] args) { System.out.println( Hej allesammans! ); Programmet är en klass Main-metoden är en metod som andra (men har en speciell uppgift) Main-metoden är statisk (precis som metoderna i Math) Main-metodens parameter är ett antal strängar (text)

Något om kodkonventioner Språkets syntax måste följas för att man ska kunna kompilera ett program. Men det är också viktigt att man skriver program som är lättlästa för oss människor (med vettiga namn, indragningar etc.). Man skriver t ex klassnamn med stor begynnelsebokstav: class Square class BankAccount Metod- och variabelnamn börjar med liten bokstav: double dist; int accntnbr; Konstantnamn skrivs med stora bokstäver: Math.PI

Specifikation av klassen Point /** Skapar en punkt med koordinaterna x, y. */ Point(int x, int y); /** Tar reda på x-koordinaten. */ int getx(); /** Tar reda på y-koordinaten. */ int gety(); /** Flyttar punkten avståndet dx i x-led och dy i y-led. */ void move(int dx, int dy); /** Beräknar avståndet mellan denna punkt och punkten p. */ double distanceto(point p); /** Returnerar en teckensträng som representerar punkten. Strängen innehåller koordinaterna. Ex: 150 200 */ String tostring();

Implementation av klassen Point - #1 public class Point { private int x; // x-koordinaten private int y; // y-koordinaten /** Skapar en punkt med koordinaterna x och y. */ public Point(int x, int y) { this.x = x; this.y = y; /** Tar reda på x-koordinaten. */ public int getx() { return x; /** Tar reda på y-koordinaten. */ public int gety() { return y;

Implementation av klassen Point - #2 /** Flyttar punkten avståndet dx i x-led och dy i y-led. */ public void move(int dx, int dy) { x = x + dx; y = y + dy; /** Beräknar avståndet mellan denna punkt och punkten p. */ public double distanceto(point p) { int xdist = x p.x; int ydist = y p.y; return Math.sqrt(xDist * xdist + ydist * ydist); /** Returnerar en teckensträng som representerar punkten. Strängen innehåller koordinaterna. Ex: 150 200 */ public String tostring(){ return x + + y;

Lokal variabel xdist och ydist i metoden distanceto är exempel på lokala variabler. En variabel är bara tillgänglig i det block {... där den är deklarerad. Variabeln försvinner då satserna i blocket exekverat färdigt. Variablerna xdist och ydist är alltså bara tillgängliga inuti metoden distanceto, under den korta tid den exekveras.

Hur komma åt den andra punktens attribut? Koordinaterna för det objekt operationen utförs på når vi som vanligt via attributen x och y. Det andra objektets attribut kan användas (p.x och p.y). Detta beror på att attributen är privata för klassen, inte för ett specifikt objekt: int xdist = x - p.x; int ydist = y - p.y; Vi kan naturligtvis också använda metoderna i Point: int xdist = x - p.getx(); int ydist = y - p.gety();

Objekt som parameter public class ComputeDistance { public static void main(string[] args) { Point p1 = new Point(50, 20); Point p2 = new Point(25, 35); double dist = p1.distanceto(p2); System.out.println(dist); x y 50 20 p1 p2 dist 29.154... x y 25 35

Parametrar och lokala variabler Vid varje anrop av en metod reserveras plats i minnet för metodens parametrar och lokala variabler. Detta minnesutrymme kallas för aktiveringspost. När man lämnar metoden stryks aktiveringsposten. public double distanceto(point p) { int xdist = x p.x; int ydist = y p.y; return Math.sqrt(xDist * xdist + ydist * ydist); Parameter Lokal variabel p xdist x y 25 35 Lokal variabel ydist

Objekt som parameter, fortsättning public double distanceto(point p) { int xdist = x - p.x; int ydist = y - p.y; return Math.sqrt(xDist*xDist + ydist*ydist); "Vårt" objekt som operationen utförs på: this x y 50 20 Objektet p p xdist 25 x y 25 35 ydist -15

Objekt som returneras - övning Lägg till en metod i klassen Point som returnerar mittpunkten mellan punkten och punkten p. /** Returnerar mittpunkten mellan denna punkt och punkten p. */ public Point midpoint(point p) { Fyll i

Objekt som returneras Exempel på användning av midpoint: Point p1 = new Point(100, 100); Point p2 = new Point(300, 50); Point m = p1.midpoint(p2); System.out.println( Mittpunkten: " + m); x y 100 100 p1 p2 m x y 300 50 x y 200 75

Referens: en typ bland andra Typ Deklarationer (exempel) Uttryck (exempel) int int a; 59 a + 3 scan.nextint() boolean boolean b; a > 5 x == 100 true false scan.hasnextint() Referens Scanner scan; Square sq; Point p1, p2; new Square(100, 100, 30) null this p1.midpoint(p2)

Referenser och objekt Square sq1 = new Square(100, 100, 50); Square sq2 = new Square(200, 200, 70); System.out.println(sq2.getX()); sq2 = sq1; System.out.println(sq2.getX()); sq1.move(30, 30); System.out.println(sq2.getX()); Vad skrivs ut?

Övning skriva metoder: Fibonacci Fibonaccis talserie börjar så här: 0, 1, 1, 2, 3, 5, 8, 13, 21 Matematiskt beskrivs Fibonacci-serien som: F n = F n-1 + F n-2 (n > 1) F 0 = 0, F 1 = 1 Uppgift: Skriv en metod public static void fib(int n) som skriver ut de n+1 första Fibonacci-talen. (dvs. F 0 F n ) Anta att n > 1.

Övning Fibonacci igen: Ändra metoden i föregående uppgift så att den, istället för att skriva ut talserien, returnerar the n:te fibonaccitalet. Alltså ett anrop som fib(4) skulle returnera värdet 3 (enligt definitionen: F n = F n-1 + F n-2, där F 0 = 0 och F 1 = 1 )

Övning: skriv ut de två största talen i serien import java.util.scanner; public class TwoMax { public static void main(string[] args) { Scanner scan = new Scanner(System.in); int max = Integer.MIN_VALUE; while (scan.hasnextint()) { int value = scan.nextint(); if (value > max) { max = value; System.out.println( Störst: " + max); System.out.println( Näst störst: );