Implementacja TObject      Strona 8 z 9        Dalej
w oparciu o materiały ze stron BytaminC

       Właściwości

      Jestem pewien, że kiedy po raz pierwszy zacząłeś bawić się C++ Builderem umieściłeś na formie jakiś komponent. I nagle w Inspektorze Obiektów pojawiły się te wszystkie informacje, a ty przekonałeś się o ogromnych możliwościach wizualnego programowania. Wszystkie te wartości w inspektorze są zwane właściwościami. Ale czy wiesz o tym, że właściwości mogą być również użyte na zewnątrz komponentu? Zobaczmy w jaki sposób możesz użyć tego w Twoich aplikacjach.

      Funkcja to czy dana?

      Odpowiedź brzmi: ...i to i to. Właściwości wyglądają i zachowują się jak dane, ale w rzeczywistości są metodami... Trochę to zakręcone. Na przykład, masz właściwość NoLines, mógłbyś zwiększyć ją używając NoLines++, tak jak gdyby była daną. Builder wywołuje metody get i set i wartość jest zwiększana. Używając "zwykłej" enkapsulacji w stylu ANSI C++ nie mógłbyś użyć ++.

      Jedną rzeczą, której nie możesz robić z właściwością jest to, że nie możesz przekazać jej przez referencję. Jasne? Spójrz na tą funkcję:

void __fastcall ClearName(String * Name)
{
Name = NULL;
}
      Jeżeli próbowałbyś przekazać właściwość jako Name kompilator wygeneruje błąd. Podczas wywołania funkcji referencją właściwości nie jest String, lecz zestaw funkcji, które zwracają String. Kompilator jest na tyle bystry, że nie pozwoli Ci popełnić tego błędu.

      Dlaczego używać właściwości?

      Jest wiele korzyści:

- W przeciwieństwie do metod, które są dostępne tylko w czasie pracy programu, właściwości są dostępne również w fazie projektowania.

- Właściwości mogą być modyfikowane Inspektorem Obiektów, co pozwala na wizualne ich modyfikowanie. Ustawienie właściwości w fazie projektowania jest o wiele łatwiejsze niż przy użyciu kodu.

- Ponieważ dane są enkapsulowane, są one zabezpieczone i ograniczone do danego obiektu.

- Wywołania get i set są metodami, więc ewentualna obróbka danych jest niewidoczna dla użytkownika obiektu. Na przykład dana mogłaby się mieścić w tablicy, ale dla programisty byłaby widoczna jako zwykła, pojedyncza dana.

- Możesz zaimplementować funkcje wyzwalające zdarzenia albo modyfikujące inne dane podczas dostępu do właściwości. Na przykład zmiana właściwości może pociągnąć za sobą zmianę innej.

- Właściwości mogą być wirtualne.

- Właściwość nie musi być ograniczona do pojedynczego obiektu. Zmiana właściwości jednego obiektu może wpłynąć na kilka innych obiektów. Na przykład zmiana właściwości Checked jednego z przycisków RadioButton może wpłynąć na stan innych.

Autor: Scott Cross
Tłumaczenie:  Maciek Frankiewicz

1  2  3  4  5  6  7  8  9