Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Tipo astratto di dato

  1. #1

    Tipo astratto di dato

    Ciao a tutti, ho questa classe che crea un tipo astratto di dato Coppia. ma non riesco a creare un main che mi consenta di utilizzarla. come faccio a creare un oggetto coppia?!
    perchè non so come crearmi gli Object c1 e c1. più che altro non ho capito..che tipo di dato è Object?!? Grazie in anticipo.

    codice:
    public class Coppia{
    	
    	private Object c1;
    	private Object c2;
    	
    	public Coppia(Object a, Object b){
    		a=c1;
    		b=c2;
    	}
    	
    	public Object tornaPrimo(){
    		return c1;
    	}
    	
    	public Object tornaSecondo(){
    		return c2;
    	}
    	
    	public boolean equals(Object o){
    		if(o==null || !getClass().equals(o.getClass()))
    			return false;
    		Coppia c=(Coppia)o;
    		if(c1.equals(c.c1) && c2.equals(c.c2))
    			return true;
    		else
    			return false;
    	}
    
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Object è la classe base di qualunque oggetto.
    Qualunque classe deriva (anche implicitamente) da Object.

    Quindi, qualunque cosa che non sia un tipo primitivo (boolean, byte, char, short, int, long, float, double) è un Object.

    Le stringhe sono oggetti: quindi sono degli Object.
    Gli array sono oggetti: quindi sono degli Object.
    Gli oggetti della tua classe Coppia sono oggetti: quindi sono degli Object.
    Oggetti di tipo Integer sono, appunto, oggetti: quindi sono degli Object.
    ecc.

    Queste, comunque, sono nozioni che definire basilari è proprio riduttivo... consiglio di cominaire a studiare almeno le basi del linguaggio.

    Tornando a noi, per creare un oggetto di tipo Coppia dovrai richiamarne il costruttore tramite l'istruzione new:

    codice:
    Coppia c1 = new Coppia("Primo elemento", "Secondo elemento");
    Chiaramente, quell'istruzione andrà posta all'interno di un metodo (come il main).

    PS: usa i tag CODE quando posti del codice.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    allora avevo capito bene..il problema è che se Object c1 e c2 li inizializzo come stringhe, per esempio, quando stampo tornaPrimo() e tornaSecondo() mi dà null null..per inizializzarli a stringhe devo solo fare:
    codice:
    Object a="ciao";
    Object b="hello";
    e poi creare l'oggetto coppia?!?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Eh?
    L'esempio di creazione dell'oggetto Coppia te l'ho postato.
    c1 e c2 sono i membri privati dell'oggetto, quindi tu non solo non li vedi, non sai nemmeno che esistono e non ti deve fregare nulla di loro... inizialmente saranno nulli perchè tanto ci pensa il costruttore ad inizializzarli.

    Semmai è il costruttore che è sbagliato... invece di assegnare ai due membri privati i valori passati, stai facendo il contrario: assegni ai valori passati i riferimenti (nulli) dei membri privati: il che, oltre a non avere alcun senso, dimostra anche che non conosci le istruzioni fondamentali di assegnazione (comuni a tutti i linguaggi di programmazione).

    Se devo assegnare un valore ad una variabile, questa deve stare a sinistra dell'uguale, mentre a destra ci deve stare il valore. Quindi, inverti le assegnazioni nel costruttore.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    giusto..è che questa mattina ho fatto tutto di corsa e non mi ero accorto dell'errore..XD grazie!

  6. #6
    già che ci sono ho un'altra domanda..ma a cosa serve equals?!?XD

    codice:
    public boolean equals(Object o){
    	if(o==null || !getClass().equals(o.getClass()))
    		return false;
    	Coppia c=(Coppia)o;
    	if(c1.equals(c.c1) && c2.equals(c.c2))
    		return true;
    	else
    		return false;
    }
    e poi un'altra cosa..ma (Object o) che gli devo passare deve essere di tipo Coppia giusto?!?perchè questa classe ce l'ha passata il professore ma non ci ha spiegato niente..scusate l'ignoranza..XD

  7. #7
    Apposto ho risolto..mi è rimasto solo un dubbio..secondo voi perchè fa il controllo sul metodo equals:

    codice:
    if(o==null || !getClass().equals(o.getClass()))
    	return false;
    capisco il fatto di controllare se o è null, ma a cosa serve vedere se i due oggetti provengono dalla stessa classe?!? vuol dire che non posso utilizzare questo metodo su due oggetti provenienti da classi differenti giusto? grazie e scusate ancora per la mia ignoranza..XD

  8. #8
    Il metodo equals serve a definire il confronto tra due oggetti per verificare se siano logicamente uguali.
    Questo è necessario perché l'operatore di uguaglianza == è vero solo quando gli oggetti confrontati puntano alla stessa istanza.
    Ti spiego con un esempio:

    codice:
      String a = new String("A");
      String b = new String("A");
      String c = a;
      
      boolean x = (a == b); //falso sono due istanze diverse
      boolean y = (a.equals(b)); //vero, entrambi sono due stringhe di valore "A"
      boolean z = (a == c);  //vero, entrambi puntano alla stessa istanza
    Al metodo equals puoi passare qualsiasi oggetto, infatti il primo if verifica che o non sia nullo e che la sua classe sia uguale a quella della tua classe, altrimenti ritorna falso.
    Equal ritornerà vero solo se il parametro è di classe Coppia e se i valori della coppia della tua istanza sono uguali al valore della coppia o.
    ...

  9. #9
    ok grazie mille..finalemente dopo due giorni..ho risolto tutto..XD

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.