PureBasic: Einstieg in die Objektorientierte Programmierung

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Die objektorientierte Programmierung basiert auf dem Paradigma der Objektorientierung. Ein Paradigma gibt an, in welchem Programmierstil der Programmierer an eine Problemstellung heran geht. PureBasic z.B. ist vorallem imperativ und strukturiert, d.h. es werden Befehle in einer festen Reihenfolge verarbeitet und die Problemstellung wird in mehrere kleine Teilprobleme zerlegt (Stichwort Procedure), die für sich bearbeitet werden. Daraus ergibt sich die Lösung des gesamten Problems.

Bei der Objektorientierung versucht man das Problem in sogenannten Objekten darzustellen. Ein Objekt hat Eigenschaften (Attribute) und Methoden, um mit der Außenwelt, also anderen Objekten, in Kontakt zu treten. Die Attribute sind dabei meistens von der Außenwelt abgeschnitten und die Methoden stellen Schnittstellen bereit, um auf diese zuzugreifen. Ähnliche Objekte werden in sogenannten Klassen zusammengefasst, in denen Attribute und Methoden deklariert und definiert werden. Man könnte also z.B. alle Menschen in einer Klasse zusammenfassen.

; Listing 40: Klassen

OpenConsole()

Class Mensch
  Mensch(alter.l = 0, name.s = "")
  Release()
   
  set_alter(alter.l)
  get_alter.l()
  set_name(name.s)
  get_name.s()
  
  alter.l
  name.s
EndClass

Procedure Mensch\Mensch(alter.l = 0, name.s = "")
  PrintN("Ich bin der Konstruktor")
  This\alter = alter
  This\name = name
EndProcedure

Procedure Mensch\Release()
  PrintN("Ich bin der Destruktor")
EndProcedure

Procedure Mensch\set_alter(alter.l)
  This\alter = alter
EndProcedure

Procedure.l Mensch\get_alter()
   ProcedureReturn This\alter
EndProcedure

Procedure Mensch\set_name(name.s)
  This\name = name
EndProcedure

Procedure.s Mensch\get_name()
  ProcedureReturn This\name
EndProcedure

*jesus.Mensch = NewObject Mensch(2011, "Jesus")

PrintN("Name: "+*jesus\get_name())
PrintN("Alter: "+Str(*jesus\get_alter()))

DeleteObject *jesus

Delay(2000)
Ausgabe:

Ich bin der Konstruktor
Name: Jesus
Alter: 2011
Ich bin der Destruktor

Ganz am Anfang wird die Klasse durch das Schlüsselwort Class deklariert. Die Konvention lauten, dass Bezeichner groß geschrieben werden sollten. Danach folgt die Deklaration der Konstruktor- und Destruktor-Methode. Diese sind dazu da, um ein Objekt letztendlich zu initialisieren bzw. es wieder zu löschen. Dabei werden der Konstruktor-Methode zwei Argumente übergeben. Das = steht für einen Standardwert, falls kein Argument beim Methodenaufruf übergeben wird. Die Konstruktor-Methode hat dabei immer den Namen der Klasse, die Destruktor-Methode heißt immer Release(). Darauf folgen die Methoden, in diesem Fall Methoden, um auf die Attribute zuzugreifen. Attribute sind in PureBasic immer privat, d.h. für die Außenwelt nicht sichbar, in Gegensatz zu den Methoden, die öffentlich sind. Deshalb benötigt man diese Setter bzw. Getter. Zuletzt sei gesagt. dass Methoden immer außerhalb der Klasse definiert werden. Als letztes deklariert man die Attribute.

Bei der Methodendefinition schreibt man immer Klassenname\Methodenname. Der Backslash kann auch ein Punkt sein, ersterer fügt sich jedoch besser in die allgemeine PureBasic-Syntax ein. Weiter unten sieht man dann, wie auf Attribute zugegriffen wird: Die Attribute sind für die Methoden der gleichen Klasse sichtbar. Man schreibt This\Attributname. Auch hier gibt es wieder eine alternative Schreibweise: Anstatt des Backslash ein Pfeil (->) oder einfach nur der Pfeil, also auch ohne das This.

Ein Objekt wird mit dem Schlüsselwort NewObject gefolgt vom Konstruktor erstellt, dem die Argumente für die Konstruktormethode übergegen werden können. Bei diesem Objekt spricht man auch von einer Instanz der Klasse. Dabei wird eine Adresse auf das Objekt zurückgegeben, die in einem Zeiger vom Typ der Klasse gespeichert wird. Die Methoden werden dann über den Zeiger aufgerufen, indem man schreibt *ptr\methode(). Zuletzt löscht man das Objekt wieder, wobei die Destruktor-Methode automatisch aufgerufen wird. Die Destruktor-Methode muss übrigens nicht definiert werden, wenn nichts beim Löschen des Objekts geschehen soll, in diesem Fall geschah dies nur zur Verdeutlichung.

Aufgaben[Bearbeiten]

  1. Es soll ein Programm geschrieben werden, dass ein Bankkonto simuliert. Es soll einen Kontostand geben und die Möglichkeit Geld abzuheben und zu hinterlegen.