TDDD78 / 729A85 Objektorienterad programmering och Java

Relevanta dokument
TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDDD78 / 729A85 Objektorienterad programmering och Java. Kursinformation Java: Varifrån och varför? Java för Pythonprogrammerare

TDDD78 / 729A85 Objektorienterad programmering och Java

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

Introduktion till programmering

Introduktion till programmering

Mer Java 2015

Imperativ och Funktionell Programmering i Python #TDDD73

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

Introduktion till Python. TDDE23 Funktionell och imperativ programmering, del 1 Föreläsning 3 Peter Dalenius Institutionen för datavetenskap

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

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

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

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

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

OOP Objekt-orienterad programmering

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

Objektorienterad programmering

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

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

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

Objektorienterad Programmering (TDDC77)

(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

Föreläsning 1 & 2 INTRODUKTION

Variabler, värden och typer

Variabler, värden och typer

Inledande programmering med C# (1DV402) Introduktion till C#

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

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

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

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

SMD 134 Objektorienterad programmering

Föreläsning 1 & 2 INTRODUKTION

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

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

DD1314 Programmeringsteknik

Imperativ programmering. Föreläsning 4

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

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

Objektorientering: Lagring, räckvidd och livstid

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Objektorientering: Lagring och livstid

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

F4. programmeringsteknik och Matlab

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

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Imperativ programmering. Föreläsning 2

Program & programmering

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

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

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

JAVA Mer om klasser och objektorientering

Editering, Kompilering och Exekvering av Javaprogram

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

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

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

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

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

Introduktion till programmering. Programspråk och paradigmer

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

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

Programmering A. Johan Eliasson

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

OOP Objekt-orienterad programmering

Omprov 11/11. på förmiddagen.

Objektorienterad Programmering DAT043. Föreläsning 1 15/1-18 Moa Johansson

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Anteckningar 1: Grundläggande saker

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

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

Tentamen OOP

TDDD78 Att välja och planera ett projekt

Föreläsning 3-4 Innehåll

Föreläsning 1. Presentation av kursen Vad är programmering? Lite om java och utvecklingsmiljöer Aktivitetsdiagram Ett första program

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.

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Classes och Interfaces, Objects och References, Initialization

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

Imperativ programmering

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

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Selektion och iteration

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

TDDC77 Objektorienterad Programmering

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

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

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

Ingenjörsfirman Stéen Java Sida 1 av 1

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Transkript:

jonas.kvarnstrom@liu.se 2016 TDDD78 / 729A85 Objektorienterad programmering och Java

Fråga kommentera avbryt!

Inblandade 5 Examinator, kursledare: Jonas Kvarnström

Inblandade (2) 6 Handledare, sedan flera år Mikael Nilsson Daniel de Leng Piotr Rudol Mariusz Wzorek U-studenter D-studenter Kogvet-studenter?

Kunskaper 8 Vad kan ni redan? Grundläggande begrepp inom programmering Konkreta programmeringskunskaper i Python, motsvarande t.ex. TDDD73 Läsa!

Objektorienterad programmering ERA MÅL: Få kunskap och färdigheter inför framtida programutveckling

Utan OO har vi datastrukturer för lagring, som manipuleras utifrån av funktioner int dayssincetoday(date) boolean isleapyear(date) void add(date, days) Date-struktur year: 2021 month: 12 day: 31 Med OO har objekt både datalagring och egen funktionalitet, egna metoder Fundamental princip: Objektet bestämmer över sig själv (ingen manipulerar utifrån) Grunden för begrepp som ärvning, overriding, polymorfism, inkapsling, Date-objekt year: 2021 month: 12 day: 31 dayssincetoday() isleapyear() add(days) En klass är en datatyp, t.ex. Date, som anger: Vilken information lagras i objekt av typ Date? Vad kan man göra med objekt av typ Date?

Objektorienterad programmering Konkret OO-språk: Java Generella språkbegrepp: Stark typning, ERA MÅL: Få kunskap och färdigheter inför framtida programutveckling Generella färdigheter: Verktyg för utveckling Programmeringsbegrepp: Modularitet, Programmeringsvana!

D-studenter U-studenter Kogvet-studenter? Studenter, inte elever Kunskapstörstande Aktiva och proaktiva

Labbar och miniprojekt med instruktioner 3 hp (utökat) Godkänt / komplettering Egna tankar och reflektioner! Projekt med friare val 3 hp 3 / 4 / 5 / komplettering Föreläsningar MEDEL: Hur ska ni uppnå era mål? Kurslitteratur, info på nätet Automatisk kodinspektion för att hitta förbättringsmöjligheter Inlämning Feedback Komplettering Handledare att fråga och diskutera med

Föreläsningar 14 Introduktion Fö 1-2: Kursinfo, labbinfo, Java för Python-programmerare Utan objektorientering: Ändå mycket nytt Objektorienteringens grunder Principer och begrepp Konkret användning av OO i Java Grafiska gränssnitt med komponenter och händelsehantering Mer objektorientering Principer för "bra" programkod Återanvändbara designmönster Projektinfo Välja projekt, Funktionalitet i Java Sammansatta datatyper: Listor, Signalera och hantera fel Text, I/O, Bonus (nästa period) Överkurs för de som vill veta mer

Om föreläsningarna Föreläsningarna utgår från förkunskapskraven Ni som har programmerat i Java förut: Titta på innehållet på förhand Kan redan kanske läsa istället för att gå till föreläsningen Tillräckligt mycket nytt/osäkert: Kom hit och var beredda på att vissa avsnitt känns långsamma Övriga: Tveka aldrig att stoppa föreläsningen och fråga! 15 Bilderna innehåller mycket text Vanliga kommentarer: Bra att man kan läsa efteråt, kan förstå sammanhanget Känns ibland som att föreläsaren läser innantill

Blockschema 16 Ibland 8-10, 17-19

Steg 0: Labbanmälan Snarast: Anmälan till steg 1 i WebReg, enskilt 8 grupper (A-B-C-D-E-F-G-H), olika labbtider: D1A A, B D1B C, D D1C E, F U1 G, H Kogvet, övriga A, B, E, F

Steg 1: Grunder, labbmiljö, era första Java-program Vecka 3 Vecka 4 Vecka 5 Vecka 6 4 labbar, enskilt Lugnare, föreläsningstakt styr: Gör klart i tid! Steg 2: Fortsättning, miniprojekt Vecka 7 Vecka 8 Vecka 9 1 miniprojekt, enskilt Tyngre, mycket att hinna med Steg 3: Utforska, skapa ett eget projekt! Vecka 10 Vecka 14 Vecka 11 Vecka 12 Vecka 15 Vecka 16 Vecka 13 Vecka 17 Grupper om 2 rekommenderas Slut mitt i perioden: Andra kurser att fokusera på!

Uppföljning 19 Vad kommer sedan? OOP Begrepp Java Mer programmeringsvana! U: TDDD80 (11 hp) Mobila och sociala applikationer / Java D, U: TDDD86 (11 hp) Datastrukturer, algoritmer och programmeringsparadigm / C++ TDDB68 Processprogrammering och operativsystem / OO

Kursutveckling Nytt för i år: Omarbetning av föreläsningar Strömlinjeformning, mer fokus på de allra viktigaste begreppen Mer fokus på bra programmering, hur man använder det nya på bästa sätt (utgångspunkt i vanliga misstag och kompletteringar) 20 Mer tid för grundläggande labbar: 3+3 HP istället för 2+4 Önskat av studenter + oss Mer övning på vissa nya begrepp och tekniker Mer övning på bra programmering Designmönster flyttade från projekt till labbar Knepigt att genomföra själv för första gången Extra redovisningstillfällen för labbar Enbart redovisning även möjligt på vanliga labbar, men handledning prioriteras

Början och slutet 21

Historia: C, C++ 1960-talet: CPL BCPL B 1969-1973: C skrev om delar av Unix-kärnan 1978: K&R C "The C Programming Language" av Kernighan & Ritchie 1979: C with Classes OO-finesser från Simula (Bjarne Stroustrup) 23 1983: C++ Vidareutveckling "C++": "C = C + 1" 1985: The C++ Programming Language (bok) 1989: C++ 2.0

Historia: Oak 1 1990: Sun Microsystems påbörjade projekt StarSeven Avancerad interaktiv multikontroll : TV, video, satellit, Touchskärm, dra program i listan till en video, Trådlöst nätverk Unix-OS 24

Historia: Oak 2 Ville ha ett objektorienterat programmeringsspråk C++ sågs som problematiskt James Gosling utvecklade sitt eget: "C++ ++ " Omdöpt till "Oak" 1991 1994: Skapa spinoff-företag Bygga, programmera, demonstrera Gå i konkurs 25

Historia: Oak 3 Hitta en annan användning! 1994: WWW på gång Nov 1993: 500 WWW-servrar! Okt 1994: Netscape Mosaic 0.9! 26 Webben var väldigt statisk Interaktivitet? Formulär! JavaScript? Slutet av 1995 Flash? 1996 Oak passade perfekt! Portabelt, plattformsoberoende Bra stöd för nätverkskommunikation Språket döptes om till Java Många arv kvar från C++, C, till och med B (1969)

Varför Java? Varför Java, när det finns så många OO-språk? 27 Rena OO-språk (allt är objekt) Scala, Smalltalk, Eiffel, Ruby, JADE, Emerald, OO-språk med vissa procedurella aspekter Java, C++, C#, Python, VB.NET, Procedurella språk med OO-utökningar Fortran 2003, Perl, COBOL 2002, PHP, ABAP, Allgemeiner Berichts-Aufbereitungs- Prozessor Objektorientering kan också kombineras med andra paradigm! Haskell++ (t.ex.) är funktionellt + OO

Varför 2 Inte Python igen Vi behöver breda kunskaper, skilda perspektiv! 28 Lär dig åtminstone ett halvt dussin olika programmeringsspråk. Peter Norvig (2001) Teach Yourself Programming in Ten Years. http://norvig.com/21-days.html

Varför 3 Ett av de mest använda OO-språken, i många områden Webapplikationer Viktiga delar av Googles system Android-appar (med några skillnader) 29 Javascript Java Ruby PHP Python CSS C++ C# C HTML

GitHub + Stack Overflow 30

Varför 4 Många likheter med andra vanliga språk men "enklare grunder" än många av dessa 31 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Position Position Ratings Language jan-15 jan-16 jan-15 2 1 Java 16.703% 1 2 C 15.528% 4 3 C++ 6.953% 5 4 C# 6.705% 8 5 Python 5.045% 6 6 PHP 3.784% 16 7 Visual Basic.NET 3.274% 7 8 Javascript 2.613% C och dess efterföljare

Varför 5 Många egenskaper passar bra för undervisning 32 Mindre omfattande än vissa andra språk Jämförelsevis lätt att analysera Skräpsamling, minnesskydd "C++ is designed to give the programmer choice, even if this makes it possible for the programmer to choose incorrectly" Bra utvecklingsmiljöer, avancerat stöd Svårare att göra fel, lättare att hitta fel Fungerar på många plattformar Stort klassbibliotek C# mer bundet till Windows Funktionalitet som finns överallt

jonas.kvarnstrom@liu.se 2016 Introduktion till Java -- för Pythonprogrammerare

Två sammanhängande delar Föreläsning 1-2: Allmän orientering, teoretisk kunskap En första känsla för skillnaderna Labb 1: Prova på, få praktisk erfarenhet Förstå i detalj hur språken skiljer sig

Många nya begrepp, allt beror på allt annat Förenkling: Börja med Java utan objektorientering, fokusera på de andra skillnaderna Ändå lite knepigt: Java förutsätter objektorientering, klasser, Kompromiss: Använd vissa nyckelord utan att riktigt förstå dem än

Skillnad i mål och "filosofi" 37 Python Enkelt att skriva små program Ska vara lätt att komma igång med Java Fokus på större program OK om det kräver lite mer att komma igång Mer fokus på prestanda (!) Har många konsekvenser!

Kod på toppnivån (1) 38 Python: Kod kan skrivas på "toppnivån" Java: All kod är i en klass, alla satser i en metod (funktion) print("hello World") HelloWorld.py Kod på toppnivå körs när man "kör filen" Enkel uppgift enkel kod public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World!"); HelloWorld.java main() startas när man "kör klassen" Mer "overhead" runtomkring Märks mindre i större program! Har vissa fördelar klass = class metod = method

Interaktivitet (1) Python kan köras med kod sparad i en fil 39 zaza4 <23> python3 newton.py This program tries to find the square root of a number. Enter a number: 2 1.5 1.4166666666666665 1.4142156862745097 1.4142135623746899 1.414213562373095

Interaktivitet (2) eller i interaktivt läge 40 >>> 2+3 5 >>> 2+4*5-6 16 >>> print("hello world!") Hello world! >>> def greeting():... print( Nobody expects the Spanish Inquisition.")... print( Our chief weapon is surprise... and fear.")... >>> greeting() Nobody expects the Spanish Inquisition. Our chief weapon is surprise... and fear.

Interaktivitet (3) Java har inget interaktivt läge! Skriv alltid kod i en fil Fil: Newton.java 41 public class Newton { public static void findroot() { System.out.println("This program tries to find "); System.in.read ; double guess = x/2; for (int i = 1; i < 5; i++) { guess = (guess + x/guess) / 2; System.out.println(guess); public static void main(string[ ] args) { findroot();

Interaktivitet (4): Explicit kompilering Java har explicit kompilering ett extra steg 42 Vid utveckling Källkod i Java (text): Newton.java Kompilator: javac Newton.java Bytekod (binärt mellanformat): Newton.class Standardiserat, kan distribueras Vid körning Bytekod (binärt mellanformat): Newton.class Standardiserat, kan distribueras Virtuell maskin: java Newton

Interaktivitet (5) 43 Nära samband Ingen interaktiv prompt Explicit kompilering Ingen programkod på toppnivån

Syntaxskillnader 45 Fil: Newton.py # Vad ska vi skriva här? Fil: Newton.java // Vad ska vi skriva här? /* En lång kommentar som kan sträcka sig över flera rader */

Syntaxskillnader 46 Fil: Newton.py Fil: Newton.java public class Newton { All kod måste ligga i en klass Det som ingår i klassen läggs inom { (Java bryr sig inte om indentering!) Namnstandard för klasser: VarjeOrdHarStorBokstav JavaTest, ArrayList, Unicode kan använda å, Θ, π, Σ, Я, Ỡ

Syntaxskillnader 47 Fil: Newton.py def find_root(): Fil: Newton.java public class Newton { public static void findroot() { Just nu vill vi inte använda objekt Ändå måste metoder vara inuti klasser public vem som helst får använda static behöver inget objekt av typen Newton ("vanlig funktion, inte objektorienterad") void returnerar inget värde (procedur)

Syntaxskillnader 48 Fil: Newton.py def find_root(): Fil: Newton.java public class Newton { public static void findroot() { Klamrar runt metodens kod: { Namnstandard: storbokstavutomförstaordet

Syntaxskillnader 49 Fil: Newton.py def find_root(): print("this program tries to find.") Python-strängar: "Hello" eller 'Hello' Jämförelse: str1 == str2 Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); Java-strängar: "Hello" Jämförelse: str1.equals(str2) Apostrofer kan användas för enskilda tecken: 'H'

Syntaxskillnader 50 Fil: Newton.py def find_root(): print("this program tries to find.") Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); Utskrift är en metod, "println", i ett objekt, "System.out" Mer info senare! Semikolon efter satser Radbrytning räcker inte! Vi indenterar för läsbarhet Ignoreras av språket public class Newton { public static void findroot() { System.out.println("This ");

Syntaxskillnader 51 Fil: Newton.py def find_root(): print("this program tries to find.") x = eval(input("enter a number: ")) Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); ; Java är mindre anpassat för "textprogram" Enklare att visa en dialogruta (kommer på labben)

Syntaxskillnader 52 Fil: Newton.py def find_root(): print("this program tries to find.") x = eval(input("enter a number: ")) guess = x/2 Va? Det kan väl datorn fatta själv? Ja, men tänk om du skriver guss nästa gång. Mer att skriva men extra säkerhetsbälte. Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); ; double guess = x/2; Variabler måste deklareras: "Här kommer en ny variabel" (annars säger kompilatorn att "guess finns inte") Va? Det kan väl datorn fatta själv? Delvis, men det har också nackdelar. Vi återkommer till typning nästa gång! Java har explicit typning: Ange alltid vilken typ en variabel ska ha (double = "decimaltal") deklarera = declare

Syntaxskillnader 53 Fil: Newton.py def find_root(): print("this program tries to find.") x = eval(input("enter a number: ")) guess = x/2 Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); ; double guess = x/2; Namnstandard: storbokstavutomförstaordet

Syntaxskillnader 54 Fil: Newton.py def find_root(): print("this program tries to find.") x = eval(input("enter a number: ")) guess = x/2 for i in range(5): Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); ; double guess = x/2; for (int i = 0; i < 5; i++) { Heltalstyp: int Annan loopsyntax: (start; villkor; steg) Deklarera heltal i = 0 Så länge som i < 5 { Utför "kroppen" av loopen i++ (öka värdet på i)

Syntaxskillnader 55 Fil: Newton.py def find_root(): print("this program tries to find.") x = eval(input("enter a number: ")) guess = x/2 for i in range(5): Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); ; double guess = x/2; for (int i = 0; i < 5; i++) { Loopens kropp läggs också inom klamrar { Efter klamrar: Inget semikolon

Syntaxskillnader 56 Fil: Newton.py def find_root(): print("this program tries to find.") x = eval(input("enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess) / 2 Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); ; double guess = x/2; for (int i = 0; i < 5; i++) { guess = (guess + x/guess) / 2; Nu är guess redan deklarerad! Många operatorer liknar Python

Operatorer i Python och Java 57 Python Räknesätt: + - * / % Upphöjt till: ** Division avrundad nedåt: // Jämförelser: ==!= > < >= <= Olikhet: <> Tilldelning: = += -= *= /= %= Tilldelning: i += 1 Tilldelning: i -= 1 Bitoperatorer: & ~ << >> Java Samma Använd Math.pow(bas, exponent) Använd (int) (x / y) Samma Använd!= Samma Använd i++ Använd i-- Samma (men finns flera) Villkor: and or not Använd: &&! Förväxla inte med & eller IDEA varnar förklaring i labb 1!

Syntaxskillnader 58 Fil: Newton.py def find_root(): print("this program tries to find.") x = eval(input("enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess) / 2 print(guess) Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); ; double guess = x/2; for (int i = 0; i < 5; i++) { guess = (guess + x/guess) / 2; System.out.println(guess); Utskrift igen

Syntaxskillnader 59 Fil: Newton.py def find_root(): print("this program tries to find.") x = eval(input("enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess) / 2 print(guess) Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); ; double guess = x/2; for (int i = 0; i < 5; i++) { guess = (guess + x/guess) / 2; System.out.println(guess); print "Done!" System.out.println("Done!");

Syntaxskillnader 60 Fil: Newton.py def find_root(): print("this program tries to find.") x = eval(input("enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) print "Done!" Gruppering via indentering Radbrytning avslutar sats Fil: Newton.java public class Newton { public static void findroot() { System.out.println("This "); ; double guess = x/2; for (int i = 0; i < 5; i++) { guess = (guess + x/guess) / 2; System.out.println(guess); Gruppering via måsvingar { Semikolon eller { avslutar sats System.out.println("Done!"); Indentering ändå viktigt för läsbarhet!

Funktioner 61 Pythons funktioner på toppnivå kan "emuleras" i Java Använd en public static-funktion Bara till vi har Fil: Newton.java hunnit läsa om objekt! public class Newton { public static int findroot() { System.out.println("This program tries to find "); System.in.read ; double guess = x/2; for (int i = 1; i < 5; i++) { guess = (guess + x/guess) / 2; return guess; Ange alltid returtyp Om inget returneras: void Returnera värde med return public static void main(string[ ] args) { System.out.println(findRoot());

sats = statement

Villkor: if 63 Python if condition: statement1 statement2... Python if condition: statement1 statement2... else: statement1 statement2... Java if (condition) { statement1 statement2... Java if (condition) { statement1 statement2... else { statement1 statement2...

Villkor: if (2) 64 Python if condition: statement1 statement2... elif condition2: statement1 statement2... elif condition3: statement1 statement2... Java if (condition) { statement1 statement2... else if (condition2) { statement1 statement2... else if (condition3) { statement1 statement2...

Test av samma uttrycks värde 65 if (x + y == 0) { System.out.println( Exakt noll"); else if (x + y == 1 x + y == 2) { System.out.println( Ett eller två"); else if (x + y == 3) { System.out.println("Exakt tre"); System.out.println( Fler satser här"); else { System.out.println( Något annat"); Här jämför vi värdet på x+y med några kända konstanter konstanter = constants

Satser: switch 66 switch (x + y) { case 0: System.out.println( Exakt noll"); break; case 1: case 2: System.out.println( Ett eller två"); break; case 3: System.out.println( Exakt tre"); System.out.println( Fler satser här"); break; default: System.out.println( Något annat"); Tydligt att man testar värdet på ett uttryck; skriv uttrycket (x+y) en gång Kan göras med en switch-sats! Fungerar för heltal, strängar och enum-konstanter Klar : Hoppa ur switch-satsen Flera fall (1 och 2) ger samma kod att utföra Frivilligt: Vad händer när inget av fallen passar? Kräver extra "break"

Satser: switch med fallthrough 67 switch (x + y) { case 0: System.out.println( Exakt noll"); break; case 1: case 2: System.out.println( Ett eller två"); case 3: System.out.println( Ett, två eller tre"); break; default: System.out.println( Något annat"); Inget break här, så vi fortsätter in i nästa fall Fallthrough kan förvirra oftast bra att skriva på annat sätt!

Kommande föreläsningar: Explicit typning: I Java och många andra språk Mer kursinformation och labbinformation Objektorientering