Avatar billede nielsbrinch Nybegynder
22. januar 2002 - 16:07 Der er 3 kommentarer og
1 løsning

Hvorfor get og set?

Hvad er idéen med at bruge get- og set-metoder? Jeg forstår det er pæn kode at bruge dem, men jeg kan ikke se hvorfor der skulle være forskel på følgende:

Klasse klasse = new Klasse()
klasse.setStreng("hej"); // Almindeligt
klasse.Streng = "hej";  // Ikke almindeligt

HVORFOR? De virker éns, og den ikke-almindelige kræver mindre realiseret kode!
Avatar billede kresten Nybegynder
22. januar 2002 - 16:11 #1
Ja, det tænkte jeg også første gang jeg lærte OOP, men læs f.eks. http://www.javaworld.com/javaworld/jw-05-2001/jw-0518-encapsulation.html som forklarer det.

Bedre kan det vist heller ikke siges?
Avatar billede nielsbrinch Nybegynder
22. januar 2002 - 16:47 #2
Det gider jeg sq ikke læse :-)
Avatar billede jakoba Nybegynder
23. januar 2002 - 14:40 #3
Fordi vi vil have KONTROL men vores datastrukturer, så vi kan stole på dem.
Her er et lille eksempel:

du har lavet en klasse Stak i hvilken du ønsker at kuynne pushe og poppe værdier. indeni klassen stak har du så en variabel stakPointer der peger på det der er toppen af stakken lige nu.

class Stak {

    private int DEFAULTvERDI = 0;
    private int SIZE = 100;
    private int stakPointer = -1;
    private int[] stakArray = int[ size ];

    public void push ( int verdi ) {
        if ( stakpointer+1 < SIZE ) {  // ok der er plads til at pushe noget
            stakArray[ ++stakPointer ] = verdi;
        } else {                      // stakken er allerede helt fuld
            // giv brugeren en fejlmelding
        }
    }

    public int pop ( ) {
        if ( stakpointer >= 0 ) {      // ok der er noget i stakken
            return stakArray[ stakPointer-- ];
        } else {                      // stakken er helt tom
            // giv brugeren en fejlmelding
            return DEFAULTvERDI;
        }
    }

    public void setStakPointer( int nyVerdi ) {
        if ( nyVerdi < -1 || nyVerdi >= SIZE ) {
            // fejlmelding.  De værdier må stakPointer ALDRIG få.
        } else {
            if ( nyVerdi <= stakPointer ) { // bare glem værdier pushet derefter
                stakPointer = nyVerdi;
            } else {
              while ( stakPointer < nyVerdi ) { push( DEFAULTvERDI ); }
            }
       
    }

    public int getStakPointer( ) {
        return stakPointer;
    }

} //endclass
           

Hvis folk bare havde lov til at ændre på variablen stakpointer kunne de meget nest sætte den klasse i en ulovlig tilstan (eg: stakPointer = 5000000 ).
Ved at tvinge brugeren til at bruge get- og set- funktioner kan vi sikre at den stak altid er i en lovlig tilstand.

mvh JakobA
Avatar billede nielsbrinch Nybegynder
23. januar 2002 - 15:17 #4
Tak for kommentaren - men det giver stadig ikke mening. Med "folk" mener du programmøren, for brugerne kan jo ikke ændre på stakPointer med mindre programmøren giver lov. Så indkapslingen er altså til for at en anden programmør der skal lave om på programmet ikke dummmer sig - men hvis den anden programmør er så dum, så kan han jo også bare lave alle datamembers public og slette alle ; i koden...

Det med om datamembers hentes direkte eller med en get-metode, bemærker brugeren ikke vel - måske bortset fra det tager en lille smule hurtigere at hente dem uden om get-metoden.
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger AI forretningskonsulent i Ballerup

Ringkjøbing Landbobank – Nordjyske Bank

Forretningsudvikler til procesoptimering

Politiets Efterretningstjeneste

Teamledere til PETs indhentningsafdeling