Objektorientierte Programmierung

Lange Jahre habe ich (fast) ausschließlich prozedural und strukturiert programmiert (naja, mal abgesehen von meinen Anfängen; da war sogar das GOTO noch ein Mittel...:-) )

Mittlerweile bin ich eine großer Anhänger der OOP. Ich betrachte sie nicht als Selbstzweck, sondern als ein geeignetes Mittel, um Programme klarer zu strukturieren und übersichtlicher sowie nachvollziehbarer zu gestalten. Die Denkweise ist sicherlich eine andere, aber es lohnt sich nach meiner Meinung, am Anfang mehr "Gehirnschmalz" in das Design zu stecken. Bei größeren Projekten bleiben diejenigen, die oo sind, so übersichtlicher.

Daher will ich einige meiner Ansätze hier mal veröffentlichen. Meine Programme sind in C++ oder Visual Basic (mittlerweile .NET) mit dem Microsoft Visual StudioExterner Linkerstellt und für das Betriebssystem Windows gedacht. Eine sicherlich ganz tolle und kostenfrei verfügbare Entwicklungsumgebung

Die Klassendiagramme sind alle mit StarUMLExterner Link erstellt. StarUML ist ein tolles Open Source Programm, das eine Menge von Stuktur und Verhaltensdiagrammen der UML kennt und sogar per Reverse Engineering Quellcode liest und Klassendiagramme erstellt. Leider wird es anscheinend nicht mehr weiter entwickelt! Schade :-(

Ich selbst betrachte mich als dauernd Lernenden, wobei ich selbst immer wieder durch Fragen meiner Schüler mit neuen Aspekten konfrontiert werde, die dann beim Nachforschen meinen eigenen Horizont erweitern. Hierfür sei allen Fragenden auch Dank gesagt!

Die Entwicklung von GUI-Applikationen unter C++ war in der Vergangenheit noch ziemlich komplex. Unter Visual Basic konnte man relativ einfach GUI-Anwendungen programmieren. Diese Art wurde nun mit dem neuen Visual Studio 2005 auch für C++ möglich: Die Windows Forms Projekte! Da die Programmierung von GUI-Applikationen sicherlich reizvoller (aber auch anspruchsvoller) ist, habe ich ein Dokument geschrieben, in dem die Grundlagen erläutert werden. Wer mag, soll es sich herunter laden. Zusätzlich gibt es eine Demoprojekt zu diesem Dokument.

Nachfolgend möcht ich Programme, die ich meist entwickelt habe, um Schülern die eine oder andere Anregung zu geben hier ablegen. Wer möchte soll sich die Archive herunterladen und in ein eigenes Projekt überführen. Oder sich einfach den Quellcode zu Gemüte führen...

Über ein Feedback per Mail freue ich mich natürlich
Uwe Homm
EMail: uhomm{at}gmx{punkt}de

Kartenstapel

Zwei Klassen, die eine enthält das Modell einer Karte und die andere das Modell eines Kartenstapels. Eine Karte hat eine Farbe und einen Wert; ein Kartenstapel enthält 32 Spielkarten und verfügt über verschiedene Methoden, wie z.B. Mischen oder Ziehen. Ein Testprogramm testet die Funktionalität des Kartenstapels.

Karte.h
Karte.cpp
Kartenstapel.h
Kartenstapel.cpp
Testprogramm kartenspiel.cpp
Kartenstapel.zip
Klassendiagramm

Berlinuhr

Manch einer kennt noch die BerlinuhrExterner Link mit dem etwas "besonderen" Ziffernblatt!
Ich habe daher mal die Zeitdarstellung in einer Klasse gekapselt und ein Konsolenprogramm sowie ein GUI-Programm erstellt. Die Visual Studio 2005 Solution kann man sich laden oder einfach nur die Klasse betrachten. Aussehen der Programme und das Klassendiagramm sind nachfolgend dargestellt.
Mir ging es auch hier wieder vor allem um die Erstellung einer einfach wiederverwendbaren Klasse.

Berlinuhr.h
Berlinuhr.cpp
Berlinuhr.zip
Klassendiagramm Berlinuhr
GUI der Berlinuhr Konsolenvariante der Berlinuhr

Pong

Ein Klassiker unter den Videospielen ist PongExterner Link. Hiermit wollte ich nun endlich mal das Konzept eines Model-View-Controllers umsetzen. Ob es mir gelungen ist, weiß ich nicht. Ich habe damit noch keine praktische Erfahrungen gemacht. Über Feedback und Hinweise würde ich mich sehr freuen!
Für die GUI habe ich nun auch noch ein Pong geschrieben; allerdings ist das noch nicht 100%ig.
Wer will sich das ansehen...

Heraus gekommen ist insgesamt folgendes:
PongController.h
PongController.cpp
PongView.h
PongView.cpp
Ball.h
Ball.cpp
Racket.h
Racket.cpp
pong_game.cpp
Pong.zip
Klassendiagramm Pong
Konsolenvariante von Pong GUI-Variante von Pong
In der main() in pong_game.cpp wird lediglich ein PongController-Objekt erzeugt und das Spiel gestartet. Im PongController wird nun eine PongView zur Darstellung der Objekte Ball und zwei Schläger erzeugt. Weiterhin werden im PongController der Ball und die beiden Schläger erzeugt. Der Ball wird in einem eigenen Thread animiert. Die Schlägersteuerung erfolgt im PongController. Der Ball meldet der PongView, dass er neu gezeichnet werden muss. Der PongController meldet dies der PongView für die beiden Schläger.

Wer mag, soll sich die ZIP-Datei saugen und das Projekt kompilieren.

Zu dem Thema "Threads" habe ich mal ein PDF erstellt, das man hier findet.

Vier Gewinnt

Auch dieses Spiel habe ich in Art einer MVC Anwendung erstellt und die Modell-Klasse (VierGewinntModel.h) unverändert in der Konsolen- als auch in der GUI-Anwendung eingesetzt. Bei der Konsolen-Anwendung gibt es neben der Modell-Klasse noch eine Klasse, die die View kapselt (VierGewinntView.h) und den Controller (VierGewinntController.h). Letzterer nimmt die Benutzereingaben entgegen und reicht diese an das Modell weiter. Der Controller veranlasst dann auch die View sich neu darzustellen anhand der Daten des Modells.

Nachfolgend sind die Dateien der Konsolenvariante einsehbar. Für die GUI-Variante ist in der Klasse Spieler der Datentyp String^ anstatt string aus der STL verwendet, da sonst noch mittels Funktionen eine Konvertierung anfällt. Die Form-Datei der GUI ist im ZIP-Archiv enthalten.

Wer mag, soll sich das herunterladen und kompilieren.

Dateien der Konsolenvariante

VierGewinntController.h
VierGewinntController.cpp
VierGewinntModel.h
VierGewinntModel.cpp
VierGewinntView.h
VierGewinntView.cpp
Spieler.h
Spieler.cpp
vier_gewinnt.cpp

VS 2008 Solution

viergewinnt.zip
Klassendiagramm des Vier Gewinnt Spieles
GUI des Vier Gewinnt Spieles Konsolenvariante des Vier Gewinnt Spieles