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

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

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

TDDD78 / 729A85 Objektorienterad programmering och Java

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

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

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

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

OOP Objekt-orienterad programmering

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

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

(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

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

Variabler, värden och typer

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

Objektorienterad Programmering (TDDC77)

Variabler, värden och typer

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

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

Mer Java 2015

SMD 134 Objektorienterad programmering

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

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

Imperativ programmering. Föreläsning 4

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

Objektorientering: Lagring, räckvidd och livstid

Föreläsning 1 & 2 INTRODUKTION

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

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

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

Föreläsning 1 & 2 INTRODUKTION

Program & programmering

Imperativ programmering

Objektorientering: Lagring och livstid

Objektorienterad programmering

Introduktion till programmering. Programspråk och paradigmer

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

729G06 Föreläsning 1 Objektorienterad programmering

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

Planering Programmering grundkurs HI1024 HT data

Planering Programmering grundkurs HI1024 HT TIDAA

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

Editering, Kompilering och Exekvering av Javaprogram

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

Labb 1: Vad, hur, och varför?

Programmering A. Johan Eliasson

729G06 Programmering och logik. Info om pythondelen & introduktion till objektorienterad programmering.

TDDD78 Att välja och planera ett projekt

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?

Ingenjörsfirman Stéen Java Sida 1 av 1

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

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd!

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

Planering Programmering grundkurs HI1024 HT 2014

Klassdeklaration. Metoddeklaration. Parameteröverföring

Programmering B med Visual C

Anteckningar 1: Grundläggande saker

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?

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

OOP Tentamen

DD1314 Programmeringsteknik

Objektorienterad Programmering (TDDC77)

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

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.

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

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

TDDD78 Objektorientering: Lagring och livstid

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

TDIU01 - Programmering i C++, grundkurs

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

Sammansatta datatyper Generics: Parametrisk polymorfism

TDDD78 Att välja och planera ett projekt

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

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

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

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Innehållsförteckning

Föreläsning 6: Metoder och fält (arrays)

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

Objektorienterad programmering

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

Imperativ programmering. Föreläsning 2

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

Objektorienterad programmering i Java

Undervisning. Examination

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

TDDD92 Artificiell intelligens -- projekt

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

F4. programmeringsteknik och Matlab

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

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

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

Grundkurs i programmering - intro

Transkript:

TDDD78 / 729A85 Objektorienterad programmering och Java Kursinformation Java: Varifrån och varför? Java för Pythonprogrammerare jonas.kvarnstrom@liu.se 2017

Examinator, kursledare: Jonas Kvarnström

Fråga kommentera avbryt!

Utan OO har vi datastrukturer för lagring, som manipuleras utifrån av funktioner -struktur 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) Meningslöst? Grunden för begrepp som ärvning, overriding, polymorfism, inkapsling, -objekt En klass är en datatyp, t.ex. Date, som anger: Vilken information lagras i objekt av typ Date? Vad kan objekt av den typen göra?

Objektorienterad programmering Konkret OO-språk: Java Generella begrepp: Stark typning, modularitet, ERT MÅL (?) Kunskap och färdigheter inför framtida programutveckling Generella färdigheter: Verktyg för utveckling Programmeringsvana!

MEDEL: Hur ska ni uppnå era mål?

Studenter, inte elever Kan arbeta självständigt inom uppdragsgivarens ramar! Kunskapstörstande Aktiva och proaktiva Professionella; kan läsa instruktioner

Vad kommer först? Ibland föreläsning först läs + experimentera Ibland labba först sätt i ett sammanhang på föreläsningar Ofta fram och tillbaka! Lyssna Föreläsningar: Hur OO fungerar, intressanta begrepp Ramar för förståelsen, övergripande tankar och idéer Läsa Kursbok, instruktioner, material på nätet, Mer detaljer viktiga, men läses bäst i egen takt Utföra Labbar och projekt Erfarenhet, förståelse för vad man kan och vad man behöver öva på

Steg 0: Labbanmälan Snarast: Anmälan till steg 1 i WebReg, enskilt 8 grupper, olika labbtider: D1A1, D1A2 D1B1, D1B2 D1C1, D1C2 U1.1, U1.2 Även kogvet + tidigare

Labbar, steg 1: Era första Java-program Vecka 3 Vecka 4 Vecka 5 Vecka 6 Vecka 7 Vecka 8 Vecka 9 Steg 2: Fortsättning, miniprojekt Steg 3: Utforska, skapa ett eget projekt! Vecka 10 Vecka 11 Vecka 12 Vecka 13 Vecka 14 Vecka 15 Vecka 16 Vecka 17 Vecka 18 4 labbar, enskilt Lugn start, mycket handledning så gör klart i tid! 1 miniprojekt, enskilt Mer att hinna med; jobba på! Projektbeskrivning! Grupper om 2 rekommenderas Slutar mitt i perioden: Andra kurser att fokusera på! 3 hp Godkänt / komplettera 3 hp 3 / 4 / 5 / komplettera

Labbar, steg 1: Era första Java-program Fokus: Lär in rätt sätt, inte fel (svårt att bli av med) "Varsågod, lär dig simma!" eller ska man öva handgreppen först?

Labbar, steg 1: Era första Java-program Fokus: Lär in rätt sätt, inte fel (svårt att bli av med) Medel: Styr till bra lösningar Tutorial-form: Steg-för-steg-instruktioner Bara ett förberedelsesteg! Mindre erfarenhet effektiv metod för rätt programmeringsvanor Mer erfarenhet snabbt avklarat + kan få nya insikter / idéer Resultatet är inte kod, utan kunskap! Tänk, reflektera, förstå varför vi programmerar på ett visst sätt

Instruktioner och detaljstyrning minskar Steg 1: Era första Java-program Fokus: Lär in rätt sätt, inte fel (svårt att bli av med) Medel: Styr till bra lösningar Tutorial-form: Detaljerade instruktioner Steg 2: Miniprojekt Mindre detaljer, men mycket vägledning i början, för att strukturera ett större program Steg 3: Eget projekt! Helt fria händer Använd er kunskapstörst, lär er så mycket ni kan! I alla uppgifter: Tänk och reflektera, öka er kunskap

Handledare på labbar Fråga! Be om feedback även när allt verkar fungera: Största problemen är de man inte vet om Låt inte handledarna vila! Utvecklingsmiljön: Analyserar koden, visar problem / möjliga förbättringar, ger inlärningsmöjligheter Inlämningar: Kompletteringar ger också en chans att lära sig Feedback Kursdeltagare: Fritt fram att diskutera, så länge som lösningen är er egen Men ni ska bli självständiga ingenjörer! Tveka inte att fråga, men handledarna ska ge ledtrådar, inte färdiga svar.

Föreläsningar 20 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 Projektinfo Välja projekt, Funktionalitet i Java Sammansatta datatyper: Listor, Signalera och hantera fel Text, I/O, Bonus Överkurs för de som vill veta mer

Förutsättningar för föreläsningar 21 Föreläsningarna måste utgå från förkunskapskraven Vad kan ni redan? Grundläggande begrepp inom programmering Konkreta programmeringskunskaper i Python, motsvarande t.ex. TDDD73 Har du mycket erfarenhet av Java? Skumma genom bilderna på förhand avgör vad som är mest intressant Bonusföreläsningar på slutet Alla: Tveka aldrig att stoppa föreläsningen och fråga!

Webben 22 Intressant för några, men inte centralt? Rena fakta tillgängliga metoder,?

Föreläsningsbilder 23 Föreläsningsbilderna är ganska detaljerade Vanliga kommentarer: (+) Bra att både höra och se/läsa (+) Bra att man kan läsa efteråt, kan förstå sammanhanget ( ) Känns ibland som att föreläsaren läser innantill Inget alternativ är bättre på alla sätt!

Blockschema 25 Begränsad möjlighet att välja tider

Kursutveckling 26 Nytt förra året: Omarbetning av föreläsningar, fokus på viktigaste begreppen Mer tid för grundläggande labbar: 3+3 HP istället för 2+4 Mer fokus på bra programmering Extra redovisningstillfällen för labbar Nytt detta år: Mer omarbetning av föreläsningar Många avsnitt uppdaterade, förbättrade, omorganiserade Vissa avsnitt flyttade till webben Justeringar i labbar Git för versionshantering och inlämning Bättre schema genom att vissa labbar i PC-PUL

Början och slutet 27

Sammanhang 28 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++

Historia: C, C++ 30

Historia: Oak 1 31 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

Historia: Oak 2 32 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

Historia: Oak 3 33 Hitta en annan användning! 1994: WWW på gång Nov 1993: 500 WWW-servrar! Okt 1994: Netscape Mosaic 0.9! 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? 34 Varför Java, när det finns så många OO-språk? 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, Objektorientering kan också kombineras med andra paradigm! Haskell++ (t.ex.) är funktionellt + OO

Inte Python igen: Behöver behöver breda kunskaper, skilda perspektiv! 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 Vanligt: #2 på GitHub #1 på TIOBE index #2 på RedMonk Språk: Varför Java? Stilen liknar andra viktiga språk: C, C++, C#, (PHP, Javascript, ) Medelkomplexitet: Mer syntax än Python, mindre att lära än C++/ Passar till undervisning: Färre fallgropar, bra utvecklingsmiljöer, bra grundbibliotek av kod/klasser,

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

Många nya begrepp, mycket ny syntax 37 Python: Kan börja med enskilda uttryck (2+2), satser (print ) HelloWorld.py Java kräver OO: All kod är i en klass, alla satser i en metod (funktion) HelloWorld.java Kod på toppnivå körs när man "kör filen" Enkel uppgift enkel kod main() startas när man "kör klassen" Mer "overhead" runtomkring Märks mindre i större program! klass = class metod = method Kan inte förklara allt på en gång! Acceptera class, static, tills vidare förklaras mer senare

Interaktivitet (1) 38 Python kan köras med kod sparad i en fil

Interaktivitet (2) 39 eller i interaktivt läge

Interaktivitet (3) 40 Java har inget interaktivt läge! Skriv alltid kod i en fil Fil: Newton.java

Interaktivitet (4): Explicit kompilering 41 Java har explicit kompilering ett extra steg 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) 42 Nära samband Ingen interaktiv prompt Explicit kompilering Ingen programkod på toppnivån

Syntax: Kommentarer 44 Fil: Newton.py Fil: Newton.java

Syntax: Kod i klasser 45 Fil: Newton.py Fil: Newton.java 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 å, Θ Σ Я Ỡ

Syntax: Funktioner 46 Fil: Newton.py Fil: Newton.java 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)

Syntax: Klamrar 47 Fil: Newton.py Fil: Newton.java Klamrar runt metodens kod: { } Namnstandard: storbokstavutomförstaordet

Syntax: Strängar, utskrifter 48 Fil: Newton.py Fil: Newton.java Python-strängar: "Hello" eller 'Hello' Jämförelse: str1 == str2 Java-strängar: "Hello" Jämförelse: str1.equals(str2) Apostrofer kan användas för enskilda tecken: 'H'

Syntax: Semikolon, indentering 49 Fil: Newton.py Fil: Newton.java 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

Inmatning 50 Fil: Newton.py Fil: Newton.java Java är mindre anpassat för "textprogram" Enklare att visa en dialogruta (kommer på labben)

Deklarera variabler 51 Fil: Newton.py Fil: Newton.java 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. Va? Det kan väl datorn fatta själv? Delvis, men det har också nackdelar. Vi återkommer till typning nästa gång! Variabler måste deklareras: "Här kommer en ny variabel" (annars säger kompilatorn att "guess finns inte") Java har explicit typning: Ange alltid vilken typ en variabel ska ha (double = "decimaltal") deklarera = declare

Namnstandard 52 Fil: Newton.py Fil: Newton.java Namnstandard: storbokstavutomförstaordet

Loop över heltal 53 Fil: Newton.py Fil: Newton.java 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) }

Loop med klamrar 54 Fil: Newton.py Fil: Newton.java Loopens kropp läggs också inom klamrar { } Efter klamrar: Inget semikolon

Tilldelning och uttryck 55 Fil: Newton.py Fil: Newton.java Nu är guess redan deklarerad! Många operatorer liknar Python

Operatorer i Python och Java 56 Python Java

Mera utskrifter 57 Fil: Newton.py Fil: Newton.java Utskrift igen

Klart! 58 Fil: Newton.py Fil: Newton.java

Sammanfattning: Satser och gruppering 59 Fil: Newton.py Fil: Newton.java Radbrytning avslutar sats Semikolon eller {} avslutar sats Gruppering via indentering Gruppering via klamrar {} Indentering ändå viktigt för läsbarhet!

Repetition: Funktioner 60 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! Ange alltid returtyp Om inget returneras: void Returnera värde med return

sats = statement

Villkor: if 62 Python Java Python Java

Villkor: if (2) 63 Python Java

Test av samma uttrycks värde 64 Här jämför vi värdet på x+y med några kända konstanter konstanter = constants

Satser: switch 65 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? Tydligt att man testar värdet på ett uttryck; skriv uttrycket (x+y) en gång Kräver extra "break"

Satser: switch med fallthrough 66 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: När variabler har datatyper: I Java och många andra språk Mer labbinformation Objektorientering