Visual Basic/Obiekty
Obiekty
[edytuj]W Visual Basic do dyspozycji jest około 50 różnych obiektów. Każdy z nich pełni jakąś rolę, np. istnieje obiekt który pozwala na stworzenie sortowanej listy, jak również obiekt pozwalający na wysyłanie poczty e-mail, aż po obiekty zarządzające systemem plików. Zrozumienie istoty obiektu będziemy poznawać na przykładach. Naszym celem będzie stworzenie aplikacji, która będzie zarządzała listą danych.
1. Tworzenie obiektu
[edytuj]Aby używać obiektu, potrzeba go najpierw stworzyć. Obiekt tworzy się tak, jak deklaruje się zmienną - jedyna różnica polega na użyciu słowa kluczowego "New" przed nazwą obiektu. Dla naszej aplikacji, najlepszym obiektem do demonstracji będzie ArrayList.
Sub Main()
Dim Lista As New ArrayList() 'Tworzymy obiekt listy
End Sub
2. Pola obiektu
[edytuj]Stworzyliśmy główny obiekt. Kontynuujemy - tutaj wstawimy deklaracje wszystkich zmiennych jakie pojawią się w użyciu programu.
Sub Main()
Dim Lista As New ArrayList() 'Tworzymy obiekt listy
Dim Odpowiedź As String
Dim Separator As String = "+---------------------------------+"
End Sub
Teraz, aby cykl dodawania obiektów do listy powtarzał się, zrobimy pętlę, która będzie trzymała działanie programu w nieskończoność.
Dim Lista As New ArrayList() 'Tworzymy obiekt listy
Dim Odpowiedź As String
Dim Separator As String = "+---------------------------------+"
Do
Console.Write("Podaj tekst do dodania do listy: ")
Console.ReadLine()
Loop
Teraz, główny kod dodawania do listy.
Dim Lista As New ArrayList() 'Tworzymy obiekt listy
Dim Odpowiedź As String
Dim Separator As String = "+---------------------------------+"
Do
Console.Write("Podaj tekst do dodania do listy: ")
Odpowiedź = Console.ReadLine()
'Tutaj zaczyna się dodawanie
Lista.Add(Odpowiedź) '1
Console.Clear() '2
For i As Byte = 0 To Lista.Count - 1 '3
Console.WriteLine(Separator)
Console.WriteLine(Lista.Item(i)) '4
Next
Console.WriteLine(Separator)
Loop
- Dodaje do listy wartość zmiennej Odpowiedź. Wywoływana funkcja nazywa się metodą obiektu.
- To polecenie czyści zawartość konsoli.
- Pętla iteruje do czasu, gdy wypisze wszystkie elementy listy. Lista.Count jest polem obiektu.
- Metoda Item zwraca element o podanym indeksie.
3. Względy estetyczne
[edytuj]Pozostała już tylko czysta estetyka. Elementy listy są teraz wyświetlane w tekstowej tabeli.
Sub Main()
Dim Lista As New ArrayList() 'Tworzymy obiekt listy
Dim Odpowiedź As String
Dim Spacje As String = ""
Dim Separator As String = "+---------------------------------+"
Do
Console.Write("Podaj tekst do dodania do listy: ")
Odpowiedź = Console.ReadLine()
'Tutaj zaczyna się dodawanie
Lista.Add(Odpowiedź)
Console.Clear()
For i As Byte = 0 To Lista.Count - 1
'Tworzenie spacji na wygląd
Do '1
Spacje = Spacje + " " '2
Loop Until Spacje.Length = Separator.Length - Lista.Item(i).ToString.Length - 3 '3
Console.WriteLine(Separator)
Console.WriteLine("| " & Lista.Item(i) & Spacje & "|") '4
Spacje = "" '5
Next
Console.WriteLine(Separator)
Loop
End Sub
- Rozpoczynamy pętlę odpowiedzialną za formatowanie końców tabeli.
- W pętli dodajemy jedną spację do zmiennej Spacje.
- Dodajemy spacje, dopóki długość linii będzie równa długości zmiennej Separator.
- Używamy wygenerowanych spacji aby przeformatować wyświetlony tekst na tabelkę.
- Zerujemy spacje - jeśli nie zostałyby wyzerowane, ich ilość pozostałaby w zmiennej a pętla iterowałaby dalej, powodując sfałszowaną ilość odstępów.
4. Odporność na błędy
[edytuj]Jeśli wpiszesz do listy tekst dłuższy niż długość zmiennej Separator - obiekt prawdopodobnie zwróci wyjątek, a w dobrym wypadku aplikacja po prostu zostawi cię z migającym kursorem w konsoli. Tak więc, trzeba zapobiec takim wypadkom.
Sub Main()
Dim Lista As New ArrayList() 'Tworzymy obiekt listy
Dim Odpowiedź As String
Dim Spacje As String = ""
Dim Separator As String = "+---------------------------------+"
Do
Console.Write("Podaj tekst do dodania do listy: ")
Odpowiedź = Console.ReadLine()
'Siatka bezpieczeństwa
If Odpowiedź.Length > Separator.Length - 4 Then '1
Console.WriteLine("Tekst może mieć maksymalną długość " & Separator.Length - 4 & " znaków!") '2
Continue Do '3
End If
'Tutaj zaczyna się dodawanie
Lista.Add(Odpowiedź)
Console.Clear()
For i As Byte = 0 To Lista.Count - 1
'Tworzenie spacji na wygląd
Do
Spacje = Spacje + " "
Loop Until Spacje.Length = Separator.Length - Lista.Item(i).ToString.Length - 3
Console.WriteLine(Separator)
Console.WriteLine("| " & Lista.Item(i) & Spacje & "|")
Spacje = ""
Next
Console.WriteLine(Separator)
Loop
End Sub
- Jeśli długość separatora jest krótsza niż długość odpowiedzi...
- Wyświetlanie komunikatu.
- Polecenie Continue <nazwa_pętli> kończy tą iterację pętli i rozpoczyna następną. U nas zastosowane do dania użytkownikowi drugiej szansy wprowadzenia poprawnych danych.
5. Sortowanie i blokada powtarzania się elementu
[edytuj] Sub Main()
Dim Lista As New ArrayList() 'Tworzymy obiekt listy
Dim Odpowiedź As String
Dim Spacje As String = ""
Dim Separator As String = "+---------------------------------+"
Do
Console.Write("Podaj tekst do dodania do listy: ")
Odpowiedź = Console.ReadLine()
'Siatka bezpieczeństwa
If Odpowiedź.Length > Separator.Length - 4 Then
Console.WriteLine("Tekst może mieć maksymalną długość " & Separator.Length - 4 & " znaków!")
Continue Do
End If
'Blokada powtórzeń
For Each ElementListy In Lista '1
If Odpowiedź = ElementListy Then '2
Console.WriteLine("Taki element listy już istnieje.")
Continue Do
End If
Next
'Tutaj zaczyna się dodawanie
Lista.Add(Odpowiedź)
'Sortowanie
Lista.Sort() '3
Console.Clear()
For i As Byte = 0 To Lista.Count - 1
'Tworzenie spacji na wygląd
Do
Spacje = Spacje + " "
Loop Until Spacje.Length = Separator.Length - Lista.Item(i).ToString.Length - 3
Console.WriteLine(Separator)
Console.WriteLine("| " & Lista.Item(i) & Spacje & "|")
Spacje = ""
Next
Console.WriteLine(Separator)
Loop
End Sub
- Tworzymy pętle For Each. Pętla ta przetwarza każdy element podanego typu złożonego, tutaj listy.
- Sprawdza czy przetwarzany element istnieje.
- Sortuje listę. Wiele skomplikowanych operacji które są oddzielnie definiowane w innych językach programowania mają odpowiedniki w obiektach w Visual Basic.