RISOLTO java progettazione: class diagram

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
Messaggi
262
Reazioni
3
Punteggio
35
Buonasera ho provato a fare questo esercizio:

Si vuole realizzare un sistemainformativo che offrala possibilità di gestire la registrazione di esami universitari. In particolare, un docente ha la possibilità di registrare un esame sostenuto da uno studenteregolarmente iscritto, a patto che tale esame sia nel piano di studi dello studentee non sia già stato registrato. Si richiede di definire un Class Diagram.

Ho risolto in tal modo:
 

Allegati

  • Schermata 2021-07-09 alle 18.25.58.webp
    Schermata 2021-07-09 alle 18.25.58.webp
    36.6 KB · Visualizzazioni: 35
Non mi convince per niente il tuo schema:
  • definirei innanzitutto una classe Persona (con nome, cognome, data di nascita, codice fiscale, eventualmente luogo di nascita);
  • una classe Studente come sottoclasse di Persona (con le relative operazioni che può fare, come sostenere un esame)
  • una classe Docente come sottoclasse di Persona (con le relative operazioni che può fare, per esempio registrazione di un esame)
  • una classe Insegnamento (un insegnamento è la materia di cui si sostiene l'Esame, ed è questo che ha un voto, una eventuale lode ecc.)
  • una classe PianoDiStudi ( = un insieme di insegnamenti di cui si deve sostenere l'esame + il corso di laurea cui si riferisce)
  • una classe CorsoDiLaurea (nome e facoltà: per esempio Corso di laurea in Ingegneria Informatica, facoltà di Ingegneria)
Invece un aregistrazione non è una classe ma un'operazione (=metodo in Java).
Quando si progettano le classi c'è un modo semplice ma efficace di individuare le "categorie" coinvolte:
  • i nomi si trasformano in classi
  • gli aggettivi/attributi si trasformano in attributi/proprietà di classe
  • i verbi si trasformano nei metodi (procedure)
 
Non mi convince per niente il tuo schema:
  • definirei innanzitutto una classe Persona (con nome, cognome, data di nascita, codice fiscale, eventualmente luogo di nascita);
  • una classe Studente come sottoclasse di Persona (con le relative operazioni che può fare, come sostenere un esame)
  • una classe Docente come sottoclasse di Persona (con le relative operazioni che può fare, per esempio registrazione di un esame)
  • una classe Insegnamento (un insegnamento è la materia di cui si sostiene l'Esame, ed è questo che ha un voto, una eventuale lode ecc.)
  • una classe PianoDiStudi ( = un insieme di insegnamenti di cui si deve sostenere l'esame + il corso di laurea cui si riferisce)
  • una classe CorsoDiLaurea (nome e facoltà: per esempio Corso di laurea in Ingegneria Informatica, facoltà di Ingegneria)
Invece un aregistrazione non è una classe ma un'operazione (=metodo in Java).
Quando si progettano le classi c'è un modo semplice ma efficace di individuare le "categorie" coinvolte:
  • i nomi si trasformano in classi
  • gli aggettivi/attributi si trasformano in attributi/proprietà di classe
  • i verbi si trasformano nei metodi (procedure)
capito ma il metodo registrazione poi lo inserisco nel docente o posso creare una classe DaoDocente che contiene effettuaregistrazione(Insegnamento insegnamento)?
 
Ultima modifica:
il metodo registrazione poi lo inserisco nel docente o posso creare una classe DaoDocente che contiene effettuaregistrazione(Insegnamento insegnamento)?
chi fa la registrazione? Un Docente... (che registra un esame con un determinato voto)
se hai già una classe Docente, perché creare una sottoclasse di Docente solo per aggiungere il metodo "registra"?
ti devi sforzare di mantenere le cose semplici, non serve per forza complicare la gerarchia di classi aggiungendo sottoclassi non necessarie: isola le entità, ciascuna di esse è una singola classe.

In genere un docente "possiede" più corsi/insegnamenti (per esempio nella classe puoi mettere un attributo di tipo lista di insegnamenti);
quindi puoi perfino pensare di creare un metodo registra() direttamente per la classe Insegnamento (inquanto ogni Insegnamento può essere registrato una volta fatto l'esame). Non c'è un unico modo di fare le cose, l'importante è che siano coerenti con l'uso che ne farai.
 
chi fa la registrazione? Un Docente... (che registra un esame con un determinato voto)
se hai già una classe Docente, perché creare una sottoclasse di Docente solo per aggiungere il metodo "registra"?
ti devi sforzare di mantenere le cose semplici, non serve per forza complicare la gerarchia di classi aggiungendo sottoclassi non necessarie: isola le entità, ciascuna di esse è una singola classe.

In genere un docente "possiede" più corsi/insegnamenti (per esempio nella classe puoi mettere un attributo di tipo lista di insegnamenti);
quindi puoi perfino pensare di creare un metodo registra() direttamente per la classe Insegnamento (inquanto ogni Insegnamento può essere registrato una volta fatto l'esame). Non c'è un unico modo di fare le cose, l'importante è che siano coerenti con l'uso che ne farai.
ah ok, quindi intendi inserisco in insegnamenti tipo: listaInsegnamenti:List<insegnamenti> ed il metodo registra() , giusto?
 
Ultima modifica:
Allora:
  • dato che un Docente può insegnare/registrare più di un insegnamento, all'interno della classe Docente metterai un attributo di tipo lista di insegnamenti (quelli che "possiede")
  • poi scegli se sia conveniente mettere un metodo registra() all'interno della classe Insegnamento oppure all'interno della classse Insegnante. Intuitivamente un Insegnamento può essere registrato da un insegnante, un assistente o altre persone, ed è il motivo per cui mi verrebbe più naturaleIe inserirlo nella classe Insegnamento; questo non esclude che si possa definire un registra() anche all'interno della classe Docente, dipende da come realizzi l'applicazione.
 
Allora:
  • dato che un Docente può insegnare/registrare più di un insegnamento, all'interno della classe Docente metterai un attributo di tipo lista di insegnamenti (quelli che "possiede")
  • poi scegli se sia conveniente mettere un metodo registra() all'interno della classe Insegnamento oppure all'interno della classse Insegnante. Intuitivamente un Insegnamento può essere registrato da un insegnante, un assistente o altre persone, ed è il motivo per cui mi verrebbe più naturaleIe inserirlo nella classe Insegnamento; questo non esclude che si possa definire un registra() anche all'interno della classe Docente, dipende da come realizzi l'applicazione.
va bene, grazie mille, ultima cosa ti trovi se indico le seguenti associazioni:
  1. studente con corsoLaurea --> 1..* a 1
  2. docente con insegnamento -->1 a 1
  3. studente con pianoStudio-->1..* a 1
  4. corsoLaurea con pianoStudio --> 1 a 1
  5. studente con insegnamento ---> 1..* a 1...*
 
Ultima modifica:
studente con corsoLaurea --> 1..* a 1
N a 1 (se è questo che significano i puntini con *) perché N studenti seguono un certo corso di laurea, esempio: l'insieme degli studenti che seguono il corso di studi di ingegneria informatica. Quindi mi pare che ci siamo
docente con insegnamento -->1 a 1
secondo me è 1 a molti perché un docente può insegnare più materie
corsoLaurea con pianoStudio --> 1 a 1
1 a molti perché ad un corso di laurea accedono studenti con piano di studi (tutti o in parte) diversi tra loro

Però vorrei sentire il parere di @Andretti60 che è più pratico di me in queste cose
 
N a 1 (se è questo che significano i puntini con *) perché N studenti seguono un certo corso di laurea, esempio: l'insieme degli studenti che seguono il corso di studi di ingegneria informatica. Quindi mi pare che ci siamo

secondo me è 1 a molti perché un docente può insegnare più materie

1 a molti perché ad un corso di laurea accedono studenti con piano di studi (tutti o in parte) diversi tra loro

Però vorrei sentire il parere di @Andretti60 che è più pratico di me in queste cose
va bene grazie
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top