• Nie Znaleziono Wyników

Class1.vb Public Class Stopien_walu_parametry Private _Srednica_stopnia As Single Private _Dlugosc_stopnia As Single Private _Faza As Single

N/A
N/A
Protected

Academic year: 2021

Share "Class1.vb Public Class Stopien_walu_parametry Private _Srednica_stopnia As Single Private _Dlugosc_stopnia As Single Private _Faza As Single"

Copied!
7
0
0

Pełen tekst

(1)

Tematy: Klasa abstrakcyjna, Polimorfizm.

W modelu wału: usuwanie stopnia (przez wskazanego go myszą), rysowanie pręta/gwintu (polimorfizm).

Zamierzamy dodać do aplikacji funkcjonalność polegającą na tym, że możemy zmodyfikować stopień dorysowując do niego gwint lub dwie przecinające się linie symbolizujące pręt o przekroju kwadratowym.

Zadanie rozwiążemy w ten sposób, że utworzymy klasę abstrakcyjną Modyfikacja, w której metoda Rysuj będzie nadpisywana (Overridable). Ponieważ metoda ta nigdy nie będzie pracować samodzielnie, to poza nagłówkiem z parametrami i wiersza End Sub nie zawiera żadnego kodu.

Następnie utworzymy dwie klasy Pret i Gwint, które będą dziedziczyły po klasie Modyfikacja. Każda z nich będzie także posiadała metodę Rysuj nadpisującą (Overrides) metodę Rysuj z klasy bazowej Modyfikacja.

Obie metody Rysuj mają taką samą liczbę parametrów. Taką sytuację nazywamy polimorfizmem – czyli metody zachowują się różnie, w zależności od tego jakiej klasy jest obiekt, na którym są wykonywane.

Kod dodany w zadaniu z3, w stosunku do zadania z2 wyróżniono kolorem żółtym.

Class1.vb

Public Class Stopien_walu_parametry Private _Srednica_stopnia As Single Private _Dlugosc_stopnia As Single Private _Faza As Single

Private _Modyfikacja_stopnia As String Public Property Srednica_stopnia As Single Get

Return _Srednica_stopnia End Get

Set(ByVal value As Single) _Srednica_stopnia = value End Set

End Property

Public Property Dlugosc_stopnia As Single Get

Return _Dlugosc_stopnia End Get

Set(ByVal value As Single) _Dlugosc_stopnia = value End Set

End Property

Public Property Faza As Single Get

Return _Faza End Get

Set(ByVal value As Single) _Faza = value

End Set End Property

Public Property Modyfikacja_stopnia As String Get

Return _Modyfikacja_stopnia End Get

Set(ByVal value As String)

_Modyfikacja_stopnia = value End Set

End Property

(2)

Public Sub Rysuj(ByVal pozycja_X As Single, ByVal pozycja_Y As Single, _ ByVal dlugosc As Single, ByVal srednica As Single)

Dim objRys As System.Drawing.Graphics

Dim objPioroWal As New System.Drawing.Pen(Color.Red, 2) objRys = Form1.CreateGraphics

objRys.DrawRectangle(objPioroWal, pozycja_X, pozycja_Y, dlugosc, srednica) End Sub

Public Sub Rysuj(ByVal pozycja_X As Single, ByVal pozycja_Y As Single, _

ByVal dlugosc As Single, ByVal srednica As Single, ByVal faza As Single) Dim objRys As System.Drawing.Graphics

Dim objPioroWal As New System.Drawing.Pen(Color.Red, 2) Dim faza_rys As Single

objRys = Form1.CreateGraphics If faza > 0 Then

objRys.DrawRectangle(objPioroWal, pozycja_X + faza, pozycja_Y, _

dlugosc - faza, srednica) objRys.DrawLine(objPioroWal, pozycja_X, pozycja_Y + faza, _

pozycja_X, pozycja_Y + srednica - faza) objRys.DrawLine(objPioroWal, pozycja_X, pozycja_Y + faza, pozycja_X + faza, _ pozycja_Y) objRys.DrawLine(objPioroWal, pozycja_X, pozycja_Y + srednica - faza, _ pozycja_X + faza, pozycja_Y + srednica) ElseIf faza < 0 Then

faza_rys = Math.Abs(faza)

objRys.DrawRectangle(objPioroWal, pozycja_X, pozycja_Y, dlugosc - faza_rys, _ srednica) objRys.DrawLine(objPioroWal, pozycja_X + dlugosc, pozycja_Y + faza_rys, _ pozycja_X + dlugosc, pozycja_Y + srednica - faza_rys) objRys.DrawLine(objPioroWal, pozycja_X + dlugosc, pozycja_Y + faza_rys, _ pozycja_X + dlugosc - faza_rys, pozycja_Y) objRys.DrawLine(objPioroWal, pozycja_X + dlugosc, _

pozycja_Y + srednica - faza_rys, pozycja_X + dlugosc - faza_rys, _ pozycja_Y + srednica)

End If End Sub End Class

Public Class Modyfikacja

Public Overridable Sub Rysuj(ByVal X1 As Single, ByVal Y1 As Single, _

ByVal X2 As Single, ByVal Y2 As Single, ByVal X3 As Single, _ ByVal Y3 As Single, ByVal X4 As Single, ByVal Y4 As Single) End Sub

End Class

Public Class Pret

Inherits Modyfikacja

Public Overrides Sub Rysuj(ByVal X1 As Single, ByVal Y1 As Single, _ ByVal X2 As Single, ByVal Y2 As Single, _ ByVal X3 As Single, ByVal Y3 As Single, _ ByVal X4 As Single, ByVal Y4 As Single) Dim objRys As System.Drawing.Graphics

Dim objPioroWalu As New System.Drawing.Pen(Color.Red, 1) objRys = Form1.CreateGraphics

objRys.DrawLine(objPioroWalu, X1, Y1, X4, Y4) objRys.DrawLine(objPioroWalu, X2, Y2, X3, Y3) End Sub

End Class

1 3

2 4

(3)

Public Class Gwint

Inherits Modyfikacja

Public Overrides Sub Rysuj(ByVal X1 As Single, ByVal Y1 As Single, _ ByVal X2 As Single, ByVal Y2 As Single, _ ByVal X3 As Single, ByVal Y3 As Single, _ ByVal X4 As Single, ByVal Y4 As Single) Dim objRys As System.Drawing.Graphics

Dim objPioroWalu As New System.Drawing.Pen(Color.Red, 1) objRys = Form1.CreateGraphics

objRys.DrawLine(objPioroWalu, X1, Y1, X3, Y3) objRys.DrawLine(objPioroWalu, X2, Y2, X4, Y4) End Sub

End Class

Public Class Stopien_walu_powiazania Inherits Stopien_walu_parametry

Public Stopien_walu_odziedziczony As Stopien_walu_parametry Public Adres_po As Stopien_walu_parametry

End Class

Form1.vb

Public Class Form1 Dim x1 As Single Dim y1 As Single

Dim objRys As System.Drawing.Graphics

Dim objPioroOs As New System.Drawing.Pen(Color.Green, 1) Dim objPioroWal As New System.Drawing.Pen(Color.Red, 2) Dim X_osi As Integer = 50

Dim Y_osi As Integer = 200 Dim x_pocz As Integer = X_osi Dim Liczba_stopni As Integer

''Dim wsk_pocz_walka As Stopien_walu_powiazania ''Dim wsk_kon_walka As Stopien_walu_powiazania Dim Kolekcja_stopni_walu As New Collection Dim mode As Integer

Dim faza As Single = 0

Dim x_nowy_stopien As Single

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load objRys = Me.CreateGraphics

mode = 0 End Sub

Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) _

Handles Me.MouseMove LabelKoordynaty.Text = "X=" & e.X & " Y=" & e.Y

End Sub

Private Sub Form1_MouseClick(sender As Object, e As MouseEventArgs) _

Handles Me.MouseClick Dim x_stopnia As Single

Dim y_stopnia As Single Dim szerokosc As Single Dim wysokosc As Single

Dim mojStopien As New Stopien_walu_parametry

''Dim mojStopien_powiazania As New Stopien_walu_powiazania Dim i As Integer

Dim objModyf As Modyfikacja Dim srednica As Single Dim dlugosc As Single

1 3

2 4

(4)

objRys.DrawLine(objPioroOs, X_osi, Y_osi, 600, Y_osi) objRys.DrawLine(objPioroOs, X_osi, X_osi, X_osi, 350) If mode = 10 Then

x1 = e.X y1 = e.Y

x_stopnia = x_pocz y_stopnia = y1

szerokosc = x1 - x_pocz wysokosc = (Y_osi - y1) * 2 x_pocz = x_pocz + szerokosc

Liczba_stopni = Liczba_stopni + 1 mojStopien.Dlugosc_stopnia = szerokosc mojStopien.Srednica_stopnia = wysokosc mojStopien.Faza = faza

''If Liczba_stopni = 1 Then

'' mojStopien_powiazania.Stopien_walu_odziedziczony = mojStopien '' wsk_pocz_walka = mojStopien_powiazania

'' wsk_kon_walka = mojStopien_powiazania ''Else

'' mojStopien_powiazania.Stopien_walu_odziedziczony = mojStopien '' wsk_kon_walka.Adres_po = mojStopien_powiazania

'' wsk_kon_walka = mojStopien_powiazania ''End If

Kolekcja_stopni_walu.Add(mojStopien) If faza <> 0 Then

mojStopien.Rysuj(x_stopnia, y_stopnia, szerokosc, wysokosc, faza) Else

mojStopien.Rysuj(x_stopnia, y_stopnia, szerokosc, wysokosc) End If

x_nowy_stopien = x_pocz ElseIf mode = 13 Then

x1 = e.X

x_pocz = X_osi

objRys.Clear(SystemColors.Control) i = 1

Do Until x1 > x_pocz And x1 <= x_pocz + _

Kolekcja_stopni_walu.Item(i).Dlugosc_stopnia x_pocz = x_pocz + Kolekcja_stopni_walu.Item(i).Dlugosc_stopnia

i = i + 1 Loop

Kolekcja_stopni_walu.Remove(i) Liczba_stopni = Liczba_stopni - 1 Call Narysuj()

ElseIf mode = 21 Then 'pręt x1 = e.X

x_pocz = X_osi i = 1

Do Until x1 > x_pocz And x1 <= x_pocz + _

Kolekcja_stopni_walu.Item(i).Dlugosc_stopnia x_pocz = x_pocz + Kolekcja_stopni_walu.Item(i).Dlugosc_stopnia

i = i + 1 Loop

mojStopien = Kolekcja_stopni_walu.Item(i) mojStopien.Modyfikacja_stopnia = "Pret"

objModyf = New Pret

srednica = mojStopien.Srednica_stopnia dlugosc = mojStopien.Dlugosc_stopnia

(5)

objModyf.Rysuj(x_pocz, Y_osi - srednica / 2, x_pocz, Y_osi + srednica / 2,

x_pocz + dlugosc, Y_osi - srednica / 2, x_pocz + dlugosc, Y_osi + srednica / 2) x_pocz = x_nowy_stopien

ElseIf mode = 22 Then 'gwint x1 = e.X

x_pocz = X_osi i = 1

Do Until x1 > x_pocz And x1 <= x_pocz + _

Kolekcja_stopni_walu.Item(i).Dlugosc_stopnia x_pocz = x_pocz + Kolekcja_stopni_walu.Item(i).Dlugosc_stopnia

i = i + 1 Loop

mojStopien = Kolekcja_stopni_walu.Item(i) mojStopien.Modyfikacja_stopnia = "Gwint"

objModyf = New Gwint

srednica = mojStopien.Srednica_stopnia dlugosc = mojStopien.Dlugosc_stopnia

objModyf.Rysuj(x_pocz, Y_osi - srednica / 2 + 8, x_pocz, Y_osi + srednica / 2 - 8,

x_pocz + dlugosc, Y_osi - srednica / 2 + 8, x_pocz + dlugosc, Y_osi + srednica / 2 - 8) x_pocz = x_nowy_stopien

End If End Sub

Private Sub PokażToolStripMenuItem_Click(sender As Object, e As EventArgs) _

Handles PokażToolStripMenuItem.Click Call Narysuj()

End Sub

Private Sub SkasujToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles SkasujToolStripMenuItem.Click objRys.Clear(SystemColors.Control)

End Sub

Private Sub Narysuj()

Dim x_stopnia As Single Dim y_stopnia As Single Dim szerokosc As Single Dim wysokosc As Single

''Dim walek_tim As Stopien_walu_powiazania Dim wsk_kolekcji As Stopien_walu_parametry Dim objModyf As Modyfikacja

Dim srednica As Single Dim dlugosc As Single

objRys.DrawLine(objPioroOs, X_osi, Y_osi, 600, Y_osi) objRys.DrawLine(objPioroOs, X_osi, X_osi, X_osi, 350) x_pocz = X_osi

''walek_tim = wsk_pocz_walka ''For i = 1 To Liczba_stopni '' x_stopnia = x_pocz

'' y_stopnia = Y_osi - walek_tim.Stopien_walu_odziedziczony.Srednica_stopnia / 2 '' szerokosc = walek_tim.Stopien_walu_odziedziczony.Dlugosc_stopnia

'' wysokosc = walek_tim.Stopien_walu_odziedziczony.Srednica_stopnia

'' objRys.DrawRectangle(objPioroWal, x_stopnia, y_stopnia, szerokosc, wysokosc) '' x_pocz = x_pocz + szerokosc

'' walek_tim = walek_tim.Adres_po

(6)

''Next

For Each wsk_kolekcji In Kolekcja_stopni_walu x_stopnia = x_pocz

y_stopnia = Y_osi - wsk_kolekcji.Srednica_stopnia / 2 szerokosc = wsk_kolekcji.Dlugosc_stopnia

wysokosc = wsk_kolekcji.Srednica_stopnia If wsk_kolekcji.Faza <> 0 Then

wsk_kolekcji.Rysuj(x_stopnia, y_stopnia, szerokosc, wysokosc, _

wsk_kolekcji.Faza) Else

wsk_kolekcji.Rysuj(x_stopnia, y_stopnia, szerokosc, wysokosc) End If

srednica = wsk_kolekcji.Srednica_stopnia dlugosc = wsk_kolekcji.Dlugosc_stopnia

If wsk_kolekcji.Modyfikacja_stopnia = "Pret" Then objModyf = New Pret

objModyf.Rysuj(x_pocz, Y_osi - srednica / 2, x_pocz, Y_osi + srednica / 2,

x_pocz + dlugosc, Y_osi - srednica / 2, x_pocz + dlugosc, Y_osi + srednica / 2) ElseIf wsk_kolekcji.Modyfikacja_stopnia = "Gwint" Then objModyf = New Gwint

objModyf.Rysuj(x_pocz, Y_osi - srednica / 2 + 8, x_pocz, Y_osi + srednica / 2 - 8,

x_pocz + dlugosc, Y_osi - srednica / 2 + 8, x_pocz + dlugosc, Y_osi + srednica / 2 - 8) End If

x_pocz = x_pocz + szerokosc Next

End Sub

Private Sub NowyWałekToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles NowyWałekToolStripMenuItem.Click mode = 0

x_pocz = X_osi

Kolekcja_stopni_walu.Clear() Liczba_stopni = 0

objRys.Clear(SystemColors.Control)

objRys.DrawLine(objPioroOs, X_osi, Y_osi, 600, Y_osi) objRys.DrawLine(objPioroOs, X_osi, X_osi, X_osi, 350) End Sub

Private Sub StopnieBezFazyToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles StopnieBezFazyToolStripMenuItem.Click mode = 10

faza = 0 End Sub

Private Sub StopnieZFazaZLewejStronyToolStripMenuItem_Click(sender As Object, _ e As EventArgs) Handles StopnieZFazaZLewejStronyToolStripMenuItem.Click mode = 10

faza = 8 End Sub

Private Sub StopnieZFazaZPrawejStronyToolStripMenuItem_Click(sender As Object, _ e As EventArgs) Handles StopnieZFazaZPrawejStronyToolStripMenuItem.Click mode = 10

faza = -8 End Sub

Private Sub NicNieRóbToolStripMenuItem_Click(sender As Object, e As EventArgs) _

(7)

Handles NicNieRóbToolStripMenuItem.Click mode = 0

End Sub

Private Sub UsuńStopieńToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles UsuńStopieńToolStripMenuItem.Click mode = 13

End Sub

Private Sub PrętToolStripMenuItem_Click(sender As Object, e As EventArgs) _

Handles PrętToolStripMenuItem.Click mode = 21

End Sub

Private Sub GwintToolStripMenuItem_Click(sender As Object, e As EventArgs) _

Handles GwintToolStripMenuItem.Click mode = 22

End Sub End Class

Cytaty

Powiązane dokumenty

Z jednej stro­ ny skazana jest na dyscyplinę, ład, pracę, musi po­ ruszać się wew nątrz języka, z drugiej traci sens, zdradza swoje powołanie, jeżeli

To wszystko sprawia, że mam szczególne spojrzenie na to, co się tu dzisiaj dzieje, na sojusz robotniczo-chlopski też — to już nie są tylko podchorążacy z Belwederu czy

when model discrepancy is included. Observed and modelled reflectances on the left, and posterior probability distributions for the AOT parameter τ on the right. The

Formą wspierania przedsiębiorczości jest także pomoc pracodawcom w dalszym rozwoju ich przedsiębiorstw przez udzielanie środków na tworzenie dodatkowych miejsc pracy dla

szczątków kostnych z interwencji policji w miejscowości Kiszkowo. Studia Lednickie

Далее всего шли в этом Висниовски и Будны, которые свои доказательства стрсили не только на священном писании, но также на аргументах

Niekiedy związki między ludzkimi i  zwierzęcymi mieszkańcami gościnnego domu Żabińskich przeradzają się w  tak silną emocjonalną więź, że prowadzą do

The main challenge for achieving such responsible water reuse is that there is considerable variation in (potential) risks and hazards, related to differences in water