View Full Version : [JAVA] mi aiutate con le sottoclassi?
Ciao a tutti,
è la prima volta che posto in questa sezione e spero ci sia qualche anima pia che pazientemente mi spieghi il da farsi :)
A scuola abbiamo iniziato a trattare di classi (oggetti, attributi e metodi, metodi più comuni tra i quali il costruttore, il get, il set, il toString,...)
Adesso il professore ci ha detto di pensare ad una classe madre COMPUTER e a due sottoclassi, SCHEDA_VIDEO e HDD; la classe HDD in particolare avrà gli attributi: marca, modello, capacità, tempo di accesso, rpm. La sottoclasse Scheda video ad esempio potrebbe avere come attributi clock della GPU, tipo GPU, quantità VRAM onboard,...
Mi sorgono però dei dubbi, dato che il prof sa spiegare davvero male e, teoricamente, non ha spiegato un tubo riguardo a classi e sottoclassi:
1) Premesso che si andrà a creare nel main project un vettore di record (oggetti), in cui ogni cella sarà composta dalla clase COMPUTER e dalle altre due sottoclassi, quando con un ciclo for, considerando ciascuna cella del vettore, acquisisco in variabili del programma principale i dati e poi per ciascuna cella del vettore invoco il metodo costruttore, per passare i parametri, come faccio dato che si tratta di classi e sottoclassi?
Come far interagire le varie variabili tra classe e sottoclasse? Come dichiarare le due sottoclassi nella classe principale???
Non ditemi algoritmi troppo complessi: mastico Java a malapena e a livello scolastico :stordita: :help:
Adesso il professore ci ha detto di pensare ad una classe madre COMPUTER e a due sottoclassi, SCHEDA_VIDEO e HDD;Oh mamma! :eek: .... vorrei solo dire alcune cose riguardo ad una questione concettuale molto importante. Nei linguaggi ad oggetti, la ereditarietà consente di definire una classe che estende un'altra classe. La relazione tra le due classi viene anche detta con il termine inglese "IS-A" (è-un).
In sostanza la sotto-classe deve essere vista come una specializzazione, un caso particolare, della super-classe. Se ho una classe Animale, è logico e corretto creare due sotto-classi Gatto e Cane. Perché un Cane è-un Animale e lo stesso vale per Gatto.
Ora veniamo alla relazione che hai indicato tu: un HDD è-un COMPUTER?? Direi proprio di no.
Oh mamma! :eek: .... vorrei solo dire alcune cose riguardo ad una questione concettuale molto importante. Nei linguaggi ad oggetti, la ereditarietà consente di definire una classe che estende un'altra classe. La relazione tra le due classi viene anche detta con il termine inglese "IS-A" (è-un).
In sostanza la sotto-classe deve essere vista come una specializzazione, un caso particolare, della super-classe. Se ho una classe Animale, è logico e corretto creare due sotto-classi Gatto e Cane. Perché un Cane è-un Animale e lo stesso vale per Gatto.
Ora veniamo alla relazione che hai indicato tu: un HDD è-un COMPUTER?? Direi proprio di no.
Allora forse il professore più che classe e sottoclasse intendeva dipendenza. Anche se, usando l'UML, alla lavagna ha disegnato una freccia continua, non una tratteggiata che, appunto dovrebbe indicare dipendenza.
Allora forse il professore più che classe e sottoclasse intendeva dipendenza. Anche se, usando l'UML, alla lavagna ha disegnato una freccia continua, non una tratteggiata che, appunto dovrebbe indicare dipendenza.
la caratteristica fondamentale dell'ereditarietà è appunto l'ereditare: la classe derivata eredita tutto quello che ha di ereditabile la super-classe. mi spieghi secondo il tuo prof che cosa dovrebbe avere, concettualmente, una scheda grafica che un computer ha? :wtf:
voglio dire, con tutta la buona volontà e dando per buono l'esempio del tuo prof, in quel diagramma UML che cosa ereditava la scheda grafica dal computer? quali metodi? quali campi pubblici/protetti?
Diciamo che lo vedrei meglio come relazione HAS-A, cioè un Computer ha un HDD e ha una SchedaVideo. Tradotto in codice sarebbe:
class HDD { ... }
class SchedaVideo { ... }
class Computer {
HDD hdd;
SchedaVideo schedaVideo;
}
A scuola abbiamo iniziato a trattare di classi (oggetti, attributi e metodi, metodi più comuni tra i quali il costruttore, il get, il set, il toString,...) in Java che io sappia non esiste nessun metodo particolare che ha il nome di get o set... esiste, in generale in tutta la programmazione a oggetti, un particolare design che prevede la privatizzazione dei campi di una classe e l'accesso tramite metodi get e set, ma Java non obbliga nulla del genere.
Adesso il professore ci ha detto di pensare ad una classe madre COMPUTER e a due sottoclassi, SCHEDA_VIDEO e HDD; la classe HDD in particolare avrà gli attributi: marca, modello, capacità, tempo di accesso, rpm. La sottoclasse Scheda video ad esempio potrebbe avere come attributi clock della GPU, tipo GPU, quantità VRAM onboard,... domanda chiave: e la classe COMPUTER che campi/metodi ha, che le altre due classi ereditano?
Mi sorgono però dei dubbi, dato che il prof sa spiegare davvero male qui non si fatica a crederlo :D
Diciamo che lo vedrei meglio come relazione HAS-A, cioè un Computer ha un HDD e ha una SchedaVideo. Tradotto in codice sarebbe:
class HDD { ... }
class SchedaVideo { ... }
class Computer {
HDD hdd;
SchedaVideo schedaVideo;
} in effetti mi viene in mente che forse lui per "sottoclasse" intendesse "nested class", ovvero:
class Computer
{
class HardDisk
{
...
}
class GraphicsCard
{
...
}
}
così ha molto più senso.
Diciamo che lo vedrei meglio come relazione HAS-A, cioè un Computer ha un HDD e ha una SchedaVideo. Tradotto in codice sarebbe:
class HDD { ... }
class SchedaVideo { ... }
class Computer {
HDD hdd;
SchedaVideo schedaVideo;
}
Si forse è questo... praticamente COMPUTER ingloba SCHEDA VIDEO e HDD. Purtroppo non so dirvi altro... mannaggia al prof! Non capisco però bene come invocare il costruttore, passando in una volta soltanto i parametri a tutte e tre le classi...
nuovoUtente86
31-10-2007, 20:17
Come ti hanno gia detto c' è un errore concettuale,una scheda video o un Hd non sono n computer...piu presumibilmente potrebbero essere ComponentiComputer allora il discorso sarebbe lineare.Altra interpretazione è quella che computer sia l' oggetto composto e hd e scheda video i componenti..implementabili in java attraverso le inner class come ti hanno fatto vedere su oppure con una cosa del genere
class Computer{
private SchedaVideo sV;
private HD hD;
.........
.........
}
con il concetto di delagation.Questo però si esprime solitamente in UML come una aggregazione o composizione.
I metodi set e get si utilizzano per implementare l' importante regola dell' incapsulamento ovvero nascondere all' esterno i dettagli implementativi e proteggere le variabili da settaggi non consoni.
Come ti hanno gia detto c' è un errore concettuale,una scheda video o un Hd non sono n computer...piu presumibilmente potrebbero essere ComponentiComputer allora il discorso sarebbe lineare.Altra interpretazione è quella che computer sia l' oggetto composto e hd e scheda video i componenti..implementabili in java attraverso le inner class come ti hanno fatto vedere su oppure con una cosa del genere
class Computer{
private SchedaVideo sV;
private HD hD;
.........
.........
}
con il concetto di delagation.Questo però si esprime solitamente in UML come una aggregazione o composizione.
I metodi set e get si utilizzano per implementare l' importante regola dell' incapsulamento ovvero nascondere all' esterno i dettagli implementativi e proteggere le variabili da settaggi non consoni.
per il prof devono essere tutti oggetti, due dei quali facenti parti del terzo :confused:
nuovoUtente86
31-10-2007, 20:35
per il prof devono essere tutti oggetti, due dei quali facenti parti del terzo :confused:
ovvio che in Java siano oggetti Java è un linguaggio object oriented ma la gestione delle sottoclassi si basa sul principio di sostituibilità:un server è anche un computer,un hd o una scheda video non sono un computer
ovvio che in Java siano oggetti Java è un linguaggio object oriented ma la gestione delle sottoclassi si basa sul principio di sostituibilità:un server è anche un computer,un hd o una scheda video non sono un computer
Si il concetto mi è chiaro... sicuramente non è chiaro al prof, oppure si è spiegato malissimo oggi in classe...
Come posso far interagire questi tre oggetti in modo tale che HDD e SCHEDA_VIDEO siano "parte" dell'oggetto COMPUTER? Che codifica usare? E che costruttore per passare in una sola volta i valori di n variabili a tutti gli n attributi dei tre oggetti?
nuovoUtente86
31-10-2007, 20:43
puoi fare qualcosa del genere
class Computer{
//costruttore
public Computer(dati computer,dati hD,dati sV){
utilizzi i dati computer
Hd hd=new Hd(dati hd);
SV sV=new SV(dati sv);}
ovviamente dove ho scritto dati si intendono i paramentri utili per ogni oggetto.
puoi fare qualcosa del genere
class Computer{
//costruttore
public Computer(dati computer,dati hD,dati sV){
utilizzi i dati computer
Hd hd=new Hd(dati hd);
SV sV=new SV(dati sv);}
ovviamente dove ho scritto dati si intendono i paramentri utili per ogni oggetto.
ok grazie. appena ho +tempo provo il codice.
Grazie 1000!
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.