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
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.
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 --------------------------------
øh.. jeg ved ikke om VB4 kan bruge et Class Module.. ;)
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!
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.
private property (let eller set) /get navn()
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 ------------------------
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.
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?
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
13. juni 2005 - 21:02
#11
tak for hjælpen!
Kurser inden for grundlæggende programmering