Objectgericht programmeren 1.

Vergelijkbare documenten
Objectgericht programmeren 1.

Overerving & Polymorfisme

Ingebouwde klassen & methodes

Vakgroep CW KAHO Sint-Lieven

Abstracte klassen & Interfaces

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

Programmeren in Java les 3

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Lessen Java: Reeks pag. 1

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

Modelleren en Programmeren

Modelleren en Programmeren

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

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Modelleren en Programmeren

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

Zelftest Programmeren in Java


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

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

Objectgericht programmeren 1

Ontwerp van Informatiesystemen

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

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Modelleren en Programmeren

Objectgericht ontwerpen

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

Programmeren (1) Examen NAAM:

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Scala. Korte introductie. Sylvia Stuurman

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

6,1. Samenvatting door een scholier 1809 woorden 28 oktober keer beoordeeld. Informatica

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Modelleren en Programmeren

N&O: Objectgericht Programmeren. (in Python)

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

Modulewijzer Tirdat01

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

Objectgeoriënteerd programmeren in Java 1

Modelleren en Programmeren

REEKS I. Zaterdag 6 november 2010, 9u

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

Game of Life in Java

NAAM: Programmeren 1 Examen 29/08/2012

IMP Uitwerking week 13

Programmeren in Java 3

Hoofdstuk 0. Van Python tot Java.

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

Tentamen Imperatief Programmeren

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

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

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

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

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

Voorbeeld: Simulatie van bewegende deeltjes

Objectgericht Programmeren. (in Python)

In BlueJ. Doe onderstaande met muis/menu s:

Java. Basissyllabus. Egon Pas

[8] De ene 1 is de andere niet

Programmeren in C# Klassen schrijven

De sheets zijn gebaseerd op met name hoofdstuk. D. Bell en M. Parr, Java voor studenten, Prentice Hall,

OEFENINGEN PYTHON REEKS 1

Voortgezet Prog. voor KI

Een korte samenvatting van enkele FORTRAN opdrachten

Datastructuren: stapels, rijen en binaire bomen

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

Modulewijzer tirprog02/infprg01, programmeren in Java 2

Datastructuren: stapels, rijen en binaire bomen

Sima. Programmeren. 2e graad

TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR

Programmeren in C# Samenvatting van C#

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

NAAM: Programmeren 1 Examen 21/01/2011

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara

1 Ontwerppatronen. 1.1 Het Command patroon

Robocode. Inleiding tot programmeren

OEFENINGEN PYTHON REEKS 1

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

Modelleren en Programmeren

GEDETAILLEERDE INHOUD

Design principes.

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

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

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Project network. Gebaseerd op paragrafen , uit het boek. We simuleren een sociaal netwerk

Samenvatting programmeren I

OEFENINGEN PYTHON REEKS 1

Syntax- (compile), runtime- en logische fouten Binaire operatoren

VI. Klassen en objecten

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Design principes.

Deeltentamen Grammatica s en ontleden 22 december 2005

Datastructuren en algoritmen

Kleine cursus PHP5. Auteur: Raymond Moesker

eerste voorbeelden in Java

Modelleren en Programmeren: Prolog

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Transcriptie:

Objectgericht programmeren 1 joost.vennekens@kuleuven.be http://www.cs.kuleuven.be/~joost/dn

Objectgericht ontwerpen 35% Objectgericht ontwerpen 65% OP1 Informatiesystemen 50% Databanken 50% OP1

Evaluatie 40% permanente evaluatie practica 60% Examen 30% oefening Gesloten boek, schriftelijk Op PC, zoals in practica 30% theorie Gesloten boek, mondeling

Inhoud OOP Manier van denken over structuur van programma s In meer of mindere mate ondersteund door programmeertaal (C++, Python, ) In dit vak: Java

Java Strikte regels Sterk getypeerd Statisch getypeerd Onderscheid tussen ingebouwde en gebruikersgedefinieerde types Geen expliciet geheugenbeheer

Strikte regels Beperkingen Minder mogelijkheden Verbose en weinig elegant Hulpmiddelen Samenwerken Minder bugs, vooral @runtime

Waarom Java? Grote projecten

Vergelijking Python: Flexibel, snel te programmeren -> prototypes en kleine projecten C/C++: Volledige controle aan programmeur, alles kan en mag -> snelle programma s Java: OO toeters & bellen, strenge compiler -> bugs vermijden

... 99-bottles-of-beer.net

class Bottles { public static String tekst(int b) { if (b == 0) return "no more"; else return "" + b; public static void main(string[] args) { boolean firsttime = true; for (int beers = 99; beers >= 0; beers--) { if (firsttime) System.out.println(tekst(beers) + " bottle(s) of beer on the wall"); System.out.print("\n" + tekst(beers) + " bottle(s) of beer on the wall, "); System.out.println(tekst(beers) + " bottle(s) of beer"); if (beers > 0) System.out.print("take one down and pass it around, "); firsttime = false; System.out.println("go to the store, buy some more");

$ ls Bottles* Bottles.java $ javac Bottles.java $ ls Bottles* Bottles.class Bottles.java $ java Bottles 99 bottle(s) of beer on the wall, 99 bottle(s) of beer take one down and pass it around, 98 bottle(s) of beer on the wall 98 bottle(s) of beer on the wall, 98 bottle(s) of beer take one down and pass it around, 97 bottle(s) of beer on the wall... 2 bottle(s) of beer on the wall, 2 bottle(s) of beer take one down and pass it around, 1 bottle(s) of beer on the wall 1 bottle(s) of beer on the wall, 1 bottle(s) of beer take one down and pass it around, no more bottle(s) of beer on the wall no more bottle(s) of beer on the wall, no more bottle(s) of beer go to the store, buy some more $ Compileren Uit voeren

Datatypes // Geheel int geheelgetal; long longergetal; // Komma float drijvendekomma; double dubbeleprecisie; // Booleaanse waardes boolean waaroffout; // Tekst char letter; String stukjetekst; // Rijen int[] rij; int[][] matrix;

While lus while (test) {... public void printaf(int[] rij) { int i = 0; while (i < rij.length) { System.out.println(rij[i++]);

For lus for (initializatie; test; stap) {... public void printaf(int[] rij) { for (int i = 0; i < rij.length; i++) { System.out.println(rij[i]);

If-then-else if (test) {... else {... public boolean isleeg(int[] rij) { if (rij.length > 0) { return true; else { return false;

Kwis (1) public static void main(string[] args) { int i = 9; int j = i; while (--i > 7) { for (int k = 2; k < i; k *= 2) { j += k; if (i < j) j++; else j--; System.out.println(j);

Objectgeorienteerd

Object...... is een verzameling van gegevens die samen een geheel vormen Werknemer Naam Joost Vennekens Geboortedatum 27/09/1980......

Klasse Werknemer Naam Joost Vennekens Geboortedatum 27/09/1980 Zelfde structuur Werknemer Naam Herman Crauwels Geboortedatum ***

Klasse...... is een soort van object... is een verzameling van objecten met allemaal dezelfde structuur

class Werknemer { // Aantal dagen sinds 01/01/1900 int geboortedatum; String naam; Attribuut public static void main(string[] arg) { // Een klasse kan gebruikt worden als datatype Werknemer joost = new Werknemer(); joost.naam = "Joost Vennekens"; joost.geboortedatum = 365*80+5*31+2*30+28+20;

class Datum { int dag; int maand; int jaar; class Werknemer { Datum geboortedatum; String naam; // String is ook gewoon een klasse, trouwens public static void main(string[] arg) { Werknemer joost = new Werknemer(); Datum d = new Datum(); d.dag = 27; d.maand = 9; d.jaar = 1980; joost.naam = "Joost Vennekens"; joost.geboortedatum = d;

Werknemer Naam Geboortedatum Naam Geboortedatum String Joost Vennekens Herman Crauwels Datum Dag 27 Maand 9 Jaar 1980 Dag ** Maand ** Jaar ****

Object = Gegevens + Gedrag

Vb:twee soorten datums class SindsDatum { int sindseenjanuari1980; public static SindsDatum eendagvroeger(sindsdatum vandaag) { SindsDatum gisteren = new SindsDatum(); gisteren.sindseenjanuari1980 = vandaag.sindseenjanuari1980-1; return gisteren; SindsDatum x = new SindsDatum(); x.sindseenjanuari1980 = 5*31+2*30+28+27; SindsDatum y = eendagvroeger(x);

Andere voorstelling class DMJDatum { int dag; int maand; int jaar;

public static DMJDatum eendagvroeger(dmjdatum vandaag) { DMJDatum gisteren = new DMJDatum(); if (vandaag.dag > 1) { // Niet de 1e van de maand gisteren.dag = vandaag.dag - 1; gisteren.maand = vandaag.maand; gisteren.jaar = vandaag.jaar; else { if (vandaag.maand > 1) { // 1e dag van maand gisteren.maand = vandaag.maand - 1; gisteren.jaar = vandaag.jaar; gisteren.dag = laatstedag(gisteren.maand, gisteren.jaar); else { // Nieuwjaar gisteren.maand = 12; gisteren.jaar = vandaag.jaar - 1; gisteren.dag = 31; return gisteren;

Conclusie Hoe gedrag geimplementeerd moet worden Hangt onafscheidelijk samen met hoe gegevens worden voorgesteld Dus: gedrag en gegevens horen samen

Object = Gegevens + Gedrag

Daarnet: class SindsDatum { int sindseenjanuari1980; public static SindsDatum eendagvroeger(sindsdatum vandaag) { SindsDatum gisteren = new SindsDatum(); gisteren.sindseenjanuari1980 = vandaag.sindseenjanuari1980-1; return gisteren; SindsDatum x = new SindsDatum(); x.sindseenjanuari1980 = 5*31+2*30+28+27; SindsDatum y = eendagvroeger(x);

class SindsDatum { int sindseenjanuari1980; Object wordt impliciet meegegeven this.sindseenjanuari1980 public SindsDatum eendagvroeger() { SindsDatum gisteren = new SindsDatum(); gisteren.sindseenjanuari1980 = sindseenjanuari1980-1; return gisteren; SindsDatum x = new SindsDatum(); x.sindseenjanuari1980 = 5*31+2*30+28+27; SindsDatum y = x.eendagvroeger();

class DMJDatum { int dag; int maand; int jaar; public DMJDatum eendagvroeger() {... DMJDatum x = new DMJDatum(); x.sindseenjanuari1980 = 365*80+5*31+2*30+28+20; DMJDatum y = x.eendagvroeger(); Juiste methode

Voordeel: Encapsulatie

class Datum {??? Datum x = new Datum(); x.vulin(27, 9, 1980); Datum y = x.eendagvroeger(); public void vulin(int dag, int maand, int jaar) {... public Datum eendagvroeger() {...

Ondersteuning voor encapsulatie Toegansniveaus private: voor niemand niets: voor klassen uit zelfde pakket protected: voor subklassen of uit hetzelfde pakket public: voor iedereen

class Datum { private int sindseenjanuari1980; public void vulin(int dag, int maand, int jaar) {... public Datum eendagvroeger() {... Datum x = new Datum(); x.vulin(27, 9, 1980); Datum y = x.eendagvroeger();

Constructors Object ook initializeren bij het aanmaken Niet meer Datum d = new Datum(); d.vulin(27,09,1980); maar: Datum d = new Datum(27,09,1980);

class Datum { public Datum () { dag = 1; maand = 1; jaar = 1980; public Datum(int d, int m, int j) { dag = d; maand = m; jaar = j; private int dag; private int maand; private int jaar; Datum d1 = new Datum(27,09,1980); Datum d2 = new Datum();

Constructor Als er geen constructors zijn, verzint de compiler er een zonder argumenten Andere constructor aanroepen: public class Werknemer { private int ancieniteit; private String naam; private Datum geboortedatum; public Werknemer() { ancieniteit = 1; public Werknemer(String n) { this (); naam = n; public Werknemer(String n, Datum g) { this (n); geboortedatum = g; public int getancieniteit() { return ancienieit; public void setancieniteit(int a) { ancienieit = a;

Vb: complexe getallen Complex getal: reeel en imaginair deel c = a + bi Optellen: (a+bi) + (a +b i) = a+a + (b+b )i Polaire voorstelling: magnitude r en argument φ a = r cos φ en b = r sin φ

public class ComplexGetal { /** Complex getal: reeel + imaginair * i **/ private double reeel; private double imaginair; public ComplexGetal(double r, double i) { reeel = r; imaginair = i; public double getreeel() { return reeel; public double getimaginair() { return imaginair; public ComplexGetal plus(complexgetal ander) { return new ComplexGetal(ander.getReeel() + getreeel(), ander.getimaginair() + getimaginair());

public class ComplexGetal { private double magnitude; private double argument; public ComplexGetal(double r, double i) { magnitude = Math.sqrt(Math.pow(r,2) + Math.pow(i, 2)); argument = Math.atan(i / r); public double getreeel() { return magnitude * Math.cos(argument); public double getimaginair() { return magnitude * Math.sin(argument); public ComplexGetal plus(complexgetal ander) { return new ComplexGetal(ander.getReeel() + getreeel(), ander.getimaginair() + getimaginair());

Statische methodes Methodes die bij een klasse horen ipv. bij een object public class Docent { public static Docent rector() { return new Docent( Rik Torfs"); private String naam; public Docent(String n) { naam = n; Docent.rector();

Statische attributen Attributen die bij een klasse horen ipv. bij een object public class Docent { public static Docent rector = new Docent( Rik Torfs"); Docent.rector;

Voorbeelden van static public static void main(string[] args) {... System.out.println(...); public class System { public static PrintWriter out;... Math.sqrt(49);