Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    92

    Binding dinamico non dinamico?

    Scusate il binding dinamico che effuttua java, mi consente di ereditare gli attributi e i metodi di una classe e fare l'override dei metodi, onde lasciare in una terza applicazione, l'onere all'interprete di usare il metodo giusto a seconda del tipo di istanza passata allo stesso?

    in poche parole per fini didattici ho scritto una clsse Punto che calcola la distanza tra due oggetti Punto, poi l'ho estesa a Punto3D, introducendo un'altro attributo che tenesse conto della coordinata z e ho ridefinito il metodo che calcola la distanza.

    Dopo ho scritto la classe PianoCartesiano, la quale possiede il metodo norma che presi due punti ne restituisce la distanza invocando al suo interno il metodo distanza di Punto ed accettando due oggetti di tipo Punto.

    ora se io gli do due oggetti di tipo Punto3D, in automatico grazie al binding dinamico non dovrebbe usare i metodo distanza definito nella sottoclasse Punto3d della classe Punto?

    A me invece usa il metodo distanza definito nella superclasse ovvero Punto, non ho capito io il concetto binding dinamico (sistema tramite java lega il metodo da invocare all'istanza), ho non so sbaglio in qualche cosa?

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    sei sicuro di aver sostituito il metodo?
    mi spiego, se cambi la firma del metodo, questo non č overriding
    codice:
    superclasse
    public void distanza(Punto p) ...
    
    classe figlia
    public void distanza(Punto3D p) ...
    sono due metodi diversi

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    92
    Hai ragione ti ringrazio, stavo spremendomi le meningi, dato che non mi corrispondevano dei concetti che so base per riusare codice. in effetti non avevo fatto overriding, la firma era diversa.

    Ora gli passo un oggetto Punto3D cosi' anche se lui vede il reference come Punto quindi non posso accedere alla variabile z, posso accedervi con un semplice cast a Punto3D che resta circoscritto alla classe derivata non costringendomi a creare oggetti Punto3D con referenze a Punto, giusto?

    Da quello che ho capito č un pō lo stesso motivo per cui println che accetta solo Oggetti di tipo Object, puō poi visualizzare ogni classe da esso derivato, mi sbaglio?

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    l'ultima domanda non l'ho capita
    dovresti fare una cosa tipo
    codice:
    superclasse
    public void distanza(Punto p) ...
    
    classe figlia
    public void distanza(Punto p) {
      Punto3D p3d = (Punto3D)p;
      // e eseguire le operazioni su p3d
      ...
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    92
    Scusa non mi basta fare un cast all'oggetto passato solo alla terza coordinata esempio:

    public double distanza(Punto o)
    {
    double x1 = (double)this.getX();
    double y1 = (double)this.getY();
    double z1 = (double)this.getZ();

    double x2 = (double)o.getX();
    double y2 = (double)o.getY();
    double z2 = (double)((Punto3d)o).getZ();

    double distanza = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));

    return distanza;
    }

    Che credo ma non so di preciso č anche migliore in prestazione, in quando non obbliga a creare una nuova variabile di tipo Punto3D in locale e quindi a usare altre risorse inutilmente, in quanto o č giā un oggetto di Punto3d solo che la referenza a Punto rende impossibile l'accesso a quella cordinata?

    Scusa la mia č pura curiositā, poi se toppo pazienza...

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    Originariamente inviato da salvio78
    non obbliga a creare una nuova variabile di tipo Punto3D in locale
    un cast non crea variabili
    crea un riferimento a un oggetto
    il riferimento col codice che ho postato, ovviamente lo creo
    tu lo usi, ma non lo mantieni
    in entrambi i casi viene creato (di questo sono abbastanza sicuro, ma non giuro)

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    92
    Mi so espresso male, non voglio dire che il cast crea variabili, ma come dici tu si deve creare almeno un reference in locale, mo io non lo so se si usa altra memoria, in quanto di fatto non istanzia nessun oggetto ma va solo a puntare l'oggetto passato.

    Inoltre un cast non crea riferimenti, che sono dati dalle variabili reference stesse, converte solo momentaneamente il tipo della variabile in questione, altrimenti come dici tu, si potrebbe usare il cast con qualsiasi tipo di istanza per assegnarla a qualsivoglia tipo scelto a casaccio.

    Il riferimento č sempre la variabile passata, il cast la converte in un altro tipo solo momentaneamente, ma la referenza č sempre la stessa, e di questo grazie al C, sono certo al 100%.

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.