Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 23.05.2008, 01:38 Titel: type -> any? |
|
|
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!!
Gruß Chris |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 23.05.2008, 05:26 Titel: |
|
|
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 |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 23.05.2008, 11:32 Titel: |
|
|
Schade
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 23.05.2008, 22:19 Titel: |
|
|
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 |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 24.05.2008, 14:24 Titel: |
|
|
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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 24.05.2008, 21:59 Titel: |
|
|
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
'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 |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 25.05.2008, 00:33 Titel: |
|
|
Ah ok, verstehe ich sogar
Danke für den nachhilfe unterricht in OOP .. 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  |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 25.05.2008, 09:38 Titel: |
|
|
Schön, daß es hilfreich war.
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 |
|
 |
|