Compito Sistemi in Java

di il
38 risposte

Compito Sistemi in Java

Buon pomeriggio a tutti. Intanto chiedo scusa se sto scrivendo nella sezione sbagliata. Prima di fare una nuova discussione ho fatto un ricerca nel forum e letto anche le regole, ma non ho trovato quello che cercavo. Per questo motivi ho voluto aprire una nuova discussione. Vorrei gentilmente aiuto da voi per lo svolgimento di un esercizio di Sistemi in java.
Sono nuovo nel mondo Java e molte cose non riesco a farle. Per favore datemi una mano.
Ringrazio in anticipo tutti per l'aiuto.
Ecco la traccia:

Si consideri l'accesso ad un pronto soccorso di un ospedale. Quando i pazienti arrivano si recano allo sportello per l'accettazione e ricevono un codice di urgenza numerico, che va da 0 a 4, per priorità decrescente (0 è il codice rosso e via via fino al codice bianco rappresentato con il 4). Successivamente si mettono in attesa nella sala di attesa. I medici chiamano i pazienti rispettando le priorità. Se non vi sono i pazienti in attesa svolgono attività amministrative per un certo intervallo temporale e poi verificano di nuovo se ci sono i pazienti in attesa. Al termine della visita il paziente fornisce allo sportello, per motivi statistici, il numero progressivo con cui è stato servito.
Si utilizano thread e monitor (cioè classi syncronized) di java per modellare tale realtà. In particolare si dovrà:


1. Implementare la classe paziente come thread, simulare il paziente, nel metodo run(), la la procedura di accettazione, l'accesso alla sala d'attesa, e infine, la procedura con la quale viene comunicato allo sportello il numero progressivo di servizio avuto.

2. Implementare la classe Medico come thread, simulare per il medico, nel medoto run(), la seguente attività. Il medico verifica se ci sono pazienti in attesa. In tal caso procede con la visita del paziente a maggior priorità in attesa (a parità di priorità vale la politica FIFO). La visita deve essere simulata con il tempo random di sospensione che va da 10 minuti a 30 minuti. Se non vi sono pazienti in attesa, il medico svolge paratciche amministrative per 5minuti, e poi ritesta la presenza dei pazienti.

3. Implementare la classe Sportello e includere i metodi Accettazione e Statistiche. Il metodo Accettazine restituisce il codice di urgenza la cui determinazione deve essere determinata attraverso una generazione random (tra 0 e 4), il metodo tiene traccia sia del numero di accettazione complessive registrate sia del numero di accettazione del codice di urgenza.

4. Implementare la classe ProntoSoccorso che include (tra le altre cose) i metodi salaAttesa e avantiAltro, invocati rispettivamente dai pazienti e dai medici. Con il metodo salaAttesa i pazienti si mettono in attesa per essere ricevuti.
Il metodo avantiAltro è invocato dai medici come scritto al punto 2.

- Infine realizzare il metodo main, simulando che il numero di pazienti sia 100 e il numero di medici sia 4.

38 Risposte

  • Re: Compito Sistemi in Java

    Kirito ha scritto:


    Si utilizano thread e monitor (cioè classi syncronized) di java per modellare tale realtà.
    È chiaramente un esercizio sul multi-threading/concorrenza. Ma ti dico subito, detto molto in generale, che "modellare" con oggetti e thread delle "realtà" come quella citata (un Pronto Soccorso) non è mai proprio facile.

    Comunque ti sono state date indicazioni un po' più precise sulle entità coinvolte e su quali metodi fare. E questo grosso modo va bene. Per quanto ho letto la cosa perlomeno "quadra" abbastanza. Secondo me però ci sono delle questioni che si dovrebbero chiarire o stabilire meglio.

    Innanzitutto dovresti chiarire meglio le relazioni tra le classi. Chi ha cosa e cosa invoca su chi. Tanto per dirne una: mi viene subito da pensare che ci debba essere solo 1 oggetto ProntoSoccorso e questo debba essere referenziato (quindi condiviso) sia dagli oggetti Paziente che dagli oggetti Medico.
    Ma quale è la relazione con Sportello? Chi fornisce l'oggetto Sportello?

    Inoltre: sia il paziente che il medico sono dei thread. Se il paziente invoca salaAttesa, immagino che debba restare "bloccato" lì dentro fino a che succede qualcos'altro. Il medico invocherà avantiAltro ma cosa deve succedere al paziente, che è un thread differente?

    Insomma ... c'è ancora da chiarire e valutare un po' ....
  • Re: Compito Sistemi in Java

    Buonasera andbin,
    grazie per la tua pronta risposta e per avermi illuminato su alcune cose.
    La traccia purtroppo non l'ho scritta io ma è stato il mio professore.
    Io non riesco proprio a implementarlo in java. Mi daresti una mano?
  • Re: Compito Sistemi in Java

    Kirito ha scritto:


    La traccia purtroppo non l'ho scritta io ma è stato il mio professore.
    Hai possibilità di chiarire con il prof.?

    Kirito ha scritto:


    Io non riesco proprio a implementarlo in java. Mi daresti una mano?
    La implementazione non è banale ma si fa .... la questione è che bisognerebbe chiarire (ancora) alcune cose. La cosa che al momento è più "dubbia" è quella che ho detto alla fine. Paziente e Medico sono thread (distinti). Il salaAttesa per il paziente è "bloccante"? Se sì, ok. Ma quando il medico invoca avantiAltro, supponendo che scelga quel paziente in attesa, il paziente cosa fa? Deve restare lì bloccato e sbloccarsi solo dopo la visita (10-30 min.)?

    Insomma, prima di arrivare alla implementazione bisogna chiarire bene il "giro" di tutto quanto.
  • Re: Compito Sistemi in Java

    Buongiorno andbin,
    allora il prof mi ha detto come tu hai scritto...il paziente si sblocca dopo i 10-30 minuti. Inoltre la sala d'attesa rimane bloccata fino a quando il medico non chiama il paziente per poi sbloccarlo dopo la visita.
    Per quanto riguarda i 2 Thread: Medico e Paziente il prof mi ha detto che sono Distinti.
    Spero di esserti stato d'aiuto
  • Re: Compito Sistemi in Java

    Kirito ha scritto:


    il paziente si sblocca dopo i 10-30 minuti.
    Ok

    Kirito ha scritto:


    Inoltre la sala d'attesa rimane bloccata fino a quando il medico non chiama il paziente
    Ok ma nel senso che con 100 pazienti e solo 4 medici, ad un certo punto sarà che praticamente tutti i pazienti-thread sono bloccati e ciascun medico-thread in ciclo pescherà "il prossimo" dalla coda.


    Prima di chiarire bene tutto il "giro", resta da chiarire lo Sportello. CHI lo usa direttamente?

    Preoccupati per ora di chiarire bene tutto il giro: chi invoca quali metodi, su quali oggetti, e in quale sequenza.
  • Re: Compito Sistemi in Java

    Prima di chiarire bene tutto il "giro", resta da chiarire lo Sportello. CHI lo usa direttamente?

    Hai ragione non ci avevo fatto caso!
    Perfetto allora mando un'Email al prof e ti faccio sapere cosa mi dice. Grazie per la pazienza!
  • Re: Compito Sistemi in Java

    Ok ma nel senso che con 100 pazienti e solo 4 medici, ad un certo punto sarà che praticamente tutti i pazienti-thread sono bloccati e ciascun medico-thread in ciclo pescherà "il prossimo" dalla coda.

    Esattamente come dici tu! Purtroppo come hai potuto intuire il nostro prof non è che sia proprio uno che precisa per bene le cose.
  • Re: Compito Sistemi in Java

    Eccomiii!!!
    Il paziente usa direttamente lo sportello ( lo sportello è un sistema a parte per la prenotazione) per prenotarsi in base alla sua Priorità attraverso 4 pulsanti (che indicano la Priorità). Il sistema (lo sportello) salva il nome e il codice del paziente nella coda in base alla sua priorità. Il paziente una volta ricevuto il codice si mette nella sala d'attesa per poi essere chiamato dal medico. La sala d'attesa rimane bloccata fino a quando il dottore non chiama un paziente per visitarlo e poi sbloccarlo dopo la visita (10-30 minuti).

    Spero tanto di averti chiarito tutte le idee.
  • Re: Compito Sistemi in Java

    Kirito ha scritto:


    Il paziente usa direttamente lo sportello ( lo sportello è un sistema a parte per la prenotazione)
    Ok, chi crea l'oggetto Sportello? Dato che lo sportello è unico è "fa parte" del Pronto Soccorso, presupporrei che sia l'oggetto ProntoSoccorso a creare e contenere l'oggetto Sportello e a renderlo disponibile tramite un es. getSportello(). Pertanto Paziente/Medico devono solamente avere il riferimento all'oggetto ProntoSoccorso per poter fare tutto.

    Kirito ha scritto:


    per prenotarsi in base alla sua Priorità attraverso 4 pulsanti (che indicano la Priorità).
    Scusa ma non avevi detto che la priorità è data con una generazione random? Cosa dovrebbero essere tecnicamente quei 4 pulsanti??

    Kirito ha scritto:


    Il sistema (lo sportello) salva il nome e il codice del paziente nella coda in base alla sua priorità. Il paziente una volta ricevuto il codice si mette nella sala d'attesa per poi essere chiamato dal medico. La sala d'attesa rimane bloccata fino a quando il dottore non chiama un paziente per visitarlo e poi sbloccarlo dopo la visita (10-30 minuti).
    Sì .. ok.
  • Re: Compito Sistemi in Java

    Scusa ma non avevi detto che la priorità è data con una generazione random? Cosa dovrebbero essere tecnicamente quei 4 pulsanti??

    Scusami per la fretta di scriverti non ho neanche letto. Mi sono accorto che i quattro pulsanti non c'entrano nulla. Lo sportello è un sistema che salva il codice e il nome del paziente che poi sarà chiamato dal dottore. Perdonami ancora per averti confuso...
  • Re: Compito Sistemi in Java

    Kirito ha scritto:


    Lo sportello è un sistema che salva il codice e il nome del paziente che poi sarà chiamato dal dottore.
    Ok ma ora dovresti scendere un po' più a livello tecnico. Ad esempio: hai almeno chiaro come devono essere le signature dei metodi che le varie classi citate dovranno avere?
  • Re: Compito Sistemi in Java

    Allora la classe principale deve essere la classe ProntoSoccorso. Deve contenere tutti i metodi citati nel punto 1,2 e 3. La classe sportello deve richiamare i metodi della classe paziente per comunicare al medico della priorità del paziente. Quindi penso che la classe sportello e la classe paziente vengano richiamati dalla classe Medico...o sbaglio?
  • Re: Compito Sistemi in Java

    Kirito ha scritto:


    Allora la classe principale deve essere la classe ProntoSoccorso. Deve contenere tutti i metodi citati nel punto 1,2 e 3. La classe sportello deve richiamare i metodi della classe paziente per comunicare al medico della priorità del paziente. Quindi penso che la classe sportello e la classe paziente vengano richiamati dalla classe Medico...o sbaglio?
    Molto confuso ......
  • Re: Compito Sistemi in Java

    Era solo un ipotesi. Te l'ho detto non so come implementarlo. La traccia non mi era molto chiara e il prof non mi è molto d'aiuto.
    Ogni volta che li mando un'email mi risponde sempre vagamente e io non so che fare. Tu come lo implementeresti? Ti prego vienimi incontro!
Devi accedere o registrarti per scrivere nel forum
38 risposte