Omprov 11/11 på förmiddagen
Vad kommer sedan?
Översättning Du har ätit upp Vill du ha godis nu? Nej, tack Jag är mätt Nej, tack Jag är full
Översättning Du har ätit upp Vill du ha godis nu? Nej, tack Jag är mätt Nej, tack Jag är full
Översättning Du har ätit upp Vill du ha godis nu? Nej, tack Jag är mätt Nej, tack Jag är full
Nästa labb Ganska mycket inläsning Detaljerade sidhänvisningar Labbuppgifterna ganska enkla Enskilt!
Java Utvecklat på SUN Microsystems (nu köpta av Oracle), på mitten av 1990-talet Slog ursprungligen igenom för Webprogram Är nu mycket spritt Massor med läroböcker Vi använder Horstmann Finns som öppen källkod
Java ett språk Imperativt Ett program specificerar hur något ska utföras Precis som i Python! Objektorienterat Program byggs upp av objekt (tillstånd + beteende) och deras klasser (typdefinitioner av objekt) Också som i Python! (Men mer strikt) Statiskt typat Variabler och metoder har av programmeraren statiskt definierade typer (int, double, String etc) Python är istället dynamiskt typat
Java ett språk Imperativt (Det här kan ni!) Ett program specificerar hur något ska utföras Precis som i Python! Objektorienterat Program byggs upp av objekt (tillstånd + beteende) och deras klasser (typdefinitioner av objekt) Också som i Python! (Men mer strikt) Statiskt typat Variabler och metoder har av programmeraren statiskt definierade typer (int, double, String etc) Python är istället dynamiskt typat
Java ett språk Imperativt (Det här kan ni!) Ett program specificerar hur något ska utföras Precis som i Python! Objektorienterat (Främst nästa vecka och senare) Program byggs upp av objekt (tillstånd + beteende) och deras klasser (typdefinitioner av objekt) Också som i Python! (Men mer strikt) Statiskt typat Variabler och metoder har av programmeraren statiskt definierade typer (int, double, String etc) Python är istället dynamiskt typat
Java ett språk Imperativt (Det här kan ni!) Ett program specificerar hur något ska utföras Precis som i Python! Objektorienterat (Främst nästa föreläsning och senare) Program byggs upp av objekt (tillstånd + beteende) och deras klasser (typdefinitioner av objekt) Också som i Python! (Men mer strikt) Statiskt typat (Denna vecka) Variabler och metoder har av programmeraren statiskt definierade typer (int, double, String etc) Python är istället dynamiskt typat
Java en miljö Java översätts (i regel) inte direkt till maskinkod, utan till en mellanform som körs på en virtuell maskin, en Java Virtual Machine (JVM)
Java en miljö Java översätts (i regel) inte direkt till maskinkod, utan till en mellanform som körs på en virtuell maskin, en Java Virtual Machine (JVM) http://docsoraclecom/javase/6/docs/api/
In In get t kö era stö rn kt d in iv fö g r Java en miljö Vi använder Java SE 6 via IDEn Netbeans
Output
Output Python print Hello world
Output Python print Hello world Java Systemoutprintln( Hello world );
Output Python print Hello world Java Systemoutprintln( Hello world ); Finns också utan radbryte: Systemoutprint()
Output Python print Hello world Java Systemoutprintln( Hello world ); Finns också utan radbryte: Systemoutprint() Tips: Skriv sout<tab> för att få Netbeans att generera Systemoutprintln( );
Java ett språk Imperativt Ett program specificerar hur något ska utföras Precis som i Python! Objektorienterat Program byggs upp av objekt (tillstånd + beteende) och deras klasser (typdefinitioner av objekt) Också som i Python! (Men mer strikt) Statiskt typat Variabler och metoder har av programmeraren statiskt definierade typer (int, double, String etc) Python är istället dynamiskt typat
Kort om objekt och klasser (i Pythonsyntax) Exempel på objekt: Varje objekt har en klass: [1,2,3] hejsan list str
Kort om objekt och klasser (i Pythonsyntax) Exempel på objekt: [1,2,3] hejsan Varje objekt har en klass: list str Varje objekt har ett tillstånd (tex innehåller 1,2,3) Klassen anger de möjliga tillstånden
Kort om objekt och klasser (i Pythonsyntax) Exempel på objekt: [1,2,3] hejsan Varje objekt har en klass: list str Varje objekt har ett tillstånd (tex innehåller 1,2,3) Klassen anger de möjliga tillstånden Varje objekt har beteenden, implementerade i metoder Klassen anger metoderna Ex alla listor har sort() och insert()
Objektorientering (mer nästa vecka!) I objektorienterade språk (tex Python och Java) finns inbyggt stöd för att skriva egna klasser I Python görs det när programmeraren vill I Java måste all kod ligga i klasser Varje Javaprogram måste ha minst en klass
Programstruktur Python Java def f(): def g(): huvudprogram class A metod f() metod g() metod main() class B metod h
Programstruktur Python Pythonprogrammet börjar på första raden def f(): def g(): huvudprogram Java class A metod f() metod g() metod main() class B metod h
Programstruktur Python Pythonprogrammet börjar på första raden def f(): def g(): huvudprogram Java class A metod f() Javaprogrammet börjar i metoden main() i metod g() den klass (A) som angetts som huvudklass metod main() class B metod h
Java ett språk Imperativt Ett program specificerar hur något ska utföras Precis som i Python! Objektorienterat Program byggs upp av objekt (tillstånd + beteende) och deras klasser (typdefinitioner av objekt) Också som i Python! (Men mer strikt) Statiskt typat Variabler och metoder har av programmeraren statiskt definierade typer (int, double, String etc) Python är istället dynamiskt typat
Typer Alla värden har en typ, tex (med Javatyper): 42 314 hej int double String
Typer Alla värden har en typ, tex (med Javatyper): 42 314 hej int double String En variabel har samma typ som sitt värde: x = 42 s = hej x har typen int s har typen String
Dynamisk vs statisk typning Python har dynamisk typning: Variablers typ bestäms vid körning x = 15 y = 271828 x = ny typ! Java har statisk typning: Variablers typ bestäms när de deklareras int x; double y; x och y deklareras och ges typerna int och double x = 15; y = 271828; x = ny typ! ; Typfel!
Dynamisk vs statisk typning Python har dynamisk typning: Variablers typ bestäms vid körning x har nu typen int x = 15 y = 271828 x = ny typ! Java har statisk typning: Variablers typ bestäms när de deklareras int x; double y; x och y deklareras och ges typerna int och double x = 15; y = 271828; x = ny typ! ; Typfel!
Dynamisk vs statisk typning Python har dynamisk typning: Variablers typ bestäms vid körning x har nu typen int x = 15 y = 271828 x = ny typ! y har nu typen float Java har statisk typning: Variablers typ bestäms när de deklareras int x; double y; x och y deklareras och ges typerna int och double x = 15; y = 271828; x = ny typ! ; Typfel!
Dynamisk vs statisk typning Python har dynamisk typning: Variablers typ bestäms vid körning x har nu typen int x = 15 y = 271828 x = ny typ! y har nu typen float x har nu typen str Java har statisk typning: Variablers typ bestäms när de deklareras int x; double y; x och y deklareras och ges typerna int och double x = 15; y = 271828; x = ny typ! ; Typfel!
Dynamisk vs statisk typning Python har dynamisk typning: Variablers typ bestäms vid körning x har nu typen int x = 15 y = 271828 x = ny typ! y har nu typen float x har nu typen str Java har statisk typning: Variablers typ bestäms när de deklareras int x; double y; x och y deklareras och ges typerna int och double x = 15; y = 271828; x = ny typ! ; Typfel!
Dynamisk vs statisk typning Python har dynamisk typning: Variablers typ bestäms vid körning x har nu typen int x = 15 y = 271828 x = ny typ! y har nu typen float x har nu typen str Java har statisk typning: Variablers typ bestäms när de deklareras int x; double y; x och y deklareras och ges typerna int och double x = 15; y = 271828; x = ny typ! ; Typfel!
Typcheckning def sum_and_square(a, b): return (a+b) ** 2 When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck x = 42 y = 13 z = sum_and_square(x, y) print z z = sum_and_square(04, y) print z z = sum_and_square(x, hej ) print z
Typcheckning def sum_and_square(a, b): return (a+b) ** 2 >>> 3025 17956 Traceback (most recent call last): File "<input>", line 1, in <module> File "<input>", line 2, in sum_and_square TypeError: unsupported operand type(s) for +: 'int' and 'str' x = 42 y = 13 z = sum_and_square(x, y) print z z = sum_and_square(04, y) print z z = sum_and_square(x, hej ) print z
Typcheckning def sum_and_square(a, b): return (a+b) ** 2 >>> 3025 17956 Traceback (most recent call last): File "<input>", line 1, in <module> File "<input>", line 2, in sum_and_square TypeError: unsupported operand type(s) for +: 'int' and 'str' x = 42 y = 13 z = sum_and_square(x, y) print z z = sum_and_square(04, y) print z z = sum_and_square(x, hej ) print z
Typcheckning def sum_and_square(a, b): return (a+b) ** 2 >>> 3025 17956 Traceback (most recent call last): File "<input>", line 1, in <module> File "<input>", line 2, in sum_and_square TypeError: unsupported operand type(s) for +: 'int' and 'str' x = 42 y = 13 z = sum_and_square(x, y) print z z = sum_and_square(04, y) print z z = sum_and_square(x, hej ) print z
Typcheckning public class MyClassName { static int sumandsquare(int a, int b) { return (a+b) * (a+b); } public static void main(string[] args) { int x = 42; int y = 13; int z = sumandsquare(x, y); Systemoutprintln(z); z = sumandsquare(04, y); Systemoutprintln(z); } } z = sumandsquare(x, hej ); Systemoutprintln(z);
Typcheckning public class MyClassName { static int sumandsquare(int a, int b) { return (a+b) * (a+b); } public static void main(string[] args) { int x = 42; int y = 13; int z = sumandsquare(x, y); Systemoutprintln(z); z = sumandsquare(04, y); Systemoutprintln(z); } } z = sumandsquare(x, hej ); Systemoutprintln(z);
Vad finns det för typer? Primitiva typer Namn på en klasser int boolean float char byte double short long String (mer nästa vecka)
Vad finns det för typer? Array av ovanstående int[] String[] Javas arrayer är ganska lika Matlabs men ganska olika Pythonlistorna Metoder som append() etc finns inte En Javas array har en fix längd Alla element måste ha samma typ
Variabeldeklaration Typens namn följt av variabelns namn int height; String message; OBS! ; avslutar alla satser, liksom i Matlab int height = 1; String message = Welcome! ; Med ett initialvärde height = 3; Tilldelning skapar ingen ny variabel Kräver att variabeln redan är deklarerad
Arraydeklaration int[] a; a = new int[5]; Variabeln a är av typen array of int, ännu inte bestämt hur lång a blir ett arrayobjekt som innehåller 5 stycken int, a[0]a[4] (inledningsvis är värdet på alla elementen 0) int[] a = new int[5]; Kombinerar ovanstående på en rad
Arraydeklaration int[] a = {5,18,22,0,3}; int[][] c; Deklarerar, skapar och initierar i ett drag! c är en tvådimensionell array (En array av int arrayer) Elementet på plats i,j noteras c[i][j]
Översättning IF and
Python if a>b and b>0: d = 2 elif a<b: d = 1 e = 0 else: d = 0 if Java if (a>b && b>0) d = 2; else if (a<b) { d = 1; e = 0; } else d = 0;
Python if if a>b and b>0: d = 2 elif a<b: elif heter else d = 1 e = 0 else: d = 0 Java Parenteser runt villkor obligatoriska if if (a>b && b>0) d = 2; else if (a<b) { d = 1; e = 0; } else d = 0; Krullparenteser valfria vid enkel rad (Men använd dem ändå!) and och or heter && och (Varning! Inte & och )
while Python Java while a>b: d = 2+a a += 1 while (a>b) { d = 2+a; a++; } Tips: x+=1 och x-=1 skrivs smidigt som x++ (eller ++x) och x-- (eller --x) i Java
do-while Python Java Finns inte! do { d = 2+a; a--; } while (a<b); Som while, men kollar loopvillkoret i slutet av loopkroppen
for Python Java for elem in balls: for (Ball elem : balls) { } for i in range(20): for (int i=0; i<20; i++) { }
for Python Java for elem in balls: for (Ball elem : balls) { } for i in range(20): for (int i=0; i<20; i++) { } Java har två olika for-loopar!
for (initiering; villkor; update) { loopkropp } är bara ett smidigt sätt att skriva initiering; while (villkor) { loopkropp update; }
Ok, nu kodar jag! Nästan där! I Java måste koden vara i en metod Hur kan man skriva metoder?
Metoddeklaration 1) Resultattypen 2) Metodnamnet 3) (parameterns_typ parameterns_namn) Python: def matches(pattern, word) Java: boolean matches(string pattern, String word)
Metoddeklaration Resultattypen => Metod inte returnerar något? Metodnamnet (parameterns_typ parameterns_namn) Python: def printfile() Java: Vi skriver void void printfile()
Vilken får ett annorlunda resultat? if (a>b) { c = 0; a += 1; } b = a; if (a>b) {c =0; a += 1;} b = a; if (a>b) { c = 0; a += 1; } b = a; Alla dessa har Samma betydelse if (a>b) {c=0;a += 1;}b = a;
Vilken får ett annorlunda resultat? if (a>b) { c = 0; a += 1; } b = a; if (a>b) {c =0; a += 1;} b = a; if (a>b) { c = 0; a += 1; } b = a; Alla dessa har Samma betydelse if (a>b) {c=0;a += 1;}b = a;
Vilken får ett annorlunda resultat? if (a>b) { c = 0; a += 1; } b = a; if (a>b) {c =0; a += 1;} b = a; if (a>b) { c = 0; a += 1; } b = a; Alla dessa har Samma betydelse if (a>b) {c=0;a += 1;}b = a; Fortsätt att använda indragningar och radbrott för att öka läsbarheten!
Let's code! A botanist plants a number of seeds in 6 different fields, to analyze the flowers each plant will have This kind of seed can grow any number of flowers, including none However, there is a bug plague: some plants die because of this, and no flowers grow Given the results of flowers per planted field, how do we calculate 1) how many alive plants are in total 2) how many plants died?
Scope För varje deklaration är det väldefinierat för vilket område av koden den gäller Ex: Deklaration av en variabel har räckvidden resten av det kodblocket, alltså det som avgränsas av { } if (c>b) { int a; Här inne kan a användas } Här ute kan a inte användas
Modifiers Extra egenskaper kan anges i samband med en deklaration Skrivs före typen Exempelvis: public static Detta kan användas även utanför den fil där deklarationen står Detta förknippas enbart med klassen och inte med klassens objekt
References https://wwwflickrcom/photos/oskay/47209 7903 By Windell Oskay, licence https://creativecommonsorg/licenses/by/20 /legalcode http://wwwgeographorguk/photo/2485390 Copyright Richard Smith, reuse under this Creative Commons Licence ( http://creativecommonsorg/licenses/by-sa/2 0/ )