Avatar billede Skynet Mester
21. maj 2008 - 20:51 Der er 12 kommentarer og
1 løsning

Container og controller klasser?

Hej

Jeg er ved at lære C# og objektorienteret programmering. Jeg har svært ved at forstå hvad en containerklasse og en controller klasse gør.

Jeg har søgt på nettet og kigget i min bog, men synes ikke der er nogle steder, hvor det grundlæggende bliver forklaret hvad det handler om, nogle som kan?

I mit eksempel har jeg en kalsse som har en liste og nogle operationer, er det så både en controller opg container klasse?


  public class SuperMedarbejder : SuperPerson 
   
    {
        public List<DateTime> want2work = new List<DateTime>();
        public List<Reservering> reserveringsliste = new List<Reservering>();
        protected  string lisensnummer;
        protected  string reserveringer;
        protected  string ledig;

        //List over ledigedatoer, //Reserveringer
    public SuperMedarbejder(string navn, string adresse, string telefonnummer, string mailadresse, string  certifikater, string Username, string Password, string lisensnummer, string tilstand ):
  base(navn,  adresse,  telefonnummer,  mailadresse,  certifikater,  Username,  Password )

     
        {
            this.lisensnummer = lisensnummer;
            this.reserveringer = reserveringer;
            this.ledig = ledig;
       
        }


    public void addReservartion(Reservering en_reservering)
    {
        reserveringsliste.Add(en_reservering);
    }

    public void addwish(DateTime en_dato)
    {
        want2work.Add(en_dato);
    }

        public  virtual  string PropertyLisensnummer
        {
            get { return lisensnummer; }
            set { lisensnummer = value; }
        }
        public  virtual  string PropertyReserveringer
        {
            get { return reserveringer; }
            set { reserveringer = value; }
        }
        public  virtual  string PropertyLedig
        {
            get { return ledig; }
            set { ledig = value; }
        }

        // finder ud af om en given medarbejder er reserveret på pågælende dato


        public virtual string getDato(DateTime dato1)
        {
            foreach (Reservering en_reservering in reserveringsliste)

                if (en_reservering.PropertyDato == dato1)
                {
                    return en_reservering.PropertyReserveringsnavn;
                }
            return "er fri";
        }
Avatar billede arne_v Ekspert
21. maj 2008 - 21:07 #1
Avatar billede arne_v Ekspert
21. maj 2008 - 21:08 #2
Avatar billede Skynet Mester
21. maj 2008 - 21:12 #3
http://en.wikipedia.org/wiki/Container_class ifølge artiklen er en List en contaioner klasse.. men hvad så med min klasse, den indeholder både en liste, og nogle funktioner, er det så både en controller og contaioner?
Avatar billede arne_v Ekspert
21. maj 2008 - 21:15 #4
Jeg vil ikke kalde din klasse for en container klasse. Det er ikke dens primaere formaal
at containe objekter.

Jeg vil heller ikke kalde den en controller klasse.
Avatar billede Skynet Mester
21. maj 2008 - 21:19 #5
ok, hvad vil du så kalde den :) ? bør jeg lave to klasser istedet og fordele ansvaret mere?
Avatar billede Skynet Mester
21. maj 2008 - 21:55 #6
tror jeg er ved at få mere klarhed nu, har lavet en reserverings controller som har til formål at oprette nye reserveringer

  class reserveringcontroller
    {

      public Reservering opretreservering(string reserveringsnavn, DateTime dato, string ok)
    {

        Reservering r1 = new Reservering(reserveringsnavn, dato, ok);
        return r1;

    }
       

   

    }
}
Avatar billede Skynet Mester
21. maj 2008 - 21:59 #7
men hvordan kunne man bedst opdele mit første kodeeksempel i en container og controller klasse?
Avatar billede arne_v Ekspert
22. maj 2008 - 00:33 #8
Jeg vil mene at din SuperMedarbejder og Reservering er domain klasser, at du bruger
List<> som container klasse og så kan du lave en controller klasse.

Jeg mener ikke at din klasse egner sig til at blive en container klasse.
Avatar billede Skynet Mester
22. maj 2008 - 11:37 #9
ok, tak.. jeg har to spørgsmål som stadigvæk forvirrer mig, så ville være en stor hjælp hvis du kan vurdere klasserne.

jeg har lavet en containerklasse til flakser, men må jeg godt der have en optællingsfunktion som finder ledige flasker i containerklassen? jeg kan nemlig ikke lave optællingsfunktionen i min controller da listen er placeret i containerklasen?

public  class Flaskecontainer
    {
        List<Flaske> flaskeliste = new List<Flaske>();
        List<Flaske> ledige_flasker = new List<Flaske>();
        public void addflaske(Flaske en_flaske)
        {
            flaskeliste.Add(en_flaske);
        }
       
        public int count()
        {
            int i = flaskeliste.Count();
            return i;
        }

        public void count_free(DateTime en_dato)
        {
           
            foreach (Flaske x in flaskeliste)
            {
                //Ser om der er flasker som er ledige
                if ((x._Resurseledig(en_dato)) == true)
                {
                    //Hvis den er ledig bliver den tilføjet denne liste
                    ledige_flasker.Add(x);
                 
                }
           
            }
        }
        public int retun_count()
        {
            return ledige_flasker.Count();
           
        }
        public void clear_count()
        {
            ledige_flasker.Clear();
        }


-----------------------------------------------

mit andet spørgsmål er om det er normalt at man sender en Container til sin controller når man har brug for udregninger, og derfor har brug for at tilgå de informationer som er gemt i containerklassen

ex her, hvor jeg sender flaksecontaineren afsted, så controlleren kan se om der er ledige flasker, er det normalt?
if (en_flaskecontroller.test(dt, _min, en_flaskecontainer) == true)
                {
                    MessageBox.Show("flakser true");
                }
Avatar billede arne_v Ekspert
01. juni 2008 - 00:04 #10
Jeg ville nok bruge List<> som container klasse og ikke have en egen container klasse.

Controller klassen skal ikke have en ref til container klassen - den har en ref til
container klassen.
Avatar billede Skynet Mester
01. juni 2008 - 12:52 #11
ok, tak jeg giver points.. Jeg helt enig med dig i at bruge List frem for en klasse, jeg synes nogle gange det objektorienterede kan tage længere tid end nødvendigt, hvis man skal have klasser for alt hvad man gør..
Avatar billede arne_v Ekspert
02. juni 2008 - 02:03 #12
Den gang jeg var ung anslog jeg at OOP var markant bedre end procedural programmering for
programmer >10000 linier kode.

Med sprog som Java og C# er det faldet en del. Lad os sige >3000 linier kode.

Nogen gange er det svært at formidle en point med små legetøjs eksempler.

Hvis du sidder med 300 linier kode som du selv har skrevet, så duer alt jo. Men
den dag du sidder med 300000 linier kode skrevet af en anden (som ikke længere er
i firmaet) og du skal tilføje noget ny funktionalitet uden at introducere alt for
mange nye bugs, så bliver du rigtigt glad for OOP.

Et hurtigt blik på din kode iøvrigt siger at:
- du bør lade metode navne starte med stort (de starter med småt i Java men med
  stort i C#)
- nogle af dine metoder kunne nok med fordel laves som property

Og et svar.
Avatar billede Skynet Mester
02. juni 2008 - 11:56 #13
ok, tak for hjælpen..
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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