Datastructuren en algoritmen

Vergelijkbare documenten
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.

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Modelleren en Programmeren

Vakgroep CW KAHO Sint-Lieven

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

Scala. Korte introductie. Sylvia Stuurman

Zelftest Inleiding Programmeren

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

Stacks and queues. Hoofdstuk 6

Kleine cursus PHP5. Auteur: Raymond Moesker

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

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

Programmeren in Java les 3

Modelleren en Programmeren

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

Modelleren en Programmeren

Objectgeoriënteerd programmeren in Java 1

IMP Uitwerking week 13

eerste voorbeelden in Java

Ontwerp van Informatiesystemen

Modelleren en Programmeren

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

Modulewijzer Tirdat01

Datastructuren: stapels, rijen en binaire bomen

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

Javascript oefenblad 1


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

Overerving & Polymorfisme

Programmeren (1) Examen NAAM:

Inleiding Programmeren 2

Programmeren in Java 3

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

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

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

SYNTRA-WEST. Cursus OOP. Deel

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

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

10 Meer over functies

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

Inhoud leereenheid 7c. JavaScript: Objecten en functies. Introductie 59. Leerkern 60. Samenvatting 82. Opdrachten 83. Zelftoets 89.

Modelleren en Programmeren

Stap 1 Eenvoudig tekenprogramma maken In eerste instantie alleen 'freehand' curves Demo in de les

Java Les 3 Theorie Herhaal structuren

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

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

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

Introductie in C++ Jan van Rijn. September 2013

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

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

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

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

Modulewijzer tirprog02/infprg01, programmeren in Java 2

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

Inleiding Programmeren 2

Zelftest Programmeren in Java

Hoofdstuk 0. Van Python tot Java.

Modelleren & Programmeren. Jeroen Fokker

Java. Basissyllabus. Egon Pas

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

Variabelen en statements in ActionScript

Lineaire data structuren. Doorlopen van een lijst

Programmeren in C++ (deel 1)

Datastructuren: stapels, rijen en binaire bomen

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

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

BEGINNER JAVA Inhoudsopgave

NAAM: Programmeren 1 Examen 29/08/2012

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

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

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

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

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

Extra oefening Probeer de voorbeeldprogramma s uit de LeJOS tutorial en de samples die bij de LeJOS software geïnstalleerd zijn.

Inleiding C++ Coding Conventions

Datastructuren Werkcollege Intro

Informatica: C# WPO 11

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008

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

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

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

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

Programmeren in Java 3

Modelleren en Programmeren

Ingebouwde klassen & methodes

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Inleiding programmeren

VI. Klassen en objecten

OEFENINGEN PYTHON REEKS 1

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

Een stoomcursus door Edgar de Graaf, november 2006

OEFENINGEN PYTHON REEKS 1

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/

Transcriptie:

Datastructuren en algoritmen Doelstelling Datastructures + algorithms = programs Boek van Niklaus Wirth: bedenker Pascal en Modula Datastructuur: structuur om informatie op te slaan Algoritme: voorschrift om berekening uit te voeren Goede kennis van belangrijke datastructuren en algoritmen is nodig om zelf goede programma s te kunnen schrijven Helpt bij het herkennen van de juiste datastructuur en het juiste algoritme om je probleem op te lossen. Data Structuren en Algoritmen - week 1 oktober 2014 1

Datastructuren en algoritmen Onderwerpen Overzicht belangrijke datastructuren en algoritmen - Datastructuren: arrays, lijsten, bomen, expressies, etc - Algoritmen: sorteren, herkennen, datastructuur gerelateerd Overzicht belangrijkste Object-georienteerde technieken zoals: - klassen en objecten - inheritance en toepassingen - polymorfisme - dynamische binding - gebruik van de standaard bibliotheek Java Data Structuren en Algoritmen - week 1 oktober 2014 2

Toepassingen - tekenprogramma - chatapplicatie: client server programma - toepassingen in C2 Werkwijze Leren door te doen, dus accent op de opdrachten. Studie materiaal Boek(en) sheets Toetsing opdrachten Data Structuren en Algoritmen - week 1 oktober 2014 3

Object-georiënteerd programmeren Objectgeoriënteerd programmeren is gebaseerd op data en operaties op deze data. Het gedrag van een object is volledig beschreven door de operaties die op het object van toepassing zijn (abstractie). Kennis van de implementatiedetails van een object zijn niet nodig om een object te kunnen begrijpen/gebruiken (inkapseling). Je kunt klassen gebruiken om nieuwe klassen vanaf te leiden (overerving/inheritance) Data Structuren en Algoritmen - week 1 oktober 2014 4

Voordelen van het gebruik van klassen Klassen zijn goede bouwblokken: Je kunt klassen eenvoudig samenstellen tot grotere systemen. Een (goede) klasse kan in isolement begrepen worden (dus zonder kennis te nemen van andere klassen). Een klasse is dus een afgerond geheel. De implementatie van een klasse kan gewijzigd worden zonder gevolgen voor de gebruiker van de klasse, zolang de interface van de klasse niet gewijzigd wordt. Klassen vormen vaak een directe afspiegeling van entiteiten uit het probleemdomein. Data Structuren en Algoritmen - week 1 oktober 2014 5

Klassen en Objecten Object Geintegreerde eenheid van: data (opgeslagen in toestandsvariabelen) methoden/operaties (functies werkend op de data) Eigenschappen van Objecten Ze kunnen dynamisch gecreëerd worden Hun interne toestand kan veranderen Ze bieden hun data bescherming Data Structuren en Algoritmen - week 1 oktober 2014 6

Object-georienteerd programma Alleen maar objecten, die door boodschappen te sturen (aanroepen operaties) informatie uitwisselen. Het ene object stuurt een boodschap naar het andere object dooreen methode van dat andere object aan te roepen. Data Structuren en Algoritmen - week 1 oktober 2014 7

Object-georienteerd programma Nodig: een variabele met een referentie naar dat andere object v1 = v2.n2(p); Data Structuren en Algoritmen - week 1 oktober 2014 8

Klassen Ieder object is een instantie van een bepaalde klasse. Objecten uit dezelfde klasse hebben dezelfde: - namen en typen van velden - operaties die aangeroepen kunnen worden Een klasse dient als blauwdruk om nieuwe objecten te creëren. Data Structuren en Algoritmen - week 1 oktober 2014 9

Voorbeeld: Een grafisch tekenprogramma Verschillende voorwerpen waarop dezelfde operaties moeten worden gedaan: Figuren: cirkels, lijnen, rechthoeken, driehoeken Operaties: transleren vervormen (resizen) tekenen in verschillende kleuren en dikten groeperen van figuren (je kunt nu operaties op een groep uitvoeren) Data Structuren en Algoritmen - week 1 oktober 2014 10

Objecten en klassen Eisen aan een objectgeoriënteerde programmeertaal 1 Niet (meer) gebruikte objecten moeten automatisch opgeruimd worden (automatic garbage collection). 2 Ieder niet standaard type komt overeen met een klasse en vice versa (integer, boolean etc. zijn standaard typen). 3 Inheritance: Een klasse mag gedefinieerd worden als een uitbreiding of een beperking van een andere klasse. 4 Polymorfisme en dynamische typering/binding: Het moet mogelijk zijn vanuit een programma verwijzingen (variabelen) te hebben die bij objecten van verschillende klassen kunnen behoren en waarbij de uitvoering van een operatie afhangt van de klasse waartoe het object behoort. 5 Multiple Inheritance: Het moet mogelijk zijn een klasse te laten erven van meer dan één klasse en ook meerdere keren van één klasse. Data Structuren en Algoritmen - week 1 oktober 2014 11

Objecten en klassen Hoe zit het met Java en C++ mbt deze eisen? Java voldoet aan alle eisen behalve aan 5. Er zijn in Java echter andere mechanismen die multiple inheritance heel dicht benaderen. C++ is geen pure objectgeoriënteerde taal en heeft ook geen automatic garbage collection. C++ heeft echter wel multiple inheritance. Dus C++ voldoet aan: 3, 4 en 5. Verder heeft C++ de mogelijkheid van operatoroverlading. Het is mogelijk de optelling (+) en vermenigvuldiging (*) te herdefiniëren voor bv. matrices. Dit leidt tot zeer elegante programma s. C++ heeft zeer veel features, die de taal zeer krachtig maken, maar aan de andere kant leiden tot het makkelijk maken van programmeerfouten. C++ was in jaren 80 en 90 heel populair maar is een moeilijke taal om mee te werken. Java is tegenwoordig populairder. Data Structuren en Algoritmen - week 1 oktober 2014 12

Wat is Java? Java programma s worden gecompileerd naar zgn. bytecode. Bytecode is een machineonafhankelijk tussenformaat. Voor ieder platform waar je je Java programma wil draaien moet er een zgn. bytecode-interpreter zijn. Dit wordt ook wel een Java virtuele machine (JVM) genoemd. De bytecode-interpreter voert nu de bytecodeopdrachten uit. Alle moderne internetbrowsers zoals: Chrome, FireFox en Explorer hebben een ingebouwde bytecode-intepreter (Java plugin). Het is dus mogelijk vanuit deze browsers Javaprogramma s (applets) te draaien. Java applets worden steeds minder gebruikt. JavaScript is tegenwoordig de taal om client-side processing te doen. Veel bytecodeinterpreters bevatten tegenwoordig een justin-time(jit) compiler. Dit betekent dat de bytecode tijdens het interpreteren wordt doorvertaald naar machinecode. Hierdoor wordt de efficiëntie flink verhoogd! Data Structuren en Algoritmen - week 1 oktober 2014 13

Klassen in Java: Persoonklasse class Persoon { private String naam; private int leeftijd; public Persoon(String n, int l) { leeftijd = l; naam = n; } public String tostring() { return (naam + "\n" + leeftijd); } } public void setleeftijd(int l) { leeftijd = l; } Data Structuren en Algoritmen - week 1 oktober 2014 14

Klassen in Java: Gebruik van de klasse Persoon class Main { static public void main (String args[]) { Persoon p = new Persoon("Piet",25); System.out.println(p. tostring()); p.setleeftijd(26); System.out.println(p. tostring()); } } Opgave Pas nu de methode setleeftijd zo aan dat alleen een hogere leeftijd geaccepteerd wordt. Data Structuren en Algoritmen - week 1 oktober 2014 15

Klassen in Java: Persoon Frame demo in Netbeans De klasse persoon hoeft hiervoor niet te worden aangepast. We maken nu in Netbeans bovenstaande applicatie. Data Structuren en Algoritmen - week 1 oktober 2014 16

Klassen en typering Iedere klasse correspondeert met een type. Het belang van typering? Typering dwingt objecten slechts element te zijn van één klasse => objecten van verschillende klassen kunnen niet verwisseld worden (of alleen onder speciale condities) Typering biedt de mogelijkheid om al tijdens vertalen een gedeelte van de correctheid van het programma te controleren Vooral voor grote systemen is (sterke) typering een absolute voorwaarde om tot de realisatie van correcte systemen te komen Data Structuren en Algoritmen - week 1 oktober 2014 17

Klassen en Typering We onderscheiden: ongetypeerde, zwak en sterk getypeerde talen. Java, Amanda, Clean, Haskell en ook bv. C++ zijn sterk getypeerd. => iedere variabele of parameter heeft één type. Objecten van verschillend type mogen niet verwisseld worden (behoudens type conversie). Er is volledige typecontrole tijdens vertalen. Zwak getypeerde taal: wel typen, maar geen garantie voor correcte foutmeldingen als entiteiten in foute context worden gebruikt. Deel van de typecontrole wordt uitgesteld tot uitvoering van het programma (dynamische typering). Voorbeeld: PHP, JavaScript Data Structuren en Algoritmen - week 1 oktober 2014 18

Klassen en Typering Voordelen van een sterk getypeerde taal zonder typecontrole kan systeem op mysterieuze wijze vastlopen vroege detectie van typefouten bespaart veel tijd in edit - compile - debug cyclus typering is vorm van documentatie veel compilers genereren efficiëntere code door sterke typering In Java moet het type van iedere functie, variabele of parameter van te voren worden aangegeven in de declaratie ervan. Data Structuren en Algoritmen - week 1 oktober 2014 19

Gedrag van objecten Enige manier om een object te benaderen is het sturen van boodschappen naar dat object. Reactie op boodschap: toestand wijzigen zelf boodschappen naar andere objecten sturen. resultaat teruggeven Samen noemen we dit het gedrag van een object. We onderscheiden verschillende soorten operaties modifier: verandert toestand een object selector: laat toestand ongewijzigd, maar geeft informatie terug constructor: creëert een object destructor: vernietigt een object (gaat in Java automatisch) Data Structuren en Algoritmen - week 1 oktober 2014 20

Relaties tussen objecten 1 Gebruiks- (using) relaties 2 Bevat-(containing, aggregatie) relaties Gebruiksrelaties Object wordt gebruikt door ander object (maakt er geen deel van uit) Soorten objecten in gebruiksrelaties: Actor: maakt gebruik van diensten andere objecten, maar wordt zelf nauwelijks gebruikt Server: Verleent diensten aan andere objecten en gebruikt zelf geen andere objecten Agent: maakt gebruik van diensten van andere objecten en wordt zelf regelmatig gebruikt door andere objecten Bevat-relaties Containing relatie: object opgebouwd uit andere objecten (maken er deel van uit). Bevatte object alleen zichtbaar voor bevattende object. Data Structuren en Algoritmen - week 1 oktober 2014 21

Overzicht Java import void : importeren van andere klassen vgl. uses : letterlijk leeg { } : begin resp. eind van een syntactisch blok vergl. begin.. end ; : afsluiter van een statement A: een assignment levert een waarde op: betekent: x = y = 0; y = 0; x = y; B: verschil tussen = (toekenning) en == (vergelijking) if (x == 1) a = b; Data Structuren en Algoritmen - week 1 oktober 2014 22

C: werking van ++ (ophoging) en -- (verlaging) hangen af van plaatsing void main {... } int char string if (++ x == 1)... /* eerst ophogen */ if (x ++ == 1)... /* eerst vergelijken */ while (conditie) statement; if (conditie) statement; for (statement; conditie; statement) statement; for (elem : var) return...; Data Structuren en Algoritmen - week 1 oktober 2014 23

Datastructuren Een klasse kan gebruikt worden voor het realiseren van een zgn. datastructuur. Het werken met datastructuren maakt programmeren veel overzichtelijker waardoor programma s beter onderhoudbaar worden. Voorbeeld de Stack Een stack (stapel) wordt gebruikt om gegevens in op te slaan. De volgende operaties zijn van toepassing op een stack: Push: Pop: Top: IsEmpty: Voeg waarde toe aan bovenkant stack Verwijder bovenste element stack Geef waarde bovenste element stack Is de stack leeg? Een stapel kan gebruikt worden om een zgn. postfixexpressie te evalueren. Data Structuren en Algoritmen - week 1 oktober 2014 24

Abstracte Datastructuren Infix en PostFix Infix 2 + 3 6 * (8-9) (5 + 2) * (6 + 7) Postfix 2 3 + 6 8 9 - * 5 2 + 6 7 + * Bij postfix geen haken nodig! PostFix expressie kan eenvoudig door computer verwerkt worden mbv. een stack : 2 3 + 2 3 + 3 2 2 5 Oefening Evalueer 6 8 9 - * en 5 2 + 6 7 + * Infix naar postfix kan ook mbv een stack Werk infix af van links naar rechts Kopieer getal steeds direct naar resultaat Plaats operatie op hulp stack, maar verwijder eerst alle operatoren die er al op staan met hogere prio en zet deze in resultaat. Een ( telt als operatie met lage prio Bij ) verwijder alle operaties tot je de ( tegen komt Op eind plaats alle over gebleven operaties terug Data Structuren en Algoritmen - week 1 oktober 2014 25

1. Abstracte Datastructuren Implementatie Stack (van Integers) class StackInt { public StackInt() { elems=new int[100]; top=-1; } public void push(int i) { top++; elems[top]=i; } public int pop() { return elems[top--]; } } private int[] elems; private int top; Data Structuren en Algoritmen - week 1 oktober 2014 26

Opgave Voeg een functie isempty aan Stack die true teruggeeft als de stack leeg is en anders false. Implementeer een grafische postfix calculator mbv een stack. Gebruik hiervoor de HP35 als voorbeeld: http://www.hpmuseum.org/simulate/hp35sim/hp35sim.htm Data Structuren en Algoritmen - week 1 oktober 2014 27