Avatar billede joergensh Nybegynder
12. juni 2005 - 16:07 Der er 10 kommentarer og
1 løsning

Fordel ved at bruge klassemoduler frem for standardmoduler?

Hej! Jeg skal snart til eksamen i datalogi, men kan ikke forstå, hvorfor det er nødvendigt at kunne oprette selvdefinerede objekter ved hjælp af klassemoduler. Kan man ikke lave biblioteker lige så godt ved at implementere standardmoduler i sit projekt?

Kort og godt: Hvad er fordelen ved at bruge klassemoduler og hvad kan de, hvis det skal siges på godt dansk? Hvad kunne man ikke lave, hvis klassemoduler ikke fandtes i VB?

(Bogen, som er opgivet, omhandler VB 4.0...så det er noget gammelt efterhånden)

Tak på forhånd og god sommerferie
Avatar billede arne_v Ekspert
12. juni 2005 - 16:36 #1
Det er vel forskellen på procedural programmering og objekt orienteret programmering.

Hvor der idag er nogenlunde enighed om at ved større projekter har OOP nogle
fordele.
Avatar billede sjh Nybegynder
12. juni 2005 - 16:50 #2
Ja.. med et Class Module kan du fx. lave en Event på din Form1

'-------------------------------- clsClass --------------------------------
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Event Status(intProcess As Integer)
Public Event Complete()

Public Sub Test()
Dim i As Integer
  For i = 0 To 100
    RaiseEvent Status(i)
    Sleep 250
    DoEvents
  Next
  RaiseEvent Complete
End Sub
'-------------------------------- clsClass --------------------------------

'-------------------------------- Form1 --------------------------------
Option Explicit

Private WithEvents objClass As clsClass

Private Sub Command1_Click()
  objClass.Test
End Sub

Private Sub Form_Load()
  Set objClass = New clsClass
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Set objClass = Nothing
End Sub

Private Sub objClass_Complete()
  MsgBox "Process er færtig."
End Sub

Private Sub objClass_Status(intProcess As Integer)
  Me.Caption = intProcess & "%"
End Sub
'-------------------------------- Form1 --------------------------------
Avatar billede sjh Nybegynder
12. juni 2005 - 16:58 #3
øh.. jeg ved ikke om VB4 kan bruge et Class Module.. ;)
Avatar billede joergensh Nybegynder
12. juni 2005 - 21:38 #4
Hej! Problemet er nok mest af alt, at jeg ikke er sikker på, hvordan jeg skal forklare hvad et klassemodul er, og præcis hvorfor det er fordelagtigt at bruge klassemoduler i nogle situationer.

Desuden er jeg i tvivl om hvad egenskabs-procedurer kan bruges til. Er det kun i forbindelse med klassemoduler, at man bruger egenskabsprocedurer som:

private property let/get navn()
.......
end property

Kan I også forklare mig hvordan man bruger let og get? Jeg ved, at let bruges når man sætter en egenskab, og get bruges, når man skal læse egenskaben, men kan I ikke uddybe det evt. med et eksempel?

så min spørgsmål er:

1. hvordan skal jeg forklare hvad et klassemodul er?
2. hvorfor er det fordelagtigt at bruge klassemoduler i nogle situationer?
3. hvad kan egenskabs-procedurer bruges til?
4. Er det kun i forbindelse med klassemoduler, at man bruger egenskabsprocedurer?
5. Hvordan bruges let/get i egenskabsprocedurerne?

Mange tak for hjælpen! Det er meget vigtigt!
Avatar billede spuncut Nybegynder
13. juni 2005 - 01:50 #5
1. Få fat i en vb6 -bog.
2. Moduler kan indeholde funktioner.
3. Et klassemodul er en "støbeform" til objekter.

Funktioner og Subroutiner er fine til ikke-sammenhængende procedurer.
Altså data ind og data ud uden nogen form for tilstands sammenhæng globalt.

Et objekt er rigtigt godt hvis du skal sætte en masse parametre op som skal
bevares for derefter at fyre en metode af for at starte selve behandlingen.

Et klassemodul kan forøvrigt kompileres til en dll eller ocx hvilket muliggør
at andre programmer kan benytte sig af modulets procedurer enda i flere instandser.
Avatar billede sjh Nybegynder
13. juni 2005 - 01:56 #6
private property (let eller set) /get navn()
Avatar billede sjh Nybegynder
13. juni 2005 - 07:37 #7
lidt property..

'------------------------- clsClass -------------------------
Option Explicit

Public Enum enuSetting2
        Ener = 1
        Toer = 2
        Firer = 4
        Otter = 8
End Enum

Private m_Setting1 As String
Private m_Setting2 As enuSetting2

Public Property Get Setting1() As String
  Setting1 = m_Setting1
End Property

Public Property Let Setting1(ByVal strValue As String)
  m_Setting1 = strValue
End Property

Public Property Get Setting2() As enuSetting2
  Setting2 = m_Setting2
End Property

Public Property Let Setting2(ByVal enuValue As enuSetting2)
  m_Setting2 = enuValue
End Property

Private Sub Class_Initialize()
  m_Setting1 = "noget"
  m_Setting2 = Toer
End Sub
'------------------------- clsClass -------------------------

'------------------------ Form1 ------------------------
Option Explicit

Private objClass As clsClass

Private Sub Command1_Click()
  MsgBox objClass.Setting1
  MsgBox objClass.Setting2
End Sub

Private Sub Form_Load()
  Set objClass = New clsClass
  objClass.Setting1 = "hej med dig"
  objClass.Setting2 = Toer
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Set objClass = Nothing
End Sub
'------------------------ Form1 ------------------------
Avatar billede martin_moth Mester
13. juni 2005 - 09:51 #8
Forskellen du spørger til er principielt forskellen på objektorienteret (OOP) og traditionel programmering (hvor objektorienteret er the-way-to-go)

Det er svært kort at fortælle om fordele ved OOP - det drejer sig basalt om en lidt anderledes måde at tænke på (at tænke i objekter, der hver lever deres eget liv, og som passer ind i det store hele). Men det ER smart - det vil du indse hvis du bruger noget tid på at læse i en bog om det. Der plejer man at kunne finde et eksempel på noget simpelt - f.eks. et kortspil, hvor hvert spillekort er et objekt, der har egenskaber som "farve" og "værdi", og events som "spilles ud", der afvikles når kortet spilles - hvis du finder et eksempel på et mindre program, vil du kunne se det geniale i OOP.

Et keyword om objektorienteret programmering er bl.a. "arv", og at man kan oprette en række instanser af samme objekt.
Avatar billede joergensh Nybegynder
13. juni 2005 - 10:59 #9
mange tak for hjælpen alle sammen. Jeg ved ikke med det der pointgivningssystem...har jeg ikke fundet ud af hvad er for noget. Men har jeg forstået det rigtigt, at der i:

Public Property Get Setting1() As String
  Setting1 = m_Setting1
End Property

så læser man simpelthen egenskaben med (objektnavn).setting1....så får man den værdi, der returneres i setting1 og den er sat til m_setting1, så det bliver m_setting1, der returneres?
Avatar billede martin_moth Mester
13. juni 2005 - 14:32 #10
ja - og m_ står sikkert for "member" - altså en variabel der kun lever i den kodestump... Nu er ovenstående meget simpel, men der kunne jo beregnes osv. på m_setting, før man satte setting = M_setting
Avatar billede joergensh Nybegynder
13. juni 2005 - 21:02 #11
tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester