OCaml/Obiektowość
< OCaml
Obiektowość w OCamlu na przykładzie dwóch klas. Druga z nich dziedziczy metody i atrybuty od pierwszej.
open Printf
(* Klasa podstawowa *)
class pojazd model =
object
val model = model; (* Nie zmienny po utworzeniu... *)
val mutable predkosc = 0; (* Musi być zainicjalizowane *)
method gaz n =
predkosc <- n;
printf "%s ma prędkość %d\n" model predkosc;
method stop =
predkosc <- 0;
printf "%s zatrzymany\n" model
end;;
(* Klasa dziedzicząca *)
class samochod model =
object
inherit pojazd ("Samochód " ^ model)
(* Podajemy parametr klasie bazowej inicjalizując ją *)
method swiatla w =
if w = true then
printf "Światła włączone\n"
else printf "Światła wyłączone\n";
end;;
(* Stworzenie instancji "pojazd" i wywołanie metod *)
let rower = new pojazd "Rower";;
rower#gaz 5;;
rower#stop;;
(* Stworzenie instancji klasy "samochód" *)
let volvo = new samochod "Volvo";;
volvo#swiatla true;
volvo#stop;;
(* Wynik działania programu: *)
Rower ma prędkość 5
Rower zatrzymany
Światła włączone
Samochód Volvo zatrzymany