11. April 2007 in Ruby » Grundlagen

Objektorientierte Programmierung

Die objektorientierte Programmierung ist ein Programmierparadigma. Verglichen mit der prozedualen Programmierung hat die OOP den Vorteil, die Funktionen von Programmen flexibler und wiederverwendbar zu formulieren. Weitere wichtige Informationen über die OOP habe ich in Folgendem zusammengefasst.

Das Prinzip der objektorientierten Programmierung fasst zusammengehörende Daten und Funktionen in einem Objekt zusammen und macht diese innerhalb des Programms unanhängig. Andere Objekte können dieses nur bedingt manipulieren oder abfragen. Dafür werden für jedes Objekt Schnittstellen (sog. "Interfaces") bereitgestellt. Die Objekte sind so nach aussen hin gekapselt.

Um jemanden die OOP zu erklären, werden oft Beispiele aus der realen Welt genannt. Ein Objekt hat Eigenschaften und Funktionen. Ich werde hier einmal das Beispiel Restaurant verwenden.

Welche Eigenschaften und Funktionen hat das Restaurant? Dieses Beispiel ist sehr abstrahiert.

  • Es hat eine Eingangstür
  • Es hat eine Küche
  • Es hat eine Kasse
  • Es hat Tische und Stühle
  • Es hat einen Brandmelder
  • Es hat einen Notausgang
  • Es hat Öffnungszeiten

Außerdem sind einige der genannten Fakten mit Bedingungen verbunden:

  • Die Eigangstür ist nur während der Öffnungszeiten geöffnet.
  • Die Küche öffnet eine Stunde vor den Öffnungszeiten.
  • Der Notausgang ist nur während einer Brandmeldung geöffnet.

Wichtige Begriffe in der OOP

Klasse

Eine Klasse in der OOP ist ein Bauplan eines Objekts. Die fertige Klasse Restaurant würde es somit ermöglichen, eine Restaurantkette zu eröffnen, solange das nötige Budget vorhanden ist :)

Es beinhaltet alle Funktionen und Schnittstellen, die dafür nötig sind, das Objekt zu verwenden.

In einen Programm können beliebig viele Instanzen (auch Exemplare genannt) einer Klasse existieren, was somit für die Wiederverwendbarkeit spricht. Klassen können theoretisch auch in mehreren Programmen verwendet werden, da alle nötigen Funktionen des Objekts völlig unabhängig vom Programm funktionieren.

In Ruby werden Klassen folgendermaßen angelegt:

class Restaurant
  # Code der Klasse
end

Methode

Methoden einer Klasse sind Algorithmen, die Funktionen des Objekts beschreiben/formulieren. Als Gegenstück in der prozedualen Programmierung könnten die Funktionen angesehen werden.

Eine Methode aus unserem Beispiel müsste dafür sorgen, dass der Notausgang nur geöffnet ist, falls der Brandmelder Alarm ausschlägt.

In Ruby werden Methoden so in einer Klasse angelegt:

class Restaurant
  def notausgang
    # Code der Methode
  end
end

Attribute

Attribute sind Eigenschaften eines Objekts. In unserem Beispiel wäre die Anzahl der Tische und Stühle Attribute.

Grundlegende Attribute werden in Ruby der Ordnung halber in der Methode initialize eingefügt:

class Restaurant
  def initialize (tische, stuehle)
    @tische = tische
    @stuehle = stuehle
  end
end

Objekte, Klassen, Methoden etc. in Ruby

Die Beschaffenheiten, Konventionen und Syntax der genannten Elemente werden ich in einem späteren Artikel genauer behandeln. Dieser Artikel solte erst einmal das Verständnis für die OOP vermitteln. Um Ruby zu verstehen, muss man diesen Weg der Programmierung verstehen. Denn in der Entwicklung von Ruby wurde das Prinzip Objektorientierung strikt beachtet. Selbst ein einfaches 'Hallo Welt' basiert auf der Klasse String.


6 Kommentare

Christian am 11. April 2007 #

Netter Beitrag, aber ich glaube langsam ich bin dafür irgendwie ne Runde zu doof. Ich habe mich nun schon in Büchern belesen und Tutorials mitgemacht, aber irgendwie will der Funke einfach nicht überspringen. Zum Glück hat das mein Umstieg auf CakePHP ein wenig erleichtert...das zwingt einen ein wenig zu OOP ^^

Martin Labuschin am 11. April 2007 #

Jap, es ist genau wie Ruby on Rails. Völlig unbewusst schreibt man dort objektorientiert :) Durch das MVC-Prinzip kommt man garnicht erst auf die Idee, prozedual zu programmieren, da es die Ordnung innerhalb des Programms völlig zerstören würde.

Marco Philipeit am 11. April 2007 #

Sehr schön geschrieben, der Artikel, allerdings könntest du versuchen, näher auf deine Beispiele einzugehen und diese auch an der Realität weiterführen. Gerade der Aspekt der Restaurantkette ist sehr geschickt gewählt, doch bin ich mir nicht sicher, ob dies ein Benutzer ohne jegliche Vorkentnisse so einfach verstehen kann.


Liebe Grüße

Martin Labuschin am 11. April 2007 #

@Marco: Ich denke der erste Satz unter Klasse sagt es doch schon genug aus. Wenn ich auf Klassen noch einmal genauer eingehe (wahrscheinlich sehr zeitnahe) werde ich deinen Vorschlag sicherlich berücksichtigen. Danke.

Julian Schrader am 11. April 2007 #

Schöner Artikel ? führt einem OOP nochmal schön anschaulich vor Augen.

Ein kleiner Fehler ist mir aufgefallen: Im Beispiel zu Methoden sollte es "def notausgang" und nicht "class notausgang" heißen. ;-)

Martin Labuschin am 11. April 2007 #

Danke für den Hinweis.

Diskussion geschlossen

Die Kommentarfunktion dieses Artikels wurde deaktiviert. Private Mitteilungen an Martin bitte per E-Mail an martin@labuschin.com. Danke.