Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di E.C.Web
    Registrato dal
    Dec 2011
    Messaggi
    139

    Studio OOP - Domanda #1

    Ciao ragazzi, sto studiando l' OOP e sono arrivato ai metodi e le proprietà statiche.
    Ho delle domande alla quale non riesco a dare una risposta:

    1) Perchè utilizzare le proprietà statiche?
    2) Perchè rendere una proprietà privata? Pure s ela rendo pubblica sono io a decidere quando visualizzarla.

    A breve altre domande, ma prima queste xD

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    I metodi statici servono per l'appunto ad avere un qualcosa di fisso
    cioè dei metodi che possono essere richiamati ovunque si voglia senza bisogno
    di istanze di alcun tipo.

    L'attributo private è utile se un metodo serve ad esempio solo
    ad elaborare eventuali dati, senza nessuna utilità per chi la userà una volta
    istanziata la classe ma richiamabile benissimo da un metodo pubblico.
    In questo modo non solo non confondi chi userà la classe ma renderai
    piu chiaro e pulito il lavoro anche a te stesso.


    Edit, consiglio: se fai una classe statica, falla statica! Non mescolarli con una classe normale

  3. #3
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    1) Perchè utilizzare le proprietà statiche?
    Un attributo statico è una variabile di classe che esiste a prescindere dal fatto che la classe sia stata istanziata o meno. Ciò permette di disporre di una certa informazione indipendentemente da una specifica istanza, accedendo direttamente tramite il nome della classe se l'attributo è pubblico.

    Esempio
    Codice PHP:
    <?php
    class cEsempio{
        public static 
    $var=100;
    }

    echo 
    cEsempio::$var.'
    '
    ;
    cEsempio::$var+=20;
    echo 
    cEsempio::$var.'
    '
    ;
    ?>
    Ma è anche uno strumento di condivisione dell'informazione tra più istanze della stessa classe o sue discendenti. I metodi della classe e delle sue discendenti possono accedere all'informazione comune a tutte le istanze (oggetti) tramite il costrutto self.

    In più si può avere un maggior controllo sul codice specificando un modificatore d'accesso. Ciò implica che

    • un attributo public static è accessibile tramite il nome della classe anche fuori dei metodi definiti nella classe stessa;
    • un attributo protected static è accessibile solo all'interno dei metodi della classe e dei suoi discendenti tramite il costrutto self;
    • un attributo private static è accessibile solo dai metodi della classe tramite il costrutto self;


    Sta di fatto che se intendi consentire l'accesso e la modifica di un attributo, sia pure static, è opportuno farlo tramite dei metodi di accesso e modifica (magari static anch'essi se non coinvolgono attributi e metodi non static) e definire l'attributo static come private static, per il principio di incapsulamento .

    Altro esempio
    Codice PHP:
    <?php
    class cEsempio{
        private static 
    $var=100;                           
        private 
    $interoA;
        
        public function 
    __construct($interoA=0){
            
    $this->setInteroA($interoA);
        }
        
        public static function 
    getVar(){
            return 
    self::$var;
        }
        
        public static function 
    setVar($val){
            if(
    is_int($val))
                
    self::$var=$val;
            else
                return 
    false;
            return 
    true;
        }
        
        public static function 
    incVar($valInc){
            if(
    is_int($valInc))
                return 
    self::setVar(self::getVar()+$valInc);
            else
                return 
    false;        
        }
        
        public function 
    getInteroA(){
            return 
    $this->interoA;
        }
        
        public function 
    setInteroA($val){
            if(
    is_int($val))
                
    $this->interoA=$val;
            else
                return 
    false;
            return 
    true;
        }
        
        public function 
    getInteroAPlusVar(){
            return 
    $this->getInteroA() + self::GetVar();
        }
    }
    echo <<< 'EOT'
    Creo due oggetti con intero al loro interno di 15 e 100

    $objA = new cEsempio(15);

    $objB = new cEsempio(100);

    EOT;
    $objA = new cEsempio(15);
    $objB = new cEsempio(100);

    echo 
    'cEsempio::GetVar() ritorna '.cEsempio::GetVar().'
    '
    ;
    echo 
    '$objA->GetVar() ritorna '.$objA->GetVar().'
    '
    ;
    echo 
    '$objB->GetVar() ritorna '.$objB->GetVar().'
    '
    ;

    echo 
    '
    Una istanza della classe modifica il contenuto condiviso con istruzione
    $objA->IncVar(10);
     '
    ;
    $objA->IncVar(10);
    echo 
    'cEsempio::GetVar() ritorna '.cEsempio::GetVar().'
    '
    ;
    echo 
    '$objA->GetVar() ritorna '.$objA->GetVar().'
    '
    ;
    echo 
    '$objB->GetVar() ritorna '.$objB->GetVar().'
    '
    ;

    echo 
    '
    Uso del dato condiviso dalle diverse classi istanziate
    '
    ;
    echo 
    '$objA->getInteroAPlusVar() ritorna '.$objA->getInteroAPlusVar().'
    '
    ;
    echo 
    '$objB->getInteroAPlusVar() ritorna '.$objB->getInteroAPlusVar().'
    '
    ;
    ?>
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    2) Perchè rendere una proprietà privata? Pure s ela rendo pubblica sono io a decidere quando visualizzarla.
    Quando il progettino cresce e le classi si moltiplicano, non è possibile tenere a mente tutte le classi che fanno uso di un attributo e in che modo lo usano e come si aspettano che il dato sia memorizzato nell'attributo dell'oggetto. Ciò può introdurre degli errori di logica del software difficili da individuare e risolvere.

    Se invece applichi il principio dell'incapsulamento (vedi link nel post precedente) e lo estendi anche ai metodi della stessa classe, avrai dei metodi che ti permettono di accedere/modificare gli attributi in modo consistente. Tutto ciò indipendentemente dall'oggetto che vuole accedere/modificare un dato, considerato che lo fa in modo controllato tramite metodo.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #5
    Utente di HTML.it L'avatar di E.C.Web
    Registrato dal
    Dec 2011
    Messaggi
    139
    Grazie mille! =)

  6. #6
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Studia attentamente il design pattern "singleton" cosi da trovare un riscontro pratico alle domande che hai posto
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.