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



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

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

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

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Idag ska vi gå igenom. Programmeringsteknik för S, 2004 Grupp IV. Vad är en klass? Klasser och instanser

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

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

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

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

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

JAVAUTVECKLING LEKTION 7

Kompilera och exekvera Javakod

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 2 Objektorienterad programmering DD1332. Typomvandling

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

Objektorienterad programmering i Java

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.

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

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

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

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

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 finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

JAVA Mer om klasser och objektorientering

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

(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

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

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

TUTORIAL: KLASSER & OBJEKT

Objektorienterad Programmering (TDDC77)

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

Programmeringsteknik för Bio1 och I1. Dagens program. Så här tillämpar vi det på J-uppgifterna. Allmänna programmeringstips. Övningsgrupp 3 (Sal E33)

Föreläsning 1 & 2 INTRODUKTION

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Tentamen OOP

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

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

Föreläsning 1 & 2 INTRODUKTION

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Malmö högskola 2008/2009 CTS

Klasser och objekt. Henrik Johansson. August 20, 2008

Lösningsförslag övning 2.

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

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

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

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

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

Objektorienterad programmering D2

Objektorienterad Programmering (TDDC77)

OOP Tenta

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

Att använda Java SE JDK 6

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

TDDC77 Objektorienterad Programmering

Föreläsning 5-6 Innehåll

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

Tentamen i Programmering

System.out.println("Jaså du har "+ antaldollar + " stycken.");

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Objektorienterad programmering i Java

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

PROGRAMMERING-JAVA TENTAMINA

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

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

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.

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

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

SMD 134 Objektorienterad programmering

Tentamen i Grundläggande programmering STS, åk 1 fredag

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

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

Objektorienterad Programmering (TDDC77)

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

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

TENTAMEN OOP

Objekt och klasser - Introduktion

1 Egna klasser. 1.1 En punkt-klass

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

Laboration 1 - Grunderna för OOP i Java

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

Transkript:

Programmeringsteknik för Bio1 och I1 Övning 2 Kort repetition Övningsgrupp 3 (Sal E33) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1310/ Övningsanteckningar i pdf format: http://www.nada.kth.se/ hjorth/teaching/ Filnamnet och klassnamnet på huvudklassen bör överrensstämma. Klassnamn börjar alltid med stor bokstav. Spara javafilen i rätt katalog, så inte alla laborationsfiler ligger direkt i roten på er hemkatalog. Huvudklassen ska innehålla en main-metod. Det är main-metoden som körs när programmet exekverar, den anropar i sin tur andra delar av ert program. För att kunna skriva till skärmen och läsa in från tangentbordet måste vi importera dessa standardmetoder, det gör vi med hjälp av raden Vad ska vi lära oss idag? Ett exempel Metoder, vad är de bra för och hur använder man dem i våra program? Klasser och instanser, vi har hört om dem, men vad är de och hur skiljer de sig åt? Lab3 vad behöver vi veta för att klara den? Skriv ett program som uppskattar hur en population av bakterier växer över tiden, vi antar att den utvecklar sig exponentiellt. Vad behöver programmet veta för att kunna uppskatta populationen om 24 timmar? Hur beräknar vi exponentiell tillväxt? Bör vi ha en separat metod för uträkningen? Är det något som vi kommer utföra flera gången som kan ersättas med en metod? Inför Lab3, notera speciellet inläsningen från tangentbord och hur man anropar metoder!

Bakterier.java Vi kör koden... public class Bakterier { // Ger alla klassens metoder tillgång till indata static InputStreamReader istream = new InputStreamReader(System.in); static BufferedReader indata = new BufferedReader(istream); public static void main(string[] args) throws IOException { double v1, v2, pred; >javac Bakterier.java >java Bakterier Antal bakterier för två timmar sedan? 20 Hur många bakterier finns det nu? 30 Om 24 timmar finns 3892 bakterier v1 = readvalue("hur många bakterier fanns det för två timmar sedan? "); v2 = readvalue("hur många bakterier finns det nu? "); pred = predictamount(v1, v2); System.out.println("Om 24 timmar finns " + (int) pred + " bakterier"); public static double readvalue(string question) throws IOException{ String s; double v; System.out.print(question); s = indata.readline(); v = Double.parseDouble(s); return v; public static double predictamount(double old1, double old2) { double predicted, deltat = 2, t = 24, k; k = Math.log(old2/old1) / deltat; // Lite matematik! predicted = Math.floor(old2 * Math.exp(k*t)); return predicted; // Expontentiell tillväxt, y=a*exp(kt) Notera hur koden blir mer lättläst när vi ersätter inläsningen med en metod som gör jobbet åt oss. Tidigare skulle det stått, System.out.print("Antal bakterier för två timmar sedan? "); s = in.readline(); v1 = Double.parseDouble(s); System.out.print("Hur många bakterier finns det nu? "); s = in.readline(); v2 = Double.parseDouble(s); men nu står det i vår main metod istället, v1 = readvalue("antal bakterier för två timmar sedan? "); v2 = readvalue("hur många bakterier finns det nu? "); Metoder kan göra koden mer överskådlig! Objektorientering? Klasser och instanser Java är ett objektorienterat språk, vad betyder det? Både data och metoder för att manipulera denna data har samlats ihop i olika objekt. Det betyder att när vi använder oss av ett objekt så får vi på köpet de verktyg (läs metoder) vi behöver för att manipulera dess data. Vi kan använda oss av ett objekt som hanterar till exempel komplexa tal utan att veta hur talen hanteras internt i objektet. Det enda som spelar roll är hur vi pratar med själva objektets gränssnitt. Detta gör programmeringen lättare, vi kan använda andras förkonstruerade objekt utan att bry oss om hur de fungerar innuti. Objektorientering kan göra programmering enklare! En klass är vårt sätt att i programkoden beskriva hur objekten ska vara. En instans är skapad utifrån denna beskrivning, den innehåller vanligen metoder och variabler. Varje klass kan ge upphov till många instanser. Vi skapar nya instanser genom att anropa klassens konstruktor med nyckelordet new. För klassen String ser instansieringen ut så här String s = new String("Vi instansierar"); Vi anropar metoderna i String genom att skriva int längd = s.length(); Det finns fler sätt att anropa de olika metoder som finns i String som vi ska gå igenom senare.

Ett första exempel på objektorientering Först skriver vi Konto-klassen Vi ska göra en bank som innehåller konton som våra kunder kan sätta in och ta ut pengar på. För att illustrera hur objektorientering kan användas tänker vi i detta exempel skapa dessa konton som instanser av en Konto-klass. Det betyder att varje konto förutom att hålla reda på saldo och vem som äger det också har egna metoder för att sätta in och ta ut pengar. public class Konto { static double ränta = 0.01; // Variabler double saldo; String ägare; Konto(String ägare) { // Konstruktor A this.ägare = ägare; saldo = 0; Konto(String ägare, double insättning) { // Konstruktor B this.ägare = ägare; saldo = insättning; // Metoder för att manipulera variablerna i konto static void sättränta(double ränta) { Konto.ränta = ränta; Vi repeterar! Konto innehåller både data och metoder för att manipulera dess data. Jämför detta med vad vi sa på de två föregående sidorna... Vi börjar med andra ord nosa på objektorienterad programmering. void sättin(double mängd) { saldo += mängd; double taut(double mängd) { saldo -= mängd; return saldo; double kollasaldo() { return saldo; void läggtillränta(int dagar) { saldo += ränta * saldo * (dagar/365.0); public String tostring() { // Skapar en sträng för utskrift return ägare + "s konto har " + (int) saldo + " kronor"; Vad gör de olika delarna? Vi inför banken Allt innanför de yttersta måsvingarna tillhör klassen. Längst upp deklarerar vi våra variabler. I regel har alla instanser en egen kopia av de olika variablerna. Dock är static-deklarerade variabler gemensamma för alla instanser, dvs ändrar en instans på en static-variabel ser alla ändringen. Därefter står de olika konstruktorerna för klassen. Vilken som används beror på hur vi anropar dem. Sedan följer metoderna vilka kan utföra olika operationer på variablerna. De kan även göra andra saker som skriva ut strängar och retunera saldo. Notera att andra klasser måste använda metoder för att komma åt de interna variablerna. Detta ger oss mer kontroll på hur de ändras. Det räcker inte bara med att skapa en konto-klass, vi behöver en bank som kan instansiera våra konton. public class Bank { public static void main(string[] inparametrar) { // Här anropas två olika Konto konstruktorer Konto lena = new Konto("Lena Rik", 1000000); Konto johan = new Konto("Johan Pank"); System.out.println(lena); // tostring anropas automatiskt! System.out.println(johan); // för att konvertera till sträng System.out.println("Banken sätter räntan till 2 %"); Konto.sättRänta(0.02); System.out.println("Johan sätter in 1000 kronor"); johan.sättin(1000); System.out.println("Lena får ränta för 100 dagar"); lena.läggtillränta(100); System.out.println(lena); System.out.println(johan); I det här exemplet är banken bara ett enkelt skal för att testa Konto-klassen så vi ser att den fungerar.

Kort genomgång Olika sätt att anropa metoder i klassen Det finns två olika konstruktorer, vilken som väljs beror på hur vi anropar dem. Java tittar på parametertyp och försöker matcha. Konto lena = new Konto("Lena Rik", 1000000); // Kör konstruktor B Konto johan = new Konto("Johan Pank"); // Kör konstruktor A När vi anropar println försöker den konvertera vårt objekt till en sträng för att kunna skriva ut den. System.out.println(lena); Genom att ha en tostring-metod i din nya Konto-klass kan du välja hur utskriften ska se ut. Det finns olika sätt att anropa metoder i klassen. Vi kommer gå mer in på detaljerna senare, detta är bara en första introduktion. Metoder som är definerade static kan anropas genom att skriva klassnamnet före Konto.sättRänta(0.02); medan de andra metoderna måste ha en referensvariabel före (här johan) johan.sättin(1000); Lena Riks konto har 1000000 kronor Vi testar vår bank Inför Lab3 Vi kompilerar Bank.java >javac Bank.java och kör Bank.class >java Bank Lena Riks konto har 1000000 kronor Johan Panks konto har 0 kronor Banken sätter räntan till 2 % Johan sätter in 1000 kronor Lena får ränta för 100 dagar Lena Riks konto har 1005479 kronor Johan Panks konto har 1000 kronor Inför Lab3 behöver vi veta hur man skapar nya metoder. Till exempel, public static double sum(double a, double b) { return a+b; Obs! Detta ska ligga innanför klassens måsvingar! Vi behöver också veta hur man anropar dessa metoder från till exempel main-metoden, double x = sum(val1,val2); Det ser ut att fungera. Tänk på att returtypen och variabeln du sparar returvärdet i måste matcha. Om metoden retunerar en sträng kan du inte spara resultatet i en int. För tips om inläsning, se readvalue metoden i Bakterier.java i början av dagens övning.

Ett miniexempel! Java i Windows Kort exempel på hur ett program som gör ett metodanrop kan se ut public class MetodAnrop { public static void main(string[] inparametrar) { int x = 4, y = 7; int summa = sum(x,y); // Metodanrop! System.out.println(x + " + " + y + " = " + summa); public static int sum(int a, int b) { return a + b; Vi kör koden >javac MetodAnrop.java >java MetodAnrop 4 + 7 = 11 Det fungerade! Filer för er som vill köra Java i Windows http://www.nada.kth.se/kurser/kth/2d1310/faq/ Följer man instruktionerna där går det i vissa fall att kompilera programmen med javac men det går inte att sedan köra dem med java. Om du känner igen följande felmeddelande Exception in thread main java.lang.noclassdeffounderror: DinFil/java så beror det på att CLASSPATH variabeln är fel, java vet inte var den ska leta efter dina filer! Två sätt att lösa detta, antingen kör du alltid java genom att skriva java -classpath. DinFil alternativt går du in i Control panel > System > Advanced > Enviroment variables och editerar CLASSPATH så att den pekar på din java katalog.