De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Java C++ zVeilig zMachine- onafhankelijk zVeel libraries, ook voor Internet-I/O zSnel zNative executables zLibraries optimaal voor specifiek OS.

Verwante presentaties


Presentatie over: "Java C++ zVeilig zMachine- onafhankelijk zVeel libraries, ook voor Internet-I/O zSnel zNative executables zLibraries optimaal voor specifiek OS."— Transcript van de presentatie:

1 Java C++ zVeilig zMachine- onafhankelijk zVeel libraries, ook voor Internet-I/O zSnel zNative executables zLibraries optimaal voor specifiek OS

2 Methoden int fac (int x) { } int r=1; for (int n=1; n<x; n++); r *= n; return r; int fac (int x) { } int r=1; for (int n=1; n<x; n++); r *= n; return r; methode- header lokale variabele controle- structuren gekke operatoren methode- resultaat

3 Klassen class Demo { } int waarde; void vergroot (int a) { waarde *= a; } int huidig () { return waarde; } class Demo { }; int waarde; void vergroot (int a); int huidig (); void vergroot (int a) int huidig () { return waarde; } void Demo::vergroot (int a) { waarde *= a; } int Demo::huidig () klasse-header klasse-implementatie

4 Verdeling over files zIedere klasse in een aparte file z Klasse-headers in één file z Klasse-implementaties in een andere file. java. cc. h. cpp Unix Windows. c. h

5 Importeren van libraries zLibrary-klassen import java.io.* ;#include zEigen klassen #include “hallo.h”

6 Functies double sqrt (double x) { double y = 1.0; while (x*x!=y) y = (x+y/x)/2; return y; } double sqrt(double x); static double sqrt (double x) { double y = 1.0; while (x*x!=y) y = (x+y/x)/2; return y; } kunnen “los” staan moeten in een klasse class Math { }

7 Declaraties int k, n; Size p; new Size (); w h p k n int k, n; Size * p; p = new Size (); Size s; w h s pointer van objecten p =

8 Gebruik van pointers k = 6; p. w = 7; w h p k n k = 6; (*p). w = 7; s. w = 8; w h s p -> h = 9; 6 7 8 9 p. h = 9;

9 Pointers z“Java heeft geen pointers” zJava heeft alleen maar pointers z In C++ kun je objecten direct declareren z òf er een pointer naar laten wijzen zIn C++ kun je rare dingen doen met pointers zJava’s pointers zijn “veilig”

10 Gebruik van pointers p = new Size(); w h q w h s p q = p; r = & s ; r adres van

11 Gebruik van pointers int k, n; p k n q int *p, *q, *r; p = new int; q = & n; r a r = & a[5]; r ++ ; *q = 7; 7 *r = 13;

12 Pointer arithmetic int *p; p = & a[x]; p++; p += 5; *p = 13; array-grenzen kunnen niet worden gecontroleerd zJava heeft geen pointer-arithmetic

13 Arrays int [ ] p; p = new int [5]; p length 0 1 2 3 4 int p [ ]; p = new int [5]; p 0 1 2 3 4 int a[3]; a 0 1 2 int * p; uitwisselbare notaties moet een constante zijn

14 Arrays zArray is een object zlength is opvraagbaar zGrenzen gecontroleerd z Array-elementen los z Lengte niet opgeslagen z Live dangerously z Via een pointer of direct z Pointers en arrays uitwisselbaar

15 Array als parameter int som (int [ ] a) { int totaal = 0; for ( int n=0 ; n < a.length ; n++ ) totaal += a[n]; return totaal; } int som (int a[ ], int lengte) { int totaal = 0; for ( int n=0 ; n < lengte ; n++ ) totaal += a[n]; return totaal; } int *a aparte parameter alternatieve notatie

16 Strings String s; s = “aap”; ss ‘a’ ‘p’ 3 ‘a’ ‘p’ 0 char *s; s = “aap”; String t; t = s.substring(1); char *t; t = s+1; t ‘a’ ‘p’ 2 t

17 Strings zApart object-type zLengte is bekend zNiet meer wijzigbaar z Character array z Zero-terminated z Wel wijzigbaar zconcat maakt nieuw object aan zstrcat wijzigt bestaande string

18 Strings String s; s = “aap”; s s ‘a’ ‘p’ 3 char *s; s = new char[10]; strcpy (s, “aap”); s = s.concat (“je”); strcat (s, “je”); ‘a’ ‘p’ 5 ‘j’ ‘e’ ‘a’ ‘p’ 0 ‘j’ ‘e’ ‘a’ ‘p’ 0 zorg voor voldoende ruimte!

19 De functie main void main(String [] args) { if (...) System.exit (1); for (i... i<args.length...) verwerk (args[i]) } int main(int argc, char * argv [] ) { if (...) return 1; for (i... i<c...) verwerk (argv[i]) return 0; } char **argv alternatieve notatie

20 Geheugenbeheer Ding d; d = new Ding(); d Ding d; d = new Ding(); delete d; zGarbage wordt automatisch opgeruimd zGarbage zelf opruimen! (anders loopt het geheugen vol)

21 Constructor class Ding { int x; int [] p; Ding() { x = 0; p = new int[5]; } class Ding { int x; int [] p; Ding(); } Ding::Ding() { x = 0; p = new int[5]; } Ding::~Ding() { delete p; } ~Ding(); constructor: initialisatie object-var. destructor: “finalisatie” object-var.

22 Primitieve types void int long float double int long float double short unsigned char unsigned short unsigned int unsigned long char byte booleanint

23 Boolean zVergelijk-operatoren leveren False of True zLogische operatoren en if/while-opdracht krijgen False of True z Vergelijk-operatoren leveren 0 of 1 z Logische operatoren en if/while-opdracht interpreteren y0 als false yandersals true < <= == != && || !

24 Gebruik van boolean if (n==0) x = 1000; else x = 1/n; if (n==0) x = 1000; else x = 1/n; if (n=0) x = 1000; else x = 1/n; if (n=0) x = 1000; else x = 1/n; je merkt niet dat het geen echte boolean is fout gedetecteerd door compiler toegestaan maar waarschijnlijk niet de bedoeling...

25 Gebruik van boolean if (0<x && x<10)... if (0 < x < 10)... je merkt niet dat het geen echte boolean is fout gedetecteerd door compiler toegestaan maar waarschijnlijk niet de bedoeling... if (0 < x < 10)... ztypering geeft bescherming

26 Typering zint 0 zboolean False zpointer null zchar ‘\0’ z 0 z NULL z ‘\0’ if (p == null)... if (s.charAt(0) != ‘\0’)... if ( ! p )... if ( *s )... uitwisselbaar met 0 zonder cast converteerbaar

27 Voorbeeld void strcpy(char *doel, char *bron) { while (*bron) *doel++ = *bron++ ; *doel = 0; } void strcat(char *doel, char *bron) { while (*doel) doel++; while (*bron) *doel++ = *bron++ ; *doel = 0; } char * char *res = doel; return res; char *res = doel; return res;

28 Operator overloading zWat operatoren zoals + doen, hangt af van het type van de operanden zbeide int: int-optelling; als één double is, converteert de andere zje kunt zelf operatoren herdefiniëren voor andere typen zals één String is, converteert de andere (objecten: dmv toString)

29 Voorbeeld class Punt { int x, y; }; Punt operator+ (Punt a, Punt b) { return new Punt ( a.x+b.x, a.y+b.y); } moet twee parameters hebben zje mag zelfs herdefiniëren: y... ==... y...[...] y... =... y...++

30 Subklassen class Twee { int x, y; int som() { return x+y; } } class Drie extends Twee { int z; int som() { return super.som() + z; } } class Twee { int x, y; int som(); } class Drie : public Twee { int z; int som(); } int Twee::som () { return x+y; } int Drie::som () { return Twee::som() + z }

31 Virtual functions Twee t = new Twee(1,2); Drie d = new Drie(4,5,6); x = t. som (); // wordt 3 y = d. som (); // wordt 15 t = d; z = t. som (); // 9 of 15 ? if (y==z) print(“altijd”); else print(“nooit”); Twee t = new Twee(1,2); Drie d = new Drie(4,5,6); x = t -> som (); y = d -> som (); t = d; z = t -> som (); if (y==z) print(“som is virtual ”); else print(“som is gewoon”); dat mag!

32 Virtual functions zMethoden zijn altijd virtual z Gewone methoden: keus wordt door de compiler gemaakt z Virtual methoden: keus wordt run-time gemaakt adhv objecttype (iets) efficiënter nodig voor truc met herdefinitie à la paint class Twee { int x, y; virtual int som(); }

33 Libraries import java.lang.*; // String, Math, Thread,... import java.io.*; // File... import java.util.*; // Vector, Stringtokenizer,... import java.awt.*; // Frame, Button,... import java.net.*; // Image, AudioClip, URL #include // niet standaard // machine-specifiek // (zelfs compiler-specifiek) #include

34 Input / Output C++ stijl import java.io.*;#include ; System.out.println(“hoi”);cout << “hoi” ; System.out.println(“n:”+n);cout << “n:” << n ; c = System.in.read( );cin >> c; FileWriter f; f = new FileWriter(“aap”); f.println(“hoi”); ofstream f; f = new ofstream(“aap”); f << “hoi” ;

35 Input / Output C stijl import java.io.*;#include ; System.out.println(“hoi”);printf ( “hoi” ); System.out.println(“n:”+n);printf ( “n: %d”, n ); c = System.in.read( );c = getchar (stdin); FileWriter f; f = new FileWriter(“aap”); f.println(“hoi”); FILE *f; f = fopen(“aap”, “r”); fprintf (f, “hoi”);

36 En verder... zSubklassen extends Interfaces implements zProtectie public, private, protected per variabele/methode zExceptions zUniversele klasse Object z Subklassen met multiple inheritance z Protectie ypublic:, private: per groepje var/meth yfriend z Exceptions ? z Templates


Download ppt "Java C++ zVeilig zMachine- onafhankelijk zVeel libraries, ook voor Internet-I/O zSnel zNative executables zLibraries optimaal voor specifiek OS."

Verwante presentaties


Ads door Google