• Nie Znaleziono Wyników

Temat: Dziedziczenie, Metody, Polimorfizm. Dodajemy 2 klasy -

N/A
N/A
Protected

Academic year: 2021

Share "Temat: Dziedziczenie, Metody, Polimorfizm. Dodajemy 2 klasy -"

Copied!
6
0
0

Pełen tekst

(1)

Temat: Dziedziczenie, Metody, Polimorfizm.

Dodajemy 2 klasy - StopienFazaZLewej i StopienFazaZPrawej dziedziczące po klasie Stopien_walu.

Do każdej z tych 3 klas dodajemy metody, czyli procedury, o tej samej nazwie Rysuj.

Metody te rysują, każda z nich, inny element:

stopień bez fazy, stopień z faza z lewej i z faza z prawej.

Pojawi się zatem mechanizm polimorfizmu - czyli metoda Rysuj, w zależności od obiektu, na którymjest wykonywana,

sporządzi inny rysunek stopnia.

Dodamy też możliwość usuwania stopnia.

Class1.vb

Public Class Stopien_walu

Protected _Srednica_stopnia As Single 'było Private Protected _Dlugosc_stopnia As Single 'było Private Public Property Srednica_stopnia As Single

Get

Return _Srednica_stopnia End Get

Set(value As Single)

_Srednica_stopnia = value End Set

End Property

Public Property Dlugosc_stopnia As Single Get

Return _Dlugosc_stopnia End Get

Set(value As Single)

_Dlugosc_stopnia = value End Set

End Property

Public Overridable Sub Rysuj(ByVal objRys As Graphics, ByVal objPioro As Pen, _ ByVal pozycja_x As Single, ByVal pozycja_y As Single) objRys.DrawRectangle(objPioro,

pozycja_x, pozycja_y - _Srednica_stopnia / 2, _Dlugosc_stopnia, _Srednica_stopnia)

End Sub End Class

Public Class StopienFazaZLewej Inherits Stopien_walu Private _Faza As Single

Public Property Faza As Single Get

Return _Faza End Get

Set(value As Single) _Faza = value End Set

End Property

(2)

Public Overrides Sub Rysuj(ByVal objRys As Graphics, ByVal objPioro As Pen, ByVal pozycja_x As Single, ByVal pozycja_y As Single) objRys.DrawRectangle(objPioro, _

pozycja_x + _Faza, pozycja_y - _Srednica_stopnia / 2, _Dlugosc_stopnia - _Faza, _Srednica_stopnia)

objRys.DrawLine(objPioro, _

pozycja_x, pozycja_y - _Srednica_stopnia / 2 + _Faza, pozycja_x + _Faza, pozycja_y - _Srednica_stopnia / 2) objRys.DrawLine(objPioro, _

pozycja_x, pozycja_y + _Srednica_stopnia / 2 - _Faza, pozycja_x + _Faza, pozycja_y + _Srednica_stopnia / 2) objRys.DrawLine(objPioro, _

pozycja_x, pozycja_y + _Srednica_stopnia / 2 - _Faza, pozycja_x, pozycja_y - _Srednica_stopnia / 2 + _Faza) End Sub

End Class

Public Class StopienFazaZPrawej Inherits Stopien_walu

Private _Faza As Single

Public Property Faza As Single Get

Return _Faza End Get

Set(value As Single) _Faza = value End Set

End Property

Public Overrides Sub Rysuj(ByVal objRys As Graphics, ByVal objPioro As Pen, ByVal pozycja_x As Single, ByVal pozycja_y As Single) objRys.DrawRectangle(objPioro, _

pozycja_x, pozycja_y - _Srednica_stopnia / 2, _Dlugosc_stopnia - _Faza, _Srednica_stopnia) objRys.DrawLine(objPioro, _

pozycja_x + _Dlugosc_stopnia, pozycja_y - _Srednica_stopnia / 2 + _Faza, pozycja_x + _Dlugosc_stopnia - _Faza, pozycja_y - _Srednica_stopnia / 2) objRys.DrawLine(objPioro, _

pozycja_x + _Dlugosc_stopnia, pozycja_y + _Srednica_stopnia / 2 - _Faza, pozycja_x + _Dlugosc_stopnia - _Faza, pozycja_y + _Srednica_stopnia / 2) objRys.DrawLine(objPioro, _

pozycja_x + _Dlugosc_stopnia, pozycja_y + _Srednica_stopnia / 2 - _Faza, pozycja_x + _Dlugosc_stopnia, pozycja_y - _Srednica_stopnia / 2 + _Faza) End Sub

End Class

Public Enum TrybPracy NicNieRob

NowyStopien UsunStopien End Enum

(3)

Form1.vb

Public Class Form1

Dim objRys As Graphics Dim X_osi As Integer = 50 Dim Y_osi As Integer = 200

Dim objPioroOs As New Pen(Color.Green) Dim objPioroWal As New Pen(Color.Red, 2) Dim x_pocz As Integer = X_osi

Dim mode As TrybPracy

Dim Kolekcja_stopni_walu As New List(Of Stopien_walu) Dim faza As Single

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_Load(sender As Object, e As EventArgs) Handles Me.Load objRys = Me.CreateGraphics

End Sub

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

Handles Me.MouseClick 'objRys.DrawLine(Pens.Blue, 150, 100, 250, 150)

'objRys.DrawRectangle(Pens.Blue, 150, 100, 200, 150) 'objRys.DrawEllipse(Pens.Blue, 150, 100, 200, 150) 'objRys.DrawArc(Pens.Red, 150, 100, 200, 150, 0, 150) Dim x1, y1 As Single

'Dim mojStopien As New Stopien_walu Dim mojStopien As Stopien_walu

Dim mojStopienL As StopienFazaZLewej Dim mojStopienP As StopienFazaZPrawej x1 = e.X

y1 = e.Y

If mode = TrybPracy.NowyStopien Then If faza = 0 Then

mojStopien = New Stopien_walu Else

If faza > 0 Then

mojStopienL = New StopienFazaZLewej mojStopienL.Faza = faza

mojStopien = mojStopienL Else

mojStopienP = New StopienFazaZPrawej mojStopienP.Faza = Math.Abs(faza) mojStopien = mojStopienP

End If End If

mojStopien.Dlugosc_stopnia = x1 - x_pocz

mojStopien.Srednica_stopnia = (Y_osi - y1) * 2

mojStopien.Rysuj(objRys, objPioroWal, x_pocz, Y_osi) 'objRys.DrawRectangle(objPioroWal, x_pocz, y1,

' x1 - x_pocz, (Y_osi - y1) * 2) x_pocz = x_pocz + mojStopien.Dlugosc_stopnia Kolekcja_stopni_walu.Add(mojStopien)

ElseIf mode = TrybPracy.UsunStopien Then

Kolekcja_stopni_walu.Remove(KliknietyStopien(x1)) Call OdswiezWalek()

(4)

End If End Sub

Private Sub RysujOsie()

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

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint Call RysujOsie()

End Sub

Private Sub StopieńBezFazyToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles StopieńBezFazyToolStripMenuItem.Click mode = TrybPracy.NowyStopien

faza = 0 End Sub

Private Sub NicNieRóbToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles NicNieRóbToolStripMenuItem.Click mode = TrybPracy.NicNieRob

End Sub

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

Handles SkasujToolStripMenuItem.Click objRys.Clear(SystemColors.Control)

End Sub

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

Handles PokażToolStripMenuItem.Click Call Narysuj()

Call RysujOsie() End Sub

Private Sub Narysuj()

Dim wsk_kolekcji As Stopien_walu x_pocz = X_osi

For Each wsk_kolekcji In Kolekcja_stopni_walu

wsk_kolekcji.Rysuj(objRys, objPioroWal, x_pocz, Y_osi) 'objRys.DrawRectangle(objPioroWal, x_pocz,

' Y_osi - wsk_kolekcji.Srednica_stopnia / 2, ' wsk_kolekcji.Dlugosc_stopnia, wsk_kolekcji.Srednica_stopnia) x_pocz = x_pocz + wsk_kolekcji.Dlugosc_stopnia

Next End Sub

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

Kolekcja_stopni_walu.Clear()

objRys.Clear(SystemColors.Control) mode = TrybPracy.NicNieRob

End Sub

Private Sub StopieńZFaząZLewejStronyToolStripMenuItem_Click(sender As Object, _ e As EventArgs) Handles StopieńZFaząZLewejStronyToolStripMenuItem.Click mode = TrybPracy.NowyStopien

faza = 8 End Sub

Private Sub StopieńZFaząZPrawejStronyToolStripMenuItem_Click(sender As Object, _ e As EventArgs) Handles StopieńZFaząZPrawejStronyToolStripMenuItem.Click mode = TrybPracy.NowyStopien

faza = -8 End Sub

(5)

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

End Sub

Private Function KliknietyStopien(ByVal x As Single) As Stopien_walu Dim x_temp As Single = X_osi

Dim i As Integer = 0

Do Until x > x_temp And x < x_temp + Kolekcja_stopni_walu.Item(i).Dlugosc_stopnia x_temp = x_temp + Kolekcja_stopni_walu.Item(i).Dlugosc_stopnia

i = i + 1 Loop

Return Kolekcja_stopni_walu.Item(i) End Function

Private Sub OdswiezWalek()

objRys.Clear(SystemColors.Control) Call Narysuj()

Call RysujOsie() 'można dodać End Sub

End Class

Rysunek 1. Rysowanie stopnia z faza z lewej strony

(6)

Rysunek 2

Wywołanie diagramu UML

Diagram UML możemy wywołać klikając, w oknie Solution Explorer, prawym klawiszem myszy na pliku Class1.vb, rys. 1 i z kontekstowego menu wybierając View Class Diagram.

Rysunek 3. Diagram klas

Cytaty

Powiązane dokumenty

dyfuzji tlenu i dwutlenku węgla między pęcherzy- kami płucnymi i krwią oraz między tkankami ciała i krwią..

Na lekcji dowiesz się jak wskazywać zależności pokarmowe w ekosystemie, identyfikować organizmy jako producentów, konsumentów, destruentów, szeregować organizmy

Aktualne zasady i ograniczenia w poruszaniu się wprowadzone w związku z epidemią koronawirusa znajdziecie pod poniższym linkiem. Proszę o

 Zmienna wskaźnikowa mająca typ pewnej klasy bazowej może wskazywać obiekty tej klasy oraz klas pochodnych - a zatem jest polimorficzna..  Zmienne niewskaźnikowe nie

Jej 3 klasy potomne, natomiast, będą posiadały metodę Narysuj() (z atrybutem Overrides) rysującą, w uproszczeniu, modyfikację stopnia, czyli pręt, gwint lub dla klasy

Polimorfizm - w informatyce pojęcie dla określenia różnych sposobów zachowania się metody o tej samej nazwie w zależności od obiektu, na którym jest wykonywana.. Polimorfizm

- Homozygoty dominujące posiadają dwa allele dominujące, a więc syntezują dwa razy więcej barwnika niż heterozygoty, które posiadają tylko jeden allel dominujący. -

Zgodnie z artykułem 491 4 ustęp 3 sąd oddala wniosek o ogłoszenie upadłości, jeżeli w okresie dziesięciu lat przed dniem zgłoszenia wniosku w stosunku do dłużnika prowadzono