Hoofdstuk 13: Object georiënteerd programmeren in C#

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.

Figuur 13.1 object georiënteerd programmeren

Figuur 13.1: Nieuw project in Visual Studio

Klik rechts bovenaan in de Solution Explorer met de rechtermuisknop op de naam van het project. Kies vervolgens in het menu Add voor Class.

Figuur 13.2 object georiënteerd programmeren

Figuur 13.2: Klasse toevoegen

Selecteer “Class” in de lijst met templates. Geef de klasse een passende naam en klik op”Add”.

Figuur 13.3 object georiënteerd programmeren

Figuur 13.3: Template Class

De aangemaakte klasse verschijnt in de Solution Explorer. De broncode van het project ziet er als volgt uit:

Figuur 13.4 object georiënteerd programmeren

Figuur 13.4: Broncode

Top

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;

Top

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; }
}

Top

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;
}

Top

13.6         Overerving

De broncode van de superklasse Voertuig ziet er als volgt uit:

Figuur 13.5 object georiënteerd programmeren

Figuur 13.5: Broncode klasse Voertuig

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.

Figuur 13.6 object georiënteerd programmeren

Figuur 13.6: Broncode klasse Fiets

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.

Figuur 13.7 object georiënteerd programmeren

Figuur 13.7: Abstracte klasse Voertuig

Top

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:

Figuur 13.8 object georiënteerd programmeren

Figuur 13.8: Voorbeeld klasse Auto

Top

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.

Top
OPLOSSINGEN

Vorige          Volgende