Modelleren en Programmeren

Vergelijkbare documenten
Modelleren en Programmeren

Modelleren en Programmeren

Modelleren en Programmeren

Modelleren en Programmeren

Programmeren in Java les 3

Modelleren en Programmeren

Modelleren en Programmeren

Ingebouwde klassen & methodes

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Modelleren en Programmeren

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

Modelleren en Programmeren

Overerving & Polymorfisme

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

Javascript oefenblad 1

Practicumopgave 3: SAT-solver

IMP Uitwerking week 13

Kleine cursus PHP5. Auteur: Raymond Moesker

Zelftest Programmeren in Java

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

Tentamen Inleiding Programmeren in Java

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

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

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Objectgericht programmeren 1.

Programmeren (1) Examen NAAM:

Programmeren in Java 3

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

In BlueJ. Doe onderstaande met muis/menu s:

Java Programma structuur


Vakgroep CW KAHO Sint-Lieven

Dynamisch Programmeren. Het Rugzakprobleem

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

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

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

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

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

Objectgericht programmeren 1.

Datastructuren: stapels, rijen en binaire bomen

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

Voorbeeld: Simulatie van bewegende deeltjes

Objectgeoriënteerd programmeren in Java 1

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

Modelleren en Programmeren: Prolog

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Zelftest Inleiding Programmeren

NAAM: Programmeren 1 Examen 29/08/2012

Datastructuren Werkcollege Intro

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

Tentamen Imperatief Programmeren

Scala. Korte introductie. Sylvia Stuurman

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

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Recursie. public static int faculteit( int n ){ // Deze functie berekent n! // pre: n = N en n >= 0 // post: faculteit = N!

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Vereiste kennis. 1 Java-editor. 2 Het compileren van een programma

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

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Informatica: C# WPO 11

Een gelinkte lijst in C#

Tentamen Programmeren in C (EE1400)

Informatie over. 5VWO DT51: JavaLogo. Casper Bezemer. Toetsweek 1 13 oktober 2016

Modelleren en Programmeren

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

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

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Game of Life in Java

10 Meer over functies

Programmeren in C# Klassen schrijven

Lessen Java: Reeks pag. 1

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

Elementary Data Structures 3

Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

NAAM: Programmeren 1 Examen 21/01/2011

Transcriptie:

Modelleren en Programmeren Jeroen Bransen 6 december 2013

Terugblik

Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse

Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in Methoden Objecten Klasse

Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in Methoden Objecten zijn gegroepeerd in Klasse

Programma en geheugen Opdrachten Methoden zijn gegroepeerd in Variabelen Objecten zijn gegroepeerd in zijn gegroepeerd in Klasse

Programma en geheugen Opdrachten Methoden zijn gegroepeerd in Variabelen Objecten zijn gegroepeerd in zijn gegroepeerd in hebben als type Klasse

Programma en geheugen Opdrachten veranderen Variabelen Methoden zijn gegroepeerd in Objecten zijn gegroepeerd in zijn gegroepeerd in hebben als type Klasse

Programma en geheugen Opdrachten veranderen Variabelen zijn gegroepeerd in zijn gegroepeerd in Methoden bewerken Objecten zijn gegroepeerd in hebben als type Klasse

Constructor Constructor bevat stukje code dat uitgevoerd wordt bij creatie van object

Constructor Constructor bevat stukje code dat uitgevoerd wordt bij creatie van object Wordt gebruikt om object te initialiseren

Constructor Constructor bevat stukje code dat uitgevoerd wordt bij creatie van object Wordt gebruikt om object te initialiseren Java maakt standaard een constructor die alle variabelen op 0 (standaardwaarde) zet

Constructor Constructor bevat stukje code dat uitgevoerd wordt bij creatie van object Wordt gebruikt om object te initialiseren Java maakt standaard een constructor die alle variabelen op 0 (standaardwaarde) zet Constructor is vergelijkbaar met methode, maar moet dezelfde naam als klasse hebben en heeft geen resultaat

Constructor Constructor bevat stukje code dat uitgevoerd wordt bij creatie van object Wordt gebruikt om object te initialiseren Java maakt standaard een constructor die alle variabelen op 0 (standaardwaarde) zet Constructor is vergelijkbaar met methode, maar moet dezelfde naam als klasse hebben en heeft geen resultaat Net als een methode mag een constructor parameters hebben

Constructor Constructor bevat stukje code dat uitgevoerd wordt bij creatie van object Wordt gebruikt om object te initialiseren Java maakt standaard een constructor die alle variabelen op 0 (standaardwaarde) zet Constructor is vergelijkbaar met methode, maar moet dezelfde naam als klasse hebben en heeft geen resultaat Net als een methode mag een constructor parameters hebben Kan dus gebruikt worden om waarden voor variabelen mee te geven

this keyword De variabele this is een speciale variabele die naar het huidige object wijst

this keyword De variabele this is een speciale variabele die naar het huidige object wijst Wordt vaak gebruikt in constructor of methode verschil te maken tussen variabelen met dezelfde naam

this keyword De variabele this is een speciale variabele die naar het huidige object wijst Wordt vaak gebruikt in constructor of methode verschil te maken tussen variabelen met dezelfde naam Kan ook gebruikt worden om methoden aan te roepen of om als argument mee te geven

Object constructor public class Persoon { String naam; int leeftijd; int lengte; public Persoon(String naam, int leeftijd, int lengte) { this.naam = naam; this.leeftijd = leeftijd; this.lengte = lengte; // Als iemand jarig is wordt hij 1 jaar ouder public void vierverjaardag() { leeftijd++;

Gebruik van object public class PersoonMain { public static void main(string[] args) { // Maak de personen aan Persoon[] personen = { new Persoon("Sinterklaas", 417, 181), new Persoon("Cornelis", 22, 176), new Persoon("Marleen", 19, 170) ; // Iemand is jarig vandaag personen[0].vierverjaardag(); // Print leeftijden uit for(int i = 0; i < personen.length; i++) { System.out.println(personen[i].naam + " is " + personen[i].leeftijd + " jaar");

Call-by-reference en call-by-value

Wat print dit programma? public class CallBy { public static void main(string[] args) { // Variabele i met waarde 2 int i = 2; // Hoog i 1 op add1(i); // Print op scherm System.out.println(i); public static void add1(int i) { i++;

Call-by-value Een parameter is een losse variabele, die alleen bestaat binnen die methode

Call-by-value Een parameter is een losse variabele, die alleen bestaat binnen die methode Bij aanroep wordt de waarde (value) in die variabele opgeslagen

Call-by-value Een parameter is een losse variabele, die alleen bestaat binnen die methode Bij aanroep wordt de waarde (value) in die variabele opgeslagen Wijzigen van de parameter heeft dus geen effect buiten de functie

Call-by-value Een parameter is een losse variabele, die alleen bestaat binnen die methode Bij aanroep wordt de waarde (value) in die variabele opgeslagen Wijzigen van de parameter heeft dus geen effect buiten de functie Dit noemen we call-by-value en wordt in Java voor simpele typen gebruikt

Wat print dit programma? public class CallBy { public static void main(string[] args) { int[] i = new int[1]; i[0] = 2; add1(i); System.out.println(i[0]); public static void add1(int[] i) { i[0]++;

Call-by-reference Een array of object wordt in een variabele opgeslagen als verwijzing

Call-by-reference Een array of object wordt in een variabele opgeslagen als verwijzing Bij aanroep wordt de verwijzingen (reference) opgeslagen in de parameter

Call-by-reference Een array of object wordt in een variabele opgeslagen als verwijzing Bij aanroep wordt de verwijzingen (reference) opgeslagen in de parameter Wijzigen van object/array waar parameter naar verwijst heeft dus wel effect buiten de functie

Call-by-reference Een array of object wordt in een variabele opgeslagen als verwijzing Bij aanroep wordt de verwijzingen (reference) opgeslagen in de parameter Wijzigen van object/array waar parameter naar verwijst heeft dus wel effect buiten de functie Dit noemen we call-by-reference en wordt in Java voor objecten en arrays gebruikt

Call-by-reference Een array of object wordt in een variabele opgeslagen als verwijzing Bij aanroep wordt de verwijzingen (reference) opgeslagen in de parameter Wijzigen van object/array waar parameter naar verwijst heeft dus wel effect buiten de functie Dit noemen we call-by-reference en wordt in Java voor objecten en arrays gebruikt Maar: de verwijzing zelf aanpassenheeft dan weer geen effect (voorbeeld op volgende slide)

Call-by overzicht public class CallBy { public static void main(string[] args) { int i = 2; int[] j = { 2 ; int[] k = { 2 ; Persoon p = new Persoon("Sinterklaas", 417, 181); add1(i, j, k, p); System.out.println(i); // Print 2 System.out.println(j[0]); // Print 3 System.out.println(k[0]); // Print 2 System.out.println(p.leeftijd); // Print 418 static void add1(int a, int[] b, int[] c, Persoon p) { a++; // heeft geen effect b[0]++; // heeft wel effect c = new int[1]; c[0]++; // heeft geen effect p.leeftijd++; // heeft wel effect

Objecten en geheugen

Variabelen in geheugen Primitieve waarden:

Variabelen in geheugen Primitieve waarden: Arrays:

Variabelen in geheugen Primitieve waarden: Arrays: Objecten:

De lege verwijzing Een variabele met array/object type verwijst naar ander stuk geheugen

De lege verwijzing Een variabele met array/object type verwijst naar ander stuk geheugen Dat andere stuk geheugen wordt met new gemaakt

De lege verwijzing Een variabele met array/object type verwijst naar ander stuk geheugen Dat andere stuk geheugen wordt met new gemaakt Maar wat nou als we nog geen new hebben gebruikt?

De lege verwijzing Een variabele met array/object type verwijst naar ander stuk geheugen Dat andere stuk geheugen wordt met new gemaakt Maar wat nou als we nog geen new hebben gebruikt? Een verwijzing naar niks is null

De lege verwijzing Een variabele met array/object type verwijst naar ander stuk geheugen Dat andere stuk geheugen wordt met new gemaakt Maar wat nou als we nog geen new hebben gebruikt? Een verwijzing naar niks is null We kunnen null gebruiken om te controleren of er een verwijzing is

Voorbeeld met null public class NullPointer { Persoon p; // Hier nog andere code public void printleeftijd() { System.out.println(p.naam + " is " + p.leeftijd); // In een ander bestand: public class NullPointerMain { public static void main(string[] args) { NullPointer np = new NullPointer(); np.printleeftijd();

Voorbeeld met null public class NullPointer { Persoon p; // Hier nog andere code public void printleeftijd() { if(p == null) System.out.println("Persoon is niet aangemaakt"); else System.out.println(p.naam + " is " + p.leeftijd); // In een ander bestand: public class NullPointerMain { public static void main(string[] args) { NullPointer np = new NullPointer(); np.printleeftijd();

Gelijkheid van objecten

Nog een klein puzzeltje public class ObjectEquality { public static void main(string[] args) { String a = "a"; String b = "b"; String x = a + b; String y = a + b; System.out.println(x == y);

Gelijkheid van objecten Strings zijn ook objecten

Gelijkheid van objecten Strings zijn ook objecten Met == controleren we of variabelen dezelfde waarde hebben

Gelijkheid van objecten Strings zijn ook objecten Met == controleren we of variabelen dezelfde waarde hebben Maar bij objecten is de waarde de verwijzing

Gelijkheid van objecten Strings zijn ook objecten Met == controleren we of variabelen dezelfde waarde hebben Maar bij objecten is de waarde de verwijzing Dus == controleert of de variabelen naar hetzelfde object verwijzen

Gelijkheid van objecten Strings zijn ook objecten Met == controleren we of variabelen dezelfde waarde hebben Maar bij objecten is de waarde de verwijzing Dus == controleert of de variabelen naar hetzelfde object verwijzen x en y zijn niet hetzelfde object!

Gelijkheid van objecten Strings zijn ook objecten Met == controleren we of variabelen dezelfde waarde hebben Maar bij objecten is de waarde de verwijzing Dus == controleert of de variabelen naar hetzelfde object verwijzen x en y zijn niet hetzelfde object! Ze representeren alleen dezelfde string

Correcte versie public class ObjectEquality { public static void main(string[] args) { String a = "a"; String b = "b"; String x = a + b; String y = a + b; System.out.println(x.equals(y)); // dit print true

Meer controlestructuren

Break Keyword break breekt een for of while meteen af

Break Keyword break breekt een for of while meteen af Bijvoorbeeld: public class Break { public static void main(string[] args) { // Dit print 0, 1, 2 en 3 (elk op een regel) for(int i = 0; i < 10; i++) { if(i == 4) break; System.out.println(i);

Continue Keyword continue gaat naar de volgende iteratie van een for of while

Continue Keyword continue gaat naar de volgende iteratie van een for of while Bij een for wordt de teller zoals altijd opgehoogd

Continue Keyword continue gaat naar de volgende iteratie van een for of while Bij een for wordt de teller zoals altijd opgehoogd Kan ook voor het afbreken van de herhaling zorgen als expressie onwaar wordt

Continue Keyword continue gaat naar de volgende iteratie van een for of while Bij een for wordt de teller zoals altijd opgehoogd Kan ook voor het afbreken van de herhaling zorgen als expressie onwaar wordt Bijvoorbeeld: public class Continue { public static void main(string[] args) { // Dit print 0, 1, 2, 3, 5, 6, 7, 8 en 9 for(int i = 0; i < 10; i++) { if(i == 4) continue; System.out.println(i);

Object als String printen Dit doet niet wat we willen: Persoon p = new Persoon("Sinterklaas", 417, 181); System.out.println("p = " + p);

Object als String printen Dit doet niet wat we willen: Persoon p = new Persoon("Sinterklaas", 417, 181); System.out.println("p = " + p); Bij het omzetten naar een String wordt de tostring methode aangeroepen

Object als String printen Dit doet niet wat we willen: Persoon p = new Persoon("Sinterklaas", 417, 181); System.out.println("p = " + p); Bij het omzetten naar een String wordt de tostring methode aangeroepen Voor onze eigen klasse kunnen we die zelf implementeren

Object als String printen Dit doet niet wat we willen: Persoon p = new Persoon("Sinterklaas", 417, 181); System.out.println("p = " + p); Bij het omzetten naar een String wordt de tostring methode aangeroepen Voor onze eigen klasse kunnen we die zelf implementeren En dan dus zelf kiezen wat we zien, in plaats van de standaard implementatie

Object als String printen public class Persoon { String naam; int leeftijd; int lengte; public Persoon(String naam, int leeftijd, int lengte) { this.naam = naam; this.leeftijd = leeftijd; this.lengte = lengte; public String tostring() { return naam + " (" + leeftijd + ")";

Recursie

Recursie Om recursie te begrijpen, moet je eerst recursie begrijpen

Recursie Om recursie te begrijpen, moet je eerst recursie begrijpen Recursieve functie roept zichzelf aan

Recursie Om recursie te begrijpen, moet je eerst recursie begrijpen Recursieve functie roept zichzelf aan Minstens 1 parameter moet kleiner worden

Recursie Om recursie te begrijpen, moet je eerst recursie begrijpen Recursieve functie roept zichzelf aan Minstens 1 parameter moet kleiner worden Herhalingsconstructies (for, while) kunnen ook recursief worden beschreven

Factorial voorbeeld // A simple example of recursion. public class Factorial { // This is a recursive function. public static int factr(int n) { int result; if(n==1) return 1; result = factr(n-1) * n; return result; // This is an iterative equivalent. public static int facti(int n) { int t, result; result = 1; for(t=1; t <= n; t++) result *= t; return result;

Mutuele recursie

Mutuele recursie Twee (of meerdere) functies die elkaar aanroepen

Mutuele recursie Twee (of meerdere) functies die elkaar aanroepen Functies roepen indirect zichzelf aan

Mutuele recursie Twee (of meerdere) functies die elkaar aanroepen Functies roepen indirect zichzelf aan Ook hier moet er een parameter kleiner worden om oneindige recursie tegen te gaan

Even en oneven voorbeeld // Mutuele recursie voorbeeld public class MutualRecursion { public static boolean even(int x) { if(x == 0) return true; return oneven(x-1); public static boolean oneven(int x) { if(x == 0) return false; return even(x-1); public static void main(string[] args) { System.out.println("7 is even: " + even(7));