OCaml/Obiektowość

Z Wikibooks, biblioteki wolnych podręczników.



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