fbpx
Skip to main content
  1. SouldealeR
  2. Ingegneria Informatica - Triennale
  3. Venerdì, 24 Febbraio 2006
  4.  Subscribe via email
Qualcuno ha percaso qualche informazione su chi terrà il corso al quarto ciclo per quest'anno ? Magari qualcuno che ha avuto indiscrezioni da Pettorossi seguendo Automi oppue Cantone facendo l'appello fra poco...
Grazie.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Attento la metaclasse NON è nella maniera più assoluta la classe madre di una classe!!! La metaclasse se istanziata da luogo ad un "oggetto" di tipo classe.

Ciap
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
...oggetti (istanze di classi, livello 0), classi (livello 1) e Class (livello 2 solo parzialmente definito)... :wink:

riguardo ai meta-livelli:
la definizione recita: una (meta)*classe ha meta-livello pari al suo valore di “*” maggiorato di 1.
io la vedo cosi:
(meta)^2 classe --> meta-livello 3 (= meta meta classe)
(meta)^1 classe --> meta-livello 2 (= meta classe)
(meta)^0 classe --> meta-livello 1 (= classe)
(meta)^-1 classe --> meta-livello 0 (= oggetto)

slide L01-03 pag 15: una (meta)*classe (meta)* Istanzia (o Crea o
Costruisci) con risultato del tipo:
• (meta)*-1 classe, per *>0,
• un oggetto per *=0
quindi una (meta)^0 classe istanzierà un oggetto

perche parlate di class e classe ?
secondo me class è una (meta)^0 classe di meta-livello1
chiaritemi il dubbio x favor
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Attento la metaclasse NON è nella maniera più assoluta la classe madre di una classe!!! La metaclasse se istanziata da luogo ad un "oggetto" di tipo classe.

Ciap


Oddio!!! :shock:

Potresti farmi un esempio per favore,
ti giuro, non ci ho capito niente :lol:

La classe madre di una classe, è chiamata superclasse, confermi?

Inoltre, che cos'è un oggetto di tipo classe?

Grazie 8)
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
COMPOSIZIONE

public class X
{
public X()
{
ogg1 Y = new ogg1();
ogg2 Z new ogg2();
}
...
}


AGGREGAZIONE
public class X
{
public X(ogg1 a, ogg2 b)
{
ogg1 Y = a;
ogg2 Z = b;
}
...
}

Sei sicuro?Fonte?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
...oggetti (istanze di classi, livello 0), classi (livello 1) e Class (livello 2 solo parzialmente definito)... :wink:


riguardo ai meta-livelli:
la definizione recita: una (meta)*classe ha meta-livello pari al suo valore di “*” maggiorato di 1.
io la vedo cosi:
(meta)^2 classe --> meta-livello 3 (= meta meta classe)
(meta)^1 classe --> meta-livello 2 (= meta classe)
(meta)^0 classe --> meta-livello 1 (= classe)
(meta)^-1 classe --> meta-livello 0 (= oggetto)

slide L01-03 pag 15: una (meta)*classe (meta)* Istanzia (o Crea o
Costruisci) con risultato del tipo:
• (meta)*-1 classe, per *>0,
• un oggetto per *=0
quindi una (meta)^0 classe istanzierà un oggetto

perche parlate di class e classe ?

secondo me class è una (meta)^0 classe di meta-livello1
chiaritemi il dubbio x favor


Da come ho capito io (numero 2 - sottotitolo: "Cerchiamo un senso a tutto questo";):
Lo "star", "*", numero all'esponente di (meta), indica ANCHE il numero di volte che va letta la parola meta...
Forse ora ha un significato... Cioè...
Una meta-meta-meta-classe è uguale a una (meta)^(3) classe... Con livello 2...
Una meta-meta-classe è uguale a una (meta)^(2) classe... Con livello 3...
Una meta-classe è uguale a una (meta)^(1) classe... Con livello 2... (Class di Java)...
Una classe è uguale a una (meta)^(0) classe... Con livello 1... (class in Java)...
Un oggetto è uguale a una (meta)^(-1) classe... Con livello 0... Non più istanziabile...

P.S. = in Java c'è differenza tra Class e class... ;)
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Una meta-meta-meta-classe è uguale a una (meta)^(3) classe... Con livello 4...
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Ragazzi ma che c'é da sapere sulla Metamorfosi? Le slides dicono 2 cavolate! :roll:
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
P.S. = in Java c'è differenza tra Class e class... ;)

ok perfetto..era questo che mi sfuggiva
thx
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Mettiamoco d'accordo:
La composizione è questa??:

public class X
{
public X()
{
Y ogg1 = new Y();
Z ogg2 = new Z();
}
...
}


OPPURE questa?:

public class A {
public void fun1() { ... }
public void fun2() { ... }
public void fun3() { ... }
}


Supponiamo che a te interessino i metodi fun1 e fun2, ereditando da A
erediteresti tutti e tre i metodi facendoti carico anche del servizio
fun3 (che magari non vuoi), allora sarebbe meglio fare


public class B {
private A a;
public void fun1() { a.fun1(); }
public void fun2() { a.fun2(); }
}


Mettemoce daccordo na colta pe sempre!!!L'esame è domani!!!!!!
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
COMPOSIZIONE

public class X
{
public X()
{
ogg1 Y = new ogg1();
ogg2 Z =new ogg2();
}
...
}


AGGREGAZIONE
public class X
{
public X(ogg1 a, ogg2 b)
{
ogg1 Y = a;
ogg2 Z = b;
}
...
}

Sei sicuro?Fonte?


ABBI FEDE :D

no scherzo cmq in composizione gli aggregati sono legati alla vista dell'aggregatore

viceversa per l'aggregazione (aggregazione by ref)
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
un po di codice per spiegare le metaclassi come lo vedete?

io capisco solo così

cmq questa è la mia interpretazione per la metamorfosi

class animaleStagno {

public animaleStagno() {born();};

public void respira(){
giornidivita +=1;

if (giornidivita==10)
evolve();
};

private int giornidivita = 0;

public Classification classificazione;

private void born() {

classificazione = new classificationGirino();
};

private void evolve() {

//destroy(classificazione);
classificazione = new classificationRana();

};

public String cosasono() {

return classificazione.getClass().getName();

};

}



abstract class Classification {

public void nuota() {};
public void gracida(){};

}

class classificationGirino extends Classification {

public void nuota(){System.out.println("nuota";);};

}

class classificationRana extends Classification {

public void gracida(){System.out.println("cra cra";);};

}



class gestore {

public static void main(String args[])
{

animaleStagno myanim = new animaleStagno();


boolean inCycle = true;
int ich;

while (inCycle)
{
myanim.respira();
myanim.classificazione.nuota();


try
{
System.out.println("Prosegui (qualsiasi tasto) - Uscita (u)";);
ich = System.in.read();
System.in.read(); //pulisco il buffer

if(ich==117)
{
inCycle=false;
}
}
catch(Exception e){};

}

myanim.classificazione.gracida();



System.out.println(myanim.cosasono());
};

}


se non uscite prima di 10 giri riesce a gracidare
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
se non uscite prima di 10 giri riesce a gracidare


Non so cosa siano try, catch, Exception... :oops:
E poi... Non so se può andare bene definire un metodo gracida nella classe madre...
Così anche il Girino lo possiede, anche se in pratica non fa nulla... Boh...
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
majolica credo abbia dato la giusta interpretazione, almeno dalla letta veloce del codice. Stavo postando un esempio simile fatto con la classe Studente. Cerco di spiegare la metamorfosi, ditemi che ne pensate.
Grazie alla metamorfosi è possibile "mutare un oggetto", visto che questo non è previsto in java si usa un metodo alternativo. I metodi e i campi comuni si mettono nella stessa classe, poi si crea una classe che sarà la madre di tutti i comportamenti diversi che può assumere la classe principale. Mi spiego meglio: nel caso del girino e della rana la classe principale sarà, come ha suggerito majolica, AnimaleStagno. Questa classe deve contenerre campi e metodi comuni sia a girino che a rana, come ad esempio nuota().
Poi creo la classe madre dei diversi comportamenti e la definisco ad esempio "TipiAnimaleStagno". In questa classe devo definire tutti i metodi dei diversi comportamenti. Poi bisogna creare le classi figlie, in questo caso Rana e Girino, poi si fa l'override dei metodi. In pratica in TipiAnimaleStagno definisco i metodi respiraBranchiale() e gracida(), in Rana overrido gracida() ed in girino overrido respireBranchiale().
Ora non resta altro che inserire nella classe AnimaleStagno un campo di tipo TipiAnimaleStagno e dichiarare, a seconda di quello che serve, una new Rana o una new Girino usando come riferimento la variabile di tipo TipiAnimaleStagno. L'esempio di majolica è molto ben fatto nella parte in cui fa nascere ed evolvere il girino.

In questo modo è possibile cambiare quando si vuole alcuni comportamenti SENZA usare un nuovo oggetto!!!

Ciap
Comment
There are no comments made yet.
Accepted Answer Pending Moderation

E poi... Non so se può andare bene definire un metodo gracida nella classe madre...
Così anche il Girino lo possiede, anche se in pratica non fa nulla... Boh...


lo so ma non mi viene in mente una soluzione a questo problema, se lo levo dalla madre non potrò mai usarlo
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
majolica credo abbia dato la giusta interpretazione, almeno dalla letta veloce del codice. Stavo postando un esempio simile fatto con la classe Studente. Cerco di spiegare la metamorfosi, ditemi che ne pensate.
Grazie alla metamorfosi è possibile "mutare un oggetto", visto che questo non è previsto in java si usa un metodo alternativo. I metodi e i campi comuni si mettono nella stessa classe, poi si crea una classe che sarà la madre di tutti i comportamenti diversi che può assumere la classe principale. Mi spiego meglio: nel caso del girino e della rana la classe principale sarà, come ha suggerito majolica, AnimaleStagno. Questa classe deve contenerre campi e metodi comuni sia a girino che a rana, come ad esempio nuota().
Poi creo la classe madre dei diversi comportamenti e la definisco ad esempio "TipiAnimaleStagno". In questa classe devo definire tutti i metodi dei diversi comportamenti. Poi bisogna creare le classi figlie, in questo caso Rana e Girino, poi si fa l'override dei metodi. In pratica in TipiAnimaleStagno definisco i metodi respiraBranchiale() e gracida(), in Rana overrido gracida() ed in girino overrido respireBranchiale().
Ora non resta altro che inserire nella classe AnimaleStagno un campo di tipo TipiAnimaleStagno e dichiarare, a seconda di quello che serve, una new Rana o una new Girino usando come riferimento la variabile di tipo TipiAnimaleStagno. L'esempio di majolica è molto ben fatto nella parte in cui fa nascere ed evolvere il girino.

In questo modo è possibile cambiare quando si vuole alcuni comportamenti SENZA usare un nuovo oggetto!!!

Ciap

grazie caro :oops:
cmq resta la fregatura della disponibilità dei metodi
prova a vedere l'esempio bambino->ragazzo
lui vorrebbe un'attivazione del metodo dopo l'evoluzione

non saprei come fare e comunque io per costruire quello che ho fatto mi sono basato sulla struttura uml fornita sulle slide del prof ;)
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
majolica credo abbia dato la giusta interpretazione, almeno dalla letta veloce del codice. Stavo postando un esempio simile fatto con la classe Studente. Cerco di spiegare la metamorfosi, ditemi che ne pensate.
Grazie alla metamorfosi è possibile "mutare un oggetto", visto che questo non è previsto in java si usa un metodo alternativo. I metodi e i campi comuni si mettono nella stessa classe, poi si crea una classe che sarà la madre di tutti i comportamenti diversi che può assumere la classe principale. Mi spiego meglio: nel caso del girino e della rana la classe principale sarà, come ha suggerito majolica, AnimaleStagno. Questa classe deve contenerre campi e metodi comuni sia a girino che a rana, come ad esempio nuota().
Poi creo la classe madre dei diversi comportamenti e la definisco ad esempio "TipiAnimaleStagno". In questa classe devo definire tutti i metodi dei diversi comportamenti. Poi bisogna creare le classi figlie, in questo caso Rana e Girino, poi si fa l'override dei metodi. In pratica in TipiAnimaleStagno definisco i metodi respiraBranchiale() e gracida(), in Rana overrido gracida() ed in girino overrido respireBranchiale().
Ora non resta altro che inserire nella classe AnimaleStagno un campo di tipo TipiAnimaleStagno e dichiarare, a seconda di quello che serve, una new Rana o una new Girino usando come riferimento la variabile di tipo TipiAnimaleStagno. L'esempio di majolica è molto ben fatto nella parte in cui fa nascere ed evolvere il girino.

In questo modo è possibile cambiare quando si vuole alcuni comportamenti SENZA usare un nuovo oggetto!!!

Ciap

Una cosa del genere?
class AnimaleStagno {
AnimaleStagno(){ Tipo T=new Tipo();}
Public void nuota(){};
}

class Tipo{
public void respirabranchiale(){};
public void cammina(){};
public void gracchia(){};
}

class Girino extends Tipo{
public void respira branchiale(){};
}

class Rana extends Tipo{
public void cammina(){};
public void gracchia(){};
}
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Ho fatto il compito del bambino ragazzo:

package metamorfosipersona;


public class Persona {
private int anni;
private Classificazione classificazione;

public Persona() {
this.nasci();
}

public void nasci(){
classificazione = new Bambino();
}
public void giornoDiCompleanno(){
System.out.println("Tanti auguri!!! Ora hai "+(++anni)+" anni!!!";);
if (anni==14){
System.out.println("Ora sei un ragazzo!!!";);
this.diventaRagazzo();
}
}
public void diventaRagazzo(){
classificazione = new Ragazzo();
}
public int getAnni(){return anni;}

public void quantiAnniHai() {
System.out.println("Ho "+this.getAnni()+" anni";);
}
public void compraMotorino(){
classificazione.compraMotorino();
}
public void gatHaiMotorino(){
classificazione.getHaiMotorino();
}
public void parla(){
classificazione.parla();
}

}

FINE CLASSE PERSONA

package metamorfosipersona;


abstract public class Classificazione {
public void getHaiMotorino(){System.out.println("Non sei un ragazzo";);}
public void compraMotorino(){System.out.println("Non sei un ragazzo!!!";);}
public void parla(){}
/** Creates a new instance of Classificazione */
public Classificazione() {
}

}


FINE CLASSE CLASSIFICAZIONE

package metamorfosipersona;

public class Bambino extends Classificazione{
public void parla(){
System.out.println("Sono un bambino";);
}
public Bambino() {
}

}

FINE CLASSE BAMBINO

package metamorfosipersona;

public class Ragazzo extends Classificazione{
boolean haiMotorino=false;
public void getHaiMotorino(){
if (haiMotorino==false){
System.out.println("Non hai il motorino";);
}
else System.out.println("Hai il motorino";);
}
public void compraMotorino(){
if (haiMotorino==false){
haiMotorino=true;
System.out.println("Hai comprato un motorino";);
}
else System.out.println("Hai già un motorino!!!";);

}
public void parla(){
System.out.println("Sono un ragazzo";);
}

public Ragazzo() {
}

}


FINE CLASSE RAGAZZO

package metamorfosipersona;

public class SimulaVita {


public static void main(String[] args) {

Persona persona = new Persona();
for (int i=0; i<20;i++){
persona.quantiAnniHai();
persona.giornoDiCompleanno();
if(persona.getAnni()==10){
System.out.println("Eseguo un test, provo a comprare un motorino";);
persona.compraMotorino();
}
if(persona.getAnni()==15){
System.out.println("Eseguo un test, provo a comprare un motorino";);
persona.compraMotorino();
}
if(persona.getAnni()==18){
System.out.println("Eseguo un test, provo a comprare un motorino";);
persona.compraMotorino();
}
if(persona.getAnni()==3){
persona.parla();
}
if(persona.getAnni()==17){
persona.parla();
}

}

}

}

FINE CLASSE SIMULAVITA

Il programma compila perfettamente
Comment
There are no comments made yet.
Accepted Answer Pending Moderation

E poi... Non so se può andare bene definire un metodo gracida nella classe madre...
Così anche il Girino lo possiede, anche se in pratica non fa nulla... Boh...


lo so ma non mi viene in mente una soluzione a questo problema, se lo levo dalla madre non potrò mai usarlo


Infatti quella da te postata era anche l'idea di un amico...
Che voleva a tutti i costi impiegare il poliformismo (perché è di questo che si tratta, no?!?)...
Secondo me comunque non ha molto senso chiamare un metodo gracida su un generico Animale...
Se si vogliono seguire le "lezioni" di Cantone... La classe madre deve possedere i metodi comuni delle sue figlie...
A 'sto punto... Tanto per mantenere una correttezza formale...
Si potrebbe rinominare il metodo gracida in fai_verso, o qualcosa di più generale...
Specializzandolo poi in System.out.println("CRAAA CRAAA";) etc... Boh...
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Questo è l'output del programma:

Ho 0 anni
Tanti auguri!!! Ora hai 1 anni!!!
Ho 1 anni
Tanti auguri!!! Ora hai 2 anni!!!
Ho 2 anni
Tanti auguri!!! Ora hai 3 anni!!!
Sono un bambino
Ho 3 anni
Tanti auguri!!! Ora hai 4 anni!!!
Ho 4 anni
Tanti auguri!!! Ora hai 5 anni!!!
Ho 5 anni
Tanti auguri!!! Ora hai 6 anni!!!
Ho 6 anni
Tanti auguri!!! Ora hai 7 anni!!!
Ho 7 anni
Tanti auguri!!! Ora hai 8 anni!!!
Ho 8 anni
Tanti auguri!!! Ora hai 9 anni!!!
Ho 9 anni
Tanti auguri!!! Ora hai 10 anni!!!
Eseguo un test, provo a comprare un motorino
Non sei un ragazzo!!!
Ho 10 anni
Tanti auguri!!! Ora hai 11 anni!!!
Ho 11 anni
Tanti auguri!!! Ora hai 12 anni!!!
Ho 12 anni
Tanti auguri!!! Ora hai 13 anni!!!
Ho 13 anni
Tanti auguri!!! Ora hai 14 anni!!!
Ora sei un ragazzo!!!
Ho 14 anni
Tanti auguri!!! Ora hai 15 anni!!!
Eseguo un test, provo a comprare un motorino
Hai comprato un motorino
Ho 15 anni
Tanti auguri!!! Ora hai 16 anni!!!
Ho 16 anni
Tanti auguri!!! Ora hai 17 anni!!!
Sono un ragazzo
Ho 17 anni
Tanti auguri!!! Ora hai 18 anni!!!
Eseguo un test, provo a comprare un motorino
Hai già un motorino!!!
Ho 18 anni
Tanti auguri!!! Ora hai 19 anni!!!
Ho 19 anni
Tanti auguri!!! Ora hai 20 anni!!!





Praticamente il programma fa crescere la persona da 0 a 20 anni ed ogni tanto chiama dei metodi per vedere se funziona tutto bene.
Non puoi comprare un motorino sotto ai 14 anni e non puoi averne più di uno

Ciap
Comment
There are no comments made yet.
Accepted Answer Pending Moderation


ABBI FEDE :D

no scherzo cmq in composizione gli aggregati sono legati alla vista dell'aggregatore

viceversa per l'aggregazione (aggregazione by ref)


:?: :?: :?: :?: :?: :?: :?: :?:
ma che vuol dire questa frase!!!!!???????????????????????
Comment
There are no comments made yet.


There are no replies made for this post yet.
Be one of the first to reply to this post!