Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613

    [java] interfacce e abstract for dummies

    Salve a tutti!
    Premetto che sto iniziando ora a programmare in java ed ho bisogno di un "piccolo" aiuto.


    Problema:

    Ho una classe che gestisce tutte le interazioni con un database ed ai metodi di questa classe accedono molte altre classi. Vorrei poter usarne i metodi senza ogni volta dover istanziarne un oggetto.
    Mi pare, e sottolineo "pare", che debba definire questa classe come abstract o come interface. Il fatto è che ancora non ho capito la differenza tra i due! Ho letto anche un post in questo forum ma ancora non mi è chiaro. A che serve per esempio definire dei metodi in una interfaccia se poi devo scrivere il codice che li implementa nella classe che la usa?

    Grassie per l'attenzione

  2. #2

    Re: [java] interfacce e abstract for dummies

    Originariamente inviato da Leandro
    Ho una classe che gestisce tutte le interazioni con un database ed ai metodi di questa classe accedono molte altre classi. Vorrei poter usarne i metodi senza ogni volta dover istanziarne un oggetto.
    I metodi di utilità pubblica, che non richiedo necessariamente un'istanza della classe che li implementa, devono essere dichiarati di tipo static.
    Un esempio che calza a pennello è il metodo parseInt della classe Integer. Non ha senso creare ogni volta un'istanza di Integer per parsare una stringa in intero:
    codice:
    // funziona ma e' errato:
    Integer unIntero = new Integer(0);
    int valoreParsato= unIntero.parseString(stringaValore);
    è sufficente richiamare il metodo statico senza fare alcuna new
    codice:
    //cosi' e' corretto
    int valoreParsato= Integer.parseString(stringaValore);


  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    Grazie mille... Ho fatto le mie prove e funge (:

  4. #4

    Re: [java] interfacce e abstract for dummies

    Il fatto è che ancora non ho capito la differenza tra i due! Ho letto anche un post in questo forum ma ancora non mi è chiaro. A che serve per esempio definire dei metodi in una interfaccia se poi devo scrivere il codice che li implementa nella classe che la usa?

    Grassie per l'attenzione [/B]
    C'è una bella differenza
    Concettualmente parlado una classe astratta è una definizione INCOMPLETA di un'entità, che non può essere istanziata ex novo perchè non definisce uno o + metodi. Il classico esempio è la Class PoligonoGenerico, che ha il metodo calcolaArea dichiarato come astratto (supponiamo che non esista una funzione generica per calcolare l'area di un poligono con un qualsiasi numero di lati).
    L'oggetto Poligono quindi è un'entita' astratta, che non potrà mai esistere. Potranno altesì essere istanziate le sue sottoclassi Quadrato, Triangolo, Rettangolo ...... , che implementano invece il metodo CalcolaArea.

    andrà quindi in errore il codice:
    codice:
    Poligono unPoligono = new Poligono();
    //Poligono è astratta!!
    Metre funzionerà
    codice:
    Quadrato quadrato = new Quadrato(5);
    //o anche
    Poligono unPoligono = new Quadrato(5);
    L'utilizzo delle interfaccie ci viene incontro quando vogliamo che la nostra classe implementi determinate caratteristiche, indipendentemente dalla struttura gerarchica a cui appartiene.
    Supponiamo che i nostri poligoni debbano essere visualizzati su un'area grafica. Sarà sufficente specificare nella dichiarazione della classe che essi implementano la caratteristica Disegnabile, dichiarata come Interfaccia a parte in un file Disegnabile.java, con il seguente metodo vuoto:
    PaintPoligono(Graphics g);
    Nella
    codice:
    class Quadrato implements Disegnabile
    andrà quindi implementato il suddetto metodo!

    Tutto questo può servire,ad esempio, ad una classe che voglia visualizzare su schermo un Vector di oggetti "Disegnabile", indipendentemente da cosa essi effettivamente siano: poligoni, finestre o oggetti 3d.

    Scusate i nomi schifidi in italiano ma ho cercato di essere + chiaro il possibile ^^!!


  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    Già incomincio a vederci più chiaro.

    Quindi se ho capito bene un abstract è una classe generica che ha dei metodi comuni a tutte le classi più specifiche che però implementeranno questi metodi a seconda del caso.

    public abstract class Poligono{
    abstract int calcolaArea();
    }

    public class Rettangolo extends Poligono{
    int calcolaArea(){
    A=b*h;
    }
    }

    O no?

    Le interfacce mi sono ancora ostiche.
    Grazie per l'impegno (:

  6. #6
    ci ho provato!
    cmq la classe astratta è corretta cosi' come l'hai scritta tu (tranne per il calcolaArea a cui manca la return, cmq np )

    Le interfaccie si capiscono col tempo. Tieni a mente che mentre l'ereditarietà (con classi astratte o meno) contretizza il concetto di A è un B o meglio Rettangolo è un Poligono, l'implementazione di interfaccie specifica una o + Caratteristiche della tua classe: Rettangolo è Disegnabile, Serializzabile, Stampabile.


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 © 2024 vBulletin Solutions, Inc. All rights reserved.