Vad var C? okontrollerade brutala typomvandlingar tillåts. void * typinformation kvar, vild adressering, arraygränser, odenierade variabelvärden...

Relevanta dokument
Introduktion till Java

Hur ser ett Java-program ut?

(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

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

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

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

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

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

Objektorienterad Programmering (TDDC77)

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Objektorienterad Programmering (TDDC77)

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

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

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Föreläsning 3-4 Innehåll

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

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

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

SMD 134 Objektorienterad programmering

Programmering A. Johan Eliasson

Tentamen OOP

TENTAMEN OOP

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

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

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

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

Föreläsning 7-8 Innehåll

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

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

Typkonvertering. Java versus C

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Del A (obligatorisk för alla)

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering

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

Tentamen , Introduktion till Java, dtaa98, dtea53

Malmö högskola 2008/2009 CTS

Övning från förra gången: readword

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

TDIU01 - Programmering i C++, grundkurs

Innehållsförteckning

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

Objektorienterad programmering i Java

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Classes och Interfaces, Objects och References, Initialization

Konstruktion av klasser med klasser

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Klassdeklaration. Metoddeklaration. Parameteröverföring

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.

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Föreläsning 5-6 Innehåll

OOP Objekt-orienterad programmering

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

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

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

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Parameteröverföring. Exempel. Exempel. Metodkropp

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

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

Objektorienterad Programmering (TDDC77)

Enkla variabler kontra referensvariabel

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

TENTAMEN OOP

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TENTAMEN OOP

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

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 3: Typomvandling, villkor och val, samt textsträngar

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

TDDC77 Objektorienterad Programmering

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Del A (obligatorisk för alla)

Klasshierarkier - repetition

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

F4. programmeringsteknik och Matlab

JAVAUTVECKLING LEKTION 7

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

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

Transkript:

Vad var C? I Imperativt I Maskinnära I minnesadresser, adressaritmetik I bitmanipulering I Statiskt typat: alla variabler har en typ I Svagt typat: vissa typomvandlingar görs automatiskt och okontrollerade brutala typomvandlingar tillåts. void * I Explicit minneshantering med malloc och free I Ingen runtime-kontroll när programmen exekverar (ingen typinformation kvar, vild adressering, arraygränser, odenierade variabelvärden... ) (26 oktober 2009 6.1 )

Några problem med C I Bristande säkerhet I Odenierade delar. T ex teckenhanteringen (signed eller unsigned) I Endast en namnrymd - blir lätt namnkollisioner i större system I Lätt att få minnesläckande program ingen automatisk skräpsamling I Begränsade möjligheter till strukturering av program: endast funktioner och ler I Begränsade datastrukturer: endast arrayer och poster I Ingen standard för graska användarinterface, fönsterhantering mm. (26 oktober 2009 6.2 )

När, till vad och varför används C I För att vara nära maskinvaran (delar av OS, drivrutiner,... ) I Inbyggda system (t ex tvättmaskiner, bränslestyrning... ) I Tids- och/eller minneskritiska tillämpningar I När inga andra språk nns eller går att använda (litet språk - nns för alla processorer, kan köras på nakna system) I Programmering av parallelldatorer (Typiskt med C, C++ eller Fortran). (OpenMP nns bara för dessa språk) (26 oktober 2009 6.3 )

Historia 1950-talet Fortran algol Lisp 1960-talet Simula67 1970-talet C 1980-talet C++ Smalltalk 1990-talet Java (26 oktober 2009 6.4 )

Vad är Java? Man kan mena två olika saker: I Programmeringsspråket I Plattformen. Denierar en omgivning i vilken programmen exekverar. När man laddar ner Java software development kit (SDK) så får man I en kompilator (javac) I en virtuell maskin (java) I ett klassbibliotek eller API (application programming interface) (26 oktober 2009 6.5 )

Karaktäristik av språket Java I Objektorienterat I Statiskt typat (som C) I Syntaktiskt likt C (och C++) I Väldenierat I Automatisk skräpsamling I Säkert (kontroll av arraygränser, typer, odenierade värden... ) (26 oktober 2009 6.6 )

Hello world i Java public class HelloWorld { public static void main(string [] args) { System.out.println("Hello world!"); Observationer: I Funktionen (metoden) main är förpackad i en klass I Ordet public I main returnerar ingenting (typ void) I static annan betydelse än i C I main har ett argument som är en array av strängar (lite annan syntax) I Utskrift på standard output med System.out.println (26 oktober 2009 6.7 )

Vad kan vi ta med oss från C? I De grundläggande datatyper: int, float, double,... men med exakta denitioner av talområden och precision I variabeldeklarationer I operatorerna + - * / ++ = += == < <=... I Satser: if, for, while, do, switch I Syntaxen för funktioner som här för det mesta kallas för metoder (26 oktober 2009 6.8 )

Vad kan vi inte ta med? I preprocessorn I programstruktur med funktioner på ler I deklarationsler I pekare motsvaras av referenser som är mycket mer begränsade I struct ersätts av klass som är ett mycket kraftfullare begrepp (26 oktober 2009 6.9 )

Exempel public class Factorial { public static long fact(int n) { long result = 1; for ( int i= 1; i<=n; i++ ) result *= i; return result; public static void main(string [] args) { for ( int i = 0; i <= 10; i++ ) { System.out.println( i + "! = " + fact(i) ); I Två funktioner (metoder) i klassen I Argumentet till System.out.println strängkonkatenering (26 oktober 2009 6.10 )

Primitiva datatyper Typnamn datatyp minnesutrymme exempel byte heltal 1 byte -127, 47 short heltal 2 byte 4711 int heltal 4 byte -748471 long heltal 8 byte 434112345L float yttal 4 byte -4.57e10f double yttal 8 byte 3.123e-128 boolean logisk 1 byte true, false char tecken (Unicode) 2 byte 'x', '4', '+', 'nn' (26 oktober 2009 6.11 )

Klassen String Förutom de primitiva datatyperna kan programmen hantera objekt. Ett objekt tillhör alltid en viss klass. Exempel: Den inbyggda klassen String String s; String t = "sträng"; System.out.println("Konkatenering av " + t + "ar"); s = "Denna strängs längd: "; System.out.println( s + s.length() ); s = "sträng"; if (s==t) System.out.println("Detta kommer INTE att skrivas"); if (s.equals(t)) System.out.println("Detta kommer att skrivas"); (26 oktober 2009 6.12 )

Klassen String forts Alltså: I String deklarerar variabler som skall referera strängar (objekt av typen String) I String-variabler kan tilldelas nya värden (sättas att referera andra objekt av typen String) I String-värden kan konkateneras med additionsoperatorn (+) I Automatisk typkonvertering vid konkatenering I Operationer (metoder) (length, equals,... ) denierade för strängobjekt. Punktnotation (jfr -> i C). I Relationsoperatorerna == och!= testar referenslikhet inte om objekten innehåller samma data (jfr string-pekare i C) (26 oktober 2009 6.13 )

Utmatning i terminalfönstret System.out.print(String s) System.out.println(String s) System.out.println() Enbart radbyte Från och med Java 5 nns en metod med namnet printf. Exempel: System.out.printf("Längden av strängen '%s' är %d\n", s, s.length()); Den inbyggda klassen NumberFormat kan användas för mer avancerade formateringar i enlighet med olika nationella konventioner. (26 oktober 2009 6.14 )

Scanner-klassen Kan användas för att läsa ord, tal mm (s.k. tokens) från tangentbordet. Koppla ett Scanner-objekt till inströmmen: Scanner sc = new Scanner(System.in) Några metoder: sc.hasnext() sc.next() sc.nextline() sc.hasnextint() sc.nextint() sc.hasnextdouble() sc.nextdouble() boolean String String boolean int boolean double (26 oktober 2009 6.15 )

Exempel: Tabell med funktionsvärden // TableIO.java - Demonstrerar användning av Scanner import java.util.scanner; class TableIO { public static void main(string [] args) { double x, xlow, xhigh; int number; Scanner sc = new Scanner(System.in); System.out.print("Undre gräns: "); xlow = sc.nextdouble(); System.out.print("Övre gräns: "); xhigh = sc.nextdouble(); System.out.print("Antal värden: "); number = sc.nextint(); double step = (xhigh - xlow) / (number-1); for ( int i = 1; i<=number; i++ ) { x = xlow + (i-1)*step; System.out.print(x); System.out.println("\t" + Math.log(x)); // <<< import // <<< Math.log (26 oktober 2009 6.16 )

Exempel: Tabell med funktionsvärden forts Körresultat: vega$ javac TableIO.java vega$ java TableIO Undre gräns: 0 Övre gräns: 10 Antal värden: 11 0.0 -Infinity 1.0 0.0 2.0 0.6931471805599453 3.0 1.0986122886681096 4.0 1.3862943611198906 5.0 1.6094379124341003 6.0 1.791759469228055 7.0 1.9459101490553132 8.0 2.0794415416798357 9.0 2.1972245773362196 10.0 2.302585092994046 (26 oktober 2009 6.17 )

Exempel: Tabell med funktionsvärden forts Vad händer om man matar in felaktiga indata? vega$ java TableIO Undre gräns: 0 Övre gräns: 10 Antal värden: 12.3 Exception in thread "main" java.util.inputmismatchexception at java.util.scanner.throwfor(scanner.java:819) at java.util.scanner.next(scanner.java:1431) at java.util.scanner.nextint(scanner.java:2040) at java.util.scanner.nextint(scanner.java:2000) at TableIO.main(TableIO.java:16) vega$ (26 oktober 2009 6.18 )

Klasser och objekt Klasser används ofta för att beskriva någon typisk enhet i programmet. t ex något konkret fysiskt objekt (bil, kund, kassa, kö) eller något mer abstrakt begrepp (teckenström, skärmfönster) eller kanske något ännu mer abstrakt (fyrdimensionellt klot, funktion... ) En klass är alltså en abstrakt beskrivning av någon viss typ av objekt. Objekten karakteriseras av I egenskaper eller attribut t ex färg, form, bränslemängd, kölängd, expedieringstid,... och I operationer eller metoder dvs vad man kan göra med dem (fylla på bensin i ett bilobjekt, ta ut första värdet ur ett köobjekt, ändra storleken på ett fönsterobjekt... ) (26 oktober 2009 6.19 )

Exempel: En Kund-klass public class Kund { private int ankomsttid; private int exptid; public Kund(int atid, etid) { ankomsttid = atid; exptid = etid; public int getatid() { return ankomsttid; public int getetid() { return exptid; // En konstruktor // selektor-metod // selektor-metod (26 oktober 2009 6.20 )

Observationer på Kund-klassen I Två privata attribut I En konstruktor som ger värden till attributen I Två publika metoder som returnerar värdet på respektive attribut Operatorn new används för att skapa objekt. Exempel: Kund k1 = new Kund( 10, 5); Kund k2 = new Kund( 11, 20); System.out.println( "Sammanlagd etid: " + (k1.getetid() + getatid()) ); Observera parenteserna i anropet till println! (26 oktober 2009 6.21 )

Exempel: En tärningsklass Antag att man vill representera en eller era tärningar. Vilka egenskaper (attribut) och vilka operationer (metoder) skall vi ge tärningar? Om vi skall använda klassen för att simulera slå tärning(ar) och titta på resultatet så kan vi ignorera era av de egenskaper som verkliga tärningar har: färg, storlek, material... Egenskaper vi behöver: antal sidor och aktuellt värde. Operationer vi behöver: skapa tärning, slå tärning och avläs värde. (26 oktober 2009 6.22 )

Exempel: En tärningsklass forts public class Die { private int numberofsides; private int value; public Die() { numberofsides = 6; public Die(int ns) { numberofsides = ns; // Konstruktor // Konstruktor public int roll() { // Mutator return value = (int) (Math.random()*numberOfSides) + 1; public int get() { return value; // Selektor (Klassen är inte perfekt men vi kan inte få allt på en gång... ) (26 oktober 2009 6.23 )

Observationer på Die-klassen I Två konstruktorer s.k. överlagring I Klassen Math med metoden random I Privata attribut, publika metoder I Tilldelning har värde I Inget static-deklarerat I Typecast som t ex (int) (26 oktober 2009 6.24 )

Die-klassen forts Hur skapar man tärningar? Die t1 = new Die(); // Tärning med 6 sidor Die t2 = new Die(42); // Tärning med 42 sidor Die t0 = null; // Referens till 'ingenting' t1.roll(); // Slår den ena tärningen. (Behöver inte ta emot värdet) t0.roll(); // Illegalt Fråga: Var kan man göra detta? Svar: I (och endast i) andra metoder. Insikt: Jag måste alltså ha skapat ett objekt innan jag kan anropa dess metoder... Förundrad fråga: Hur kommer man igång med det första objektet? Svar: static-metoder hör till klassen som helhet, inte till enskilda objekt (jfr Math.log) (26 oktober 2009 6.25 )

Die-klassen forts public class Die { private int numberofsides; private int value; public Die() { numberofsides = 6; public Die(int ns) { numberofsides = ns; public int roll() { return value = (int) (Math.random()*numberOfSides) + 1; public int get() { return value; public static void main(string [] args) { Die t = new Die(); for ( int i = 1; i<20; i++ ) System.out.println(t.roll()); (26 oktober 2009 6.26 )

Klasser, programstruktur och konventioner I Ett program består av en eller era klasser I Varje klass lagras på en l med samma namn I Klassnamn skall börja på stor bokstav men attribut och metoder på liten. I Attributen görs vanligen private medan metoderna oftast är public I För att en klass skall kunna köras som ett eget program måste det nnas en static-metod med namnet main med parameter som exemplen. (26 oktober 2009 6.27 )

Exempel: Slå tärningar till par Användning av tärningsklassen från en annan klass. public class RollUntilEqual { public static void main(string [] args) { Die t1 = new Die(); Die t2 = new Die(); int n = 1; while (t1.roll()!=t2.roll()) n++; System.out.println("Antal kast till par: " + n); (26 oktober 2009 6.28 )

bellatrix$ ls -l -rw-r--r--+ 1 tom it 1009 Sep 23 20:47 Die.class -rw-r--r--+ 1 tom it 510 Aug 19 14:00 Die.java -rw-r--r--+ 1 tom it 251 Sep 23 21:18 RollUntilEqual.java bellatrix$ javac RollUntilEqual.java bellatrix$ ls -l -rw-r--r--+ 1 tom it 1009 Sep 23 20:47 Die.class -rw-r--r--+ 1 tom it 510 Aug 19 14:00 Die.java -rw-r--r--+ 1 tom it 776 Sep 23 21:24 RollUntilEqual.class -rw-r--r--+ 1 tom it 251 Sep 23 21:18 RollUntilEqual.java bellatrix$ java RollUntilEqual Antal kast till par: 13 bellatrix$ java RollUntilEqual Antal kast till par: 1 bellatrix$ java RollUntilEqual Antal kast till par: 4 bellatrix$ java RollUntilEqual Antal kast till par: 4 bellatrix$ (26 oktober 2009 6.29 )

Exempel: array import java.util.scanner; public class CheckDie { public static void main(string[] args) { Scanner sc = new Scanner(System.in); System.out.print("Number of sides: "); int nsides = sc.nextint(); int[] freq = new int[nsides]; Die d = new Die(nSides); for (int i= 1; i<=1000; i++ ) { freq[d.roll()-1]++; for (int i= 0; i<nsides; i++) System.out.println( (i+1) + "\t" + freq[i] ); (26 oktober 2009 6.30 )

Observationer på CheckDie-klassen I Flera huvudprogram (main()) - bara ett används I Användning av en array I Syntaxen i array-deklarationen (placeringen av []) I Arrayer skapas dynamiskt med new I Arrayer hanteras med referenser I Minsta index 0 i array (26 oktober 2009 6.31 )