Newsgroup: it.comp.java
Titolo: Quale soluzione utilizzare

Ciao a tutti, sono alle prese con un problema architetturale, ma prima
di buttarmi sulla prima soluzione che mi è venuta a mente volevo
chiedervi qualche consiglio in merito.
Il mio problema è il seguente:
Supponiamo di avere la classe Table che al suo interno ha un insieme
di oggetti di tipo record.
class Table
{
      Record[] records;
}
il singolo record ha la struttura seguente :
class Record
{
    int id;
    Object type;
}
type puo' essere :
java.math.BigInteger
java.lang.Float
java.lang.Double
java.net.InetAddress
java.lang.String
java.util.Timestamp
array of bytes
Descritte le classi principali, supponiamo di avere uno stream di
oggetti di tipo Table.
e un insieme di regole di filtraggio/aggregazione del tipo:
"Applica al record con id="100" la funzione MIN "
che devono essere applicate ad ogni elemento di questo stream.
Detto questo, avrei quindi la necessità di avere un metodo MIN per
ogni tipo contenuto in un record. Ad 'esempio:
BigInteger Min(BigInteger a, BigInteger b);
Float Min (Float a, Float b);
String Min (string a, string b);
ecc....
Uno dei requisiti della libreria che sto scrivendo è che possano
essere aggiunte dinamicamente delle nuovi funzioni tipo MIN..
Quindi la prima soluzione che mi è venuta in mente, è quella  di usare
la reflection per ispezionare a run time tutte le classi in cui è
definiito un metodo MIN, cercando quello con i parametri di tipo
corretto..
Che ne pensate?


la butto li', ma se a tutti questi oggetti fai implementare una tua
interfaccia, diciamo ObjectTypeInterface che richieda
l'implementazione del metodo MIN ? cosi' si arrangia l'oggetto ad
invocare il MIN corretto..
spero tanto di non aver detto una castroneria

il 25/10/2008 11.50, Scrive orsacchiotto.stupidotto 44595808:

Dovrebbe mettere il metodo MIN direttamente nella classe Record, poiche' 
se alcune classi le puo' estendere, come java.sql.Timestamp (e non 
java.util.Timestamp, direi) per cui sarebbe possibile
class RecordTimestamp
	extends java.sql.Timestamp
	implements ObjectTypeInterface {
per altre classi definite final, come String ad esempio, non lo puoi fare.
E poi probabilmente deve confrontare degli oggetti che non sanno nulla 
dell'interfaccia ObjectTypeInterface, per cui lo sforzo sarebbe vano.
Inoltre c'e' il requisito di aggiungere dinamicamente altri metodi e qui 
non so proprio come se la cavera'.
-- 
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherAñejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers vão à merda
Spamers iros a la mierda/Spamers allez vous faire foutre/Spammers loop
schijten/Spammers macht Euch vom Acker/Spamerzy wypierdalac'

On 25 Ott, 14:29, "Dr.UgoGagliardelli"

Grazie ad entrambi per le risposte.
La soluzione di inserire la funzione MIN all'interno della classe
record non'e' attuabile, almeno nel mio caso perchè le 2 cose devono
essere disaccoppiate. Come dicevo prima, posso avere tante funzioni
come ad 'esempio MIN, MAX, AVG, CALCOLA_METRICAX, CALCOLA_METRICA_Y,
ecc.. e staticamente non so quale di queste funzioni potro' applicare
al record.
L'idea è quella di avere una libreria generale, che applichi delle
funzioni di selezione/aggregazione  ai record di un oggetto di tipo
Table.
Queste funzioni devono essere fornite dall'utilizzatore della
libreria, magari specificando in un file xml le regole di selezione/
aggregazione di cui parlavo nel mio primo post e le rispettive
funzioni.
Quindi la mia libreria dovrebbe in un certo modo capire dal file xml
quale funzione chiamare, e attraverso un "qualche meccanismo" chiamare
il metodo che implementa la funzione corretta.
Io pensavo che questo meccanismo poteva essere ad esempio quello di
definire una classe per ogni funzione.
Ad'esempio una classe MIN.
All'interno di questa classe ho i metodi MIN che operano sui tipi
specifici, quindi un MIN che opera sui Byte, uno sulle stringhe,
ecc...
Il problema è che non posso fare l'overload di questo metodo, perchè
ogni versione differente del metodo MIN restituisce un tipo diverso,
quindi dovrei avere un metodo MIN_String, uno MIN_Byte, ecc.ecc..
L'utilizzatore della libreria dovrà fornire la classe MIN, cosi' come
tutte quelle classi per cui è definita una funzione.
Che vi pare quest'altra soluzione?

On 25 Ott, 11:50, "orsacchiotto.stupidotto"


On 25 Ott, 13:29, "Dr.UgoGagliardelli"

q