OCaml/Obiektowość

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