class ['a, 'b] sdd (x: 'a) =
object
val tab = Array.make 100 x
val mutable nb = 0
val mutable indice = 0
method ajouter x = Array.set tab nb x; nb <- nb + 1
method retrouver (cle: 'b) =
for i = 0 to nb do
if (Array.get tab i)#get_cle = cle then
indice <- i
done;
Array.get tab indice
method nombre_elem = nb
method voir = for i = 0 to nb do (Array.get tab i)#print;
print_newline () done
end
class virtual animal (nm: string) (tat: int) =
object(moi_meme)
val nom = nm
val tatouage = tat
method get_cle = tatouage
method repond x = (nom = x)
method virtual cri : string
method virtual court_t_y: bool
method virtual vole_t_y: bool
method virtual nage_t_y: bool
method crie = print_string moi_meme#cri
method print =
print_string (nom^" "); print_int tatouage; print_newline ()
end
class robot (nm: string) (tat: int) =
object(moi_meme)
val nom = nm
val reference = tat
method get_cle = reference
method repond x = (nom = x)
method cri = "chiriiii"
method court_t_y = true
method vole_t_y = false
method nage_t_y = false
method crie = print_string moi_meme#cri
method print =
print_string (nom^" "); print_int reference; print_newline ()
end
class chien nm tat =
object
inherit animal nm tat
method cri = "ouah"
method court_t_y = true
method vole_t_y = false
method nage_t_y = true
method mord_t_y = true
end
class serin nm tat =
object(ce_truc)
inherit animal nm tat
method cri = "cuicui"
method court_t_y = true
method vole_t_y = true
method nage_t_y = false
method chante = for i = 1 to 15 do ce_truc#crie; print_string " " done
end
let medor = new chien "medor" 17
;;
class animal_sdd an=
object
inherit [animal, int] sdd an
end
let menagerie = new sdd (medor :> animal)
;;
menagerie#ajouter (medor :> animal)
;;
for i = 1 to 10 do
let oiseau = new serin ("serin_"^string_of_int i) (20+i)
in
menagerie#ajouter (oiseau :> animal)
done;;
menagerie#voir;;
let animal_25 = menagerie#retrouver 25;;
animal_25#crie; print_newline ();;