Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Suggerimenti per organizzazione in Classi
Forum - C# / VB.NET - [VB.NET] Suggerimenti per organizzazione in Classi

Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 15:47
Sabato, 30/07/2011
Ciao a tutti! Almeno a quelli che non sono già in vacanza 8-)...
Da poco ho iniziato a studiare VB.NET e sono davvero colpito dalla complessità e dalla vastità che il mondo OOP offre: difatti mi sono perso.
Venendo al dunque, devo realizzare una piccola App che memorizza una serie di stringhe, che tramite una codifica particolare riportano una serie di dati. Inserite un numero variabile di stringhe, 20-30, il programma dovrebbe analizzarle e fare una serie di conteggi e calcolare altre variabili, da presentare poi in un report.
La mia domanda riguarda in generale come organizzare al meglio il materiale in classi per sfruttare al meglio vb.net.
Esempio di stringa
Wo AA.BB.CC Zz,Xx,Yy AB2
La stringa si compone di un numero variabile di elementi, separati da "spazi", quindi avrei -1elem = "Wo" -2elem="AA,BB,CC" -3elem= "Zz,Xx,Yy" ecc.
Devo analizzare nel dettaglio ad esempio il 2elem, che diventa composto da "AA", "BB", "CC". (substring del 2 elemento, separate dalla virgola)
A livello di classi, pensavo di fare una classe List che contiene tutte le stringhe, una classe Stringa che rappresenta la singola risposta (composta della varie parti della stringa) e una classe elemento che è tipo "AA" o "BB".
Quindi avrei Protocollo come list(stringhe) e stringa come fatta  da + elementi.
A livello di organizzazione, ogni stringa è indipendente mentre devo controllare gli elementi che compongo la stringa, per fare si che ad esempio non venga inserito 2 volte "AA".. oppure, ci sono altre regole che dicono che se inserisco "AA" poi non posso inserire anche "DD". Oppure verificare che se ho il 1°elemento devo avere anche un 4° elemento presente della stringa.
Il problema è dunque, come organizzo la classe stringa? Dove metto i metodi che verificano la correttezza dei dati inseriti? Ha senso creare una classe "elemento" e poi nella classe stringa dichiare elem2 as list(of Elemento2) :-|:-|
Spero di essere stato chiaro.. Se avete consigli postate pure anche del codice.:k:
Grazie mille!

Ultima modifica effettuata da Renny il 30/07/2011 alle 15:54


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
2
Down
V
Segnala al moderatore
Postato alle 21:28
Martedì, 02/08/2011
La soluzione che hai pensato è abbastanza buona. Tuttavia ti consiglio alcune modifiche. L'unità più piccola che dovresti modellizzare è la stringa (quella separata da spazi), ma non le sue componenti. Il motivo è che la correttezza o meno della singola stringa dipende da tutte le sue componenti, quindi è inutile creare una classe per contenere tali componenti se non puoi esporre funzionalità significative per queste ultime. Avresti quindi:
CodeCollection -> List(Of Code) : la lista
Code -> List(Of String) : la stringa, formata dalle sue componenti
Ho cambiato i nomi per evitare confusione con i tipi simili List e String.
Ora dovresti implementare in Code dei metodi per verificarne la correttezza. La correttezza della lista sarà dipendente dalla correttezza dei suoi elementi. Ti suggerisco di pensare a un modo per definire un insieme di regole che le componenti di Code debbano rispettare e creare infine un solo metodo che testi se una data lista di regole sintattiche siano o meno soddisfatte da quell'istanza.

Si tratta, in sostanza, di implementare un parser di regole per la validazione della stringa. Direi che è un progetto interessante.

Ciao Totem. Ci sto lavorando e mi rendo conto che hai ragione. Conviene creare una classe "elemento" (parte della stringa) formato tipo "AA,BB,CC" e lo passo col metodo New alla classe Element. A questo punto con split divido la stringa e verifico la correttezza di ogni singolo pezzo ("AA" o "BB"). - Renny - 03/08/11 11:24
E avendo tutti i componenti di elemento nella classe posso fare confronti anche tra di loro.. Esempio: se ho "AA" verifico che l'utente non l'abbia messo 2 volte e che per regola "AA" mi escude "DD", altrimenti messaggio di errore. Ma come faccio io a postare il codice che sto facendo??? - Renny - 03/08/11 11:28
Rileggendo meglio la tua risposta mi è venuto in mente che devo anche fare una parte controlli anche sulla stringa in generale, cioè nel rapporto tra gli elementi che la compongono. Per fare un esempio concreto, se uso l'articolo "LA" mi aspetto un nome di genere femminile.. "LA STRINGA". - Renny - 03/08/11 11:49
Non avevi detto che si trattasse di un parser di linguaggio naturale. Così è molto più complicato... - Il Totem - 04/08/11 10:43
No no, è un parser di un linguaggio codificato.. E' una codifica fatta con un numero finito di abbreviazioni.. saranno 50, circa. Devo verificare che siano scritte correttamente (AA è ok, ma AB è sbagliao), che nn siano inserite 2 volte +altre regole tra gli elementi della stringa nella sua globalit - Renny - 04/08/11 13:33
Potresti codificare queste regole, almeno in parte, con delle espressioni regolari. - Il Totem - 05/08/11 11:36
Sto già lavorando con le espressioni regolari per spezzare la stringa (che l'utente inserisce) nei suoi vari elementi. Dopo di che istanzio la classe Elemento e passo il singolo pezzo di stringa alla classe con New e all'interno della classe faccio il lavoro di analisi della correttezza... - Renny - 05/08/11 17:09
Magari lavoro un altro po' e poi posto il codice delle classi, così mi date qualche dritta su qual'è la best pratice ;). Per le espressioni regolari vi segnalo questo software gratuito, davvero ben fatto (a mio modesto avviso..) http://www.ultrapico.com/Expresso.htm - Renny - 05/08/11 17:10
Ma è ancora free? Mi sembrava di ricordare che fosse diventato solo trialware qualche tempo fa - Il Totem - 06/08/11 10:49
Si, è free. O meglio, è trial 60 gg ma la registrazione è gratuita, il codice arriva in 10 secondi... :) - Renny - 06/08/11 12:15


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
Ale96 (Member)
Pro


Messaggi: 132
Iscritto: 06/04/2010

Up
-1
Down
V
Segnala al moderatore
Postato alle 11:13
Domenica, 31/07/2011
Perchè devi creare una nuova classe che rappresenta una lista di stringe invece di usare un array?
La classe string presenta il metodo split che divide una stringa ogni volta che incontra un dato carattere e restituisce un array di stringhe su cui puoi lavorare.

CIAO.. Grazie per la risposta.. - Renny - 01/08/11 22:58
So che con split si può dividere le stringhe.. difatti la mia idea è spezzare l'elemento "AA.BB.CC" in AA e BB tramite string.split. Volevo comunque definire l'elemento AA con una classe a sè così da poter mettere dei metodi che mi verificano la correttezza dei AA, nell'ipotesi che l'utente scriveZZ - Renny - 01/08/11 23:00
Se vuoi lavorare con le classi ci sono vari modi per organizzarle, la soluzione più semplice è definire dei metodi di controllo (e/o inserimento nuovi dati) all'interno della classe che deve contenere gli elementi. - Ale96 - 02/08/11 10:08


Qualunque bug sufficientemente avanzato è indistinguibile da una caratteristica del software.

Ci sono 10 tipi di persone al mondo: chi capisce il codice binario e chi no.

I veri utenti non usano mai la funzione “Help”.
(tutti anonimi)
PM