Avatar billede mortenhc Nybegynder
29. december 2004 - 13:01 Der er 13 kommentarer og
1 løsning

pointere til objekter

Pointere til Objekter
Jeg er lidt forvirret omkring pointere til objekter. Aktuelt vil jeg finde ud af hvordan man skal forbinde et medarbejder-objekt med et kunde-objekt:

MEDARBEJDER - KUNDE
1            - M(ange)

Her vil jeg mene der skal være en pointerattribut fra MEDARBEJDER og til KUNDE (Medarbejder kan oprette kunde, ikke omvendt):

Således skulle jeg mene at medarbejder-klassen og kunde-klassen se ud:

class MMedarbejder
{
  public:
    MMedarbejder();
    ~MMedarbejder();
    .
    .   
    .
  private:
    int MedarbejderNr;
    string MedarbejderNavn;
    string Adgangskode;

// her skal så være pointere til de objekter medarbejderklassen skal have adgang til og bruger (som jeg ser det)
    Mkunde *Pkunden;
    // og hvad medarbejderklassen ellers bruger....
} // slut på medarbejder

class MKunde
{
  public:
    Mkunde::MKunde();
    .
    .   
    .
  private:
    int KundeNr;
    string KundeNavn;
    string telefon;
    //osv.
    F_Medarbejder //fremmednøgle til Medarbejder
};



Ovenstående er som jeg selv ser det, men i et eksempel fra datamatikerstudiet, er tingene vendt om (og det gør mig forvirret):

Lager        Vare
1    -    M(ange)
class Mlager
{
  public:
    Mlager();
    .
    .
    .
  private:
    int LagerId;
    string LagerNavn;
};

class Mvare
{
  public:
    Mvare();
    ~Mvare();
    .
    .
  private:
      string VareNr;
    string VareNavn;
    float Pris;
    int AntalPaaLager;
   
// iflg. Skolen skal oprettes en pointerattribut Lageret, der kan pege på et objekt af Klassen MLager
    Mlager* Lageret;    
};

Skulle jeg følge skolens eksempel, ville der gå en pointer fra Kunde(Mange) til Medarbejder(een), det synes jeg ikke lyder rigtigt – Så skulle mange kunder kunne oprette een medarbejder (?!), Mine klasser ville se sådan ud:

class Mmedarbejder
{
  public:
    Mmedarbejder();
    .
    .
    .
  private:
    int MedarbejderNr;
    string MedarbejderNavn;
    string Adgangskode;
   
};  //Altså INGEN pointer fra Medarbejder til Kunde!

Class Mkunde
{
  public:
    Mkunde();
    ~Mkunde();
    .
    .   
    .
  private:
    int KundeNr;
    string KundeNavn;
    string telefon;
    //osv.
    Mmedarbejder * Medarbejdereren; //pointer fra Medarbejder til Kunde.....


Jeg håber nogen kan forstå min forklaring og fortælle mig, hvad der er ret og hvad der er vrang...

/morten
Avatar billede arne_v Ekspert
29. december 2004 - 13:16 #1
For det første så har hvad der peger på hvad ikke noget at gøre med hvem
der sktivt gør noget.

Det har noget at gør emed hvad vej man vil navigere.

Har du varen og skal finde det lager den er på. Eller har du lageret og
skal finde varerne.

Har du kunden og skal finde den medarbejder som har kunden. Eller har du en
medarbejder og skal finde hans kunder.

Tit vil man i in memory data strukturer vælge at lave pointere i begge klasser, så
man kan navigere begge veje. det er simpelthen praktisk.

Hvis objekterne persisteres i en relationel database, så vil normalt nøjes
med en foreign key på M siden, fordi sådan er relationelle databaser.

Og med en meget bevidstløs konvertering fra databas etabel til objekt så kan
det give kun pointer på M siden.

Giver det mening ?
Avatar billede mortenhc Nybegynder
29. december 2004 - 13:40 #2
Jeg er ikke helt med - må jeg indrømme.
Jeg har en relationel database med fremmednøgler på mange-siden, som du beskriver. Og det er netop vejen, jeg vil navigere, som jeg taler om. Altså i mit tilfælde skal en MEDARBEJDER kunne oprette en KUNDE - og ikke omvendt. Derfor skal der være en pointer fra MEDARBEJDER og til KUNDE - hvis jeg har begge veje, bryder jeg jo med den objektorienterede indkapslingsidé.
Er min antagelse rigtig?
Avatar billede mortenhc Nybegynder
29. december 2004 - 13:42 #3
Men jeg kan forstå på dig at jeg ikke kan sammenligne skolens eksempel med mit eget.
Avatar billede arne_v Ekspert
29. december 2004 - 13:51 #4
oprette og navigere er to meget forskellige ting

indkapsling har ikke noget at gøre med om du kan navigere en eller begge
veje - det har noget med at du har et public interface og en private
implementation
Avatar billede mortenhc Nybegynder
29. december 2004 - 13:59 #5
Ok, har forstået lidt af hvad du siger. Du må lægge et svar, og måske (det er jo 100 point :-)) give mig et link, som beskriver ovenstående.
Avatar billede arne_v Ekspert
29. december 2004 - 14:17 #6
Avatar billede arne_v Ekspert
29. december 2004 - 14:17 #7
svar
Avatar billede mortenhc Nybegynder
29. december 2004 - 14:26 #8
Tak.
Avatar billede arne_v Ekspert
29. december 2004 - 14:33 #9
Har du en god UML eller OOP bog ?
Avatar billede mortenhc Nybegynder
29. december 2004 - 14:53 #10
Jeg har en bog. Men om den er god - kan vist diskuteres:
"Objektorienteret analyse og design" af Mathiassen.
http://www.metodica.dk/boeger.htm
(den røde)
Avatar billede mortenhc Nybegynder
29. december 2004 - 15:12 #11
Det var måske den bog du ville anbefale mig at læse :-O ??
Avatar billede arne_v Ekspert
29. december 2004 - 15:19 #12
Nej. Jeg kender den ikke.

Jeg er glad for:

Applying UML and Patterns : An Introduction to Object-Oriented Analysis and Design and Iterative Development / Craig Larman
Avatar billede mortenhc Nybegynder
29. december 2004 - 15:36 #13
ok, den må jeg kigge på :-)

Den anden bog brugte vi på datamatikerstudiet.
Avatar billede mortenhc Nybegynder
29. december 2004 - 16:24 #14
Har bestilt bogen på biblioteket :-)
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