• Nie Znaleziono Wyników

Formularz zawiera sześć TextBoxów i Button. Do dwóch pierwszych TextBoxów należy wprowadzić dane elipsy – półosie a i b. Do dwóch następnych należy wprowadzić długości boków a i b. Naciśnięcie

N/A
N/A
Protected

Academic year: 2021

Share "Formularz zawiera sześć TextBoxów i Button. Do dwóch pierwszych TextBoxów należy wprowadzić dane elipsy – półosie a i b. Do dwóch następnych należy wprowadzić długości boków a i b. Naciśnięcie "

Copied!
2
0
0

Pełen tekst

(1)

Copyright © 2020, mgr inż. Janusz Bonarowski

1 Zadanie

Należy utworzyć klasę abstrakcyjną Figura posiadającą metodę abstrakcyjną Pole. Następnie zbudować dwie klasy pochodne. Klasę Elipsa posiadającą konstruktor wprowadzający wartości półosi Polos_a, Polos_b oraz metodę Pole. Należy również zbudować klasę Prostokat posiadającą konstruktor wprowadzający wartości Bok_a, Bok_b oraz metodę Pole.

Chcemy użyć metody Pole w sposób polimorficzny.

Formularz zawiera sześć TextBoxów i Button. Do dwóch pierwszych TextBoxów należy wprowadzić dane elipsy – półosie a i b. Do dwóch następnych należy wprowadzić długości boków a i b. Naciśnięcie

przycisku powinno utworzyć dwa obiekty: jeden klasy Elipsa, a drugi klasy Prostokat i używając metod Pole pokazać w dwóch pozostałych Textboxach wartości pól.

Wzór na pole elipsy: 𝑃 = 𝑎𝑏𝜋 Rozwiązanie

Najpierw budujemy plik klas. Klasa Figura miała być abstrakcyjna, czyli nic nie robi – i musi posiadać klasy potomne (stąd MustInherit):

Public MustInherit Class Figura

Public MustOverride Function Pole() As Single End Class

Teraz budujemy klasę potomną Elipsa.

Musi ona dziedziczyć po klasie Figura, stąd:

Inherits Figura

Ma mieć konstruktor dostarczający do klasy (do wnętrza klasy) wartości półosi. „Dostarczający do klasy”

oznacza, że wartości półosi będą w klasie przechowywane w zmiennych wewnętrznych klasy (stąd słowo

Private

) o nazwach zbliżonych do argumentów w konstruktorze (dla wygody). Nazwy te poprzedzamy (zwyczajowo, taka konwencja) dolnym podkreśleniem np.

_Polos_a

.

Argument w konstruktorze nazywa się

Polos_a

(bez dolnego podkreślenia), a zmienna wewnętrzna w klasie, niedostępna z zewnątrz klasy nazywa się

_Polos_a.

Podobnie z pozostałymi nazwami argumentów konstruktorów i nazwami zmiennych wewnętrznych w klasie potomnej Elipsa i klasie potomnej Prostokat.

'--- Klasa potomna Elipsa --- Public Class Elipsa

Inherits Figura

Private _Polos_a As Single Private _Polos_b As Single

'Procedura Sub New() to jest konstruktor.

'Ma ona tyle parametrów ile trzeba. W tym wypadku 2 parametry.

Sub New(Polos_a As Single, Polos_b As Single) _Polos_a = Polos_a

_Polos_b = Polos_b End Sub

Public Overrides Function Pole() As Single Return _Polos_a * _Polos_b * Math.PI End Function

End Class

'--- Klasa potomna Prostokąt --- Public Class Prostokat

Inherits Figura

Private _Bok_a As Single Private _Bok_b As Single 'Konstruktor:

Sub New(Bok_a As Single, Bok_b As Single) _Bok_a = Bok_a

_Bok_b = Bok_b End Sub

Public Overrides Function Pole() As Single Return _Bok_a * _Bok_b

End Function End Class

(2)

Copyright © 2020, mgr inż. Janusz Bonarowski

2

Rysunek 1. Formularz

Kod formularza

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Deklarujemy zmienną obiektową Mojafigura, (ale może to być też MojTrawnik, 'MojaSerweta, objKoc, objBlatStołu) która będzie klasy Figura.

'Ta deklaracja to jest adres, w którym będzie się znajdował konkretny obiekt 'utworzony później konstruktorem New(). Tutaj to jest tylko deklaracja zmiennej.

Dim Mojafigura As Figura

' Tworzymy konkretny obiekt Mojafigura. Mówimy tworzymy "instancję obiektu Elipsa".

' Używamy w tym celu konstruktora z klasy Elipsa, czyli New(...) z odpowiednimi ' parametrami:

Mojafigura = New Elipsa(CSng(TextBoxPolos_a.Text), CSng(TextBoxPolos_b.Text)) 'Obiekt powstał. Ma już swoje cechy (czyli wartości długości obu półosi).

'Możemy wykorzystać metodę Pole zwracającą pole elipsy i umieścić ją w TextBox5 TextBoxPoleElipsy.Text = CStr(Mojafigura.Pole)

' W prawdziwym, dużym programie w tym miejscu znajduje się pewna liczba instrukcji ...

' aż pojawia się potrzeba obliczenia Pola dla innego, konkretnego obiektu.

' Jest to obiekt klasy Prostokąt, który jest klasą potomną klasy bazowej Figura.

' Wykorzystujemy więc - polimorficznie - sytuację, że mamy taką klasę Prostokąt:

'(1) Tworzymy instancję (czyli konkretną realizację, konkretny obiekt) klasy Prostokąt ' w tej samej zmiennej posługując się konstruktorem (czyli New(...)):

Mojafigura = New Prostokat(CSng(TextBoxBok_a.Text), CSng(TextBoxBok_b.Text)) ' a mając już istniejący, gotowy obiekt klasy Prostokat możemy uzyskać jego pole, ' metodą Pole i umieścić wartość tego pola w TextBox6:

TextBoxPoleProstokata.Text = CStr(Mojafigura.Pole) End Sub

Cytaty

Powiązane dokumenty

Моя жена часто говорила мне, что я покупаю очень много книг и трачу на них все деньги.. Но когда я увидел новую

Te żywoty świętych składały się zwykle z prologu, z części poświęconych wątkowi historyczno-bio- graficznemu wraz z opisem genealogii bohatera i jego czynów

21 ustawy „osoba, której zachowanie wskazuje na to, że z powodu zaburzeń psychicznych może zagrażać bezpośrednio własnemu życiu albo życiu lub zdrowiu innych osób, bądź

Atrybut ten definiujemy przy użyciu wartości liczbowych – czyli z ilu kolumn ma się składać komórka..

Wśród nieinwazyjnych metod pomiaru ciśnienia tętniczego moż- na wyróżnić pomiary wykonywane w gabinecie lekarskim lub w przy- chodni przez personel medyczny oraz

W ramach procedury zapytania ofertowego przedkładamy ofertę na wykonanie i dostarczenie do Domu Pomocy Społecznej w Moczarach tablicy pamiątkowej zakupionej w ramach

Początkowo ich zagroda była niewielka, ale z czasem nowy dom się powiększał, by ostatecznie pierwsze żubry mogły osiedlić się w lasach pszczyńskich.. Tam to już miały

Tą samą figurę możemy podzielić inaczej (patrz na rysunek niżej) na prostokąt o wymiarach 8cm na 2cm i trzy trójkąty. Przy czym dwa trójkąty prostokątne dadzą taki