Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

VB, Grundkurs i objektorientering OOP # 2

Postad 2001-03-08 av Peter Holm i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 3298, Betyg: 0%

Förord

Hej igen. Här kommer fortsättningen i OOP-kursen på PelleSoft. Jag har tidigare skrivit att jag kommer visa hur man bygger en klocka på ett objektorienterat sätt. Men jag tycker att det först är lämpligt att lägga in en snabblektion om sammansatta objekt, eller så kallade aggregat.
Innehåll
  » Lektion 5. Aggregat
  » Var denna artikeln användbar?


Lektion 5. Aggregat

I OOP (Objekt Orienterad Programmering) använder man sig ibland av aggregat eller samansatta objekt. Ett exempel på ett aggregat är objektet bil, som i sin tur består av objekten hjul, ratt, motor o.s.v. Motor i sig är ju också ett aggregat som bland annat består av objekten förgasare, tändstift fördelare o.s.v.

Jag skall med ett kodexempel demonstrera konceptet aggregat. Vi tar den klassiska bilen. Men för att inte komplicera till det begränsar jag antalet klasser väldigt mycket. Gör följande:

Starta ett nytt VB-projekt och lägg till en form. Lägg in en Command1 och klipp och klistra in ytterligare 12 knappar. Svara ja på frågan om du vill ha en array av knappar. Lägg till följande classmoduler:
clsBil, clsGasPedal, clsBromsPedal, clsMotor, clsHjul, clsRatt, clsVäxelLåda.


Form1

Option Explicit
Private bil As New clsBil

Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0: bil.motorPå
Case 1: bil.motorAv
Case 2: bil.växlaBack
Case 3: bil.växlaFriläge
Case 4: bil.växlaEttan
Case 5: bil.växlaTvåan
Case 6: bil.växlaTrean
Case 7: bil.växlaFyran
Case 8: bil.svängVänster
Case 9: bil.svängHöger
Case 10: bil.svängRakt
Case 11: bil.gasa
Case 12: bil.bromsa
End Select
End Sub

Private Sub Form_Load()
Dim i As Integer
For i = 0 To Command1.Count - 1
Command1(i).Left = 90
Command1(i).Top = 90 + (i * Command1(i).Height)
Next i
Command1(0).Caption = "Starta Motor"
Command1(1).Caption = "Stoppa Motor"
Command1(2).Caption = "Lägg i Backen"
Command1(3).Caption = "Lägg i Friläge"
Command1(4).Caption = "Lägg i Ettan"
Command1(5).Caption = "Lägg i Tvåan"
Command1(6).Caption = "Lägg i Trean"
Command1(7).Caption = "Lägg i Fyran"
Command1(8).Caption = "Sväng Vänster"
Command1(9).Caption = "Sväng Höger"
Command1(10).Caption = "Rakt Fram"
Command1(11).Caption = "Gasa"
Command1(12).Caption = "Bromsa"
End Sub


Och nu till klasserna:


clsBil
Option Explicit

Private mvarclsGaspedal As clsGaspedal
Private mvarclsBromsPedal As clsBromsPedal
Private mvarclsMotor As clsMotor
Private mvarclsHjul As clsHjul
Private mvarclsRatt As clsRatt
Private mvarclsVäxellåda As clsVäxellåda


Public Property Get clsVäxellåda() As clsVäxellåda
Set clsVäxellåda = mvarclsVäxellåda
End Property


Public Property Set clsVäxellåda(vData As clsVäxellåda)
Set mvarclsVäxellåda = vData
End Property


Public Property Get clsRatt() As clsRatt
Set clsRatt = mvarclsRatt
End Property

Public Property Set clsRatt(vData As clsRatt)
Set mvarclsRatt = vData
End Property

Public Property Get clsHjul() As clsHjul
Set clsHjul = mvarclsHjul
End Property

Public Property Set clsHjul(vData As clsHjul)
Set mvarclsHjul = vData
End Property

Public Property Get clsMotor() As clsMotor
Set clsMotor = mvarclsMotor
End Property

Public Property Set clsMotor(vData As clsMotor)
Set mvarclsMotor = vData
End Property

Public Property Get clsBromsPedal() As clsBromsPedal
Set clsBromsPedal = mvarclsBromsPedal
End Property

Public Property Set clsBromsPedal(vData As clsBromsPedal)
Set mvarclsBromsPedal = vData
End Property

Private Sub Class_Initialize()
'create the mclsGaspedal object when the clsBil class is created
Set mvarclsGaspedal = New clsGaspedal
'create the mclsBromsPedal object when the clsBil class is created
Set mvarclsBromsPedal = New clsBromsPedal
'create the mclsMotor object when the clsBil class is created
Set mvarclsMotor = New clsMotor
'create the mclsHjul object when the clsBil class is created
Set mvarclsHjul = New clsHjul
'create the mclsRatt object when the clsBil class is created
Set mvarclsRatt = New clsRatt
'create the mclsVäxellåda object when the clsBil class is created
Set mvarclsVäxellåda = New clsVäxellåda
End Sub

Public Property Get clsGaspedal() As clsGaspedal
Set clsGaspedal = mvarclsGaspedal
End Property

Public Property Set clsGaspedal(vData As clsGaspedal)
Set mvarclsGaspedal = vData
End Property

Private Sub Class_Terminate()
Set mvarclsVäxellåda = Nothing
Set mvarclsRatt = Nothing
Set mvarclsHjul = Nothing
Set mvarclsMotor = Nothing
Set mvarclsBromsPedal = Nothing
Set mvarclsGaspedal = Nothing
End Sub

Public Sub gasa()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsGaspedal.gasa mvarclsHjul
End Sub

Public Sub bromsa()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsBromsPedal.bromsa mvarclsHjul
End Sub

Public Sub svängVänster()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsRatt.svänga "Vänster", mvarclsHjul
End Sub

Public Sub svängHöger()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsRatt.svänga "Höger", mvarclsHjul
End Sub

Public Sub svängRakt()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsRatt.svänga "Rakt"
End Sub

Public Sub växlaEttan()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsVäxellåda.växla "Ettan"
End Sub

Public Sub växlaTvåan()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsVäxellåda.växla "Tvåan"
End Sub

Public Sub växlaTrean()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsVäxellåda.växla "Trean"
End Sub

Public Sub växlaFyran()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsVäxellåda.växla "Fyran"
End Sub

Public Sub växlaBack()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsVäxellåda.växla "Back"
End Sub

Public Sub växlaFriläge()
If mvarclsMotor.motorStatus = "Av" Then Exit Sub
mvarclsVäxellåda.växla "Friläge"
End Sub

Public Sub motorPå()
If mvarclsMotor.motorStatus = "På" Then
Debug.Print "Motorn är redan på"
Else
mvarclsMotor.motorPå
End If
End Sub

Public Sub motorAv()
If mvarclsMotor.motorStatus = "Av" Then
Debug.Print "Motorn är redan av"
Else
mvarclsMotor.motorAv
End If
End Sub


clsBromsPedal
Option Explicit

Public Sub bromsa(hjul As clsHjul)
hjul.minskaHastighet
End Sub


clsGasPedal
Option Explicit

Public Sub gasa(hjul As clsHjul)
hjul.ökaHastighet
End Sub


clsMotor
Option Explicit
Private motor As Integer

Public Sub motorPå()
motor = 1
Debug.Print "Motorn startade"
End Sub

Public Function motorStatus() As String
If motor = 0 Then motorStatus = "Av"
If motor = 1 Then motorStatus = "På"
End Function

Public Sub motorAv()
motor = 0
Debug.Print "Motorn stannade"
End Sub

clsHjul
Option Explicit
Private hast As Integer
Private vridning As Integer '-1 = vänster, 1 = höger 0 = raktfram

Public Sub minskaHastighet()
'Minska speed med 10
hast = hast - 10
Dim str As String
str = "Minskade hastigheten. "
If hast = 0 Then
str = str & "Står stilla."
Else
str = str & "Hastigheten är nu " & CStr(hast)
End If
Debug.Print str
End Sub

Public Sub ökaHastighet()
'Öka hastighet med 10
hast = hast + 10
Debug.Print "Ökade hastigheten till " & CStr(hast)
End Sub

Public Sub vridVänster()
If vridning = -1 Then
Debug.Print "Akta mötande trafik"
Exit Sub
End If
vridning = vridning - 1
hjulPek
End Sub

Public Sub vridHöger()
If vridning = 1 Then
Debug.Print "Akta diket"
Exit Sub
End If
vridning = vridning + 1
hjulPek
End Sub

Public Sub vridRakt()
If vridning = 0 Then
Debug.Print "Du kan inte åka rakare än du gör just nu"
End If
vridning = 0
hjulPek
End Sub

Private Sub hjulPek()
Select Case vridning
Case -1: Debug.Print "Hjulen pkar åt vänster"
Case 0: Debug.Print "Hjulen pekar rakt fram"
Case 1: Debug.Print "Hjulen pekar åt höger"
End Select
End Sub


clsRatt
Option Explicit

Public Sub svänga(Håll As String, hjul As clsHjul)
Select Case Håll
Case "Höger": hjul.vridHöger
Case "Vänster": hjul.vridVänster
Case "Rakt": hjul.vridRakt
End Select
End Sub


clsVäxellåda
Option Explicit
Private mvarVäxel As Integer

Public Sub växla(växel As String)
Dim nyVäxel As Integer
Select Case växel
Case "Ettan": nyVäxel = 1
Case "Tvåan": nyVäxel = 2
Case "Trean": nyVäxel = 3
Case "Fyran": nyVäxel = 4
Case "Back": nyVäxel = -1
Case "Neutral": nyVäxel = 0
End Select

If mvarVäxel > 0 And nyVäxel < 0 Then
Debug.Print "Ojdå, inte bra att lägga i backen nu. Hmmmm Växelådspaj"
ElseIf Abs(nyVäxel - mvarVäxel) > 2 Then
Debug.Print "Ojsan växla lite mer varsamt"
End If
mvarVäxel = nyVäxel
Debug.Print "La i " & CStr(mvarVäxel) & ":ns växel"
End Sub

clsBil är självaste aggregatet. Koden kan se lite konstig ut och detta beror på att jag skapade
klasserna med vbClassBuilder. Jag vill påpeka att detta är inte riktigt så som jag skulle vilja
ha det. Egentligen skulle clsHjul instansieras och referens sättas till objektet från clsGasPedal,
clsBromsPedal och clsRatt.

Hoppas ni inser möjlighetn med aggregat och vad det är bra för. För att ni skall få ytterligare
förståelse för detta med aggregat kommer här ett annat exempel på detta fenomen.

Några av er kanske är bekanta med något avancerat CAD-system. Har ni då tänkt på vad som
händer när ni trycker på EXPLODE-knappen och CAD-programmet visar en sprängskiss på er
ritning. Då har den delat alla objekt i ditt aggregat "ritning". och visar dessa som en sprängskiss.

Säg att du skall rita just en Bil i ett avancerat cad system. Se varje skruv och fjäder i exempelvis
motorn som ett objekt. Dessa sätts sedan ihop till aggregatet "motor".

Vidare kan flera aggregat som "Motor", "Framsäte","Växellåda" sättas samma i aggregatet Bil. Hoppas du inser vidden av det hela, men också komplexiteten. Det var allt för denna gång. Vi ses snart igen, med utlovade kurser.


Var denna artikeln användbar?

Om du gör någon intressant (eller kanske något konstigt fel) på grund av detta material så skicka gärna det med ett mail eller bifoga en länk till mig så presenterar jag detta som ytterligare exempelfiler för kursen. Om detta innehållet är felaktigt eller du lärt dig fler finesser så skriv gärna en rad eller varför inte en egen kurs baserat på dina erfarenheter. Sänd gärna in dina tips till denna kurs.

/Peter Holm
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 153
27 952
271 704
991
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies