van C++ studiematriaal http://java.sun.com/docs/books/tutorial/index.html " diverse Java tutorials op WWW " Thinking in Java.



Vergelijkbare documenten
Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2

Kleine cursus PHP5. Auteur: Raymond Moesker

Een stoomcursus door Edgar de Graaf, november 2006

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Zelftest Programmeren in Java

Datastructuren Werkcollege Intro

Java. Basissyllabus. Egon Pas


HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Programmeren in Java 3

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

Overerving & Polymorfisme

Introductie in C++ Jan van Rijn. September 2013

Vakgroep CW KAHO Sint-Lieven

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

IMP Uitwerking week 13

Ingebouwde klassen & methodes

C++ C++ als een verbetering van C. Abstracte datatypen met classes. Constructoren en destructoren. Subklassen. binding van functies

Programmeren. Cursus Python

Programmeren in C++ (deel 1)

Datastructuren en algoritmen

Wat is een grafische gebruikersinterface (GUI)?

Modelleren en Programmeren

Tentamen Imperatief Programmeren

IDE gebruik en introductie Java. Programmeertechnieken, Tim Cocx

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Deel 1 : Gesloten Boek

Objectgeoriënteerd programmeren in Java 1

Game of Life in Java

OBJECT SPAGHETTI : PATTERNS BIEDEN UITKOMST? Wat is het probleem nou eigenlijk? public class CoffeeDrinker { private CoffeeProducer mycoffeeproducer;

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

Modulewijzer Tirdat01

Modelleren en Programmeren

Inhoud leereenheid 2. Overerving (1) Introductie 59. Leerkern 60. Samenvatting 88. Zelftoets 90. Terugkoppeling 94

Deeltentamen Grammatica s en ontleden 22 december 2005

Modelleren en Programmeren

VI. Klassen en objecten

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

Programmeren in Java 3

Lessen Java: Reeks pag. 1

Modelleren en Programmeren

Inleiding C++ Coding Conventions

Inleiding Een terugblik op C... 3

Een gelinkte lijst in C#

Lessen Java: Reeks 3. David Blinder Jan G. Cornelis

eerste voorbeelden in Java

Programmeren in Java 3

Om de libraries te kunnen gebruiken, moet de programmeur (een deel van) zijn programma in C/C++ schrijven.

Voor het bepalen van de getalswaarde van een string is een standaardmethode beschikbaar: n = Integer.parseInt(s);

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

Objectgeoriënteerd Programmeren in C++

Objectgericht programmeren 1.

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

Vraag 1: Software Levenscyclus

Imperatief Programmeren, derde deeltentamen (INFOIMP) 4 november 2005

ASRemote WebService. Via deze webservice kunt u:

Zo vind u hierin de volgende documentatie over de klasse Applet: +----java.awt.panel java.applet.applet

Datastructuren: stapels, rijen en binaire bomen

Abstracte klassen & Interfaces

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

9 Meer over datatypen

Opdracht 7a. Applicatiebouw 2014/2015

Dergelijke functionaliteit kunnen we zelf ook aan eigen code toevoegen.

Dynamiek met VO-Script

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Programmeren in Java les 3

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

De MySQL C API. Variabelen in C Functies in C Pointers in C

Introductie en even voorstellen

vandaag èn vrijdag deadline maandag 12 dec.

Datastructuren: stapels, rijen en binaire bomen

Modelleren en Programmeren

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Labo 1 Programmeren II

Info-books. Toegepaste Informatica. Deel 37: Programmeren in Java HO37. K. Behiels - J. Gils

Ontwerp van Informatiesystemen

Modulewijzer tirprog02/infprg01, programmeren in Java 2

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

De Vergeten Abstracties

Java Programma structuur

int getaantalpassagiers{): void setaantalpassagiers(int aantalpassagiers);

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing.

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

int main() { int m; m = power(2,3) /* berekent 2^3 en geeft de resultaat naar m terug */ }

Klassen en interface worden gedeclareerd in een andere klasse/interface. Vermeiden Altijd static

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Voorbeeld: Simulatie van bewegende deeltjes

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

JAVA DEEL 2 H7 ARRAYS

Javascript oefenblad 1

1 Ontwerppatronen. 1.1 Het Command patroon

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Transcriptie:

Van C++ naar Van boekhouder naar ontwerper van C++ naar!deze sheets studiematriaal!zoek zelf een boek: " tutorial. Ook online zie http://java.sun.com/docs/books/tutorial/index.html " diverse tutorials op WWW " Thinking in. Ook online zie http://www.mindview.net/books/tij/ " voor studenten! 2 SDK Standard Edition version 1.5 (30 september 2004) " http://java.sun.com!ibm J9 voor QNX " http://www-106.ibm.com/developerworks/java/ van C++ naar Wat gaan we doen?!enkele vragen beantwoorden. " Wat is er zo bijzonder aan? " Wat zijn de verschillen tussen C++ en?!enkele voorbeelden bekijken. " Welkom bij de workshop " Breuken " Honden 35 eigenschappen! is eenvoudiger te gebruiken dan C++ maar ook minder krachtig.! is eenvoudig te gebruiken voor C++ programmeurs.! is (bijna) volledig object georiënteerd.! is platform onafhankelijk. JVM= Virtual Machine " AWT (Abstract Windows Toolkit) " Swing (pure alternatief voor AWT, recommended) " Multi-threading " Networking! is ideaal voor WWW applicaties. 36 Verschillende soorten programma s is niet alleen voor het WWW!Applicaties (standalone applications) " Tekst in- en uitvoer te vergelijken met een C++ programma met in-en uitvoer via cin en cout. " Grafische gebruikers interface (GUI) te vergelijken met een Windows programma.!applets " Een in een HTML document opgenomen applicatie die uitgevoerd wordt door de browser. 37 script javascript!= java!dit is een zeer eenvoudige programmeertaal die in browsers te gebruiken is.!een script is in source code opgenomen in een html file.!heeft dezelfde syntax als.!heeft verder NIETS met te maken! Is niet OO, niet herbruikbaar (alleen copypaste), niet onderhoudbaar. 38 en OOP Verschillen met C++.! Geen globale variabelen en functies mogelijk.! Geen multiple inheritance wel multiple interfaces.! Interfaces. Vergelijkbaar met pure abstract base class in C++.! Één class hiërarchie. Alle classes erven direct of indirect over van class.! Geen templates. Wel generics. new in 1.5! Geen operator overloading.! Array en String zijn echte classes.! en zijn alleen via reference bereikbaar. Alle objecten bevinden zich op de heap.! Geen scheiding van interface en implementatie binnen één class. Geen headerfiles. 39 variabelen kent twee soorten variabelen.!variabelen van een primitive data type. " boolean (true of false) " char (16 bits Unicode) " byte (8 bits signed two s complement) " short (16 bits signed two s complement) " int (32 bits signed two s complement) " long (64 bits signed two s complement) " float (32 bits IEEE 754-1985 FP) " double (64 bits IEEE 754-1985 FP)!Variabelen van een object reference type. " String " int[] Voor alle primitieve data types zijn wrapper classes beschikbaar o.a. voor coversie van/naar String b.v. Long 40 references! object variabelen zijn altijd pointers (in references genoemd!).!een object variabele refereert naar een object (op de heap) of heeft de waarde null.!en worden aangemaakt met new: Breuk b=new Breuk(3, 7);!Toekennen en vergelijken heeft pointer semantics! Breuk c=new Breuk(3, 7); if (b!=c) System.out.println( Dat is gek! ) 41 42 43

assignment Hond h1=new Hond(); h1 Hond h2; h2=null h2=h1; h2 Hond h3=new Hond(h1); h3 44 en Structured Programming Verschillen met C (C++).! Multi threading. Programma draait als proces, elk programma bestaat uit meerdere threads.! Automatic garbage collection. Géén delete. Draait als low-priority thread.! Dynamic linking. JVM linked de benodigde classes tijdens executie.! char type is 16 bits Unicode. Internationaal.! Geen pointer arithmetic en conversies.! Geen address-of operator &.! Geen compiler afhankelijke taaldefinities: " Vaste grote voor elk type. Bijvoorbeeld int is altijd 32 bits. " Evaluatievolgorde is altijd van links naar rechts. " >> is altijd ASR. Nieuwe operator >>> voor LSR. 45 en Structured Programming Verschillen met C (C++).! kent geen union en struct.! heeft geen preprocessor. " Geen #include " Geen #define " Geen #ifdef... #endif " Geen #pragma! heeft geen default parameters.! heeft geen typedef.! heeft geen const. Een variabele kan wel final gedeclareerd worden. Assignment is dan niet mogelijk. final double π=3.14159265359; 46 Wat maakt ideaal voor het Net?!Platform independent. Compile once, run anywhere.!veiligheid. " Browser kan bepaalde bewerkingen (b.v. file I/O) verbieden. " Geen pointer arithmetic en conversies.!multi threaded.!dynamic linkage. Geen grote exe. Je (down)load alleen wat je gebruikt.!kleine executables. Doordat veel functionaliteit (b.v. AWT, Swing) lokaal al in libraries aanwezig is. Static memberfuncties en static datamembers.! heeft net als C++ ook static methods (= static memberfuncties) en static fields (=static datamembers).!in worden static methods meer gebruikt dan in C++ omdat in geen "losse" functies gedefinieerd kunnen worden.!in plaats van een "losse" functie wordt dan een static method gebruikt, zo is bijvoorbeeld de main() functie uit C en C++ in een static method. Welkom1.java public class Welkom1 { System.out.println( "Welkom bij van C++ naar.");! Naam van de file met extensie.java moet hetzelfde zijn als de classnaam!! Er is geen headerfile.! javac Welkom1.java zet source om in Welkom1.class (byte codes).! QNX: j9c == javac java Welkom1 Welkom bij van C++ naar. j9 Welkom1 Welkom bij van C++ naar. 47 Honden public abstract class Hond { public final void haalkrant() { blaf(); public abstract void blaf(); public class SintBernard extends Hond { public void blaf() { System.out.println(""); 50 48 Honden public class THond { public void doejewerk(hond h) { h.haalkrant(); public static void main(string[] s) { THond test=new THond(); Tekkel harry=new Tekkel(); SintBernard bor= new SintBernard(); for (int i=0; i<10; ++i) if (i%3==0) test.doejewerk(harry); else test.doejewerk(bor); 51 49 interfaces!in bestaat de mogelijkheid om alleen de interface van een type te specificeren zonder de implementatie te definiëren. (interface)!een class kan dan deze interface overerven, dit wordt met het keyword implements aangegeven.!in C++ kan dit d.m.v. een pure ABC (Abstract Base Class).!In C++ is hier geen speciale syntax voor. 52

Hond interface interface Hond { void blaf(); public class Tekkel implements Hond { public void blaf() { System.out.println(""); 53 TBreuk.java public class TBreuk { Breuk b1=new Breuk(1, 2); Breuk b2=new Breuk(3); Breuk b3=new Breuk(b1); b2.add(b1); System.out.println("b2 = "+b2); if (b1!=b3) System.out.println("Vreemd!!"); b2 = Breuk@871738a0 Vreemd!! Multiple inheritance! ondersteund geen multiple implementation inheritance. Je kunt maar van één class overerven (extends).! ondersteund wel multiple interface inheritance. Je kunt van meerdere interfaces overerven (implements). 54 Breuk tostring method // idem zoals hiervoor public String tostring() { String s=new String(); s=t+ / +n; return s; b2 = 7/2 Vreemd!! Breuk.java public Breuk() { public Breuk(int tt) { t=tt; public Breuk(int tt, int nn) { t=tt; n=nn; normaliseer(); public Breuk(Breuk b) { t=b.t; n=b.n; public void add(breuk b) { t=t*b.n+b.t*n; n*=b.n; normaliseer(); private normaliseer() { private int t=0; private int n=1; 55 Geen automatische copy constructor. Fields kunnen geïnitialiseerd worden. Packages == C++ namespaces.! heeft ook een manier om classes (.class files) te groeperen packages genaamd.!in is een package altijd gekoppeld aan een directory. Packagenaam=directorynaam.!Elk directory heeft een eigen package. Als de.class code van een bepaalde.java file in een andere package moet komen moet je dit opgeven. package Bd; /*...*/ package Bd; public class String { /*...*/ 56 Import packages 3 manieren van gebruik: Bd.String s1=new Bd.String( Hallo ); import Bd.String; String s1=new String( Hallo ); String s2=new String( Dag ); import Bd.*; String s1=new String( Hallo ); Breuk b=new Breuk(3,2); 59 57 Access specifiers!in is een package ook een middel tot access control. " Public overal toegankelijk. " Protected toegankelijk in alle afgeleide classes én in classes in dezelfde package. " (Package) toegankelijk in classes in dezelfde package. " Private alleen in deze class zelf toegankelijk.!class kan alleen Public of Package zijn.! kent geen friends.!bij overerving mag access alleen toenemen. LSP. 60 import javax.swing.*; import java.awt.*; 58 GUI class MyFrame extends JFrame { JLabel label = new JLabel( "Welkom bij van C++ naar."); label.setfont(...); getcontentpane().setbackground(...); add(label); setlocation(...); pack(); setvisible(true); public class Welkom2a { JFrame frame1 = new MyFrame( "Welkom!"); frame1.setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE); JFrame frame2 = new MyFrame( "Ook welkom!"); 61

Welkom2.java Om deadlocks bij het opstarten te voorkomen is het beter om main als volgt te wijzigen: http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html public class Welkom2a { javax.swing.swingutilities.invokelater( new Runnable() { public void run() { JFrame frame1 = new MyFrame("..."); frame1.setdefaultcloseoperation(...); JFrame frame2 = new MyFrame("..."); ); 62 Mouse listening import javax.swing.*; import java.awt.*; import java.awt.event.*; class MyFrame extends JFrame implements MouseListener { label = new JLabel("..."); add(label); addmouselistener(this); public void mouseclicked(mouseevent e) { public void mousepressed(mouseevent e) { public void mousereleased(mouseevent e) { label.setforeground(color.white); 63 Listeners!KeyListener! MenuKeyListener! MenuListener!PopupMenuListener,!MouseListener! MouseMotionListener! MouseWheelListener!WindowListener!... 64 Inner classes!nested " Defined static within another class. (Just for grouping.) " Can be used from outside enclossing class.!member " Defined within another class. " Helper class. " Can only be used from within enclosing class. " Has access to members of enclosing class.!local " Idem as Member class + " Defined in a method.!anonymous " Idem as Local class + " Defined in an expression " No name (no constructor) " Only one (unnamed) object. 65 via WWW import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Welkom3 extends JApplet { public Welkom3() { label = new JLabel( "Welkom bij van C++ naar.", JLabel.CENTER); label.setfont(new Font( "Arial", Font.BOLD, 24)); getcontentpane().setbackground( Color.yellow); add(label); addmouselistener(new MouseAdapter() { play(getcodebase(),"hi.au"); label.setforeground(color.black); ); 68 Mouse listening with a member class class MyFrame extends JFrame { class MyAdapter extends MouseAdapter { label.setforeground(color.white); addmouselistener(new MyAdapter()); // rest idem 66 via WWW <HTML> <HEAD> <TITLE>Welkom!</TITLE> </HEAD> <BODY> <H1> Welkom op de "van C++ naar " page. </H1> <P> Er wordt nu ook applet gestart om u welkom te heten... <P> <APPLET CODE="Welkom3.class" WIDTH="400" HEIGHT="150"> </APPLET> <P> En hier is de <A HREF="welkom3.java">source</A>. </BODY> </HTML> 69 Mouse listening with an anonymous class class MyFrame extends JFrame { addmouselistener(new MouseAdapter() { label.setforeground(color.white); ); // rest idem 67 Exceptions in! ondersteund exceptions met vrijwel dezelfde syntax en semantiek als in C++.!Verschillen met C++: " Na de catch blokken kan nog een finally blok worden toegevoerd. De code uit dit blok wordt altijd uitgevoerd onafhankelijk van feit hoe het try block wordt verlaten. " Onderscheid tussen ingebouwde (unchecked) exceptions (afgeleid van RuntimeException of Error) en toegevoegde (checked) exceptions (afgeleid van Exception). " Checked exceptions moeten in de throws clause van de functie die ze gooit opgegeven worden. 70

Casting en RTTI in! gebruikt de C syntax voor casting met de semantiek van C++ dynamic casting.! heeft uitgebreidere RTTI dan C++. " Elke class in is direct of indirect afgeleid van de class. Deze class heeft een memberfunctie getclass() die een object van de class Class retourneerd. " Class bevat RTTI info. Methods:! boolean isinterface()! String getname()! Class getsuperclass()! Class[] getinterfaces()! newinstance()! static Class forname(string s) Maakt het dynamisch opzoeken en creëren van objecten mogelijk! Maak een object als je de naam van de class kent! class Name2 { try { Class c= Class.forName("SintBernard"); Hond h=(hond)c.newinstance(); h.blaf(); catch (Exception e) { /* quick and dirty */ Methods equals, hashcode en clone.!in erven alle classes direct of indirect over van de class. Methods: " public String tostring() hebben we gezien. " public boolean equals( obj) /*en*/ public int hashcode() " protected clone() throws CloneNotSupportedException Thread support. " protected void finalize() throws Throwable; " public final getclass() RTTI hebben we gezien. 71 72 73 equals!de default implementatie vergelijkt de adressen. public boolean equals( obj) { if (obj instanceof Breuk) { Breuk c=(breuk)obj; return t==b.t&&n==b.n; return false; TBreuk.java public class TBreuk { Breuk b1=new Breuk(1, 2); Breuk b2=new Breuk(3); Breuk b3=new Breuk(b1); b2.add(b1); System.out.println("b2 = "+b2); // if (b1!=b3) // System.out.println("Vreemd!!"); if (b1.equals(b3)) System.out.println("Ok!!"); b2 = 7/2 Ok!! hashcode!de default implementatie bepaalt een hashcode aan de hand van het adres.!als we objecten in een HashTable willen gebruiken moeten we zorgen voor een goede hashcode. public int hashcode() { return new Integer(t).hashCode() + new Integer(n).hashCode(); 74 75 76 clone!de default implementatie (die protected is) kijkt eerst of de class de interface Cloneable implementeerd. " Als dit niet zo is: throw CloneNotSupportedException. " Als dit wel zo is: maak een bitwise (shallow) copy.!classes voor algemeen hergebruik moeten een goede clone definiëren. Cloneable Breuk public class Breuk implements Cloneable { // Implementatie van.clone werkt goed // maar is protected... public clone() { try { return super.clone(); catch (CloneNotSupportedException e) { // can't happen really! throw new InternalError(); Breuk b1(1, 2); Breuk b2=(breuk)b1.clone(); Cloneable Stack public class Stack implements Cloneable { private Vector items; public clone() { try { Stack s = (Stack)super.clone(); s.items = (Vector)items.clone(); return s; catch (CloneNotSupportedException e) { // can't happen really! throw new InternalError(); 77 78 79

finalize!de finalize method wordt door de garbage collector aangeroepen als het object opgeruimd wordt of als de JVM afsluit (zonder calamiteit). protected void finalize() throws Throwable { super.finalize(); System.out.println( "Breuk: "+this+" destroyed."); 80