Avatar billede Slettet bruger
08. juni 2003 - 18:01 Der er 30 kommentarer og
1 løsning

Hvad er en instans?

Kan nogle give mig en kort og fyldstgørende forklaring på hvad en instans er?
Avatar billede jonasm Nybegynder
08. juni 2003 - 18:05 #1
instans [enZsdanOs] subst. -en, -er, -erne 1. et trin i en række af myndigheder, fx af domstole d appellere en sag til en højere instans ·  sagen er behandlet i første instans ·  vi vil føre sagen gennem alle instanser ·  jeg ved ikke hvilken instans jeg skal klage til ·  ministeriet er den øverste instans i denne sag e retsinstans · i første instans først og fremmest d ansvaret for hunden påhviler i første instans ejeren · i sidste instans udtryk for at noget er den vigtigste el. grundlæggende del af en sammenhæng = I SIDSTE ENDE, NÅR ALT KOMMER TIL ALT, TIL SYVENDE OG SIDST d i sidste instans er det et spørgsmål om penge !
Avatar billede arne_v Ekspert
08. juni 2003 - 18:06 #2
En instans er bare en forekomst af en klasse.
Avatar billede arne_v Ekspert
08. juni 2003 - 18:06 #3
Hvis din klasse hedder C og du erklærer:

C minc;

så er minc en instans af klassen C.
Avatar billede arne_v Ekspert
08. juni 2003 - 18:07 #4
Bare et fint objektorienteret ord for noget ganske almindeligt.
Avatar billede Slettet bruger
08. juni 2003 - 18:09 #5
arne_v> vil det så sige at når man anvender instansen minc så henvender den sig faktisk til C?
Avatar billede arne_v Ekspert
08. juni 2003 - 18:12 #6
Sådan vil jeg ikke formulere det.

minc er en instans af C = minc er en variabel af typen C
Avatar billede Slettet bruger
08. juni 2003 - 22:49 #7
Hvad bruger man egentligt instanser til? Ville der ikke være det samme hvis man blot brugte fx C fremfor minc
Avatar billede arne_v Ekspert
08. juni 2003 - 22:53 #8
Slet ikke.

Ligesom du skriver:

int i;
i = 123;

Skriver du:

C c;
c.f();

for at kalde en ikke statisk metode (hvis du vil kalde en statisk
metode kan du netop kalde den på klassen fremfor instansen).
Avatar billede Slettet bruger
08. juni 2003 - 22:57 #9
Hvad er det nu lige med statisk og dynamisk....

Dynamisk er det ikke at det kan ændre sig mens statisk ikke kan?
Avatar billede arne_v Ekspert
08. juni 2003 - 23:08 #10
I de fleste sammenhænge men ikke lige i denne.

I klasser er statiske members/methods noget der hører klassen
til mens ikke-statiske members/methods hører til den enkelte forekomst/instans.
Avatar billede Slettet bruger
08. juni 2003 - 23:24 #11
Forstår jeg så dette korrekt:

class C
{
private:
  int tal;
  funktion();
public:
  int tal1;
};

vil jeg så lave en instans af C kommer den fx til at hedde
C minc er dette korrekt forstået?

vil jeg så have sat i funktion() skal det gøres ved
minc.funktion();?

det er muligt at kalde funktionen via
C.funktion(); fordi der er tale om en statisk!

Kan du komme med et eks hvordan jeg evt kan anvende ikke statiske?
Avatar billede Slettet bruger
08. juni 2003 - 23:25 #12
skal nok smide ekstra point oveni :o)
Avatar billede arne_v Ekspert
08. juni 2003 - 23:35 #13
Jeg prøver lige at lave et eksempel.
Avatar billede arne_v Ekspert
08. juni 2003 - 23:36 #14
#include <iostream>

using namespace std;

// klassen MinKlasse
class MinKlasse {
  private:
      int v;
  public:
      MinKlasse() { v = 123; };
      void MinMetode() { cout << v << endl; };
      static void MinStaticMetode() { cout << "hello" << endl; };
};

int main()
{
  MinKlasse::MinStaticMetode(); // vi kalder en statisk metode
  MinKlasse mininstans; // vi laver en instans af klassen MinKlasse
  mininstans.MinMetode(); // vi kalder en ikke-statisk metode på instansen
  return 0;
}
Avatar billede arne_v Ekspert
08. juni 2003 - 23:37 #15
Jeg håber ovenstående gør tingene lidt tydligere.

Bemærk at MinStaticMetode ikke kan udskrive v, da
den er ikke-static d.v.s. knyttet til en instans
(forekomst af klassen).
Avatar billede _darkstar_ Nybegynder
08. juni 2003 - 23:39 #16
peters>>> Jeps.

Pånær at det ikke længere heddeer funktioner, men metoder.

F. eks.

class Bil {
  private int døre;

  public Bil(int d) {
    this.døre = d;
  }

  public void setDøre(int d) {
    this.døre = d;
  }

  public int getDøre() {
    return this.døre;
  }
}

Klassen hedder "Bil". "døre" er en attribut. "getDøre" og "setDøre" er metoder. Metoden "Bil" er en instantiator som danner en instans af klassen "Bil".

herefter kan man

Bil minEllert = new Bil(1);
Bil minVolvo = new Bil(4);
Bil minBMW;

minBMW = minEllert;
minBMW.setDøre(4); // Ellers er det nok ikke en BMW

minEllert, minVolvo og minBMW er variable af typen "Bil". Når de indeholder noget er det en instans af klassen "Bil". Bemærk at minBMW ikke indeholder noget til start (den er instantieret til værdien null) og indeholder dermed ikke en instans af "Bil" før at sætningen minBMW = minEllert bliver kørt.
Avatar billede arne_v Ekspert
08. juni 2003 - 23:42 #17
darkstar>

Den kode ligner mere Java end C++ !

(principperne er dog fuldstændigt det samme)
Avatar billede _darkstar_ Nybegynder
09. juni 2003 - 00:10 #18
Ups. Sorry. Det er skam Java.
Avatar billede Slettet bruger
09. juni 2003 - 11:48 #19
arne_v> fint eksempel syntes jeg..... men hvorfor anvender man så statiske metoder.
Er det så fordi men når man anvender statiske metoder, så kan metoden kun køres indenfor den klasse metoden tilhører?!
Mens ikke statiske metoder kan køreres også kan køres udenfor klassen?!

Eller?!
Avatar billede arne_v Ekspert
09. juni 2003 - 12:38 #20
Nej en statisk metode er en metode som p.g.a. sin natur ikke behøver en instans.

Hvis vi kigger på mit eksempel:

MinMetode bruger member v og kræver derfor en instans for at have en v.

MinStaticMetode bruger ikke v eller andre ting der kræver en instans. Derfor
kan den være static.

Et god eksempel på hvorfor man kunen ønske at have en static metode er
singleton pattern, hvor man har en private constructor men kalder
en statisk metode til at hente en instans af objektet.
Avatar billede _darkstar_ Nybegynder
09. juni 2003 - 13:09 #21
De statiske metoder som I skrver om kalders også for klasse-metoder på OO-sprog.
Avatar billede Slettet bruger
09. juni 2003 - 13:15 #22
føler mig lidt som en idiot... har vidst glemt ALT for meget c++ må jeg erkende :(

Dvs at hvis den metode jeg ønsker at anvende, ikke skal bruge andre data fra klassen fx v så er det ok den er statisk.
Men hvis den metode jeg ønsker at benytte mig af kræver yderligere data fra klassen, fx v skal er jeg nød til først at lave en instans, som derved får adgang til v.
Avatar billede arne_v Ekspert
09. juni 2003 - 13:19 #23
Ja.

Smag og behag er lidt forskellig. Men jeg laver normalt
kun en metod estatic hvis jeg ved at jeg kan få brug for
den som static - ikke bare fordi den kunne laves static.
Avatar billede _darkstar_ Nybegynder
09. juni 2003 - 13:25 #24
Det som du har brug for at vide mere om er ikke nødvendigvis C++ men OO-programmering.

generelt vil jeg nok sige at klassemetoder ikke er noget man skal arbejde med før at man er godt vant til OOP. Ellers risikerer man hutigt at lave noget underligt snask som ikke rigtig er OO.

Din vending med "at få adgang til v" vidner om en meget snæver tilgang til hvad objekter egentlig er - hvis der er nogle data som man gerne vil arbejde på, skal det der forarbejder disse data nødvendigvis være en instans-metode - ellers ikke.

Jeg kan komme med masser af eksempler på situationer hvor man vælger at lave instans-metoder som *ikke* bruger attributterne i objektet og hvor det alligevel er hensigtsmæssigt at insistere på at man skal have en instans for at kunne kalde metoden.
Avatar billede _darkstar_ Nybegynder
09. juni 2003 - 13:25 #25
Ovenstående var henvendt til peters.
Avatar billede Slettet bruger
09. juni 2003 - 13:43 #26
arne_v tak for hjælpen.. har sat pointene 15 op, håber det er okay ellers må du lige råbe højt :)

darkstar> ja det er desværre længe siden jeg fik undervisning i C++, og dengang havde det desværre ikke min store interesse. Men det får jeg nu betale for nu :(
Avatar billede _darkstar_ Nybegynder
09. juni 2003 - 14:11 #27
petser>>> Du læste vidst ikke hvad jeg skrev - det er ikke C++ du nøfvendigvis har brug for at vide mere om. Det er OOP. Her er en god bog:

http://www.polyteknisk.dk/butik/vare.asp?varenr=7561
Avatar billede arne_v Ekspert
09. juni 2003 - 14:28 #28
Der er skrevet en del gode bøger om OOP.

Men hvor meget går de i dybden med statiske versus ikke-statiske
metoder (og medlemmer) ?
Avatar billede arne_v Ekspert
09. juni 2003 - 14:29 #29
Hvis mere konkrete eksempler hjælper så vil jeg nærmest sige at GoF
måske er en af de bedre bøger (der er en del brug af static).
Avatar billede arne_v Ekspert
24. juni 2003 - 20:58 #30
peters>

Tid at lukke spørgsmålet ?
Avatar billede Slettet bruger
24. juni 2003 - 22:58 #31
Sorry havde glemt dette spm.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester