Moduł Class::Struct
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Moduł Class::Struct.
Co to jest?
Moduł Class::struct służy do tworzenia strukturo-podobnych klas. Tak utworzona klasa (w przeciwieństwie do zwykłej klasy) posiada pola określonego typu oraz automatycznie utworzone metody dostępu do tychże pól.
Jak to działa?
Moduł Class::struct eksportuje tylko jedną funkcję: struct. Funkcja ta przyjmuje jako parametr listę pól jakie klasa powinna zawierać wraz z typami tych pól, oraz ewentualnie nazwę klasy. Nowa klasa ma utworzony konstruktor new do tworzenia nowych obiektów oraz metody dostępu do poszczególnych pól. Pola mogą być typu:
- scalar
- $ - dany element jest wartością skalarną, a jego początkową wartością jest undef. Jeśli chcemy aby element zwracał referencję do skalara pole powinno być typu '*$'.
- array
- @ - pole jest tablicą z domyślną wartością (). Jeśli wywołamy metodę dostępową bez argumentów otrzymamy referencję do tablicy. Metodę można również wywołać z jednym lub dwoma argumentami, wówczas pierwszy argument oznacza numer elementu tablicy, a drugi (jeśli jest) wartość którą należy przypisać elementowi tablicy. Jeśli pole ma zwracać referencje do obiektów zamiast samych obiektów należy użyć typu '*@'.
- hash
- % - element jest hashem z domyślną wartością (). Metoda dostępowa działa w sposób analogiczny do metody dostępowej tablicy. Jeśli pole jest typu '*%' zwraca referencje do hasha.
- class
- nazwa_klasy - pole jest klasą.
Poniższy kod tworzy klasę Promotor zawierającą imie, nazwisko oraz stopień naukowy, oraz klasę Student zawierającą oprócz imienia i nazwiska, oceny studenta oraz promotora:
use Class::Struct;
struct Promotor => {
imie => '$',
nazwisko => '$',
stopien => '$'
}
struct Student => {
imie => '$',
nazwisko => '$',
oceny => '@',
promotor => 'Promotor'
};
Ponieważ funkcja struct utworzyła za nas konstruktor oraz metody dostępowe, możemy od razu zacząć korzystać z utworzonych klas:
$ja = Student->new();
$ja->imie('Jan');
$ja->nazwisko('Kowalski');
$ja->oceny(0,5);
$ja->oceny(1,5);
$ja->promotor(Promotor->new(imie=>'Adam',nazwisko=>'Iksiński',stopien=>'prof. dr hab.'));
Dokumentacja
- Więcej na ten temat: http://cpan.uwinnipeg.ca/htdocs/perl/Class/Struct.html
Kontakt i informacje o autorze opracowania
Autor: P.S.