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



Relevanta dokument
Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

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

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

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Funktioner. Programmering. Egendefinierade funktioner i Java. En Java-funktions anatomi. hh.se/db2004. Statiska metoder. Funktioner. resultatvärde.

Omdirigering. Omdirigering

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Lösningsförslag övning 2.

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

OOP Objekt-orienterad programmering

Input. Programmering. Andra källor

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

Typkonvertering. Java versus C

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

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

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

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

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

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

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

Enkla variabler kontra referensvariabel

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Instuderingsfrågor, del D

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

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

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

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

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

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

Föreläsning 3-4 Innehåll

Föreläsning 8: Exempel och problemlösning

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

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.

JAVAUTVECKLING LEKTION 11

OOP Objekt-orienterad programmering

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

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

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

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

TDDD78 Viktiga begrepp, del 2

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

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

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 5-6 Innehåll

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

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

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

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

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

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

TENTAMEN OOP

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

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

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

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Tentamen OOP

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Del A (obligatorisk för alla)

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

Tentamen i Objektorienterad programmering

(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

Objektorienterad Programmering (TDDC77)

Föreläsning 6: Metoder och fält (arrays)

Föreläsning 2, vecka 8: Repetition

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Objektorienterad Programmering (TDDC77)

Klasshierarkier - repetition

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

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

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

TDDC77 Objektorienterad Programmering

TENTAMEN OOP

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

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

DAT043 - Föreläsning 7

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

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

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

OOP Tenta

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

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

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

Repetition av OOP- och Javabegrepp

Objektorienterad Programmering (TDDC77)

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Tentamen i Programmeringsteknik I, ES,

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

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

Arrayer (fält)

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Transkript:

Programmering hh.se/db2004 Föreläsning 11: Objektorienterad programmering - att definiera datatyper Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Datatyper Hittills Vi har lärt oss att använda datatyper i våra program. Vi använder primitiva typer och referenstyper. Primitiva typer char int long double Idag Program där man skapar egna datatyper! Referenstyper type[] String java.awt.color från Java Picture från kursboken Center for Research on Embedded Systems IDE-sektionen 1 / 1 2 / 1 Att definiera datatyper i Java Laddade partiklar För att definiera en datatyp 1 Beskriv värdemängden. 2 Beskriv operationerna för dessa värden. En Javaklass Definierar en datatyp genom att använda 1 Instansvariabler (för värdemängden) 2 Metoder (för operationerna med dessa värden) 3 Konstruerare (för att skapa och initiera nya objekt) 3 / 1 Mål En datatyp för laddade partiklar. Värdemängd Tre reella tal: position x och y samt elektriskt laddning. (x,y) r q (Rx,Ry) Operationer 1 Skapa en ny partikel vid (rx, ry ) med elektrisk laddning q. 2 Bestäm fältets styrka (potentialen) V vid en viss punkt (x, y) orsakad av en partikel. (V = k q r ) 3 Konvertera till String 4 / 1

En datatyp för laddade partiklar API public class Charge datatyp för laddade partiklar Charge(double x0,double y0,double q0) double potentialat(double x, double y) elektrisk potential vid (x,y) orsakad av laddningen String tostring() strängrepresentation 5 / 1 En datatyp för laddade partiklar Ett enkelt klientprogram Använder datatypens operationer för att beräkna något: public static void main(string[] cmdln){ double x = Double.parseDouble(cmdLn[0]); double y = Double.parseDouble(cmdLn[1]); Charge c1 = new Charge(.51,.63, 21.3); Charge c2 = new Charge(.13,.94, 81.9); double v1 = c1.potentialat(x, y); double v2 = c2.potentialat(x, y); System.out.println(c1); System.out.println(c2); System.out.println(v1 + v2); Metoden tostring() anropas automatiskt av println! 6 / 1 En datatyp för laddade partiklar Implementation - instansvariabler private final double rx, ry; private final double q;. Instansvariabler 1 Beskriver mängden värden som bildar typen. 2 Deklareras utanför metoderna. 3 Använd (nästan) alltid private. 4 Använd final med instansvariabler som inte ändras. 7 / 1 En datatyp för laddade partiklar Implementation - konstruerare Beskriver vad som händer när man skapar ett objekt: public Charge(double x0,double y0,double q0){ rx = x0; ry = y0; q = q0; Konstrueraren 1 Tilldelar värden till instansvariablerna. 2 Har ingen returtyp. 3 Heter som klassen. 8 / 1

En datatyp för laddade partiklar En datatyp klassens anatomi Implementation - metoder Metoderna implementerar operationerna public double potentialat(double x, double y){ double dx = x-rx; double dy = y-ry; double r = Math.sqrt(dx*dx + dy*dy); double k = 8.99e09; return k*q/r; Metoderna Arbetar på instansvariablerna: metoden är inte static! 9 / 1 private final double rx, ry; private final double q; public Charge(double x0,double y0,double q0){ rx = x0; ry = y0; q = q0; public double potentialat(double x, double y){ double dx = x-rx; double dy = y-ry; double r = Math.sqrt(dx*dx + dy*dy); double k = 8.99e09; return k*q/r; public String tostring(){ return q + " at (" + rx + ", " + ry + ")"; 10 / 1 Ett till exempel med laddade partiklar Att lösa Hur ser fältet ut? Man kan tänka sig att visualisera laddningsfältet då flera partiklar finns utspridda. Fältets värde Vid en viss punkt är fältets värde summan av alla partiklars potentialer vid den punkten. En färg Vi kan använda fältets värde för att bestämma en färg för den punkten. Till exempel, en nyans av röd, där nyansen ges av fältets värde! Hur relaterar vi pixlar till (x,y)-koordinaterna? Säg att vi använder SIZExSIZE pixlar för kvadraten 1x1. Vilka (x, y) har vi i pixeln (i,j)? (i/size, j/size) men som doubles! Hur gör vi om fältets värde till en färg? Om vi lyckas få ett tal mellan 0 och 255 kan vi använda detta för röd och komplementet för blå! 11 / 1 12 / 1

Lite kodfragment Indata // read in N point charges int N = StdIn.readInt(); Charge[] a = new Charge[N]; for (int k = 0; k < N; k++) { double x0 = StdIn.readDouble(); double y0 = StdIn.readDouble(); double q0 = StdIn.readDouble(); a[k] = new Charge(x0, y0, q0); Observera Fält av laddade partiklar! Mera kodfragment Räkna upp fältet Picture pic = new Picture(SIZE, SIZE); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { double V = 0.0; for (int k = 0; k < N; k++) { double x = 1.0 * i / SIZE; double y = 1.0 * j / SIZE; V = V + a[k].potentialat(x, y); Color c = getcolor(v); pic.set(i, SIZE-1-j, c); pic.show(); Vi använder 1.0*i för att göra om till double, istället för (double)i 13 / 1 14 / 1 Sista kodfragmentet Metoden getcolor private static Color getcolor(double potential){ double t = 128 + potential / 2.0e10; int red = 0; if (t < 0) red = 0; else if (t > 255) red = 255; else red = (int) t; return new Color(red, 0, 255-red); Räkneexempel Laddningar var ett exempel av oföränderliga objekt. Som vi redan har sett kan det också behövas föränderliga objekt. Vi studerar räknare. En räknare När den kommer ut från fabriken har den 1 en knapp för att nollställa, 2 en knapp för att räkna upp, 3 en display att avläsa värdet i. 15 / 1 16 / 1

Räkneexempel Räknaren i Java Vad är en räknare? Ett heltal! Vi använder detta för att utforma instansvariablerna! Vilka operationer vill vi göra? 1 En metod för att nollställa 2 En metod för att räkna upp 3 En metod för att avläsa Dessa metoder måste förändra värdet på instanvariablen! Klassen public class Counter{ private int value; public Counter(){value = 0; public void inc(){value++; public void reset(){value = 0; public int getvalue(){return value; Konstrueraren? Tilldelar startvärde till instansvariabeln! 17 / 1 public String tostring(){ return ""+value; 18 / 1 Vem vill ha en räknare? Varför skall man ha en räknare i ett program och inte bara ett heltal? En fråga om design Med heltalen kan man göra mycket annat än att räkna upp och sätta till 0. Med en heltalsvariabel i programmet kan man av mistag använda den till annat! Det är lättare hänt än man tror! En fråga om trådar Det finns program med flera main som samarbetar. Till exempel en webserver startar en tråd för varje klient. Om flera trådar vill samarbeta måste det delade objektet samordnas, och det är bättre att göra det med ett objekt än med en variabel. Några ord om design Datatyp En mängd värden och operationer på dessa värden. Inkapsling Göm typens representationen! Dela upp ansvaret! 1 En klass erbjuder representationen och koden för operationerna 2 Klienter använder klassen som en svart låda 3 APIn beskriver ett kontrakt mellan klienten och klassen. Man behöver inte veta hur datatypen är implementerad för att kunna använda den! 19 / 1 20 / 1

Intuition Intuition Klienten Måste kunna använda APIn! API 1 Volym 2 byta kanal 3... Implementationen Katodstrålrör... Klienten Måste kunna använda APIn! API 1 Volym 2 byta kanal 3... Implementationen Plasmaskärm... Klienten och implementationen måste vara överens om APIn! Man kan byta till en bättre implementation utan att behöva ändra klienten! 21 / 1 22 / 1 Räknaren igen Inkapsling Om vi gör public class Counter{ public int value; public Counter()value = 0; Låter vi klienter göra Counter algoreinflorida = new Counter(); algoreinflorida.value = 16022; Vi kapslar in representationen public class Counter{ private int value; public Counter()value = 0; Då ger Counter algoreinflorida = new Counter(); algoreinflorida.value = 16022; Och voops Al Gore får 16022 röster i Florida! kompileringsfel! 23 / 1 24 / 1