Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

type -> any?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 23.05.2008, 01:38    Titel: type -> any? Antworten mit Zitat

also mit meinem ansatz komm ich nicht wirklich weiter... würds gerne mal in die runde werfen..

Man stelle sich vor man hat ein array von 1 bis 100. jedes datenfeld dieses arrays ist ein pointer.

jedem pointer in diesem datenfeld weise ich eine instanzierte type zu. Kurz ein beispiel:
Code:

type hund
 name as string
 beine as integer
 declare sub machwas
 dim reisszaehne as integer
end type

sub hund.machwas
 print name & " klaefft sehr laut ..."
end sub

type katze
 name as string
 beine as integer
 declare sub machwas
 dim schnurrhaare
end type

sub katze.machwas
 print name & " miaut und nervt ..."
end sub

type maus
 name as string
 beine as integer
 declare sub machwas
 dim spieltrieb as double
end type

sub maus.machwas
 print name & " piepst ganz leise ..."
end sub

dim tier(1 to 10) as any ptr

tier(1) = new hund
tier(1)->name="wulfi"

tier(2) = new katze
tier(2)->name="mimi"

tier(3) = new maus
tier(3)->name="felix"

tier(4) = new katze
tier(4)->name="moepsi"

tier(5) = new hund
tier(5)->name="ronnie"

tier(6) = new katze
tier(6)->name="tigger"

tier(7) = new maus
tier(7)->name="speedy"

tier(8) = new maus
tier(8)->name="jerry"

tier(9) = new maus
tier(9)->name="mickey"

tier(10) = new maus
tier(10)->name="bloedy"

for i as integer = 1 to 10
 tier(i)->machwas
next

[/code]

In diesem Beispiel gibt es 10 tiere und 3 Tiersorten: Hunde, Katzen und Mäuse.
Jede Tiersorte hat eigenschaften die eine andere Tiersorte nicht hat. Aber es gibt auch eigenschaften die alle tiere teilen. Alle haben sie "Beine" und einen "Namen". Auch können sie etwas machen, aber das fällt bei jedem tier anders aus!! (machwas)


Mein Beispiel funktioniert deswegen nicht weil ein "any ptr" nicht auf die eigenschaften einer type zugreifen kann. Eigentlich auch fast verständlich.



Nun versuche ich mal eine frage zu formulieren:
Gibt es einen weg wie ich unterschiedliche types so abarbeiten kann wie es im beispiel geschehen soll?


Oder: Gibt es einen weg, wie ich ein "stammtier"-Datentyp erstelle wovon ich die anderen tiere ableiten kann?
Dann könnte man ein array mit pointern dieses bestimmten "Stammtieres" erstellen...
(dann währen ja auch die eigenschaften der tiere bekannt!)

Vielen dank schon mal!! lächeln

Gruß Chris
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 23.05.2008, 05:26    Titel: Antworten mit Zitat

mach nen type tier und caste den pointer immer auf tier, in den type packst du dann nur die eigenschaften, die jedes tier hat.. vererbung gibts in freebasic noch nicht von daher ist dein vorhaben noch nicht wirklich möglich
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 23.05.2008, 11:32    Titel: Antworten mit Zitat

Schade weinen

Dann warte ich mal bis das einer implementiert hat ... *AufDieUhrSchau*

Scherz bei seite, ich hoffe das in 10 jahren wenn die version 1.0 von Freebasic raus kommt auch vererbung teil der Sprache geworden ist... Jetzt versteh ich wenigstens wofür "vererbung" da ist...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 23.05.2008, 22:19    Titel: Antworten mit Zitat

jup, vererbung wäre, du machst ein allgemeines TYPE tier und dann ein TYPE hund "ist ein" tier "und hat zusätzlich" eine bestimmte halsbandfarbe, oder so in der richtung..
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 24.05.2008, 14:24    Titel: Antworten mit Zitat

Folgendes funktioniert erstmal AUGENSCHEINLICH:
(ob das wirklich eine gute idee ist, weiss ich nicht)

Code:

'Stammtype
type tier
 name as string
 beine as integer
 augen as integer
end type
   
'Hund hat gemeinsame Eigenschaften mit Stammtype
type hund
 name as string
 beine as integer
 augen as integer
 halsband as string
end type
       
   'Katze hat gemeinsame Eigenschaften mit Stammtype
type katze
 name as string
 beine as integer
 augen as integer
 fauchen as ubyte
end type

type maus
 name as string
 beine as integer
 augen as integer
 piepsen as long
end type
           
'über den unsinn und sinn einer eigenschaft bitte wohlwollend hinwegsehen!
           
dim wulfi as hund    ' Gesunder junger Hund
wulfi.name = "Wulfi"
wulfi.beine = 4
wulfi.augen = 2
wulfi.halsband = "toll"

dim mimi as katze    ' Alte körperlich benachteiligte Katze
mimi.name = "Mimi"
mimi.beine = 3
mimi.augen = 1
mimi.fauchen = 10

dim mausi as maus    ' Mutierte Maus
mausi.name = "Mausi"
mausi.beine = 8
mausi.augen = 4
mausi.piepsen = 10000

dim zeiger1 as any ptr = @wulfi
dim zeiger2 as any ptr = @mimi
dim zeiger3 as any ptr = @mausi
      
dim tiere(1 to 3) as tier ptr
tiere(1) = zeiger1
tiere(2) = zeiger2
tiere(3) = zeiger3
 
for i as integer = 1 to 3
    print tiere(i)->name & " hat " & tiere(i)->beine & " Beine und " & tiere(i)->augen & " Augen!"
next   


Damit wäre man in der Lage hund und katze mit den eigenschaften von "tier" anzusprechen...

Ist das jetzt sowas wie vererbung oder einfach nur unsinn? würde gerne eure meinung dazu hören...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 24.05.2008, 21:59    Titel: Antworten mit Zitat

Wirkliche Vererbung ist das nicht. Du hast nur mehrere gleichartige Typen entworfen und DIMensioniert, die haben aber keinen Bezug zum Typ "Tier".
Den Tier-Typ hast Du bewußt so gewählt, daß er die gleichen Records hat, wie die anderen Typen, und darauf dann ein Array von Zeigern gesetzt. Das funktioniert nur, solange Du den Typ Tier oder die anderen Typen nicht veränderst (sonst stimmt die Zeiger-Zuordnung nicht mehr).

Bei Vererbung bzw. OOP geht es nicht allein darum, Typen mit Funktionen aus der Eltern-Klasse anzusprechen.
Vererbung bedeutet, daß die Typen Maus, Hund und Katze von Tier abgeleitet sind. Das bedeutet auch: Sobald Du Tier veränderst (z. B. einen Record dazufügst), werden auch alle abgeleiteten gleichermaßen Typen verändert, ohne daß das in den jeweiligen Typen angegeben werden muß.
In C++ sieht das so aus:
Code:

Class maus:public tier

Nach FB übersetzt müßte/könnte es etwa so aussehen (wenn es implementiert wäre)
Code:

Class tier
  Name as String
  beine as integer
  augen as Integer
  Lautgeben as string
End Class

Class maus:public tier
  'Alle Records von Tier werden geerbt, brauchen also nicht neu aufgelistet   
  'zu werden.
end Class

Dim Mäuschen as Maus
  with Maus
    lautgeben = "Pieps"
  EndWith

Class Oktopus: public Tier
  beine as Long '8 Beine brauchen mehr Platz happy
  'Nur das Record Beine wird überschrieben, alles andere wird von "Tier"
  'geerbt.
end Class

Dim Tintenfisch as Oktopus
  with Tintenfisch
    lautgeben = "gurgel"
  End With

Also Maus als eine Differenzierung von Tier. Die Eigenschaften, die für die abgeleiteten Objekte spezifisch sind, werden kurzerhand überschrieben oder dazu geschrieben, alles andere wirdvom Typ Tier übernommen- vererbt. Bei großen Projekten mit vielen UDTs (In C++ nennt man sie Structs) erspart das viel Schreibarbeit. Bei Dir jedoch nicht.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 25.05.2008, 00:33    Titel: Antworten mit Zitat

Ah ok, verstehe ich sogar lächeln
Danke für den nachhilfe unterricht in OOP zwinkern .. ich finde mich nur langsam mit der materie zurecht... aber irgendwie seh ich OOP als nächsten logischen schritt in der "kunst" der Programmierung an.... aber ich glaub, damit bin ich nicht alleine happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 25.05.2008, 09:38    Titel: Antworten mit Zitat

Schön, daß es hilfreich war. cool
Ob OOP der "nächste logische Schritt" ist, darüber kann man streiten. Die heute bekanntesten Programme und Systeme (Windows, Linux, Office) sind nach wie vor in C geschreiben, also ohne OOP. Tatsächlich kannst Du alles, was OOP kann, auch prozedural lösen. OOP ist nur ein anderes Denkmodell. Allerdings ist es auch nicht ganz einfach, OOP in einem größeren Projekt konsequent einzuhalten.
OOP will sich an Verhaltensmuster der realen Welt orientieren: Also verschiedene Objekte, die bestimmte ererbte Eigenschaften gemeinsam haben, aber als Programmteile unabhängig voneinander agieren und nur die nötigsten Informationen austauschen. Vorraussetzung dafür ist ein gewisses vernetztes oder abstraktes Denken, das fällt vielen Leuten schwer (auch Programmierung). Andererseits besteht das Konzept nur auf Ebene des Quelltextes. Beim Umsetzen in Maschinencode wird doch wieder "nur" ein prozedurales Programm daraus.

Prozedurale Programmierung hingegen entspricht eher dem Ablauf eines Programmes im Rechner und dem Denkablauf des einzelnen Menschen (die Klassenmethoden eines OOP-Objektes sind letztendlich auch wieder nur prozedural) und ist daher für Anfänger leichter zu durchschauen.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz