Objektorientierung: Klassen und Objekte

Eine Klasse stellt einen Bauplan dar, welche Variablen, Eigenschaften (dazu später mehr) und Funktionen enthalten. Eine Klasse kann also als Ansammlung von Variablen, Eigenschaften und Funktionen bezeichnet werden. Klassen werden dazu eingesetzt, einen zusammenhängenden Programm-Teil zu kapseln. Die Klasse befindet sich innerhalb des namespace-Blocks. Auch die Klasse selbst bildet einen Block, welche sich durch das Schlüsselwort class kennzeichnet.
Von Objekten spricht man, wenn eine Variable dieser Klasse initialisiert wird. Um eine Variable einer Klasse zu initialisieren, benötigen wir das Schlüsselwort new, den Klassennamen und runde Klammern (direkt hinter dem Klassennamen, also wie bei einer Funktion). Die Anzahl der Objektinitialisierungen unserer Klasse ist unbegrenzt, somit können wir mehrere Objekt erzeugen, benötigen jedoch immer nur eine Klasse.
In der „objektorientierten Programmierung“ (kurz OOP) gibt es einige stilistische Regeln. Hierzu zählt z. B. dass globale Variablen nicht von außen zugänglich gemacht werden sollten. Um Werte einer internen Variable auszulesen oder zu setzen, wird daher entweder eine Funktion geschrieben oder Eigenschaften verwendet. Der Vorteil von Funktionen und Eigenschaften ist, dass hier ein Programmcode hinterlegt werden kann, mit dem z. B. der Wertebereich (bei Zahlen) überprüft werden kann.
Hierzu ein Beispiel: Wir haben einen Bauplan (Klasse) für ein Auto. Von diesem Auto können wir jetzt eine unbegrenzte Anzahl bauen, die jederzeit erweitert werden kann. Die einzelnen Autos stellen also die Objekte dar.
In unserem Programm-Beispiel erstellen wir eine Klasse namens Computer. Diese besitzt die (privaten, also von außerhalb unzugänglichen) Variablen bHdmiVorhanden und iFestplattenGröße. Des Weiteren verfügt die Klasse über die Funktionen SetzeHDMI(), SetzeFestplattenGröße() und ZeigeInfo().
In einigen weiteren Beispielen werden Sie sehen, dass hier das Schlüsselwort this verwendet wird. this greift auf das eigene Objekt zu. So können wir z. B. eine Unterscheidung herstellen, wenn eine globale Variable der Klasse und der Name eines Parameters einer Funktion den gleichen Namen haben.

Program.cs

using System;

namespace CSV20.Klassen_Objekte
{
    class Program
    {
        static void Main(string[] args)
        {
            Computer oComputer1, oComputer2;

            Console.WriteLine("Computer 1:");
            oComputer1 = new Computer();
            Console.WriteLine("Setze Festplattengröße auf 8 TB"); 
            if (!oComputer1.SetzeFestplattenGröße(8192))   // schlägt fehl (max. 4 TB)
                Console.WriteLine("Festplattengröße konnte nicht gesetzt werden");
            oComputer1.ZeigeInfo();
            Console.WriteLine("Setze Festplattengröße auf 512 GB");
            if (!oComputer1.SetzeFestplattenGröße(512))
                Console.WriteLine("Festplattengröße konnte nicht gesetzt werden");
            oComputer1.ZeigeInfo();

            Console.WriteLine();

            Console.WriteLine("Computer 2:");
            oComputer2 = new Computer();
            oComputer2.SetzeFestplattenGröße(1024);
            oComputer2.SetzeHDMI(true);
            oComputer2.ZeigeInfo();

            Console.ReadKey();
        }
    }
}

Computer.cs
using System;

namespace CSV20.Klassen_Objekte
{
    public class Computer
    {
        private bool bHdmiVorhanden = false;        // standardmäßig ist kein HDMI-Anschluss vorhanden
        private int iFestplattenGröße = 256;        // in Gigabyte, Standard-Wert ist 256 GB

        public void SetzeHDMI(bool bHatHDMI)
        {
            // bHdmiVorhanden könnte auch auf public gesetzt werden, dadurch ist
            // die Objektorientierung jedoch nicht gegeben
            bHdmiVorhanden = true;
        }

        public bool SetzeFestplattenGröße(int iGröße)
        {
            // nur Größen von 32 GB bis 4 TB erlaubt
            if (iGröße >= 32 && iGröße <= 4096)
            {
                iFestplattenGröße = iGröße;
                return true;
            }
            else
                return false;
        }

        public void ZeigeInfo()
        {
            Console.WriteLine("Computer-Info:");
            Console.WriteLine(" > Die Festplatte ist {0} GB groß", iFestplattenGröße);
            if (bHdmiVorhanden)
                Console.WriteLine(" > HDMI-Anschluss ist vorhanden");
        }
    }
}
Download

LinksRechts