Typkonvertering. Java versus C

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

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

Föreläsning 3-4 Innehåll

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

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

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

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

Föreläsning REPETITION & EXTENTA

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

TDDC77 Objektorienterad Programmering

(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

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

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

Föreläsning 2, vecka 8: Repetition

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

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

OOP Objekt-orienterad programmering

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

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

Föreläsning 5-6 Innehåll

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Undervisning. Examination

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Instuderingsfrågor, del D

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

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

DAT043 Objektorienterad Programmering

SMD 134 Objektorienterad programmering

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 11

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Tentamen ID1004 Objektorienterad programmering May 29, 2012

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

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

Objektorienterad Programmering (TDDC77)

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen OOP

Classes och Interfaces, Objects och References, Initialization

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

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

Programmeringsteknik I

JAVAUTVECKLING LEKTION 8

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

Föreläsning 8: Exempel och problemlösning

Objektorienterad programmering i Java

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

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.

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

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

Objektorienterad programmering

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

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

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Undervisning. Examination

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

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

Objektorienterad programmering Föreläsning 9. Copyright Mahmud Al Hakim Agenda (halvdag)

OOP Objekt-orienterad programmering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Tentamen ID1004 Objektorienterad programmering April 7, 2015

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

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

F4. programmeringsteknik och Matlab

OOP Objekt-orienterad programmering

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

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Den som bara har en hammare tror att alla problem är spikar

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Anteckningar 1: Grundläggande saker

Tentamen ID1004 Objektorienterad programmering December 15, 2012

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

TDIU01 - Programmering i C++, grundkurs

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Objektsamlingar i Java

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

Arrayer. results

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Transkript:

Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då gäller följande: Uttryck Typ Värde n/4 int n/4. double.75 5+n/4 > x boolean false Tilldelning och konvertering Med samma deklarationer har vi att double y = n; double z = n/4; är typkorrekta. y får värdet 4. och z värdet.. Följande ger däremot typfel: int k = x; int m = n/4.; Bakomliggande princip Implicit konvertering får inte göras om man kan förlora information! Typer Explicit typkonvertering int n = (int)(6 * Math.random()); Math.random() ger ett slumpmässigt tal mellan och 1 (kan vara men inte 1) av typ double. Alltså är 6 * Math.random() ett double-värde mellan och 6. Typkonverteringen (int)... konverterar detta till ett heltal genom att avrunda nedåt. Resultatet blir ett slumpmässigt heltal mellan och 5 (inklusive). Utan typkonvertering skulle vi få typfel. Typer Java versus C HarmonicSum i C #include <stdio.h> double hsum(int n) { double sum = ; int i; for (i=1; i<=n; i++) sum = sum + 1./i; return sum; int main(int argc, char** argv) { int n; sscanf(argv[1],"%d",&n); printf("summan med %d termer ", n); printf("blir %f\n", hsum(n));

Satser: while-satsen Syntaxbeskrivning while (expression) { Typvillkor expression måste ha typ boolean. Effekt while-satsen exekveras på följande sätt: 1 expression beräknas. 2 Om resultatet blir false, avslutas exekveringen av satsen. Om resultatet blir true, exekveras och därefter börjar man om med 1). : kvadratrötter Beräkning av a. Låt x = 1 och beräkna xn+1 = (xn + a/xn)/2, n = 1, 2,... tills skillnaden mellan två successiva xn blir högst ε. Uppgift Definiera en funktion public static double sqrt(double a) som implementerar denna algoritm. Välj ε = 1 1 Lösning Kodat i Java public static double sqrt(double a) { final double eps = 1e-1; double oldx = 1; double newx = (1+a)/2; while (Math.abs(oldx-newx) > eps) { oldx = newx; newx = (oldx + a/newx)/2; return newx; Variabler med modifierare final En variabel som deklarerats att vara final kan bara tilldelas ett värde en gång. Kan hjälpa till att hitta fel och kan ge bättre kod. for-satsen Syntax-beskrivning: for-statement for(initialization; continuation-condition; update) { Typvillkor Typen av continuation-condition måste vara boolean. Effekt for-satsen är likvärdig med initialization while (continuation-condition) { update

sqrt och klassen Math if-satsen, form 1 (utan else) Många av matematikens vanliga funktioner finns i standardklassen Math; klassnamnet måste anges vid användning: Math.sqrt(2.5). Ni måste lära er att hitta funktioner i Java 1.6 API (Application Programming Interface. Här beskrivs alla biblioteksklasser och deras metoder. En länk finns på kursens webbplats. Uppgift Skriv ett program som tar ett positivt heltal n som kommandoradsargument och skriver ut alla primtal mindre än n. Syntaxbeskrivning if (expression) { Typvillkor Typen av expression måste vara boolean. Effekt Satsen exekveras på följande sätt: Exekvera expression. Om resultatet blir true, exekvera, annars avsluta satsen. Andra former av if Tvåvägs if (expression) { else { Flervägs if (expression) { else if (expression) { else { Collatz problem Formulering För ett givet positivt heltal N, bilda en talföljd a, a1, a2,... på följande sätt. a = N odefinierat om ak = 1. ak+1 = 3 ak + 1 om ak är udda och skilt från 1. ak/2 om ak är jämnt. Kommer talföljden att för alla N komma till 1 och sluta? N = 15. Följden blir 15, 46, 23, 7, 35, 16, 53, 16, 8, 4, 2, 1, 5, 16, 8, 4, 2, 1

Funktioner och subrutiner Funktioner En funktion har formen modifiers return-type name (parameters) { Varje gren av exekvering måste avslutas med en sats return expression; En subrutin har formen modifiers void name (parameters) { En gren av exekvering får avslutas med satsen return; Lokala variabler, parametrar och returvärde Lokala variabler En variabel som deklareras i en subrutin kan bara användas där; den är lokal. Parametrar Parametrarna till en subrutin är lokala variabler, men de får sina startvärden satta när subrutinen anropas; anropets argumentvärden beräknas och kopieras till subrutinens parametrar innan subrutinens kropp exekveras. Returvärde När man under exekvering av en funktions kropp kommer till return expr, beräknas värdet av expr; funktionen avslutas och detta värde returneras. Mer om lokala variabler Mer om parametrar Lokala variabler måste initieras före de används Kompilatorn kontrollerar detta; ibland är den för försiktig, men det är oundvikligt. Följande (idiotiska) kod underkänns, trots att y alltid skulle initieras:... double x = 2.5; double y; if (x * Math.sin(x + 1.5) < 1) y = 3; x = 2 * y; Parametrar är read only public class Example { public static void double (int n) { n = 2*n; public static void main(string[] args) { int n = 5; double(n); System.out.println(n); Vad skrivs ut?

Biblioteksklasser Testning Funktionsbibliotek Det är vanligt att samla ett antal funktioner och subrutiner för ett visst tillämpningsområde i en biblioteksklass. : Klassen Math. Klassnamnet bör avspegla tillämningsområdet. En sådan klass innehåller normalt ingen main. Användning Om man i en annan del av programmet vill använda funktioner från klassen LinearAlgebra måste man ange namnen som LinearAlgebra.vectorSum, LinearAlgebra.matrixProduct, osv. Enhetstest Ett funktionsbibliotek som ska användas i flera program måste testas noga. Ett sätt är att inkludera en main som anropar alla funktioner i biblioteket för olika argument, kontrollerar resultaten och skriver ut testinformation. När man senare ändrar något i biblioteket, till exempel för att öka effektiviteten, kör man testet igen. Det är mycket vanligt att förbättringar introducerar nya fel! Systemtest Program består typiskt av många samverkande klasser. Systemtest testar hela systemet; detta underlättas om varje klass för sig är noggrant enhetstestad. (eng. arrays) är referenstyper Vektorer En sekvens av relaterade värden kan lagras i ett fält av variabler med gemensamt namn och indexering för att skilja de olika variablerna åt. Alla variabler i ett fält måste ha samma typ. Typen int[] är ett fält av heltalsvariabler. Typen double[] är ett fält av flyttalsvariabler. Typen String[] är ett fält av strängvariabler. Deklaration int[] a; deklarerar fältet a av heltalsvariabler. Skapande a = new int[4]; skapar ett nytt fält; elementen heter a[], a[1], a[2] och a[3] och får alla startvärdet. Variabeln a innehåller en referens till fältet. Innan fältet skapats (med new) är innehållet i a odefinierat och försök att använda a[] osv ger exekveringsfel. int[] a; a a = new int[4]; a a[] a[1] a[2] a[3]

Mer om fält Ofta görs deklaration och skapande samtidigt: int[] a = new a[4]; Elementens startvärden är för numeriska typer, false för boolean och null för referenstyper. Index börjar alltid med. Antalet element ges av a.length. Sista elementet i fältet a är alltid a[a.length-1] Man kan skapa ett fält och initiera med andra startvärden: int[] dayspermonth = {31,28,31,3,31,3,31,31,3,31,3,31; Antalet dagar i januari är dayspermonth[] (!). som parameter Skriv en funktion arraysum med signaturen public static int arraysum(int[] a) När man skriver funktionen antar man att fältet är skapat. Nedan skriver vi inte ut public static. Flera parametrar Skriv en funktion scalarproduct med signaturen double scalarproduct(double[] a, double[] b) När man skriver funktionen antar man att fälten är lika långa. som resultat Skriv en funktion vectorsum med signaturen double[] vectorsum(double[] a, double[] b) som parametrar och resultat Objekt Objekt som parametrar När ett fält är parameter är det referensen som kopieras till parametern. Konsekvenser: Själva fältet med alla data kopieras inte; det skulle bli ineffektivt för stora fält. Om subrutinen tilldelar till en variabel i fältet, så får det effekt för anroparen! som funktionsresultat En funktion som returnerar ett fält returnerar en referens. Konsekvenser: et måste skapas (och fyllas med resultat) i subrutinen. Anroparen ska inte skapa något fält: double[] c = LinearAlgebra.vectorSum(a,b); är objekt Ett fält är ett objekt. Objekt i Java karakteriseras av att variabler av objekttyp innehåller en referens (eller pekare) till objektet, och inte objektet själv. Värden av primitiva typer är inte objekt; variabler innehåller själva värdet. En variabel av referenstyp kan innehålla det speciella värdet null. Ett objekt som ingen variabel längre pekar på återvinns av skräpsamlaren. Andra objekt Den viktigaste användningen av klasser är inte som funktionsbibliotek, utan som mallar att skapa objekt från.