Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Differenza tra classe e modulo

    Salve a tutti, so che per voi sarà una cosa stupida quella che vi chiedo ma a me invecefa una gran confusione tale da andare in tilt, ovvero ma che differenza c'è tra una Classe e un Modulo ??? e a che scopi potrebbero venir usati ???

    Sto studiando Visual Basic 2010 e nonostante studi su un libro e ricerchi su internet ancora questo concetto che sta alla base di tutto non mi è entrato( a dire la verità mi fa confusione quando penso e ora cosa devo usare ???)

    Da quello che ho capito finora il modulo diciamo è un contenitore di funzioni che si possono riutilizzare più volte e da tutto il progetto basta richiamarle...ma la classe a che mi dovrebbe servire ??

    Se riuscite a spiegarmelo con parole semplici e qualche esempio terra terra sono sicuro che capirò subito e potrò finalmente dire di aver capito tutto !!

    Vi pregooooo
    Non puoi prendere quello che non vedi.

  2. #2
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Ciao. Ti faccio un paragone con la cucina:
    Una classe è come una ricetta che spiega come fare una torta: essa contiene proprietà che, continuando con la nostra analogia, sono gli ingredienti neccessari per fare la torta, e contiene metodi, che in cucina sarebbero le varie procedure da fare (es. Prendi 300g di burro e mescolali allo zucchero). Quando crei un'istanza della classe ( Dim MyVar As NomeClasse ) è come se tu prendessi la ricetta e facessi la torta.

    Un modulo (e qui finisce il paragone con la cucina) è, come hai detto giustamente, contenitore di funzioni e procedure che si possono riutilizzare più volte e da tutto il progetto basta richiamarle. Infatti ogni metodo del modulo è implicitamente Shared ossia non vi è bisogno di un'istanza di classe per accedervi.

    Tuttavia anche un metodo di una classe può essere dichiarato Shared, come ad esempio il metodo .IsNullOrEmpty(String) della classe String. In questo caso, però, bisogna verificare che il metodo da noi dichiarato Shared non usi proprietà o altri cose che vengono inizializzate solo nel costruttore (ad esempio).

    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  3. #3
    Paragone semplice ed efficace....
    Sto incominciando a capire, però cosa, diciamo che se moduli ci semplificano la vita perchè ci eliminano il fatto di dover riscrivere molte volte lo stesso codice, la classe in che ci semplifica ??

    Ad esempio in un progetto dove dobbiamo connetterci su un db e da più form dobbiamo richiedere una insert un update un delete una select, usando i moduli avremo:
    sul Modulo

    codice:
    Imports MySql.Data.MySqlClient
    Module Connessioni
    
        Public conn As MySqlConnection
        Public trovato As MySqlDataReader
    
        Public Sub connessione()
            'mi connetto al DB
            conn = New MySqlConnection()
            conn.ConnectionString = "server=localhost; user id=root; password=dk745fw; database=prova"
            conn.Open()
        End Sub
    
        Public Sub insupdel(ByVal sql As String)
    
            Connessioni.connessione()
            Dim myCommand As MySqlCommand = New MySqlCommand(sql, conn)
    
            myCommand.ExecuteNonQuery()
            conn.Close()
    
    
        End Sub
    mentre sul form1 per fare l'insert basterà richiamare :

    codice:
    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            Connessioni.insupdel("INSERT INTO utente (nome) VALUES ('Nessuno')")
        End Sub
    che provvederà a inserire il nome nel database.

    e fino quì capisco l'utilità del modulo ma non riesco a capire ancora l'utilità della classe, riesci a farmi un esempio concreto come il mio !? ti sarei grato..già sei riuscito a farmi capire a cosa serve..
    Non puoi prendere quello che non vedi.

  4. #4
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Vedo che hai perfettamente capito il funzionamento del modulo.

    La classe, a differenza del modulo, non è pensata con lo scopo di base di essere un raccoglitore di funzioni, ma di rappresentare un oggetto.
    Ad esempio, se io dovessi fare un programma che fa da rubrica telefonica, creerei una classe Person che espone come proprietà Nome, Cognome, Numero di Telefono, Data di Nascita ecc. e come metodi TimeIsBorn ecc.
    codice:
    Class Person
      Private _Nome As String
      Private _Cognome As String
      'ecc.
      
      Public Property Nome as String
        Get
          Return Nome
        End Get
        Set(Byval Value As String)
          _Nome = Value
        End Set
      End Property
      'ecc.
    
      Public Function TimeIsBorn () As Integer
       'Corpo
      End Function
     
      Public Sub New(Byval Nome As String, Byval Cognome As String)
        _Nome = Nome
        _Cognome = Cognome
        'ecc.
      End Sub
    Così dal Main() mi basta fare così per aggiungiere una nuova persona.
    codice:
    Sub Main()
        Dim Pippo as New Person("Pippo", "Rossi")
        Dim Gianni as New Person("Gianni", "Verdi")
    End Sub
    e fare così per sapere da quanto vive.
    codice:
    Dim Time as Integer = Pippo.TimeIsBorn()
    Spero di essermi spiegato bene.
    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  5. #5
    si ti sei spiegato bene, l'unica cosa non capisco dove salvi ad esempio poi i nomi in quella classe !!?
    so che ti chiedo troppo ma vedo che sto incominciando a capire, se riesci mi potresti postare un piccolo codice completo in modo da capire meglio il meccanismo ? va bene anche questo della rubrica magari solo con nome cognome e anno di nascita.
    Non puoi prendere quello che non vedi.

  6. #6
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Originariamente inviato da r3dd3vil:
    l'unica cosa non capisco dove salvi ad esempio poi i nomi in quella classe !!?
    Non è che li salvo... Quando istanzio la classe con Dim viene creata nella memoria volatile del computer uno spazio riservato all'istanza della mia classe. Questo spazio a sua volta contiene lo spazio per il Nome, quello per il Cognome e così via. Alla fine del programma il Garbage Collector provvede a liberare la memoria del computer dalle mie istanze, quindi se io dovessi tener traccia dei valori inseriti dovrei salvari da qualche parte nel disco rigido (File di testo, Database, tramite il metodo della serializzazione, ecc.)

    Spero di aver capito quello che mi stavi chiedendo.

    Originariamente inviato da r3dd3vil:
    ...so che ti chiedo troppo...
    Non ti preoccupare, mi piace aiutare le persone.
    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  7. #7
    Eccoci quà appena sveglio subito a provare Classi e Moduli, vediamo se mi sto avvicinando a capire, possiamo dire che anche in definitiva la classe restituisce un valore ciò che il modulo non può fare ??

    Ho provato a fare un esempio di prova :

    Form1 (Main) :

    codice:
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim calcolaora As New Resto
    
            calcolaora.Pagante = TextBox1.Text
            calcolaora.HaPagato = TextBox2.Text
            Label4.Text = calcolaora.CalcolaResto
    
        End Sub
    Classe (Resto) :

    codice:
      Public Class Resto
        Private DaPagare As Double
        Private Pagato As Double
    
        Public Property Pagante() As Double
            Get
                Return DaPagare
            End Get
            Set(ByVal value As Double)
                DaPagare = value
            End Set
        End Property
    
        Public Property HaPagato() As Double
            Get
                Return Pagato
            End Get
            Set(ByVal value As Double)
                Pagato = value
    
            End Set
        End Property
    
        Public Function CalcolaResto()
            Dim calcolo As Double
            calcolo = HaPagato - DaPagare
            Return calcolo
    
        End Function
    End Class
    L'unica cosa è che tutto questo codice poteva essere sostituito con una semplice funzione di questo tipo (cambiando chiaramente la chiamata dal form):

    codice:
     Public Function CalcolaResto(byval HaPAgato as Double,byVal DaPagare as Double)
            Dim calcolo As Double
            calcolo = HaPagato - DaPagare
            Return calcolo
    
        End Function
    e il risultato praticamente era sempre lo stesso però con meno codice.....cosè che mi sfugge come concetto ???? (Per farmi capire puoi usare il mio codice così capisco meglio)
    Non puoi prendere quello che non vedi.

  8. #8
    Vediamo se ci sono arrivato....

    Mettiamo che io abbia un progetto di un gestionale di automobili quindi all'interno del progetto userò spesso la variabile automobile e le sue proprietà colore,chilometri,anno,data immatricolazione, misura pneumatici ecc.. anche se semplicemente devo prendere dati da un db e associarli a una variabile.... la classe potrebbe aiutarmi a non dover tutte le volte creare nuove variabili ma potrei usare sempre la classe Automobile semplicemente richiamando ad esempio Automobile.colore= oppure Automobile.chilometri= ecc.. giusto ?? ci sto arrivando al concetto??

    scusate se non uso la terminologia corretta pian piano mi entrerà anche quella !!
    Non puoi prendere quello che non vedi.

  9. #9
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Originariamente inviato da r3dd3vil
    Mettiamo che io abbia un progetto di un gestionale di automobili quindi all'interno del progetto userò spesso la variabile automobile e le sue proprietà colore,chilometri,anno,data immatricolazione, misura pneumatici ecc.. anche se semplicemente devo prendere dati da un db e associarli a una variabile.... la classe potrebbe aiutarmi a non dover tutte le volte creare nuove variabili ma potrei usare sempre la classe Automobile semplicemente richiamando ad esempio Automobile.colore= oppure Automobile.chilometri= ecc.. giusto ?? ci sto arrivando al concetto??
    Direi che ci siamo: ogni macchina sarà un'istanza della classe automobile e per ogni istanza ne riempirai le propriètà con dei dati diversi. Così, se hai due macchine, per tener conto del colore non dovrai più fare così
    codice:
    Sub Main()
      Dim ColoreAuto1 As Color = FromDatabase("ColoreAutoUno")
      Dim ColoreAuto2 As Color = FromDatabase("ColoreAutoDue")
      'FromDatabase è una routine immaginaria che si occupa di prendere i dati da un database.
      'Da quello che è passato per parametro capisci cosa viene restituito.
    End Sub
    ba bensì così:
    codice:
    Sub Main()
       'Qui facciamo finta che il costruttore della classe Auto inizializzi il colore.
       Dim Auto1 as New Auto(FromDatabase("ColoreAutoUno")
       Dim Auto2 As New Auto(FromDatabase("ColoreAutoDue")
       'E per ricavarne il valore basta usare la sintassi Auto1.Colore.
    End Sub
    Mi sembra che così sia molto più ordinato a livello logico: infatti invece che avere dieci variabili per ogni macchina sparse per tutto il codice hai una istanza che si riferisce alla macchina in questione e ti basta richiamarne le proprietà.

    Un altro esempio: i vari controlli che tu inserisci nei Form sono tutte istanze di classe che vengono automaticamente scritte dal designer dell'IDE.
    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  10. #10
    Ci sono grazie mille sei stato più esaustivo che un libro di 520 pagine ...
    Non puoi prendere quello che non vedi.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.