Avatar billede nateksi Nybegynder
18. april 2005 - 11:15 Der er 8 kommentarer

Objekt orienteret og aggregering

Jeg har lavet 3 klasser hovedkontor, afdeling og medarbejder. Meningen er at et hovedkontor har en eller flere afdelinger, en afdeling har en eller flere medarbejdere. Hvordan laver man en aggregering imellem klasserne i koden (sammenhæng). Koden er (det er et uddrag)

class hovedkontor{
  var $navn;
  var $adresse;
  var $by;
function sethkNavn($navn){
  $this->navn;}
function setMetoder
}
class afdeling{
  var $navn;
  var $adresse;
  var $kontakt;
function setAfNavn($navn){
  $this->navn;}
resten af setmetoder
}
class medarbejder{
  var $navn;
  var $mail;
function setMednavn($navn){
  $this->navn;}
}
Min løsning har været at lave en fremmednøgle i afdeling og medarbejder (min kode er lavet efter databasemodellen, men min opgave gik ud på at lave det objekt orienteret).
Avatar billede cpfrande Nybegynder
18. april 2005 - 12:50 #1
Halløjsa,

Du bliver nød til på en eller anden måde, at skabe en relation mellem de forskellige klasser. Det kan du f.eks. gøre ved, at du i et hovedkontor opretter afdelinger og placerer disse i et Array, ligeledes kan du i en afdeling oprette medarbejdere og placerer disse i et Array også.

Skal du arbejde med det via en database, skal du overveje hvorledes dine klasser i stedet skal se ud med hensyn til set og get metoder.

Håber det hjalp dig lidt på vej! :-)

- Kristian
Avatar billede nateksi Nybegynder
18. april 2005 - 12:54 #2
Hvordan gør man det med et array, et lille kode eksempel ville hjælpe mig på vej
Avatar billede cpfrande Nybegynder
18. april 2005 - 13:13 #3
F.eks.

<?php
$afdelinger[0] = new Afdeling();
$afdelinger[1] = new Afdeling();
?>

Jeg vil dog nok foreslå, at du valgte at have en konstruktør i hver af dine klasser, hvori du tildeler dine medlemsvariabler deres "start"-værdier.

- Kristian
Avatar billede Slettet bruger
19. april 2005 - 09:54 #4
Du kan også lave en collection-klasse hvor der hører en Iterator-klasse med til.
Iterator-klassen skal implimentere interfacet Iterator:
http://www.php.net/~helly/php/ext/spl/interfaceIterator.html

Og hvis du skal aggregere dirrekte på din collection skal den implimentere interfacet IteratorAggregate:
http://www.php.net/~helly/php/ext/spl/interfaceIteratorAggregate.html

Jeg ved ikke om det var sådan noget du mente... Ellers så bare se bort fra denne post ;-)
Avatar billede nateksi Nybegynder
20. april 2005 - 13:30 #5
cpfrande, jeg har ikke helt forstået hvad du mener, kan du ikke være venlig at skære det ud i pap for mig gerne noget sammenhængende kode
Avatar billede cpfrande Nybegynder
20. april 2005 - 13:46 #6
Halløjsa,

Her er et forslag - har dog ikke testet det! :-)

<?php
class Hovedkontor
{
    var $navn;
    var $adresse;
    var $by;
    var $afdelinger;

    function Hovedkontor($navn, $adresse, $by)
    {
        $this->navn = $navn;
        $this->adresse = $adresse;
        $this->by = $by;
        $this->afdelinger[0] = new Afdeling("Afdeling0", "Langt-væk", "Peter Larsen");
        $this->afdelinger[1] = new Afdeling("Afdeling1", "Andeby", "Erik Hansen");       
    }
 
    function setNavn($navn)
    {
        $this->navn;
    }
}

class Afdeling
{
    var $navn;
    var $adresse;
    var $kontakt;
    var $medarbejder;
   
    function Afdeling($navn, $adresse, $kontakt)
    {
        $this->navn = $navn;
        $this->adresse = $adresse;
        $this->kontakt = $kontakt;
        $this->medarbejder[0] = new Medarbejder("Peter Larsen", "peter@domain.tld");
        $this->medarbejder[1] = new Medarbejder("Erik Hansen", "erik@domain.tld");       
    }   

    function setAfNavn($navn)
    {
        $this->navn;
    }
}

class Medarbejder
{
    var $navn;
    var $mail;

    function Medarbejder($navn, $mail)
    {
        $this->navn = $navn;
        $this->mail = $mail;
    } 
   
    function setMedNavn($navn)
    {
        $this->navn;
    }
}
?>

- Kristian
Avatar billede nateksi Nybegynder
20. april 2005 - 13:53 #7
De bliver ikke oprettet på samme tid, men derimod dynamisk på en website og jeg ved ikke hvor mange afdelinger et hovedkontor skal ha tilknyttet eller hvor mange medarbejdere en afdeling skal ha tilknyttet.
Avatar billede cpfrande Nybegynder
20. april 2005 - 13:57 #8
Du kan jo bare lave metoder, der kan oprette, slette og ændre i Array'et, fremfor at konstruktøren opretter dem.

Jeg gav dig blot et eksempel på, hvordan du kunne arbejde med Arrays. :-)

- Kristian
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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