Läsanvisning: Dessa OH bilder samt kap 1-3

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

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Objektorienterad Programmering (TDDC77)

Föreläsning 2, vecka 8: Repetition

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

F4. programmeringsteknik och Matlab

Programmering A. Johan Eliasson

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

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

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

SMD 134 Objektorienterad programmering

Parameteröverföring. Exempel. Exempel. Metodkropp

TDDC77 Objektorienterad Programmering

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

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

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

(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

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

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Programmeringsteknik F1/TM1

OOP Objekt-orienterad programmering

Föreläsning 4: for, while, do-while

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

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Föreläsning 3-4 Innehåll

TDIU01 - Programmering i C++, grundkurs

Objektorienterad programmering i Java

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

Föreläsning 1 & 2 INTRODUKTION

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

OOP Objekt-orienterad programmering

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

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

JAVAUTVECKLING LEKTION 7

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

Classes och Interfaces, Objects och References, Initialization

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

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

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

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

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

OOP Objekt-orienterad programmering

Kompilera och exekvera Javakod

Föreläsning 1 & 2 INTRODUKTION

Tentamen , Introduktion till Java, dtaa98, dtea53

Enkla datatyper minne

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

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

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

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

Tentamen OOP

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Föreläsning 3. Iteration while-satsen

Skillnader mellan Python och Java

TENTAMEN OOP

Anteckningar 1: Grundläggande saker

Iteration while-satsen

Objektorienterad programmering Föreläsning 4

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

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

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

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

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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDA550 - Objektorienterad programvaruutveckling, fk

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

JAVAUTVECKLING LEKTION 4

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

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

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

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 6: Metoder och fält (arrays)

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

TENTAMEN OOP

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad Programmering (TDDC77)

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsnings 9 - Exceptions, I/O

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

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.

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

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

DAT043 Objektorienterad Programmering

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Typkonvertering. Java versus C

Objektorienterad Programmering (TDDC77)

Användarhandledning Version 1.2

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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

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

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

Transkript:

f1pt F 2 Läsanvisning: Dessa OH bilder samt kap 1-3! typer, variabler och tilldelning! primitiva typer, fördefinierade primitiva typer! uttryck, operatorer, prioritet, typomvandling,! Javas API, klassen Scanner.! hur ett program ser ut! hur man kompilerar och kör Den här föreläsningen bygger på att vi utvecklar ett program för ränteberäkning. Vi pratar om ganska många begrepp men ganska ytligt. Vi återkommer med mer detaljer. Varje kapitel i boken avslutas med - ett korsord lös gärna det - short exercises som är speciellt nyttiga i de första kapitlen. (En del är dock rätt svåra) Nyttiga är i Kap 2: alla, i Kap 3 ej 11, 12 - progr. execises : ju fler du gör ju bättre är det. I Kap 3 verkar tex 1, 6 och 8 trevliga. Nästa gång: Val, loopar samt logiska uttryck Läsanvisning: (kap 2, 4 och 5) F2 1

Vi började med den här uppgiften sist: Uppgift att lösa: Skriv ett program som givet en summa pengar, en ränta och ett antal år, skriver ut hur mycket ränta man får under dessa år på sina pengar. Använd en metod för ränteberäkningen. Om indata är fel dvs pengar<=0, räntan<0, år<1 så skall en felutskrift göras. ------------------------- 1. Hur får man in talen till programmet? 2. Hur lagrar man talen i programmet? 3.Hur hanterar man konstiga indata?, Hur undersöker man om det är fel? 4.Hur gör man en felutskrift? 5.Hur beräknar man ränta på ränta? 6. Hur skriver man en metod? 7. Hur skriver man ett program? 8. Hur presenterar man resultatet? 9.Vad gör man när det inte fungerar dvs räntan blir fel? F2 2

Bra tänk : Hur skulle du själv gjort? Lös problemet i grov Pseudokod: läs indata felhantering av indata beräkna räntan skriv resultatet F2 3

Mer detaljerad problemlösning + kommentarer // läs indata /*-> använd en Scanner */ // läs pengar, ränta och ett antal år, TODO // börja med att hårdkoda indata // spara i variablerna amount, interest, years /*-> typer, variabler */ // felhantering av indata /*-> val, exceptions */ // förutsätt indata ok tillsvidare TODO // beräkna räntan (utan metod först TODO) /*-> metoder*/ // upprepa "years" gånger /*-> iteration med for loop */ // amount = amount * ränta /*-> operatorer, tilldelning */ // skriv resultatet //snyggt formaterat? /*-> utskrifter */ /* detta hör inte till programmet */ Lägg ev. till ännu mer detaljer i pseudokod format; dvs vänta med Java syntax så länge som möjligt! Förskjut också så många delar som möjligt till senare här tex inläsning, felhantering, använda metod. F2 4

Nu gör vi ett progam av vår pseudokod. formalia: ett program = ett antal klasser varav minst en som måste innehålla en main metod public class Interest { public static void main( String[] args){ pseudokod hit } } Main metoden är den metod operativsystemet anropar när det vill lämna över kontrollen till vårt program. Vi återkommer till detaljerna med detta. F2 5

Program med pseudokod: public class Interest { public static void main(string[] args) { // läs pengar, ränta och ett antal år, TODO // börja med att hårdkoda indata // spara i variablerna amount, interest, och // years // felhantering av indata // förutsätt indata ok tillsvidare TODO // beräkna räntan (utan metod först TODO) // upprepa "years" gånger // amount = amount * ränta // skriv resultatet //snyggt formaterat? TODO } } Vi börjar med spara i variablerna... F2 6

Variabel och deklaration av den En variabel är en minnesplats med namn, typ och innehåll Den kan bara innehålla värden som har samma typ som den själv. tilldelning int nbroffingers = 10; 10 nbroffingers typen variabler/objekt har ett namn som är en identifierare bestämmer variabelns egenskaper dvs vad man kan göra med variabeln, den är en mall för hur en variabel/objekt ser ut Obs att = är inte likhet utan tilldelning som läses: nbroffingers får värdet 10 F2 7

Datatyper En datatyp är (en beskrivning av) ett eller flera relaterade värden tillsammans med operationer på dessa värden Verkliga saker har olika egenskaper - olika variabler har därför olika typ. Datatypen modellerar verkligheten definierar egenskaper dvs vad man kan göra definierar hur bitmönstret skall tolkas =>kompilatorn kan kolla tillåtna operationer Det finns fördefinierade datatyper i Java. -> Man kan också skapa egna datatyper, då skriver man en klass. En klass är alltså en typ F2 8

Fördefinierade primitiva typer Tänkta deklarationer för primitiva typer Type Values Representation boolean false, true byte char from '\u0000' to '\uffff' inclusive, that is, from 0 to 65535 16-bit unsigned integer byte from -128 to 127, inclusive 8-bit twos complement signed integer short from -32768 to 32767, inclusive 16-bit twos complement s.i. int long float From -2 147 483 648 to 2 147 483 647, inclusive -9223372036854775808 to 9223372036854775807, inclusive from ±3.40282347x10 38 to ±1.40239846x10-45 32-bit twos complement signed integer 64-bit twos complement signed integer 32-bit singleprecision flo.p double ±1.79769313486231570 x10 308 to ± 4.9406564581246544 x10-324 64-bit doubleprecision floating point F2 9

Aritmetiska uttryck, operatorer, prioritet, typomvandling, tilldelning variabel interest = interest/100 + 1; tilldelning operatorer litteraler Aritmetiska uttryck byggs upp utgående från litteraler och variabler och genom att deluttryck sätts samman med hjälp av operatorer tex *, +, /, %,... prioritet:! (negering),..., *, /, %,..., +, - varje uttryck får en typ som bestäms av de ingående litteralernas och variablernas typer 9 + 2/3 int 9 9.0+2/3 double 9.0 9 + 2/3.0 double 9.6... 9 + 2.0/3.0 double 9.6... 9 + (double)2/3 typomvandling (typecast) 9.6... F2 10

Litteraler är konstanta värden heltalslitteraler: 123, 234345, -3 flyttalslitt.: 1.25, 0.0, -3.4, 20.3e-6, 2e+2 stränglitteral: Erland, Kalle&Hobbe teckenlitteral: 'e', '3', '\t', '\n', '\\' OBS det är stor skillnad mellan 3 '3' 3 3.0 3.0 3,0 ======================================== Nu kan vi lagra våra indata: // läs pengar, ränta och ett antal år, TODO // börja med att hårdkoda indata double amount = 100.0; double interest = 10; // i % int years = 2; // antag hela år // felhantering av indata // förutsätt indata ok tillsvidare TODO Redan nu kan vi kompilera/köra programmet: F2 11

Kompilering och körning med editor och kommandofönster 1) Använd en editor för att skapa en källtextfil: Dvs i ett terminalfönster gör nåt i stil med: (Unix prompt är % ) % emacs Interest.java Skapar en fil som heter Interest.java som (tillsvidare) måste innehålla en main metod. 2) Kör Java kompilatorn: % javac Interest.java Skapar en fil som heter Interest.class Rätta alla fel... genom att göra om stegen ovan 3) Kör programmet: % java Interest Inget händer naturligtvis. Men vi har ett program utan syntaxfel. F2 12

... // beräkna räntan (utan metod först TODO) // upprepa "years" gånger // amount = amount * ränta...upprepa Syntax för for loopen for(<init>; <boolexpr>; <change>) { <statements> } <...> betyder att <> och det inom <> skall bytas ut mot något init, boolexpr, change är uttryck statements är en eller flera Java satser F2 13

Loopar med känt antal varv = for Syntax for(<init>; <boolexpr>; <change>) { } <statements> Informell Semantik 1. init uttrycket beräknas (sker bara en gång). Vanligen initialiserar man bara en räknare till dess startvärde. Typiskt: int i = 0; 2. boolexpr beräknas. Så länge det är sant kommer loopens satser (statements) att beräknas. Typiskt: i<10; 4. uttrycket change beräknas. Vanligen ökar man räknaren med ett. Typiskt: i=i+1; eller i++; Gå till punkt 2. F2 14

// beräkna räntan (utan metod först TODO) // upprepa "years" gånger blir nu // amount = amount * ränta // compute interst TODO: method for (int i=1; i<=years; i++) { amount = amount * interest; } och så har vi // skriv resultatet //snyggt formaterat? som blir TODO // print result, fix formating? TODO System.out.println(amount); System.out.println(<uttryck>); ================================= System är en klass out är en variabel (ett objekt) i den klassen av typen PrintStream println är en metod i PrintStream <uttryck> är en parameter till den metoden F2 15

public class Interest { public static void main( String[] args) { // read input // money, interest, year TODO double amount = 100; double interest = 10; // in % int years = 2; // assume int's // error handling // assume input ok TODO // compute interest TODO: method bug-> // interest = interest/100 + 1; double result = amount; for (int i=1; i<=years; i++) { result = result * interest; } } } // print result // nice formating? TODO System.out.println(result); Vi kör och får utskriften 10000.0 F2 16

Vi har en bug i vårt program! Hur hitta den? Enkel metod: Lägg in utskrifter se tavlan Mer avancerat: använd en debugger Nu kan vi provköra igen % javac Interest.java % java Interest 121.00000000000003 Verkar ok. Förutom formateringen.. // read input. Läsning från användaren sker med en färdig klass: Scanner. Den ingår inte i språket Java men distribueras tillsammans med Java. Se API beskrivningen F2 17

Klasser: Komplexare Svarta boxar Identitet: hall-lampan Tillstånd: - tänd, släkt, sönder, blinka - Effekt: (40 / 60...W?) - Fattning: (E14 eller E24 fattning) Beteende : släck, tänd, effekt?, brinntid?... tänd släck tänd? släckt? effekt? fattning? svart box för hall-lampan Vi kan abstrahera - gömma detaljer. Separerar användning från implementation. VAD inte HUR. Skall göra EN sak bra F2 18

2 olika slags typer i Java Primitiva typer (int, double, char, boolean,...) enkla odelbara värden som ett tal eller ett tecken endast fördefinierade operatorer, tex '+', '/', inga metoder finns. finns fördefinierade i språket int nbr = 10; Klasstyper (eller referenstyper eller sammansatta typer) vanligen komplexa värden uppbyggda av flera primitiva typer och/eller klasstyper tex String, Rectangle, Boll definieras av användaren metoder som man skriver själv alltså: komplexa data och metoder 10 nbr boll x y 5 12 Boll minboll = new Boll(5, 12); F2 19

Fördefinierade klasstyper i Java? Det finns inga sådana men... I Java distributionen får man med ett API Application Programmers Interface som är en samling paket som innehåller massor av användbara klasser tex klassen Scanner. (Paket = samling med klasser) En del är hårdare knutna till språket tex de som finns i paketet java.lang som alltid finns tillgängligt och en del är mindre hårt knutna och man måste explicit namnge dem. En scanner som läser från tangentbordet skapas med java.util.scanner sc = new java.util.scanner(system.in); sedan läser man tex med sc.nextdouble(); eller sc.nextint(); F2 20

Byt ut double amount = 100; double interest = 10; // in % int years = 2; // assume int's mot java.util.scanner sc = new java.util.scanner(system.in); System.out.print("input amount: "); double amount = sc.nextdouble(); System.out.print( "input interest in %: "); double interest = sc.nextdouble(); System.out.print( "input nbr of years: "); int years = sc.nextint(); Nu kan vi provköra igen % javac Interest.java % java Interest input amount: 100.0 input interest in %: 10 input nbr of years: 2 121.00000000000003 F2 21

Lite småfixar java.util.scanner sc = new java.util.scanner(system.in); kan förkortas import java.util.scanner; public class Interest { public static void main(string[] args) { // read input Scanner sc = new Scanner(System.in); vill man att vissa kommentarer skall sticka ut lite mer: // ########## read input ########## F2 22

Identifierare En identifierare är ett namn på saker som variabler, metoder, klasser, mm Regler för identifierare i Java: Skall vara en bokstav följd av noll eller flera tecken där tecken får vara bokstav, siffra eller _. (Undvik dock å, ä, ö m.fl.) Små och stora bokstäver tolkas olika. Odd är alltså inte samma namn som odd Konventioner om identifierare i Java: Klassnamn börjar alltid på stor bokstav Variabler och metoder börjar på liten flera ord sätts samman med stora bokstäver inuti ordet tex StringTokenizer, skickablommor, nbroffingers, konstanter skrivs med STORA bokstäver tex PI, PLANKS_KONSTANT Råd om identifierare i Java: Skall vara beskrivande dvs namnet skall avslöja (för andra) vad namnet står för. (Beskrivande är inte lika med långa!) F2 23

Beskrivande namn innebär också tex: Använd förkortningar försiktigt Vad är en termprocess()? - termometer process, (svenska) - terminate process, - terminal process? Undvik namn som kan betyda flera saker - Vad gör empty()? tömmer något? kalla den makeempty() frågar om något är tomt? -> isempty() - isprinterready är bättre än tex printerstatus reserverade ord, litteraler Reserverade ord finns i alla språk. Får ej användas som identifierare. Ex: if, while, int, public, class m.fl. Litteraler är konstanta värden heltalslitteraler: 123, 234345, -3 flyttalslitt.: 1.25, 0.0, -3.4, 20.3e-6, 2e+2 stränglitteral: Erland, teckenlitteral: 'e', '\t', '\n', '\\' F2 24