13.1 Klasse binnen object georiënteerd programmeren in C#
13.2 Private variabelen
13.3 Publieke methoden
13.4 Property
13.5 Constructor
13.6 Overerving
13.7 Polymorfisme
13.8 Eenvoudig voorbeeld
Oefeningen hoofdstuk 13
13.1 Klasse binnen object georiënteerd programmeren in C#
De beschrijving van een klasse met object georiënteerd programmeren in C# begint steeds met de woorden “public class” gevolgd door de naam van de klasse. Namen van een klasse beginnen steeds met een hoofdletter.
De inhoud van een klasse bestaat uit de volgende 3 onderdelen:
- de declaratie van de (private) variabelen;
- de implementatie van de (publieke) methoden;
- de implementatie van de eigenschappen (properties).
Een nieuwe klasse aanmaken binnen “Visual Studio” gebeurt aan de hand van de onderstaande stappen.
Maak een nieuw project aan van het type Console Application door in het menu te kiezen voor New Project.
Klik rechts bovenaan in de Solution Explorer met de rechtermuisknop op de naam van het project. Kies vervolgens in het menu Add voor Class.
Selecteer “Class” in de lijst met templates. Geef de klasse een passende naam en klik op”Add”.
De aangemaakte klasse verschijnt in de Solution Explorer. De broncode van het project ziet er als volgt uit:
13.2 Private variabelen
De instantievariabelen worden steeds als “private” gedeclareerd bovenaan in de klasse en zijn toegankelijk voor alle opdrachten binnen deze klasse. Het woord “private” duidt erop dat deze variabelen enkel te benaderen zijn binnen de klasse zelf.
private String strTitel;
private Double dblPrijs;
private int intAantal;
13.3 Publieke methoden
Publieke methoden zijn methoden die ook toegankelijk zijn voor andere delen van het programma. Ofwel voeren de methoden enkel acties uit (keywoord “void”) ofwel geven ze een resultaat terug (corresponderende datatype en keywoord “return”).
public void setTitel(String strTitelNieuw)
{
//Voer een titel in.
strTitel = strTitelNieuw;
}
public String getTitel()
{
//Retoureer de titel.
return strTitel;
}
Wanneer een methode enkel binnen de klasse zelf gebruikt wordt, is het uiteraard niet nodig om deze methode als public te definiëren. Dergelijke methoden worden dan gedefinieerd als private. Dit is het principe van inkapseling.
Top
13.4 Property
Volgens de algemene principes van object georiënteerd programmeren worden instantievariabelen opgevuld en uitgelezen met publieke methodes. Deze taal- en platformonafhankelijke toepassing werkt ook binnen de ontwerpomgeving van Visual Studio.
Binnen de ontwerpomgeving Visual Studio kan echter ook gebruik gemaakt worden van “properties”. Een property in C# ziet er als volgt uit:
public String Titel
{
get { return strTitel; }
set { strTitel = value; }
}
13.5 Constructor
Bij het creëren van een nieuwe instantie (object) van een klasse, moeten de private variabelen geïnitialiseerd worden. Dit kan op twee manieren.
De eerste manier is gekend van de basiscursus C#. Bij de declaratie van de variabelen kunnen eenvoudig waarden toegekend worden.
private String strTitel = “AC/DC”;
private Double dblPrijs = 22.95;
private int intAantal = 18;
Een andere mogelijkheid is het aanmaken van één of meerdere constructors. Een constructormethode heeft altijd dezelfde naam als de klasse en wordt automatisch aangeroepen bij de creatie van een nieuwe instantie van de klasse. Een constructormethode heeft geen resultaatwaarde, maar kan wel een parameter bevatten.
//Constructor met standaardwaarden.
public Class1()
{
strTitel = “”;
dblPrijs = 0;
intAantal = 0;
}
//Constructor met parameters.
public Class1(String strTitelInvoer, double dblPrijsInvoer, int intAantalInvoer)
{
strTitel = strTitelInvoer;
dblPrijs = dblPrijsInvoer;
intAantal = intAantalInvoer;
}
13.6 Overerving
De broncode van de superklasse Voertuig ziet er als volgt uit:
De variabelen zijn gedefinieerd als “protected”. Dit betekent dat de klasse Voertuig ook alle subklassen toegang geeft tot deze variabelen.
De klasse Fiets is een subklasse van de superklasse Voertuig. Het dubbelpunt bij de definitie van de klasse wijst op de overerving. De properties gedefinieerd bij de superklasse Voertuig kunnen meteen ingesteld worden.
Het keywoord “virtual” bij een methode van de superklasse geeft expliciet aan dat een subklasse via het keywoord “override” een nieuwe implementatie mag geven aan deze methode.
Top
13.7 Polymorfisme
De subklasse Fiets erft van de superklasse Voertuig. Beide klassen hebben een publieke methode getDetails( ).
Aan de hand van onderstaande code kan van beide klassen een instantie aangemaakt worden:
Fiets mijnFiets = new Fiets();
Voertuig mijnVoertuig = new Voertuig();
Iedere klasse heeft een methode getDetails( ). Met de onderstaande code kan je het resultaat weergeven in de console:
Console.WriteLine(mijnFiets.getDetails());
Console.WriteLine(mijnVoertuig.getDetails());
Hoewel bovenstaande aanroepen identiek zijn, wordt in beide gevallen een andere versie van de methode getDetails( ) aangeroepen. C# zorgt ervoor dat de juiste methode wordt aangeroepen. Dit is de essentie van polymorfisme.
Om optimaal met polymorfisme te kunnen werken, worden abstracte klassen gebruikt. Van een abstracte klasse kan je geen objecten maken. Een abstracte klasse is steeds een superklasse en beschrijft de gemeenschappelijkheden tussen de verschillende subklassen.
In ons voorbeeld zou de klasse Voertuig als abstract gedefinieerd moeten worden. Hiervoor wordt het keywoord “abstract” gebruikt.
13.8 Eenvoudig voorbeeld
Maak binnen C# een nieuwe console application met de naam “Auto” en voeg een nieuwe klasse “Auto.cs” toe.
Een auto heeft een bepaalde kleur. In het voorbeeld is een constructor voorzien om een nieuwe auto aan te maken en een publieke methode om de auto te beschrijven. De code ziet er als volgt uit:
Oefeningen hoofdstuk 13
Oefening 13-1 Programmeer “oefening 10-7 Klasse Fruitautomaat” opnieuw volgens de regels van C#. Maak gebruik van een consoletoepassing.
Oefening 13-2 Maak een klasse Dier. Deze klasse is een superklasse die abstract gedefinieerd mag worden. Voorzie een constructor, een property Gewicht (type integer) en een methode Geluid. De methode Geluid geeft een string weer die het geluid van het dier toont.
De klasse Dier heeft een aantal subklassen: Hond, Kip en Varken. Deze subklassen hebben verschillende implementaties van de methode Geluid.
Maak objecten van de verschillende subklassen in een consoletoepassing en speel met de properties en methoden.
Oefening 13-3 Programmeer “oefening 11-5 Klasse Werknemer” opnieuw volgens de regels van C#. Maak gebruik van een consoletoepassing.
Oefening 13-4 Programmeer “oefening 11-1 Klasse Punt en klasse Cirkel” opnieuw volgens de regels van C#. Maak gebruik van een consoletoepassing.
Oefening 13-5 Programmeer “oefening 11-2 Klasse Balk” opnieuw volgens de regels van C#. Maak gebruik van een consoletoepassing.
Extra oefening 13-6 Ontwerp een consoletoepassing die een bankrekening simuleert. Maak hiervoor de klasse Bankrekening. Voorzie 2 methoden, namelijk Opname en Storting, en een property HuidigSaldo. Aan de gebruiker wordt telkens een bedrag gevraagd. Bij een negatief bedrag gebeurt een opname en bij een positief bedrag een storting. Wanneer de gebruiker de letter “S” invoert, wordt het saldo getoond. Bij invoer van de tekst “END” wordt het programma afgesloten.