OOP Tutorial
Übersicht

![]() |
JolinahBetreff: OOP Tutorial |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hatte schon mehrere Tutorials für OOP geschrieben, trotzdem jetzt hier nochmal was neues als PDF, wo so ziemlich Alles oder jedenfalls das wichtigste über OOP in BlitzMax erwähnt wird. Ich habe alles frei aus dem Kopf heraus geschrieben und hoffe es hat nicht zu viele Fehler ![]() http://zehr.de/downloads/BlitzMax-OOP.pdf |
||
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wow, sieht gut aus!
Schickes Design...... Vielleicht könntest du noch Const, super und final erklären? (vielleicht hab ichs auch übersehen.....) Weiter so! |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke ![]() Du hast recht, Super wollt ich auf jedenfall noch einbauen, hab ich ganz vergessen. Und an Const und Final hab ich wohl in dem Moment auch grad nicht mehr gedacht, werd ich auch noch irgendwo was dazu schreiben. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habs mir mal ein wenig durchgesehen. Sieht gut aus ![]() Allerdings ist mir bei Abstract ein Fehler aufgefallen und zwar schreibst du, das abstrakte Methoden Methoden ohne Definitionen seien. Denke du meintest Methoden ohne Implementationen, denn Definition ist der Grund warum man überhaupt etwas abstrakt definiert ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke, Implementation würde wohl besser klingen, da hast du recht. Mit Methoden ohne Definition meinte ich Methoden wo der Funktionskörper nicht definiert ist, die Methode selbst wurde natürlich definiert ![]() Werde das auch noch anpassen. Ich habe es in MS Word geschrieben und in der Firma mit Adobe Acrobat Professional in ein PDF konvertiert. Ich bin aber die nächsten 2-3 Wochen nicht in der Firma, daher werd ich wohl das neue PDF erst dann online stellen können. Hab keine Lust extra Open Office etc. zu installieren ^^ |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gibt sonst auch free PDF printer Treiber, die es dir ermöglichen PDF zu speichern, wenn du kein "richtiges" Office drauf hast ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, überredet ![]() Die neue Version mit den Änderungen ist jetzt unter dem gleichen Link wie oben verfügbar: http://zehr.de/downloads/BlitzMax-OOP.pdf Die Anordnung der einzelnen Kapitel wurde auch noch etwas geändert. |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, irgentwie finde ich die Überschrift etwas irritierend. Ich hatte jetzt ein Tutorial erwartet indem gezeigt wird, wie man genau OOP programmieren kann, also wie ein Program dann am besten aufgebaut ist damit. Statdesssen ist das eher ein Type-Tutorial für BMax, ein sehr gutes und ausführliches. Vielleicht solltest du den Titel etwas umändern um dieses Missverständnis aus dem weg zu räumen, oder noch einen Teil anfügen indem du auf den Aufbau eines Programes per OOP eingehts. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, vielleicht werde ich noch etwas anhängen da ich das etwas vernachlässigt habe. Das ist allerdings ein recht grosses Thema, und eigentlich gibt es auch keine beste Variante wie man mit OOP programmiert. Jeder geht meist seinen eigenen Weg. Mit dem kleinen Beispiel wie man eine GUI angehen könnte, wollte ich sowas zeigen. Aber ich suche mal noch ein paar andere Fälle, wo ich eine gute OOP Lösung zeigen kann und hänge die an ![]() Aber generell braucht das einfach ein bisschen Gefühl und Erfahrung. Es empfiehlt sich zuerst ein wenig mit den Types rumzuspielen, mit allen Möglichkeiten, damit man die Zusammenhänge besser versteht. Dann weiss man von alleine mit der Zeit wie man am besten etwas in OOP implementieren kann. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
FDM:
Was du meinst ist Programmdesign, nicht OO Programmierung. Wobei es gewiss nicht schlecht wär irgendwann auch dafür ein Tutorial zu haben, wobei das etwas ist, was auf dem hier vorherrschenden Niveau (ohne OO Paradigmen und Korrektheitsgarantie) etwas sehr projekt- und nutzungsspezifisches ist ... Sprich ich weiss nicht inwiefern man da etwas allgemeins machen kann, ohne das man dann direkt auch noch Hooks, Events etc mit einbinden müsste (denn das wird eigentlich gebraucht wenn man schon OO macht ... da man dann auch moderne Programmierungsansätze nutzen sollte und nicht stupid 100% CPU ziehen oder delay nutzen sollte). Wenn du lernen möchtest, wie du Programme allgemein aufbauen kannst mit OO und BM, so kann ich dir sonst diese Tutorials ans Herz legen: http://www.2dgamecreators.com/...ssari.html (und ja, ich weiss, sie sind englisch. Aber englisch ist in der Informatik eine zwingende Grundvoraussetzung, welche man vor OO min. grundlegend beherrschen sollte) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
"Was du meinst ist Programmdesign, nicht OO Programmierung. "
Äh, jein. was ich meinte war, wie man ein Programm unter OOP-Aspekten am besten designen kann (oder vielleicht ein paar gute Ansätze zu dem Thema). Ich sehe hier im Forum öfters Codes in denen das sehr gut strukturiert scheint, wie z.B. das GameManager Modul wo ein schöner Ansatz zur Strukturierung von Programmen gezeigt wird, vor allem was die Wechselbeziehungen von Objekten aufeinander angeht. Also im grunde genommen geht es mir um die Frage: Welcher Type darf was? Wenn ich einen Raumschifftype hab, und einen der Informationen zu Raumschifftypen enthält, wie soll ich das erstellen eines neuen Raumschiffes realisieren? Soll der Infotype eine Create Methode enthalten mit der ich ein Raumschiff diesen Typs erstellen kann, oder soll ich im Raumschiftyp eine Funktion anlegen weche dieses macht und dann dafür aber das Hande des Infotypes braucht? Naja, so ungefähre Tipps eben wie man ein OOP Progamm designt. Die Tutorials richten sich ja eher an Anfänger die gar keine Ahnung haben wie sie ein Programm aufbauen sollen, und es wird auch nur sehr einfach auf die Objekte eingegangen (Ist schon klar dass sich ein Raumschiff selbst zu Updaten hat, aber mir geht es mehr um Interaktionen der Objekte untereinander). Apropos: "und ja, ich weiss, sie sind englisch" - Ist für mich kein Thema, bin ja nicht irgentein blutiger Noob ![]() |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mir dein Tutorial durchgelesen, Jolinah, und befinde es für sehr gut.
Doch genau wie FDM fehlt mir da etwas der Bezug zur Praxis ![]() |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke ![]() Zitat: Soll der Infotype eine Create Methode enthalten mit der ich ein Raumschiff diesen Typs erstellen kann, oder soll ich im Raumschiftyp eine Funktion anlegen weche dieses macht und dann dafür aber das Hande des Infotypes braucht?
Genau das meinte ich, mit jeder geht bzw. findet seinen eigenen Weg. Eigentlich spielt das überhaupt keine Rolle. Einige finden die erste Variante besser, und andere die zweite. Es ist auch ein wenig Geschmackssache bei der OOP. Das zumindest in diesem Fall. Es mag schon Fälle geben, wo eine bestimmte Lösung besser ist, als eine andere. Daher bin ich jetzt noch am überlegen, was für Beispiele denn sinnvoll wären. Wenn ihr Ideen oder Vorschläge habt kann ich diese ja noch ins Dokument einbauen ![]() Vielleicht sowas? (Beispiel wie man Monster und dessen KI verwalten könnte) Code: [AUSKLAPPEN] 'KI Basis-Type Type BaseKI Abstract Field Monster:BaseMonster 'Events die vom Monstertype aufgerufen werden Method OnDeath() Abstract End Type 'Monster Basis-Type Type BaseMonster Abstract Field X:Int, Y:Int Field Health:Int, MaxHealth:Int Field Death:Int 'Die aktuelle KI für das Monster Field KI:BaseKI 'Update-Methode die für alle Monster gilt, sofern sie nicht überschrieben wird Method Update() If Health <= 0 And Not Death Then Death = True If KI <> Null Then KI.OnDeath() EndIf End Method 'Methode um das Monster zu bewegen Method Move(xval:Int, yval:Int) X :+ xval Y :+ yval End Method End Type 'Ein erstes Monster ^^ Type Fledermaus Extends BaseMonster 'Zum erstellen einer Fledermaus und zuordnen einer KI Function Create:Fledermaus(X:Int, Y:Int, Health:Int, KI:BaseKI) Local f:Fledermaus = New Fledermaus f.X = X f.Y = Y f.Health = Health f.MaxHealth = Health f.KI = KI f.KI.Monster = f '<-- Monster für die KI setzen Return f End Function End Type 'Eine KI zu dem Monster, lässt sich dann natürlich für mehrere Benutzen Type EasyKI Extends BaseKI 'Wird aufgerufen wenn die Fledermaus tot ist ^^ Method OnDeath() Monster.Move(1,1) Print "Juhu, ich bin tot" End Method End Type Graphics 800, 600, 0 Local KI_1:EasyKI = New EasyKI Local f:Fledermaus = Fledermaus.Create(10, 10, 100, KI_1) Repeat Cls If KeyHit(KEY_SPACE) Then f.Health :- 100 f.Update() Flip Until KeyHit(KEY_ESCAPE) EndGraphics End |
||
Barbapapa |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, ich hoffe, dieser Thread bleibt kein Zombie, das Tutorial ist nämlich wirklich gut gelungen, ein paar Fragen hätte ich noch, aber da ich noch keine Zeit hatte, alles wirklich durch zu arbeiten, wollte ich warten, vielleicht verstehe ich diese Teile besser, wenn mal angewendet. Aber auch der Bereich OOP-based-design mit BMax würde mich sehr interessieren. Also bitte nicht aufhören!
Grüße |
||
ThomasT |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wirklich sehr gelungen. Hab eben erst von BlitzMax gelesen und das damit auch OOP möglich ist, freut mich sehr. Um die Grundlagen zu zeigen, sind diese einfachen Beispiele meiner Meinung nach aber vollkommen ausreichend. | ||
Sterbendes Lüftlein |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Text entfernt | ||
![]() |
empet |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn wir schon dabei sind diesen alten thread auszugraben, möchte ich auch noch sagen,
dass ich durch dieses tutorial BMX gelernt habe, mit vorkentnissen von B3D. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jippieh, ihr zwei habt mit Geblubber einen Thread getötet!
Seid stolz auf euch. Oder besser doch nicht. ~GESCHLOSSEN~ |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group