|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Realizzare un'Agendina Telefonica senza usare le Collections [Java]
Allora per esercitarmi ho deciso di realizzare un'agendina, però senza appoggiarmi sulle Collections fornitemi da Java.
dato che è il mio primo programmino un po' più complesso che sviluppo, posto sul forum in modo da poter avere una guida... Sottolineo in primis che non sto cercando qualcuno che la faccia al posto mio.. quindi i consigli sono bene accetti, ma evitate di postarmi praticamente tutto il codice.. Voglio provare, sbagliare e riprovare.. perchè così credo di assorbire davvero gli errori che commetto e quindi di imparare davvero qualcosa! Per adesso vi espongo un po' il proggetto che ho in mente ![]() Vorrei realizzare una classe astratta agendina, in modo che poi la si possa implementare costruendo un'agendina basata su che cosa si vuole... per adesso penso di volerla implementare con un'array di stringhe! Ogni singola stringa dovrà contenere un Oggetto Nominativo, che racchiude in se nome cognome prefisso e numero di telefono. i metodi che vorrei metterci sono: un metodo che consenta di inserire un nominativo. uno che consenta di eliminarlo. un altro metodo che consente la ricerca di un nominativo dal numero di telefono. un altro ancora che consente la ricerca di un numero di telefono da nome e cognome. così potrebbe andare secondo voi? Comincio subito con la costruzione della classe astratta... così poi ve la posto... ah grazie dell'attenzione e dei consigli! ![]()
__________________
![]() Ultima modifica di luxorl : 13-07-2004 alle 09:55. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Codice:
package agenda; import java.io.*; public abstract class Agenda{ protected int size; public abstract void aggiungi(Nominativo n); public abstract void rimuovi(String cog, String nom); public abstract Nominativo cercanomedi(String prefisso, String telefono); public abstract Nominativo carcanumerodi(String cog, String nom); } avrei potuto dichiararmi i metodi astratti "protected" invece di "public"? come potete vedere ho pensato di dichiararmi una variabile "protected" size per tenere la dimensione dell'agenda! ho fatto bene a dichiararla protected? o sarebbe stato meglio public?
__________________
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
- L'importanzione di java.io in questo caso serve?
se non ci sono classi di quel package e' inutile che lo importi. - avrei potuto dichiararmi i metodi astratti "protected" invece di "public"? certo, ma senza motivo. Una classe astratta e' concettualemente simile interfaccia e in un interfaccia tu dichiari il comportamento di una classe, che e' definito dai suoi metodi pubblici - come potete vedere ho pensato di dichiararmi una variabile "protected" size per tenere la dimensione dell'agenda! corretto. - ho fatto bene a dichiararla protected? o sarebbe stato meglio public? va bene protected, nel caso decida che l'informazione serva anche all'esterno metti un metodo "getter" pubblico |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Adesso passo alla costruzione di una classe Nominativo per costruirmi l'oggetto Nominativo... no?
la metto nello stesso package?
__________________
![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
se utilizzi (ovvero istanzi, conservi un riferimento, estendi, in poche parolo nomini ![]() nella tua classe non vedo alcun riferimento a Classi del package java.io, quindi non e' necessario lo statement di import. |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
penso sia la cosa migliore, visto che logicamente sono legati ![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Codice:
package agenda; import java.io.*; public class Nominativo implements Comparable{ protected String nome, cognome, prefisso, telefono; //costruttore public Nominativo(String nome, String cognome, String prefisso, String telefono){ this.cognome=cognome; this.nome=nome; this.prefisso=prefisso; this.telefono=telefono; } /* public Nominativo(String nome, String cognome){ this.cognome=cognome; this.nome=nome; } */ //metodi accessori public String getNome(){return nome;} public String getCognome(){return cognome;} public String getPrefisso(){return prefisso;} public String getNumero(){return telefono;} //metodi accessori per comparare public boolean equals(Object x){ if (!(x instanceof Nominativo)) return false; Nominativo n=(Nominativo)x; return (this.nome.equals(n.nome) && this.cognome.equals(n.cognome)); } public int compareTo (Object x){ Nominativo n=(Nominativo)x; if (this.cognome.compareTo(n.cognome)<0) return -1; if (this.cognome.equals(n.cognome) && this.nome.compareTo(n.nome)<0) return -1; if (this.equals(n)) return 0; return +1; } public String toString(){ return cognome+" "+nome+" "+prefisso+"/"+telefono; } }
__________________
![]() |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Come potete vedere c'è questo costruttore:
/* public Nominativo(String nome, String cognome){ this.cognome=cognome; this.nome=nome; } */ che l'ho messo commentato perchè io avrei costruito questa classe senza mettercelo, poi sbirciando da alcuni esempi a lezione ho visto che lì c'era! chi mi aiuta a capire bene a che serve? e se è essenziale? il primo costruttore cioè questo: public Nominativo(String nome, String cognome, String prefisso, String telefono){ this.cognome=cognome; this.nome=nome; this.prefisso=prefisso; this.telefono=telefono; } "incastona" le variabili nell'oggetto, giusto?
__________________
![]() |
![]() |
![]() |
![]() |
#10 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
1.
Il costruttore riflette l'idea del minimo necessario affinchè possa dirsi "esistente" l'oggetto costruito. Nel tuo caso sembra ragionevole che il minimo per un oggetto che rappresenti l'idea di "Nominativo" per un'agenda richieda almeno un nome ed un cognome. All'atto pratico poi, può capitare che Tizio disponga delle generalità del contatto che vuole inserire ma ancora non abbia tutti i dati. In genere i costruttori sovraccaricati tendono a richiamare una versione "standard" per poi specializzarsi in date procedure di inizializzazione. Nel tuo caso potrebbe essere più appropriata una forma di questo tipo: Codice:
public Nominativo(String nome, String cognome){ this(nome, cognome, null, null); } 2. Incastonare è un bel termine, rende l'idea di ciò che fa un costruttore con i parametri che gli passi nel tuo caso. Occhio a non farti trarre in inganno dal "this.qualcosa". E' questione formale. La classe possiede dei campi il cui nome è identico a quello usato per la lista dei parametri del costruttore. Si fa e si può fare: assurdo arrovellarsi nel cercare improbabili sinomini per nomi significativi. La palla passa allora al fenomeno chiamato "shadowing" (adombramento in italiano ma l'inglese rende meglio la distinzione con altre evenienze affini). Quando dichiari un [tipo | campo | parametro | variabile] dandogli un nome N, dal punto della dichiarazione fino al termine dell'abito di validità (scope) del [tipo | campo | parametro | variabile] tutte le dichiarazioni di [tipo | campo | parametro | variabile] aventi lo stesso nome N che occorrono in un sotto ambito di validità (sub-scope) si dicono "shadowed" (adombrate). Quando una dichiarazione è adombrata non hai modi di riferirti al suo contenuto, perchè esiste "qualcos'altro" con lo stesso nome N che "prevale" su ciò che hai dichiarato prima, salvo che la dichiarazione si riferisca ad un "membro di classe" (campi, metodi, ecc.). In quest'ultimo caso, puoi accedere alla dichiarazione adombrata passando attraverso il riferimento all'istanza corrente della classe (parola chiave "this"). Nel costruttore di cui parliamo, i quattro parametri adombrano i quattro campi di classe aventi lo stesso nome. this.nome = nome; significa: prendi il campo dell'oggetto che sarà creato a partire dal modello che stò scrivendo adesso ed assegnagli il valore del parametro che è stato passato al costruttore. Ciao. |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
poi: Codice:
public Nominativo(String nome, String cognome){ this(nome, cognome, null, null); }
__________________
![]() |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
|
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
k
![]()
__________________
![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Adesso dovrei costruirmi una classe "AgendinaSuArray"...
la devo far ereditare da Agenda o no? e se eredita da quest'ultima è inutile che mi ridichiaro una variabile size, visto che l'ho fatto nella classe astratta.. praticamente potrei passare alla costruzione di una classe (AgendinaSuArray) in cui implemento i metodi dichiarati nella classe astratta! o sto sbagliando TUTTO? ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
io non riesco a capire perche' agenda e' astratta. |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
perchè dopo che ho costruito AgendaSuArray, vorrei rifarla con altri mezzi.. per esempio con una lista concatenata.. oppure usando le collections.. oppure usando una mappa!
allora mi sono creato, come dire...mmmm lo scheletro dell'agenda.. utilizzando quella classe astratta! che poi implemento con che mezzo voglio!
__________________
![]() |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
ok, chiaro. crea un'implementazione, come hai già detto le variabili le erediti dalla classe padre |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Scusate se non sto continuando questo progetto... ma sono completamente immerso in Fisica (appello il 22) e Calcolo (appello il 28) ...HELP!
![]()
__________________
![]() |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Rieccomi!!
mamma che stress!! proprio ieri sera sono uscito per festeggiare un esame (stressantissimo per colpa del prof, 1:30 di ritardo e poi ci ha dato meno tempo per il compito gggrrrrrr) di Assembler.. adesso mi alzo ancora un po' rincogli*nito dalla birra e devo pensare al prox esame.. programmazione orientata agli oggetti il 22! ![]() nn ho portato avanti qst thread per un po' perchè mi sono dovuto dare: fisica, calcolo2 e architettura dei calcolatori!! beh vediamo che stavo combinando.. (nella mia testa ho il vuoto per quanto riguarda java ![]()
__________________
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:01.