Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Public, Private, Protected  (gelezen 1989 keer)

Public, Private, Protected
« Gepost op: 2008/06/15, 20:12:47 »
Hallo,

Weet iemand wat het nut is van deze drie?

Als ik (in php bijvoorbeeld) een private functie aanmaak,  kan ik die vanaf buiten de class niet aanroepen. Logisch, want het is een prive eigendom van de class. Maar wat is het nut? ALs ik niet wil dat die functie van buitenaf wordt aangeroepen, doe ik dat toch ook niet in de code? Of ik denk te simpel.

Offline profoX

  • Lid
    • wesley
    • Lionslink
Public, Private, Protected
« Reactie #1 Gepost op: 2008/06/15, 20:21:47 »
Public: kan van andere klassen aangeroepen worden
Private: kan alleen door een andere functie/procedure van de eigen klasse aangeroepen worden.. waarom zou dit niet nuttig kunnen zijn? stel je voor dat je een bepaalde functie hebt die je meermaals nodig hebt, maar alleen maar in de eigen klasse..
Protected: hetzelfde als private, maar kan ook aangeroepen worden door subklassen van de klasse

Als het niet duidelijk was, dan ligt het aan mij :D Ik kan het niet zo goed uitleggen.
Maar anders moet je de drie termen eens op Google intypen. Ben er zeker van dat je bakken uitleg krijgt.
Bv. hier: http://www.cplusplus.com/doc/tutorial/classes.html
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline Double12

  • Lid
Public, Private, Protected
« Reactie #2 Gepost op: 2008/06/15, 20:31:29 »
Dit hoort bij het object-georiƫnteerde model van zo'n taal. Het is de bedoeling dat die variabelen niet rechtstreeks van buiten worden benaderd, maar alleen door middel van get-functies en set-functies. Waarschijnlijk is dit een soort bescherming om te zorgen dat de variabelen op de goede manier worden gebruikt.

In C++ werkt dat bijvoorbeeld zo:
class Lid
{
private:
     string Naam;
     int Lidnr;
public:
     int getLidnr()
     {
          return Lidnr;
     }

     string getNaam()
     {
          return Naam;
     }

     void setNaam(string gegeven_naam)
     {
          Naam=gegeven_naam;
     }

     void setLidnr(int gegeven_nr)
     {
          Lidnr = gegeven_nr;
     }
}
Nu kun je met getNaam de naam opvragen en daar iets mee doen (en met getLidnr het lidnummer...)
En met setNaam(nieuwenaam) de naam instellen (zelfde voor Lidnr).

Public, Private, Protected
« Reactie #3 Gepost op: 2008/06/15, 20:35:33 »
Hmm ja profoX, eigenlijk zeg je precies wat ik al wist. Waarvoor de functies diende, alleen weet ik dan nog het nut er niet echt van.

"Waarschijnlijk is dit om te zorgen dat die variabelen op de juiste manier worden gebruikt, een soort bescherming om te zorgen dat je die variabelen wel op de goede manier gebruikt."
Ja dat zou het waarschijnlijk kunnen zijn. Alleen heb ik altijd zonder gewerkt, en dat ging ook altijd goed.

Offline BailHope

  • Lid
    • Techneut
Public, Private, Protected
« Reactie #4 Gepost op: 2008/06/16, 00:53:32 »
Waarom je iets private zou maken? Eigenlijk, zoals ProfoX zei. Voor Code-leesbaarheid zorg je ervoor dat je ingewikkelde code uiteenhaalt en in verschillende methodes neerpoot. Het resultaat is dat je bijvoorbeeld een 'verwerkGegevens()' functie krijgt. Deze methode verwerkt gewoon gegevens, maar het is niet de bedoeling dat je deze code kan aanroepen van andere klassen. Enkel de klasse waarin die methode zich bevind kan beslissen wanneer de 'gegevens' nu net verwerkt worden.
Klassen krijgen hun eigen verantwoordelijkheden. Het is niet de bedoeling dat Klasse A een methode X kan aanroepen omdat dat gewoon niet tot de taak van die klasse behoort. Dan kan je aannemen dat methode X private is gedeclareerd, zodat enkel klasse B zijn eigen methode X kan gebruiken. Eventueel zou je deze methode nog 'protected' kunnen maken zodat de afgeleide klassen deze methode dan ook nog gebruiken.

Je maakt een methode pas public als iemand anders er echt mee bezig moet zijn.
Ubuntu user #12046
Mijn blog voor techneuten: http://techneut.wordpress.com
Voor de professionele IT'er: http://it-potato.blogspot.com