Leren programmeren in C# Deel 4 - Objectoriëntatie
Michiel Rotteveel Leren programmeren in C# Deel 4 - Objectoriëntatie Brinkman Uitgeverij Amsterdam 2017
Leeswijzer double gereserveerde woorden C# PictureBox de naam van een klasse kleingetal de naam van een object of variabele "tekst" de waarde van een string variabele Commentaar commentaar in de code isbn 978 90 5752 353 3 / nur 989 Omslagontwerp: Proforma, Barcelona Foto omslag: M. Rotteveel Redactie: J.G. Neurink / M.H. van Haren Opmaak: Henk Pel, Zeist 2017 Brinkman Uitgeverij, Amsterdam Gehele of gedeeltelijke overneming of reproductie van de inhoud van deze uitgave, op welke wijze dan ook, zonder voorafgaande schriftelijke toestemming van de auteursrechthebbende is verboden, behoudens de beperkingen bij de wet gesteld. Het verbod betreft ook gehele of gedeeltelijke bewerking. De uitgever is met uitsluiting van ieder ander gerechtigd de door derden verschuldigde vergoedingen voor kopiëren, als bedoeld in artikel 17 Auteurswet 1912 en in het kb van 20 juni 1974 (Stb. 351, 1974) ex artikel 16b Auteurswet 1912, te innen en/of daartoe in en buiten rechte op te treden. Correspondentie inzake overneming of reproductie richten aan: Brinkman Uitgeverij, Postbus 59686, 1040 ld Amsterdam www.brinkman-uitgeverij.nl tel. 020-4120970, fax 020-4120972 e-mail: info@brinkman-uitgeverij.nl
5 Inhoudsopgave Inleiding 11 C# OO & UML 11 Benodigde voorkennis 12 Hoe werk je met dit boek? 12 Hoofdstuk 1 Voorbereiding 13 Objectoriëntatie 13 Kenmerken 13 UML 13 Voorbereiding voorbeeldprogramma 14 Wat heb je geleerd? 20 Hoofdstuk 2 Klassen (Classes) 21 Beschrijving 21 Inhoud (instantie) 21 UML 21 Vuistregels 22 Soorten klassen 22 Naamgeving 23 Voorbeeld 2.1: Aanmaken klasse Konijn 23 Opdrachten Klassen 24 Opdracht 2.1: Aanmaken klasse Gras 24 Opdracht 2.2: Aanmaken klasse Venijnboom 24 Opdracht 2.3: Aanmaken klasse Vingerhoedskruid 24 Opdracht 2.4: Aanmaken klasse Koe 24 Opdracht 2.5: Aanmaken klasse Lynx 24 Opdracht 2.6: Aanmaken klasse Beer 24 Wat heb je geleerd? 24 Hoofdstuk 3 Encapsulation, variabelen en eigenschappen 25 Encapsulation 25 Naamgeving variabelen én eigenschappen 26 Variabelen 26 UML 27 Voorbeeld 3.1: Interne variabelen 28
6 Visual Studio klassendiagram 29 Voorbeeld 3.2: Visual Studio klassendiagram genereren 29 Eigenschappen (properties) 30 Voorbeeld 3.3: Eigenschappen 31 Voorbeeld 3.4: ReadOnly-eigenschappen 32 Voorbeeld 3.5: Eigenschappen met een complex type toevoegen 33 Opdrachten Encapsulation, variabelen en eigenschappen 34 Opdracht 3.1: Voorbereiding klasse Gras 34 Opdracht 3.2: De klasse Gras implementeren 35 Verkorte schrijfwijze eigenschappen 36 Voorbeeld 3.6: Verkorte schrijfwijze eigenschappen 36 Opdracht Verkorte schrijfwijze 39 Opdracht 3.2: Verkorte schrijfwijze: de klasse Venijnboom 39 Wat heb je geleerd? 40 Hoofdstuk 4 Methoden 41 Beschrijving 41 Eisen 41 Overloaden 41 UML 42 Voorbeeld 4.1: Methoden toevoegen aan de klasse Konijn 43 Opdrachten Methoden 48 Opdracht 4.1: Methoden toevoegen aan de klasse Koe 48 Opdracht 4.2: Methoden toevoegen aan de klassen Gras en Venijnboom 48 Reflectie 48 Wat heb je geleerd? 48 Hoofdstuk 5 Constructor 49 Beschrijving 49 Eisen constructor 49 UML 49 Voorbeeld 5.1: Constructors voor Konijn 50 Opdrachten Constructor 51 Opdracht 5.1: Constructors voor Koe 51 Opdracht 5.2: Constructors voor Gras en Venijnboom 51 Voorbeeld 5.2: Konijn tekenen 52 Opdrachten Tekenen 53 Opdracht 5.3: Tekenen van Koe 53 Opdracht 5.4: Tekenen van Gras en Venijnboom 53 Wat heb je geleerd? 54 Hoofdstuk 6 Structs 55 Beschrijving 55 Stack 55 Heap 55
Inhoudsopgave 7 Eigenschappen struct 56 UML 57 Voorbeeld 6.1: NatSimII struct Snelheid 57 Wat heb je geleerd? 59 Hoofdstuk 7 Compositie 61 Beschrijving 61 Voorbeeld 7.1: Compositie klasse Rechthoek 62 Wat heb je geleerd? 65 Hoofdstuk 8 Overerving 67 Beschrijving 67 Voordelen 67 UML 67 NatSimII 69 Erven 70 Afspraken 71 Voorbeeld 8.1: Overerving 71 Opdracht Overerving 84 Opdracht 8.1: Klasse Vingerhoedskruid 84 Wat heb je geleerd? 84 Hoofdstuk 9 Abstracte klasse 85 Beschrijving 85 UML 85 Voorbeeld 9.1: Abstract maken van de klasse GrafischObject 85 Opdrachten Abstracte klassen 86 Opdracht 9.1: Abstract maken van de klasse Leven 86 Opdracht 9.2: Abstract maken van de klasse Plant 86 Wat heb je geleerd? 86 Hoofdstuk 10 Oefening, uitbouwen van het project 87 Voorbeeld 10.1: Klasse Dier 87 Opdracht Typering object 89 Opdracht 10.1: IsDier( ) 89 Voorbeeld 10.2: Abstracte methode implementeren 89 Opdrachten Uitbouwen van het project 91 Opdracht 10.2: Vleeseter 91 Opdracht 10.3: Methode Eet( ) bij Vleeseter 91 Opdracht 10.4: Alleseter 91 Opdracht 10.5: Methode Eet( ) bij Alleseter 91 Voorbeeld 10.3: Aanpassen van de klasse Konijn 92 Opdracht Vernieuwde klasse 93 Opdracht 10.6: Nieuwe klasse Koe 93
8 Hoofdstuk 11 Interfaces 95 Beschrijving 95 UML 96 Voorbeeld 11.1: Interface IBewegendObject 96 Opdracht Interfaces 100 Opdracht 11.1: Klok toevoegen 100 UML-klassendiagram Dier 100 Wat heb je geleerd? 100 Hoofdstuk 12 Delegates 101 Voorafje 101 Beschrijving 101 UML 101 Aanmaken delegate 102 Voorbeeld 12.1: Delegate definiëren, aanmaken en gebruiken 102 Waarom delegates? 106 Callback-functies 106 Voorbeeld 12.2: Callback delegate 107 Opdrachten Delegate 110 Opdracht 12.1: De ProgressBar 110 Opdracht 12.2: Spreektijd 110 Opdracht 12.3: Spreektijd met eindtijdwaarschuwing * 110 Multithreading 111 Wat heb je geleerd? 111 Hoofdstuk 13 Events 113 Beschrijving 113 UML 114 Voorbeeld 13.1: Timer event 115 Voorbeeld 13.2: Beweging 117 Opdrachten Completeren formulier 123 Opdracht 13.1: Toevoegen code 123 Opdracht 13.2: Test het programma 123 Voorbeeld 13.3: Het eerste zelfbouwevent 123 Voorbeeld 13.4: Event arguments 126 Voorbeeld 13.5: Keten van events 129 NatSimII tot nu toe 135 Opdrachten Events 136 Opdracht 13.3: Extra informatie tonen 136 Opdracht 13.4: Nog meer informatie tonen * 136 Collision detection 136 Voorbeeld 13.6: Collision detection 137
Inhoudsopgave 9 Opdrachten Collision detection 141 Opdracht 13.5: Red de Venijnboom 141 Opdracht 13.6: Vleeseter, Jaguar 141 Opdracht 13.7: Vleeseter, Lynx 141 Opdracht 13.8: Alleseter, Beer * 142 Opdracht 13.9: Red de Venijnboom opnieuw 143 Opdracht 13.10: Conversie van Leven naar Venijnboom 143 Opdracht 13.11: Conversie van Leven naar Vingerhoedskruid 143 Voorbeeld 13.7: Zaaien 143 Wat heb je geleerd? 144 Hoofdstuk 14 Oefening baart kunst 145 Opdrachten NatSimII 145 Opdracht 14.1: Venijnboom 145 Opdracht 14.2: Vingerhoedskruid 145 Opdracht 14.3: Zaaien 145 Opdracht 14.4: Over gras lopen 145 Opdracht 14.5: Voortplanting 145 Opdracht 14.6: Voortplanten Planten * 146 Opdracht 14.7: Shooting game * 146 Opdracht 14.8: Snelheid wijzigen * 146 Opdracht 14.9: Plaatjes * 146 Opdracht 14.10: Geluid * 146 Opdracht 14.11: Collision detection * 146 Opdracht 14.12: Evenwicht * 147 Nawoord 149 Bijlagen 151 Cookbook Events 151 UML-diagram NatSimII 154 Naming conventions C# 156 Bronvermelding 157