PDA

View Full Version : [Java] Domanda su creazione oggetti


Schum4k3r
03-01-2005, 16:29
Ho creato il metodo seguente

public void aggiungiaula(String nome, int posti)
{
Aula nome = new Aula();



che ovviamente nn funziona....come posso fare a passare un nome al riferimento dell'oggetto attraverso il metodo?
allego anke il problema per chiarezza.

Si realizzi un’applicazione Java per la gestione delle prenotazioni di un insieme di aule
da parte di una comunit`a.
Ogni aula `e dotata di diversi attributi fra cui: numero dei posti, presenza di un
sistema di proiezione, presenza di un sistema di videoconferenza.
Un utente (docente, tutor, tecnico, esterno) pu`o chiedere al sistema di prenotare:
• una certa aula
• in un certo giorno
• per una certa ora singola
• per una certa attivit`a (deve essere fornita una descrizione)
Il sistema deve fare in modo che non ci siano sovrapposizioni fra le prenotazioni.
Le aule possono essere prenotate solo nei giorni feriali (sabato escluso) e solo a partire
da una certa ora “intera” (non sono ammesse cio`e prenotazioni che ad esempio partono
alle 9:30 - ma solo alle 9:00 o 10:00 etc.)
In ogni giornata le aule sono fruibili dalle ore 8:00 del mattino fino alle ore 19:00
della sera. Non possono essere accettate prenotazioni fuori da questo orario.
Un utente, inoltre, pu`o richiedere sempre al sistema di cancellare una certa ora - in
una certa aula, in un certo giorno - delle sue prenotazioni.
Il sistema, per aiutare il richiedente a fare le sue prenotazioni, deve anche fornire la
possibilit`a di fare ricerche con diversi criteri. In particolare il sistema deve permettere di:
• Cercare, se c’`e, un’aula libera:
– in un dato giorno
– per un certo numero di ore consecutive o no (se nella richiesta viene indicato
che si desiderano ore consecutive allora tale vincolo deve essere rispettato,
altrimenti non c’`e nessun vincolo: le ore possono essere consecutive o no)
– il cui numero di posti sia maggiore uguale a un certo numero dato
– i cui attributi soddisfino alcune richieste date sulla presenza di strumenti
didattici (videoconferenza etc.)
• Visualizzare tutte le prenotazioni di una data aula in un dato giorno
1
• Visualizzare tutte le prenotazioni fatte da un dato utente nell’arco di tempo
individuato da due date fornite.
I risultati delle ricerche devono fornire la visualizzazione di tutte le prenotazioni dell’aula
trovata, nel giorno in questione, oltre all’indicazione delle ore libere oggetto della
ricerca.
Coloro che sostengono un esame da 6 CFU devono inoltre implementare
le seguenti funzionalit`a:
• Uno stesso utente pu`o prenotare, dopo sua conferma esplicita alla segnalazione di
sovrapposizione che deve essere data dal sistema, una stessa aula in uno stesso
orario per attivit`a diverse
• Il sistema deve permettere di cercare, se c’`e, la prima aula libera in una certa
settimana (quindi se ce n’`e una di luned`ı il sistema deve indicare quella) per un
certo numero di ore anche non consecutive ma nello stesso giorno:
– il cui numero di posti sia maggiore uguale a un certo numero dato
– i cui attributi soddisfino alcune date richieste sulla presenza di strumenti
didattici (videoconferenza etc.)
Per quanto riguarda quest’ultima ricerca se due o pi`u aule soddisfano la richiesta per
lo stesso giorno (e questo giorno `e il primo, nella settimana data, che ha almeno un’aula
che soddisfa le richieste) non `e importante scegliere quella le cui ore libere iniziano prima
delle altre: pu`o esserne scelta una qualsiasi.
Sia gli studenti che devono ottenere 5 CFU, sia quelli che ne devono
ottenere 6, devono fornire una classe Test che illustri tutte le funzionalit`a implementate.
2 Suggerimenti di progettazione e implementazione
La prima fase di approccio alla realizzazione dell’applicazione richiesta `e, come sappiamo,
un’adeguata progettazione secondo le caratteristiche tipiche della programmazione ad
oggetti.
In particolare `e della massima importanza definire le classi che si vogliono scrivere e
il loro esatto significato. In questa fase `e bene riflettere bene sui concetti che si vogliono
rappresentare e badare che ogni classe rappresenti un singolo concetto.
Per quanto riguarda l’applicazione da realizzare nel progetto il suggerimento `e quello
di individuare, tra eventuali altre, le seguenti classi:
Utente Gli oggetti di questa classe sono le persone che hanno accesso al sistema per le
prenotazioni, le cancellazioni e le ricerche
Aula Gli oggetti di questa classe sono le aule che si possono prenotare, con i loro attributi
GestoreAule Un oggetto di questa classe deve mantenere una collezione di un certo
numero di aule, permettendo l’aggiunta di nuove aule. Inoltre potrebbe essere in
grado di ricercare, su richiesta, aule che hanno certe caratteristiche (numero di
posti, presenza di macchinari, etc.)
2
Prenotazione Un oggetto di questa classe rappresenta una prenotazione di una certa
aula, da parte di un certo utente, in un certo giorno per una certa ora singola (`e
bene che la granularit`a delle prenotazioni sia questa: in questo modo risulta pi`u
semplice la gestione di prenotazioni con ore consecutive e non)
DatabasePrenotazioni Un oggetto di questa classe mantiene una collezione di prenotazioni
effettuate. Deve permettere l’inserimento di nuove prenotazioni (controllando
che non ci siano sovrapposizioni) e la cancellazione di prenotazioni (controllando
che l’utente che cancella sia colui che ha effettuato la prenotazione)
GestoreRicerche Un oggetto di questa classe, attraverso un certo oggetto di
DatabasePrenotazioni, mette a disposizione dei metodi per effettuare le ricerche
e visualizzazioni previste
CaratteristicheAula Un oggetto di questa classe pu`o essere utile per rappresentare
un tipo di attributi richiesti ad un aula durante una ricerca. Potrebbe implementare
facilmente un metodo boolean satisfies(Aula a) che indica se la data aula
soddisfa i criteri in esso definiti.
Data Un oggetto di questa classe rappresenta una certa data: giorno mese e anno
DataEOra Un oggetto di questa classe rappresenta una certa ora di un certo giorno.

atidem
03-01-2005, 17:05
Non ho il tempo materiale per leggere le specifiche interamente.
Non ho inteso cosa volessi dire con la tua domanda.

Ti posto un esempio di come potrebbe essere creato il codice:


public class Aula{
// alcuni fra i possibili campi che costituiscono l'oggetto
private int numeroPosti;
private boolean proiezione,videoconferenza;
//costruttore
public Aula(int n){
numeroPosti=n;
proiezione=false;
videoconferenza=false;
}
//metodi accessori
public int getNumeroPosti(){
return numeroPosti;
}
...
}


//nel main() o ovunque tu ne abbia bisogno (attraverso import)

Aula a = new Aula(200);

Schum4k3r
03-01-2005, 17:19
grazie per l'aiuto che mi fa comodo.
la mia domanda in specifico era come fare a dare a
Aula a = new Aula(200)

invece di "a" un testo inserito per esempio a mano da un utente attraverso un interfaccia.

grazie ankora ;)

atidem
03-01-2005, 18:07
import java.io.*;
import personal_package.*; // devi crearlo ovviamente!

public class ReadString{
public static void main (String[] args) {
//trascuro gli altri possibili campi
String nome_Aula=null;
// standard input
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
try {
nomeAula = br.readLine();
} catch (IOException ioe) {
System.out.println("IO error!");
System.exit(1);
}
Aula a = new Aula(nome_Aula,...); // da implementare!
}
}


Quel che richiedi non è possibile!

Schum4k3r
03-01-2005, 20:55
ok grazie mille dell'aiuto ;)

Gerhard83
04-01-2005, 13:17
scusa ma la a usata per identificare il nome del nuovo oggetto creato è paragonabile ad una variabile scritta ad esempio come indice di un vector. a che serve poterla rinominare?

Schum4k3r
04-01-2005, 14:18
siccome vuole ke si creino delle aule anke da un txt, volevo fa ke queste erano create con un nome inserito da un utente in modo ke venissero diversi oggetti. Mi consigliate di farlo in un altra maniera? (array?)

end.is.forever
04-01-2005, 14:36
Nel tuo tentativo c'è un errore di fondo che riguarda il concetto di programma:
il codice che scrivi verrà compilato in un linguaggio (quasi) eseguibile, e ogni variabile (come ad esempio la variabile "nome") diventerà un riferimento grazie al quale si potrà accedere al tuo oggetto (di tipo Aula).
Il nome nel codice java è assolutamente irrilevante, il fatto che si chiami "nome" non determina in alcun modo come verrà identificato successivamente al momento dell'esecuzione; è solo il modo in cui tu (programmatore) lo puoi identificare nel codice.

Se ci fosse un modo per legare il nome nel codice ad una stringa inserita dall'utente, significherebbe che il compilatore è in grado di prevedere quale stringa inserirà l'utente ancor prima di compilare il codice e sostituire questa stringa al posto di nome.
Una cosa del genere è impossibile quindi finchè il tuo codice richiede una compilazione.

Inoltre se anche questo fosse possibile, non ne avresti alcun vantaggio: tu programmatore continueresti a identificare l'oggetto come "nome" e non avresti alcun modo per distinguerlo da un altro oggetto "nome".

Se vuoi che un oggetto venga identificato da una stringa è necessario che metti insieme un sistema di componenti che, data una Stringa restituisca un riferimento all'oggetto desiderato (ad esempio due semplicissimi array, uno di stringhe e l'altro di aule, nel primo inserisci via via i nomi delle aule, nell'altro, per ogni indice l'aula corrispondente al nome contenuto nell'altro array a quell'indice).
Molto più semplicemente potresti usare una Hashtable in cui inserisci alla chiave "nome" il valore "aula".

Più tipicamente nella programmazione ad oggetti si preferisce mappare ogni proprietà utile (e quindi anche il nome) come campo della classe.

Ciao

atidem
04-01-2005, 14:54
Credo che prima di inoltrarti in concetti "evoluti" dovresti comprendere quale sia la vera essenza della programmazione ad oggetti.
In rete potrai trovare numerose guide. Basta saper cercare ed avere un pò di pazienza!

Benvenuto nel fantastico mondo di Java!

atidem
04-01-2005, 14:57
Originariamente inviato da end.is.forever

[...] ad esempio due semplicissimi array, uno di stringhe e l'altro di aule, nel primo inserisci via via i nomi delle aule, nell'altro, per ogni indice l'aula corrispondente al nome contenuto nell'altro array a quell'indice.



Poco efficace.

Schum4k3r
04-01-2005, 15:51
una possibile implementazione del gestore aule quale puo essere? avevo pensato ad un array ma il fatto di poter aggiungere nuove aule limiterebbe il tutto.

atidem
04-01-2005, 16:27
Usa la classe Vector (http://java.sun.com/j2se/1.4.2/docs/api/java/util/Vector.html)

Schum4k3r
04-01-2005, 18:32
mi pare proprio adatta! grazie:)

Schum4k3r
05-01-2005, 16:10
Ho provato con la classe Vector ed e' abbastanza semplice,
L'unica cosa e' che a questo punto mi viene meno l'utilità di avere diverse classi, visto che ogni classe ha un oggetto che contiene un vector.

Schum4k3r
06-01-2005, 13:59
Qlcn di voi sa come funziona la classe Gregoriancalendar? mi basta una spiegazione rapida col metodo x calcolare se un giorno e' feriale o no, o anche un link di una guida in ita.
thx