IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Like dokumenter
IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Fra Python til Java, del 2

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

INF2100. Oppgaver 26. september til 1. oktober 2007

Forelesning inf Java 4

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Jentetreff INF1000 Debugging i Java

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

UNIVERSITETET I OSLO

Eksempel 1 Eksempel 2 Dramatisering. INF1000 uke 3. Sundvollen 7. september 2015 Dag Langmyhr. INF1000 Sundvollen

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

UNIVERSITETET I OSLO

INF1000 (Uke 4) Mer om forgreninger, While-løkker

INF1000 : Forelesning 4

Programmeringsspråket C

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

IN våren 2018 Tirsdag 16. januar

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

UNIVERSITETET I OSLO

Forelesning inf Java 5

UNIVERSITETET I OSLO

Forelesning inf Java 5

Seminaroppgaver IN1010, uke 2

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

INF Løsning på seminaropppgaver til uke 8

INF våren 2017

Velkommen til. INF våren 2016

IN våren 2019 Onsdag 16. januar

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Eksempel: Body Mass Index (BMI)

Blokker og metoder INF1000 (Uke 6) Metoder

Feilmeldinger, brukerinput og kontrollflyt

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

TOD063 Datastrukturer og algoritmer

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Enkel lesing og skriving i Java

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

INF1010 våren 2018 tirsdag 23. januar

Blokker. Uke 4, INF 1000, 13 sept Løkker og arrayer. Eksempel. Deklarasjoner inne i blokker. Institutt for Informatikk Universitet i Oslo

Leksjon 7. Filer og unntak

INF2100. Oppgaver 23. og 24. september 2010

INF1000: Forelesning 4. Mer om arrayer Metoder

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

Programmering Høst 2017

INF1000 : Forelesning 1 (del 2)

INF 1010, vår 2005 Løsningsforslag uke 11

INF2100. Oppgaver uke 40 og

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

Innhold. INF1000 Høst Klasser og objekter. Uke 7: Mer objektorientert programmering Siri Moe Jensen

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Java-kurs. Andreas Knudsen Nils Grimsmo 9th October 2003

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

INF1000 : Forelesning 3

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Løse reelle problemer

IN 211 Programmeringsspråk. Java. på 20 enkle ark. spesielt for de som kan. Simula. (og gjerne litt C) Ark 1 av 20

Forelesning inf Java 3

Læreboken på 45 minutter

INF Uke 10. Ukesoppgaver oktober 2012

Body Mass Index (BMI) INF1000 : Forelesning 3. Ferdig program (forts.) Ferdig program

Java 4. Mer om easyio Mer om forgreninger Løkker. 7. september 2004

TDT4100 Objektorientert programmering

Mer objektorientert programmering

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

INF1000: noen avsluttende ord

TDT4110 IT Grunnkurs Høst 2015

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF1000 Uke 4. Innlesning fra terminal. Uttrykk og presedens. Oversikt

Transkript:

IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no

Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler Klasser (i morgen og neste uke ved Stein Gjessing) Mer detaljert om Python Java (neste tirsdag)

Det finnes ikke bare ett programmeringsspråk 10 000-er av programmeringsspråk Hvorfor finnes det så mange? Det finnes mange ulike behov; f eks Python Java bash Excel SQL Nye behov oppstår I dag kan vi lage bedre programmeringsspråk enn for 50 år siden

Hver mann sitt programmeringsspråk Ikke veldig vanskelig Om dere programmerer en del og tar emnene IN2030 Prosjektoppgave i programmering INF3110 Programmeringsspråk INF5110 Kompilatorteknikk kan dere lage deres eget programmeringsspråk. (Se på Perl, Python og Ruby.) Mitt forsøk: Knod Syntax_expression: { lines: [1]; width: { w: 0.max( @ #.lines:.width() ); #.lines.n().>(1): w. +(.h_sep. (2))?; w; ; height: { #.lines[1].height() ; depth: { #.lines.n().=(1): #.lines[1].depth() True: #.lines[1].depth(). +( @ #.lines[2..]:.height().+(.depth()) ). +(#.lines.n().--(). (2,.vx_sep))? ; entry_x: { #.lines[1].entry_x( ) ; exit_x: { #.lines[#.lines.hi()].exit_x( ) ;

Hvorfor lager man et programmeringsspråk? Hvorfor finnes Python? Python ble opprinnelig laget i 1989 som et hobbyprosjekt av nederlenderen Guido van Rossum med denne filosofien: Beautiful is better than ugly Explicit is better than implicit Simple is better than complex Complex is better than complicated Readability counts Hvorfor ble Java laget? Java ble laget i 1996 av James Gosling og andre i SUN Microsystems (nå kjøpt av Oracle) med følgende mål: It must be simple, object-oriented, and familiar. It must be robust and secure. It must be architecture-neutral and portable. It must execute with high performance. It must be interpreted, threaded, and dynamic.

Hvis noen er interessert i hva jeg mener... Min personlige mening Python er best til nybegynneropplæring korte, enkle programmer jeg trenger nå kopling mot nyttige programpakker i kjemi, fysikk, matematikk,... Java er best til objektorientert programmering store programmer trygge programmer raske programmer

Hvis noen er interessert i hva jeg mener... Betyr hastighet noe? Her er en sammenligning av en (ikke veldig god) sorteringsfunksjon: def sorter(): ok = False while not ok: ok = True for i in range(1,n): if a[i] > a[i+1]: (a[i],a[i+1]) = (a[i+1],a[i]) ok = False Python 155,32 s static void sorter() { boolean ok = false; while (! ok) { ok = true; for (int i = 1; i < n; ++i) { if (a[i] > a[i+1]) { int temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; ok = false; Java 1,77 s Programmets kjøretid er oftest ikke spesielt viktig, men noen ganger er fart helt nødvendig.

Tilordning og uttrykk Noe er helt likt Uttrykk Uttrykk er svært like i de to språkene: Python Java 2 + v*(t+1) 2 * 3.1416 * r 2 + v*(t+1) 2 * 3.1416 * r Tilordning Tilordning (dvs gi en variabel en verdi) er også likt: Python Java n = 2 + v*(t+1) omkr = 2 * 3.1416 * r n = 2 + v*(t+1) omkr = 2 * 3.1416 * r

Innrykk vs krøllparenteser Noe ser anderledes ut men er egentlig likt I Java brukes krøllparenteser ({) i stedet for innrykk. Alle Java-setninger avsluttes med semikolon (;). Python if-tester Java if v < 0: v = -v if (v < 0) { v = -v; Linjeskift og innrykk betyr altså ikke noe i et Java-program: if (v < 0) { v = -v; if ( v< 0) { v = - v;

Innrykk vs krøllparenteser Python If-tester kan ha flere alternativer: if x < 0: f = -1 elif x == 0: f = 0 else: f = 1 Legg merke til: Java if (x < 0) { f = -1; else if (x == 0) { f = 0; else { f = 1; Java har parenteser rundt if-testen (i stedet for kolon etter) Java har ingen elif men i stedet er det mulig å skrive else if

Innrykk vs krøllparenteser Krøllparenteser brukes alle steder der Python krever innrykk, også i while- og for-løkker: Python Java while x <= 255: total = total + x x = 2 * x for i in range(1,10): sum = sum + i Legg også merke til: while (x <= 255) { total = total + x; x = 2 * x; for (int i = 1; i < 10; i++) { sum = sum + i; For-løkkene skrives ganske anderledes i Java enn i Python

Hvordan man kan skrive ut noe Utskrift I java finnes to metoder for utskrift: System.out.print skriver ut parameteren; hvis det er flere elementer, må de skjøtes sammen med +. System.out.println gjør det samme, men setter på et linjeskift. Python r = 2.0 v = 3.1416 * r * r print("r = "+str(r),end="") print(" gir areal "+str(v)) Java double r = 2.0; double v = 3.1416 * r * r; System.out.print("r = " + r); System.out.println(" gir areal " + v);

Java er gjennomført objektorientert Innpakning I Java må alt ligge i klasser class MinKlasse { : Metoden (dvs funksjonen) main starter det hele, og den må alltid deklareres som public static void main(string[] arg) class Hei { public static void main(string[] arg) { System.out.println("Hei!");

Hvordan får vi det hele i gang? Kjøring I Java brukes to programmer: javac oversetter.java-filen til én eller flere.class-filer. java utfører.class-filen(e) $ javac Hei.java $ java Hei Hei! $ class Hei { public static void main(string[] arg) { System.out.println("Hei!");

Dynamisk vs statisk typing Angivelse av variabeltype Python har dynamisk typing der verdiene har en gitt type; derfor kan variblene tilordnes verdier av ulike typer. Java har statisk typing der både variablene og verdiene har type; variabler kan bare få verdier av den riktige typen. Derfor: I Java må alle variabler deklareres. Python Java i = 5 v = 2.5 v = v + i s = "Svaret er " print(s+str(v)) int i = 5; double v = 2.5; v = v + i; String s = "Svaret er"; System.out.println(s + " " + v);

Java har mange typer å velge blant Javas typer De viktigste typene i Java er: int heltall (dvs 0, 1, 2, 3,... ) double flyt-tall (dvs 0.0, 1.5, 22.7, 3.14,... ) boolean logisk verdi (dvs true og false) char enkelttegn (dvs a, b,?, 5,... ) I tillegg finnes klassen String tekst (dvs "x", "abcd", "Hei!",... )

Finn medianen (dvs det midterste) av tre tall def finnmedian(a): return sorted(a)[1] data = [0] * 3 fil = open("tall.data") for i in range(3): data[i] = int(fil.readline()) print("medianen er " + str(finnmedian(data))) import java.io.file; import java.util.arrays; import java.util.scanner; class Median { private static int finnmedian(int[] a) { Arrays.sort(a); return a[1]; public static void main(string[] arg) { int[] data = new int[3]; Scanner fil = null; try { fil = new Scanner(new File("tall.data")); catch (Exception e) { System.out.println("Finner ikke tall.data!"); for (int i = 0; i < 3; i++) { data[i] = fil.nextint(); System.out.println("Medianen er " + finnmedian(data)); System.exit(1);

Det er litt jobb å lære seg et nytt programmeringsspråk Konklusjon Det finnes ikke noe beste språk for alle formål! Det er en styrke å kunne flere språk Alle informatikere må regne med å lære flere språk Det er egentlig bare én måte å lære et nytt programmeringsspråk på: 1 les dokumentasjonen 2 prøv selv med mange eksempler 3 om ikke alt fungerer som forventet, gjenta. Et godt råd: Når du skal oversette et Python-program til Java, skriv Java-koden på nytt fra bunnen av!