Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Capire le relazioni tra classi

    Ciao ragazzi,
    dunque... ho finalmente capito la differenza tra oggetti, istanze, classi estese, ecc...

    Ora sto provando a mettere in pratica quanto appreso ma è complicato!

    Subito un dubbio... come si fa a fare parlare tra loro le classi?

    Vi faccio un esempio. Immaginate una classe concessionaria e una classe auto. Ogni concessionaria può contenere più auto. Ma come faccio a fare parlare le due classi?

    Potete farmi un esempio con codice?

    Grazie mille

  2. #2
    potresti far ereditare alla classe AUTO la classe CONCESSIONARIA. Cioè tu definisci la classe concessionario e quella auto:

    Codice PHP:
    class Concessionario {
      public 
    $nome;
    }

    class 
    Auto extends Concessionario {
      public 
    $nome_auto;
    }

    $auto = new Auto();
    $auto->nome "FIAT";
    $echo $auto->nome
    come vedi la variabile NOME è stata definita in Concessionario; ma poichè in Auto ho messo la parola chiave EXTENDS, Auto eredita tutte le proprietà e i metodi di CONCESSIONARIO e può utilzizarli a volontà. Pertanto el due classi comunciano tranquillamente fra loro.

  3. #3
    Ok... e se le classi sono concettualmente diverse? posso istanziare una classe dentro un'altra classe per farle interagire tra loro?

  4. #4
    si, quello che importa è che la classe che deve usare proprietà e metodi di un'altra classe abbia la parola chiave EXTENDS..le due classi possono essere anche distanti ani luce far loro ma una delle due erediterà dall'altra; ah e per questo fai un accorto uso delle variabili e funzioni PROTECTED, PUBLIC e PRIVATE

  5. #5
    Ok, vediamo se quello che dico ha senso!

    la classe CONCESSIONARIA ha un'estensione AUTO che a sua volta ha delle sottoclassi dal nome EQUIPAGGIAMENTO INTERNO e EQUIPAGGIAMENTO ESTERNO.

    per ogni concessionaria ci sono più auto, quindi presumo che una proprietà di concessionaria sia un array di auto create tramite la classe auto...

    e se voglio inserire una nuova auto in quella concessionaria? dovrò fare un metodo in CONCESSIONARIA, giusto?

    e l'inserimento dei dati in un ipotetico db chi lo fa? un'altra classe DB?

    Grazie grazie grazie

    PS:
    un'eventuale AUTO_USATA è sempre estensione di AUTO?

  6. #6
    per aggiunegre azuto alla concessionaria sì puoi aggiungerle tramite un metodo definito in AUTO, tanto auto la eredita..

    $concessionaria = new Concessionaria();
    $concessionaria->nome = "Pippo Peppo";
    $auto = new Auto();
    $auto->aggiungi('FIAT 500');

    in aggiungi ci saranno le istruzioni mysql per salvare quell'auto arrivata alla concessionaria 'Pippo Peppo'

    per la terza domanda..sì, auto_usata è una estensione di auto perchè avrà semrpe un nome, 4 ruote, un volante..ma è già stata venduta e quindi puoi aggiungere i vecchi proprietari:

    $auto_usata->aggiungi('FIAT 500');
    $auto_usata->PrimoProprietario = "Giuseppe Garibaldi";
    $auto->usata->Anno = 1965;

  7. #7
    Vorrei aggiunegre un altra considerazione: la classe madre deve essere diciamo generica. AD esempio uan classe AUTO definirà proprietà come colore, numero ruote e metodi come accelera e frena. All'utente che usa la classe non deve importare come funzionano accelera e frena: tanto il codice necessario è già tutto scritto nelle rispettive function. Se poi vedo che posso migliorare l'accelerazione o la frenata scrivo nuovo codice nella sua function, senza di nuovo che l'utente debba per forza riscrivere lui il codice, tanto le prprietà e i metodi rimarranno sempre quelli.
    una classe figlia potrebbe essere come hai messo tu AUTO_USATA: ha le stesse proprietà ed usa gli stessi metodi della classe madre, ma ne aggiunge di altri propri, ad esempio, i proprietari, gli anni del passaggio di proprietà, il numero di km di ognuno ecc.

    Quindi una classe figlia eredieterà tutte le proprietà e metodi della classe amdre aggiungendone di propri,.

  8. #8
    Quasi ok... scusami se continuo a farti domande stupide, approfitto della tua disponibilità!

    C'è ancora una cosa (fosse veramente solo una! ) che non capisco: scrivendo

    $concessionaria = new Concessionaria();
    $concessionaria->nome = "Pippo Peppo";
    $auto = new Auto();
    $auto->aggiungi('FIAT 500');

    ho creato un oggetto concessionaria dal nome "Pippo Peppo" e un auto "FIAT 500" ma non gli ho detto che la 500 è della concessionaria "Pippo Peppo"... o no? come si fa?

    non posso scrivere

    $concessionaria-> new Auto();
    $concessionaria->aggiungi('FIAT 500');

    rigrazissimo

  9. #9
    quando assegni

    $concessionaria = new Concessionaria();
    $concessionaria->nome = "Pippo Peppo";
    $auto = new Auto();
    $auto->aggiungi('FIAT 500');

    dai alla proprietà NOME della classe CONCESSIONARIA il nome "Pippo Peppo". Poi definisci la classe AUTO che usa il metodo AGGIUNGI.
    Una classe si "ricorda" delle variabili usate internamente tramite l'istruzione $THIS. Ad esempio se in auto ora scrivo

    echo $this->nome;

    mi verrà restituito il valore della proprietà cioè Pippo Peppo dato che auto eredita tutto da concessionaria. e in aggiungi per salvare i dati del'auto uso una istruzone SQL tipo

    $sql = "INSERT INTO concessionari (concessionaria, modello) VALUES('".$this->nome."', '".$modello."')";

    dove $this->nome è Pippo Peppo e $modello è il modello dell'auto passato a aggiungi

  10. #10
    Ok mi hai spiazzato perché credevo di avere capito l'ereditarietà e invece ho ancora un po' di confusione... VVoVe:

    Alla luce delle cose che mi hai spiegato gentilmente ho fatto uno schemino delle classi dell'esempio. Vediamo se funziona:

    CONCESSIONARIA
    |
    |
    |_____AUTO
    |
    |
    |_____AUTO_USATA
    |
    |_____ EQUIPAGGIAMENTO INTERNO
    |_____ EQUIPAGGIAMENTO ESTERNO


    Che ne pensi?

    Grazie ancora per la disponibilità, ti sono molto grato... adesso proverò a scrivere il codice e vediamo che succede!

    PS:
    uffa postando ha perso gli spazi... cmq auto_usata figlio di auto e gli equipaggiamenti figli di auto_usata

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.