Pages: 1 [2]   Go Down
Print
Author Topic: 3° parte  (Read 5624 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
corsair
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 273



« Reply #15 on: 16-02-2010, 12:59:09 »

Mi sorge una domanda.. quanto tempo si ha per la terza prova?
ho provato a svolgere l'esempio che c'è sul sito del professore, bisogna disegnare ben 8 classi...
chiave<--chiave a scorrimento<----chiave elettronica<----(1)con microchip<-----(2)banda magnetica
da scorrimento deriva pure chiave meccanica.. inoltre ho aggiunto due altre classi di supporto (data e dente).
per disegnare tutto il grafico uml ci vuole un bel po di tempo senza contare eventuali note che spiegano i metodi!(che a questo punto non saprei dove infilare, perchè non c'è più spazio!)

Come si fa dunque??
avete consigli? le note che spiegano i metodi vanno inserite? come si fa se non c'è lo spazio??
Logged
corsair
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 273



« Reply #16 on: 16-02-2010, 13:28:38 »

Aggiungo un altro dubbio... riporto il testo dell'esempio descritto prima:

    Una chiave è caratterizzata dalla descrizione e dal peso. Le chiavi possono essere di
tipo meccanico, a banda magnetica, con microchip. Queste ultime montano un chip con la
data di aggiornamento del firmware e con 3Kb di memoria. Le chiavi a banda magnetica
sono caratterizzate dall’ampiezza della banda, quelle meccaniche da una sequenza di
dentelli, ognuno caratterizzato dall’altezza del dente, dal suo profilo e dal suo coefficiente
di attrito. Le chiavi elettroniche (magnetiche e microchip) contengono le informazioni
relative all’abilitazione (livello di sicurezza, zona di abilitazione, data scadenza) delle
stesse. Sia le chiavi elettroniche che quelle meccaniche sono chiavi a scorrimento; sono
caratterizzate dalla lunghezza e possono essere bloccate internamente. Dopo il blocco le
chiavi meccaniche sono restituite, mentre quelle elettroniche non sono restituite. Infine,
esiste un’operazione per l’aggiornamento del firmware delle chiavi con microchip.


occorre secondo voi mettere nella classe chiave la descrizione che poi non verrà mai utilizzata?
Basta mettere lo stretto necessario alla soluzione dei quesiti che seguono?

il testo dice questo :
Riportare il diagramma UML di tutte le classi che si ritengono necessarie alla corretta descrizione e
rappresentazione della situazione sopra descritta.

Grazie a presto
Logged
207
Matricola
*
Offline Offline

Posts: 95


« Reply #17 on: 16-02-2010, 16:53:52 »

La prova ha una durata di 80 minuti, bisogna fare soltanto quello che c'e scritto, quindi credo proprio che la descrizione vada inserita, per risolvere il problema io ho utilizzato anche una classe Chip e una classe Abilitazione, quali sono le classi astratte? e dove hai inserito il metodo astratto getCosto()?
« Last Edit: 16-02-2010, 16:58:27 by 207 » Logged
corsair
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 273



« Reply #18 on: 16-02-2010, 18:18:02 »

beh semplice.. le classi astratte sono quella "chiave" "scorrimento" ed "elettronica" getCosto() va dichiarato abstract in chiave
e poi va implementato in meccanica, magnetica e chiave con microchip.
scusa a cosa ti serve la classe microchip? e quella abilitazione? credo che siano eccessive
Logged
XDnl
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 376



« Reply #19 on: 16-02-2010, 19:18:51 »

ragazzi nn riesco a capire alcuni punti allora.. prima di tutto la cosa più semplice:
il getCoefficiente dei parallelepipedi è trovato in base alla formula 7*c+3*L..... questo L è trovato con un metodo che restituisce il lato più lungo di questa figura, ma è necessario crearlo proprio questo metodo?
Beh, diciamo che è molto conveniente farlo.  pc Mi spiego meglio:
nella terza prova bisogna implementare direttamente solo i metodi specificati nel testo... tra questi c'è il metodo getCoefficiente(). Ora, per il parallelepipedo è necessario sapere il suo lato più lungo... se non crei il metodo getMaxL() (dovrebbe chiamarsi così se non erro), sei costretto a fornirne un'improbabile implementazione all'interno del metodo getCoefficiente(). Per fare questo devi perdere tempo ed inoltre è facile scrivere cose errate. Dichiarando il metodo getMaxL() all'interno della classe Parallelepipedo, invece, ti permette di utilizzare il metodo dentro getCoefficiente(), ma poichè getMaxL() non è specificato nel testo, non devi scrivere la sua implementazione.
Con questa "furbata" quindi hai risolto il problema, il codice all'interno di getMaxL() potrebbe essere complicatissimo, ma a te non importa.
E' fondamentale non perdere tempo durante la terza prova, visto che è davvero poco.

poi non riesco proprio a capire come funziona la classe Vertice, se la variabile che ha è un array di float, come fa poi il costruttore ad essere fatto passando (nComponenti: int)? non capisco per lo più cosa sono...
grazie!! ciao
Innanzitutto ricordo che quel diagramma UML è stato il mio modo di affrontare il problema,  pc, e che ovviamente non è l'unico.
La classe Vertice contiene all'interno un'array di float.
Ogni elemento dell'array rappresenta una componente del vertice.
Il parametro nComponenti del costruttore indica da quante componenti è composto.
Di fatto quindi la classe Vertice rappresenta un vertice n-dimensionale. Di seguito riporto l'implementazione:
Code:
abstract class Vertice
{
public float[] componenti;
public Vertice(int nComponenti)
{
componenti = new float[nComponenti];
}
}

class Vertice2D extends Vertice
{
public Vertice2D(int x, int y)
{
super(2);
componenti[0] = x;
componenti[1] = y;
}
}

class Vertice3D extends Vertice
{
public Vertice3D(int x, int y, int z)
{
super(3);
componenti[0] = x;
componenti[1] = y;
componenti[2] = z;
}
}
Come vedi, le classi Vertice2D e Vertice3D non fanno altro che creare un vertice rispettivamente bidimensionale/tridimensionale, richiamando il costruttore.

ho provato a svolgere l'esempio che c'è sul sito del professore, bisogna disegnare ben 8 classi...
chiave<--chiave a scorrimento<----chiave elettronica<----(1)con microchip<-----(2)banda magnetica
da scorrimento deriva pure chiave meccanica.. inoltre ho aggiunto due altre classi di supporto (data e dente).
per disegnare tutto il grafico uml ci vuole un bel po di tempo senza contare eventuali note che spiegano i metodi!(che a questo punto non saprei dove infilare, perchè non c'è più spazio!)

Come si fa dunque??
avete consigli? le note che spiegano i metodi vanno inserite? come si fa se non c'è lo spazio??
Allora, se per note intendi tipo quei "fumetti" con all'interno la descrizione dei metodi, ti dico che NON devi assolutamente metterli. Fondamentalmente per due motivi:
1) Occupano spazio (e ce n'è poco, a quanto hai visto)  testate
2) Occupano tempo (e purtroppo ce n'è poco anche di questo)  testate
occorre secondo voi mettere nella classe chiave la descrizione che poi non verrà mai utilizzata?
Assolutamente sì, devi mettere tutto quello che ti specifica nel testo.

Basta mettere lo stretto necessario alla soluzione dei quesiti che seguono?
Devi mettere quello che serve, (vedi appunto l'esempio di getMaxL(), che pur non essendo specificato nel testo, è molto conveniente mettere).

beh semplice.. le classi astratte sono quella "chiave" "scorrimento" ed "elettronica" getCosto() va dichiarato abstract in chiave
e poi va implementato in meccanica, magnetica e chiave con microchip.
scusa a cosa ti serve la classe microchip? e quella abilitazione? credo che siano eccessive
Quando ho fatto l'esercizio ho previsto le seguenti classi:
- abstract Chiave
- abstract Scorrimento extends Chiave
- abstract Elettronica extends Scorrimento
- Magnetica extends Elettronica
- Microchip extends Elettronica
- Meccanica extends Scorrimento
- Dentello  yoh

 ciao  ok



« Last Edit: 16-02-2010, 19:36:56 by XDnl » Logged
aryanna
Apprendista Forumista
**
Offline Offline

Posts: 110



« Reply #20 on: 17-02-2010, 08:52:37 »

Grazie! sei stato gentilissimo!    e chiarissimo!
Logged

Rappresentante studenti Corso di Laurea in Informatica - arianna317@gmail.com

write once, run everywhere..
corsair
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 273



« Reply #21 on: 18-02-2010, 09:15:56 »

un ultima domanda... nelle classi astratte le variabili conviene metterel # vero? così si evitano tutti i getVariabile()
c'è un modo nei metodi costruttori per non riscrivere tutte le variabili che servono per l'inizializzazione della superclasse?
Ad esempio si possono lasciare dei puntini e poi mettere le nuove variabili?

Grazie a presto!
Logged
crypt0
Apprendista Forumista
**
Offline Offline

Posts: 109


« Reply #22 on: 20-02-2010, 11:24:57 »

Dipende.
Se tutte le sottoclassi ne hanno bisogno allora puoi metterle protected, altrimenti devi fare necessariamente il getXXX() per non riempire di variabili di istanza sottoclassi che non hanno alcun bisogno di tali variabili.

E comunque sono quasi convinto che non si possa ricorrere a mezzucci com i tre puntini (purtroppo).

Ho una domanda.
Nell'esercitazione sulla terza prova svolta in aula prima della fine delle lezioni il prof ha messo i commenti anche sui metodi costruttori (che io ricordi).
Dobbiamo farlo necessariamente anche noi?
« Last Edit: 20-02-2010, 11:27:43 by crypt0 » Logged
corsair
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 273



« Reply #23 on: 20-02-2010, 11:38:15 »

Dipende.
Se tutte le sottoclassi ne hanno bisogno allora puoi metterle protected, altrimenti devi fare necessariamente il getXXX() per non riempire di variabili di istanza sottoclassi che non hanno alcun bisogno di tali variabili.
Scusa ma il tuo ragionamento non torna! se una variabile sta in una superclasse, vuol dire che è necessaria a tutte le sottoclassi. Se no andrebbe messa solo nelle sottoclassi dove va inserita ok qualcuno mi corregga se sbaglio
Logged
crypt0
Apprendista Forumista
**
Offline Offline

Posts: 109


« Reply #24 on: 20-02-2010, 11:49:21 »

E io cosa ho detto? O.o

Il ragionamento dovrebbe essere questo:
Nella superclasse metti solo le variabili in comune a tutte le sottoclassi.

Le variabili specifiche vanno inserite direttamente nelle sottoclassi che ne hanno bisogno.

Se nella struttura ereditaria alcune sottoclassi non necessitano di certe variabili, queste non devono essere istanziate nella superclasse, o comunque non devono essere accessibili al di fuori di essa.
Non esistendo una visibilità "selettiva" all'interno di una gerarchia ereditaria non ti resta altro da fare che dichiararla private e predisporre un getXXX()

Nel predisporre il polimorfismo di alcuni metodi può capitare di istanziare variabili che non sono utili a tutti.
Logged
corsair
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 273



« Reply #25 on: 20-02-2010, 12:07:29 »

ok forse stiamo vedendo la cosa da due punti diversi....per questo forse non ti comprendevo, vediamo se adesso ho capito quello che vuoi dire tu...

Tu sostieni che se una certa variabile x(quale potrebbe essere la stringa che indica il nome) che sarà presente in in tutte le classi ma non viene utilizzata nei metodi delle sottoclassi, conviene dichiararla privata  ed inserire il getXXX().

Ho capito bene?
Logged
crypt0
Apprendista Forumista
**
Offline Offline

Posts: 109


« Reply #26 on: 20-02-2010, 12:23:20 »

Più o meno.

È capitato in alcune prove svolte in aula che il prof istanziava variabili di appoggio (tipo M) utilizzate da metodi di alcune sottoclassi, ma in comune a tali sottoclassi.

La cosa più sensata è dichiararla in comune ma limitarne l'accesso alla sola superclasse tramite il getM(), ereditato poi dalle sottoclassi.

Mi è capitato durante la prova di laboratorio, e ho dovuto istanziare il getM().
Logged
Flyer
Apprendista Forumista
**
Offline Offline

Posts: 100



« Reply #27 on: 24-02-2010, 16:48:14 »

Nella gerarchia ereditaria si considerino anche i seguenti metodi eventualmente polimorfi e se ne dia un'implementazione
Ma il prof come implementazione cosa intende?
Bisogna scrivere le classi solo con i metodi chiesti? Senza mettere variabili e altri metodi che non servono tipo?
« Last Edit: 24-02-2010, 16:56:36 by Flyer » Logged
Pages: 1 [2]   Go Up
Print
Jump to: