Oppure

Loading
07/11/10 15:25
crashoverride
Ciao, ho finito un esericizio di questo libro --> Claudio De Sio Cesare Java 6
Che chiedeva lo sviluppo di una rubrica utilizzando tutti i concetti della OOP...
Allora io ho fatto in questo modo:

Classe Contatto.java
public class Contatto {
	
	private String nome;
	private String indirizzo;
	private String numeroTel;
	
	Contatto(String nome, String indirizzo, String numeroTel){
		setNome(nome);
		setIndirizzo(indirizzo);
		setNumeroTel(numeroTel);
	}
	
	// Setter method
	public void setNome(String nome){
		this.nome = nome;
	}
	
	public void setIndirizzo(String indirizzo){
		this.indirizzo = indirizzo;
	}
	
	public void setNumeroTel(String numeroTel){
		this.numeroTel = numeroTel;
	}
	
	// Getter method
	public String getNome(){
		return nome;
	}
	
	public String getIndirizzo(){
		return indirizzo;
	}
	
	public String getNumeroTel(){
		return numeroTel;
	}
	
	public String getInfo(){
		return this.getNome() + " " + this.getIndirizzo() + " " + this.getNumeroTel();
	}
	
}


Classe Ricerca.java
public class Ricerca {
	
	public String cerca(String nomeDaCercare, Contatto arrayContatti[]){
		for (int x = 0; x < arrayContatti.length; x++){
			if(arrayContatti[x].getNome().equals(nomeDaCercare)){
				return arrayContatti[x].getInfo();
			}else{
				continue;
			}
		}
		return "Nome non trovato";
	}
	
}


Classe TestRubrica.java
public class TestRubrica {

	public static void main(String[] args) {
		Contatto uno = new Contatto("Nicola","Via fasulla 123","3453424321213");
		Contatto due = new Contatto("Francesco","Via ciuskino 123","3453424321213");
		Contatto tre = new Contatto("Giuseppe","Via millemila 123","3453424321213");
		Contatto[] contatti = {uno,due,tre};
		Ricerca r = new Ricerca();
		System.out.print(r.cerca("Francesco", contatti));
	}

}


Ecco, io ho fatto in questo modo... Ora la domanda è, ho usato bene l'OOP o voi avreste usato +/- classi ecc ecc??
grazie mille del vostro aiuto attendo risposta! :k:
aaa
07/11/10 15:37
paoloricciuti
Postato originariamente da crashoverride:

Ciao, ho finito un esericizio di questo libro --> Claudio De Sio Cesare Java 6
Che chiedeva lo sviluppo di una rubrica utilizzando tutti i concetti della OOP...
Allora io ho fatto in questo modo:

Classe Contatto.java
public class Contatto {
	
	private String nome;
	private String indirizzo;
	private String numeroTel;
	
	Contatto(String nome, String indirizzo, String numeroTel){
		setNome(nome);
		setIndirizzo(indirizzo);
		setNumeroTel(numeroTel);
	}
	
	// Setter method
	public void setNome(String nome){
		this.nome = nome;
	}
	
	public void setIndirizzo(String indirizzo){
		this.indirizzo = indirizzo;
	}
	
	public void setNumeroTel(String numeroTel){
		this.numeroTel = numeroTel;
	}
	
	// Getter method
	public String getNome(){
		return nome;
	}
	
	public String getIndirizzo(){
		return indirizzo;
	}
	
	public String getNumeroTel(){
		return numeroTel;
	}
	
	public String getInfo(){
		return this.getNome() + " " + this.getIndirizzo() + " " + this.getNumeroTel();
	}
	
}


Classe Ricerca.java
public class Ricerca {
	
	public String cerca(String nomeDaCercare, Contatto arrayContatti[]){
		for (int x = 0; x < arrayContatti.length; x++){
			if(arrayContatti[x].getNome().equals(nomeDaCercare)){
				return arrayContatti[x].getInfo();
			}else{
				continue;
			}
		}
		return "Nome non trovato";
	}
	
}


Classe TestRubrica.java
public class TestRubrica {

	public static void main(String[] args) {
		Contatto uno = new Contatto("Nicola","Via fasulla 123","3453424321213");
		Contatto due = new Contatto("Francesco","Via ciuskino 123","3453424321213");
		Contatto tre = new Contatto("Giuseppe","Via millemila 123","3453424321213");
		Contatto[] contatti = {uno,due,tre};
		Ricerca r = new Ricerca();
		System.out.print(r.cerca("Francesco", contatti));
	}

}


Ecco, io ho fatto in questo modo... Ora la domanda è, ho usato bene l'OOP o voi avreste usato +/- classi ecc ecc??
grazie mille del vostro aiuto attendo risposta! :k:

Beh tutto sommato non va male.
Gli appunti che ti posso fare sono: i metodi set di solito dovrebbero avere dei controlli (ad esempio un contatto non può avere settato un nome pari a stringa vuota oppure un numero di telefono che non sia un numero) quindi fare dei set in quel modo varrebbe come mettere public le variabili di istanza. A proposito di public ti conviene (per convenzione) inserire il public al costruttore, inoltre dovresti anche riferirti (sempre per convenzione) agli attributi di classe con il this.nomeattributo. Un'altro piccolo appunto è che nella classe Ricerca quel metodo può essere statico.
aaa
07/11/10 16:52
netarrow
La classe Ricerca andrebbe eliminata.
E fare semplicemente una Collection di oggetti Contatto e sfruttare i suoi metodi per fare la ricerca.

Nel tuo caso usi il nome come chiave potresti quindi creare una Hashtable<string, Contatto>

download.oracle.com/javase/6/docs/api/java/util/…

Se nel libro non ti sono ancora state spiegate le Collection potresti creare tu una classe Rubrica che nasconde la gestione dell'array (o della collection se decidi di usarla), e inserire il codice della ricerca dentro Rubrica appunto, oltre che esporre metodi per aggiungere, rimuovere e modificare i contatti.
Ultima modifica effettuata da netarrow 07/11/10 16:54
aaa
07/11/10 18:35
crashoverride
Le collection non le ho ancora studiate... Per cui dovrei creare la classe Rubrica.java ma con gli array non posso modificare la grandezza per cui come faccio a gestire gli array in una classe del genere e inoltre a mettere un metodo per aggiungere o togliere contatti??
xD
O mi sbaglio?

E approposito, perchè sarebbe da togliere la classe ricerca?? Che norma non rispetta dell'OOP?? :)
Sto cercando di imparare bene l'OOP quindi gradirei saperlo! :)
Ultima modifica effettuata da crashoverride 07/11/10 18:37
aaa
07/11/10 19:01
netarrow
L'uso degli array si baserà sul fatto che darai una dimensione iniziale, ad esempio n, inoltre manterrai un contatore all'ultima posizione occupata, chiamiamola i; ad ogni inserimento inserirai in posizione i+1 e quando i arriverà a n dovrai ricreare un array grande n * 2.

Togliere i contatti consiste nel trovare la posizione i dell'elemento e "tirare indietro" tutti gli elementi per compattare l'array.

Puoi anche lasciar perdere la gestione della dimensione dimanica, dai un valore di 100 e via. Tanto per un esempio non li riempirai mai.

Per quanto riguarda la classe Ricerca è un semplice contenitore di un metodo, in questo contesto non ha alcun peso strutturale.
aaa
07/11/10 19:14
crashoverride
Ok :) Ora sto capendo, ma la classe Rubrica deve contenere il main?
aaa
07/11/10 19:41
netarrow
ma la classe Rubrica deve contenere il main?


Assolutamente no.
Il main sta nella classe principale della tua applicazione specifica, quindi è corretto tenerlo in TestRubrica.
aaa
07/11/10 19:47
crashoverride
HO provato ad implementare la classe Rubrica in questo modo

public class Rubrica {
	private static Contatto[] contatti = new Contatto[100];
	private static int i = 0;
	
	public void addContact(Contatto contatto){
		contatti[i] = contatto;
		i++;
	}
	
	public String cerca(String nomeDaCercare){
		for (int x = 0; x < contatti.length; x++){
			if(contatti[x].getNome().equals(nomeDaCercare)){
				return contatti[x].getInfo();
			}else{
				continue;
			}
		}
		return "Nome non trovato";
	}
}


per cui testrubrica.java diventa
public class TestRubrica {

	public static void main(String[] args) {
		Contatto uno = new Contatto("Nicola","Via fasulla 123","3453424321213");
		Contatto due = new Contatto("Francesco","Via ciuskino 123","3453424321213");
		Contatto tre = new Contatto("Giuseppe","Via millemila 123","3453424321213");
		Rubrica r = new Rubrica();
		r.addContact(uno);	
		r.addContact(due);
		r.addContact(tre);
		System.out.println(r.cerca("Rossana"));
	}

}



aaa