OOP. Hvad er Properties og Methods?!

Tags:    javascript

Hej!
Jeg er nu nået til Objekt orienteret programmering i Javascript...
Men hvad er et objekt helt konkret?
Og hvad er properties og methods?

Håber I kan hjælpe mig!

Vh

Andreas



Et object... er... et Object? Jeg synes at du skal læse lidt på det på fx Wikipedia. Men du kan (i JavaScript) kalde et object for en "samling" a variabler og funktioner.
Fx:
Fold kodeboks ind/udJScript kode 


Dårligt eksempel, men gad ikke at skrive noget lang kode lige nu.. :)



Hej!
Jeg er nu nået til Objekt orienteret programmering i Javascript...
Men hvad er et objekt helt konkret?
Og hvad er properties og methods?

Håber I kan hjælpe mig!

Vh

Andreas


Et objekt er et koncept. Det er en måde at repræsentere data på i programmering.

Eks. en cykel:

Du siger du har en Cykel, her vil man kalde det en klasse.

Cyklen har så nogle egenskaber, som er det vi kalder properties. Det kunne f.eks. være: Antal gear, nuværende gear, farve, sædehøjde og så videre.

Man kan også nogle ting med en cykel. Man kan cykle, skifte gear, bremse osv.. Dette er methods.

En af de smarte ting som man normalt kan i sprog med OOP er det der hedder polymorphism. Du finder måske ud af at du gerne vil have en tandemcykel. Så kan du arve (kaldes inherit(ance) ) fra din cykel så du ikke skal lave alle de dele som en cykel normalt har. Her skal du så kun tilføje og ændre de dele der er nødvendig, eks, tilføje et ektra sæde.

Det er måske ikke det bedste eksempel, men håber du forstår hovedtrækkene.



Properties er ligesom variabler, bare inde i en klasse. Variabler i en klasse kan også kaldes felter eller fields. methods er ligesom funktioner, bare inde i en klasse :D

Og ved godt der er to andre der har svaret på hvad et object er, men det kan være det hjælper at høre det formuleret på flere forskellige måder.

En klasse er en samlign properties/variabler/fields og funktioner/methods. En klasse er ofte lavet til enten at repræsentere noget data(mange variabler) eller udføre nogle opgaver(mange funktioner). Der kan selvfølgelig også være mellem ting osv. At vide hvordan man skal designe en klasse, handler meget om erfaring, men man kan selvfølgelig også læse sig til nogle ting.

Et object er en "instance" af en klasse. Og så blev det tid til en analogi :DD

Skibe hedder oftest nogle meget underlige navne. Ved ikke meget om skibe, men har lige fundet et eksempel: CVN 77 (dont blame me, vis der ikke er en type skib der hedder det. Tror det er noget det amrikanske militær bruger til at transportere fly rundt i :D). Det kunne være det amrikanske millitær fandt ud af du skulle bruge 3 (intances/objecter) af denne klasse af skib. De kunne kalde dem:

-Amanda
-Lola
-Katarina

(tror faktisk at man kalder skib's typen for dens "klass" i virkeligheden også :P)

i kode kunne det se sådan ud:

Definition af CVN 77 klassen:
Fold kodeboks ind/udKode 


Et andet sted i koden kan vi så bestille 3 af denne klasse skib:
Fold kodeboks ind/udKode 


Håber at det hjælper :D



Efter mange timers forsøg på at finde ud af hvad properties og methods er, så tror jeg fakisk du lige har forklaret det så jeg kan forstå det :D
Her er min forståelse(sikkert ikke med rigtig syntaks, da jeg ikke er så god til JS endnu):
Fold kodeboks ind/udKode 


Er det en rigtig forståelse? :D



Efter mange timers forsøg på at finde ud af hvad properties og methods er, så tror jeg fakisk du lige har forklaret det så jeg kan forstå det :D
Her er min forståelse(sikkert ikke med rigtig syntaks, da jeg ikke er så god til JS endnu):
Fold kodeboks ind/udKode 


Er det en rigtig forståelse? :D

Du er på vej, men ikke helt, nej.

for at ovenstående skulle være gyldigt skulle det være:
Fold kodeboks ind/udKode 


Men, i JavaScript er der ikke klasser, der er kun objekter. Det tætteste du kommer på en klasse i JS er en function der indeholder variabler og andre functions. Dit eksempel vil virke med denne kode:

Fold kodeboks ind/udKode 


Men det smarteste vil være at flytte den alert ind i dit CVN77 objekt, så det bliver til dette:
Fold kodeboks ind/udKode 

Så vil man kunne sige:
Fold kodeboks ind/udKode 


Man kan også lave nye objekter ud fra eksisterende objekter. For eksempel kan du lave en CVN78 med nogle andre mål, men som har samme opbygning og arver alert(); metoden fra CVN77. Sådan her:
Fold kodeboks ind/udKode 

dette vil skabe et nyt objekt af typen CVN77, men hvor du derefter ændrer dens properties, og kalder dens alert() metode. -- men den oprindelige CVN77 er ikke ændret.



For at forstå OOP synes jeg at du skal kigge på et andet OOP sprog, f.eks ASP.NET eller PHP (når det nu skal være målrettet web). Da JavaScript på mange måder er et dynamisk sprog, hvor funktioner kan være objekter og properties kan være funktioner, kan det være svært at overskue.

For at gøre det virkelig forvirrende:
Fold kodeboks ind/udKode 

Ovenstående viser eksemplarisk hvordan en funktion både kan agere en almindelig funktion/metode og en klasse.

Så jeg synes du skal kigge på et sprog hvor du har de reelle betegnelser som Class og function til rådighed.




Indlæg senest redigeret d. 27.05.2009 22:07 af Bruger #10216

Men, i JavaScript er der ikke klasser, der er kun objekter. Det tætteste du kommer på en klasse i JS er en function der indeholder variabler og andre functions. Dit eksempel vil virke med denne kode:
Fold kodeboks ind/udKode 



Den kode virker helt fint, ud over teksten der kommer frem i alert() ikke helt passe:
"CVN77 er undefinedmeter lang og undefinedmeter bred".
Og jeg går ud fra at "undefined" skal være variableværdierne 100 og 30?
Har også prøvet eksemplet hvor alert(); var
med i functionen CVN77, men der gad den slet ikke vise popupvinduet.
Har prøvet det på FF, Chrmoe og IE.
Så hvordan skal koden se ud, for at den ikke viser undefined?
Ps. Jeg satte <html><script type="text/javascript">KODEN</script></html> uden om koden, og gemte det som en HTML fil.



For at forstå OOP synes jeg at du skal kigge på et andet OOP sprog, f.eks ASP.NET eller PHP (når det nu skal være målrettet web). Da JavaScript på mange måder er et dynamisk sprog, hvor funktioner kan være objekter og properties kan være funktioner, kan det være svært at overskue.

For at gøre det virkelig forvirrende:
Fold kodeboks ind/udKode 

Ovenstående viser eksemplarisk hvordan en funktion både kan agere en almindelig funktion/metode og en klasse.

Så jeg synes du skal kigge på et sprog hvor du har de reelle betegnelser som Class og function til rådighed.


Enig :D



t