Personal tools

Clase de tipuri

From HaskellWiki

Revision as of 13:35, 6 December 2007 by Ha$kell (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

In limbajele traditionale orientate obiect, o declaratie de clasa defineste o schema caruia i se conformeaza mai multe obiecte numite instante ale clasei. La instantierea unui obiect trebuie de obicei furnizate VALORI pentru a fi stocate in obiect.Ele au NUMELE si TIPUL scrise in declaratia de clasa.

In Haskell insa, o declaratie de calsa defineste un tip abstract de date, inzestrat cu anumite functii. (Sunt un fel de clase de structuri algebrice, cum ar fi clasa grupurilor , a inelelor, a monadelor etc). La instantiere, un tip de date concret devine instanta a clasei, ocazie cu care trebuie sa precizam cum lucreaza acele functii (specifice clasei) pentru acel tip. La instantierea unei clase trebuie deci sa definim, sa furnizam, FUNCTIILE necesare. Ele au NUMELE si TIPUL scrise in declaratia de clasa.

In esenta clasele Haskell sunt colectii de structuri algebrice ! Tipul introdus cu instance in acea clasa este MULTIMEA DE VALORI iar FUNCTIILE pot fi OPERATIILE cu acele valori. Din ele pot rezulta si valori de alt tip.

Exemplu: clasa Eq (predefinita) este clasa tipurilor pentru a caror date exista operatorii egal == si diferit /=. Daca introduceti in clasa Eq niste arbori definiti de dumneavoastra (cu data) aveti ocazia sa definiti cu ocazia instantierii cum vor lucra egalitatea si diferitul pentru acei arbori.

Exemplu: clasa Show e clasa valorilor afisabile, pentru care exista o functie show ce transforma acele valori in string-uri (tiparibile). Mai sunt si alte clase.

Utilizatorul poate introduce/defini propriile clase cu declaratia class si pune in clase propriile tipuri cu declarartia instance. Se admit si un fel de clase conditionate, in care ceva devine membru al clasei daca este deja membru al altei sau altor clase. Vedeti si folosirea lui => la declaratii de tipuri.


Se mai pot scrie multe lucruri. Este un concept puternit si foarte util al realizarea de aplicatii mari, modulare. <= Inapoi la pagina principala Ro/Haskell