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
  1. Dodaje do listy wartość zmiennej Odpowiedź. Wywoływana funkcja nazywa się metodą obiektu.
  2. To polecenie czyści zawartość konsoli.
  3. Pętla iteruje do czasu, gdy wypisze wszystkie elementy listy. Lista.Count jest polem obiektu.
  4. 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
  1. Rozpoczynamy pętlę odpowiedzialną za formatowanie końców tabeli.
  2. W pętli dodajemy jedną spację do zmiennej Spacje.
  3. Dodajemy spacje, dopóki długość linii będzie równa długości zmiennej Separator.
  4. Używamy wygenerowanych spacji aby przeformatować wyświetlony tekst na tabelkę.
  5. 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
  1. Jeśli długość separatora jest krótsza niż długość odpowiedzi...
  2. Wyświetlanie komunikatu.
  3. 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
  1. Tworzymy pętle For Each. Pętla ta przetwarza każdy element podanego typu złożonego, tutaj listy.
  2. Sprawdza czy przetwarzany element istnieje.
  3. Sortuje listę. Wiele skomplikowanych operacji które są oddzielnie definiowane w innych językach programowania mają odpowiedniki w obiektach w Visual Basic.