X-Git-Url: http://nitlanguage.org diff --git a/tests/example_objet.nit b/tests/example_objet.nit index c4f4dd1..d55dba2 100644 --- a/tests/example_objet.nit +++ b/tests/example_objet.nit @@ -53,7 +53,7 @@ # Un fichier = un module. Les classes d'un module sont définies dans le fichier. # Au début des fichiers, les modules à importer doivent être déclarés (via le # mot clé "import"). Implicitement, tout module importe le module nommé -# "standard" qui définit les classes usuelles. +# "core" qui définit les classes usuelles. # On va étudier une représentation d'un entrepôt de produits variés. class Entrepot @@ -61,9 +61,9 @@ private # Dans un bloc "private", les propriétés déclarées sont seulement accessibles au # receveur ("self") -# Les attributs sont déclarés par le mot clé "meth" et commencent par un "@" - attr _nom_: String # Un entrepôt a un nom (de type chaîne). - attr _rayons: Array[Rayon] # Il est composé d'un ensemble de rayon. +# Les attributs sont déclarés par le mot clé "fun" et commencent par un "@" + var nom_: String is noinit # Un entrepôt a un nom (de type chaîne). + var rayons: Array[Rayon] is noinit # Il est composé d'un ensemble de rayon. # "Array" est une classe paramétrée, les crochets en sont la marque. # La classe "Rayon" est définie plus loin @@ -71,9 +71,9 @@ private # Les propriétés déclarées dans un bloc "public" sont accessibles à tout le # monde. -# Les méthodes (fonctions et procédures) sont déclarées par le mot clé "meth" +# Les méthodes (fonctions et procédures) sont déclarées par le mot clé "fun" # nom est une fonction qui retourne une chaîne - meth nom: String + fun nom: String do # "return" sort de la fonction return _nom_ @@ -83,27 +83,27 @@ private end # set_nom est une procédure qui prend une chaîne en paramètre - meth set_nom(n: String) + fun set_nom(n: String) do _nom_ = n # "=" désigne l'affectation # Les affectations sont des instructions et ne sont pas # chaînées end - meth add_rayon(r: Rayon) + fun add_rayon(r: Rayon) do _rayons.add(r) # "add" ajoute un élément end # to_s est la méthode implicitement appelée par "print" et "println" # Il s'agit de la représentation "humaine" d'un objet - redef meth to_s: String + redef fun to_s: String do # Les variables sont déclarées par "var", leur portée va de leur # déclaration jusqu'au "end" correspondant - var s: String # Là où on calcule le résultat + var s = new FlatBuffer # Là où on calcule le résultat # Les chaînes littérales sont déclarées avec des guillemets - s = "*** Entrepôt " # On initialise "s" + s.append("*** Entrepôt ") # On initialise "s" # puis on concatène des chaînes à "s" s.append(_nom_) # la méthode "append" concatène s.append(" ***\n") @@ -124,7 +124,7 @@ private s.add('\n') # "add" ajoute un caractère à la fin. # Comme en C, les caractères sont entre simples cotes. end - return s + return s.to_s end @@ -156,19 +156,19 @@ end class Produit private - attr _nom_: String # Désignation du produit - attr _qte_: Int # Quantité en stock + var nom_: String # Désignation du produit + var qte_: Int # Quantité en stock # Comme nous l'avons vu, les accesseurs en lecture sont # généralement homonymes aux attributs (au @ près). - meth nom: String + fun nom: String do return _nom_ end - meth qte: Int + fun qte: Int do return _qte_ end @@ -176,7 +176,7 @@ private # Toutefois, pour les accesseurs en écriture, il est d'usage en NIT # d'utiliser un type de méthode particulier appelé "accesseur universel" # son nom se caractérise par un "=" final - meth qte=(i: Int) + fun qte=(i: Int) do _qte_ = i end @@ -190,7 +190,7 @@ private # la quantité d'un produit. - redef meth to_s: String + redef fun to_s: String do # On peut aussi utiliser "+" pour concaténer les chaînes return _nom_ + ":" + _qte_.to_s @@ -208,25 +208,26 @@ end class Rayon private - attr _stock: Array[Produit] # Des produits en stock - attr _rubrique: String # La catégorie des produits stockés + var stock: Array[Produit] is noinit # Des produits en stock + var rubrique: String is noinit # La catégorie des produits stockés # Cette fonction est utilisé par to_s pour afficher un petit titre - meth to_s_head: String + fun to_s_head: String do # Les déclarations de type sont optionnelles dans un bloc "var". # Si une expression est passée comme valeur initiale d'une # variable, le type statique de la variable est implicitement # celui de l'expression. - var s = "* Rayon : " + var s = new FlatBuffer + s.append("* Rayon : ") # Ici, le type statique de s est implicitement String s.append(_rubrique) s.add('\n') - return s + return s.to_s end - meth cherche_produit(n: String): Produit + fun cherche_produit(n: String): nullable Produit do var i = _stock.iterator while i.is_ok do @@ -242,9 +243,10 @@ private end - redef meth to_s: String + redef fun to_s: String do - var s = to_s_head + var s = new FlatBuffer + s.append(to_s_head) # Les boucles en NIT sont des structures puissantes, toutefois # la manipulation des itérateurs peut être facilité par la # structure "for in" @@ -261,13 +263,13 @@ private s.append(p.to_s) s.add('\n') end - return s + return s.to_s end # Cette fonction permet de retourner la quantité d'un produit donné # Ce service est très simple à implémenter si on utilise cherche_produit - meth quantite(n: String): Int + fun quantite(n: String): Int do var p = cherche_produit(n) # "==" est l'opérateur d'égalité d'identité @@ -281,7 +283,7 @@ private # Le service dual consiste à définir la quantité d'un produit # En NIT, il est d'usage de définir ce genre de service par un accesseur # universel : - meth quantite=(n: String, i: Int) + fun quantite=(n: String, i: Int) do var p = cherche_produit(n) if p == null then @@ -301,7 +303,7 @@ private end class RayonNormal -special Rayon + super Rayon init(r: String) do @@ -313,19 +315,19 @@ end class RayonFroid # Les super-classes sont déclarés avec le mot clé "special". # Implicitement, c'est "Object", la classe de tous les objets. -special Rayon + super Rayon # Tant qu'on parle d'implicite, en l'absence de bloc de propriétés, # celles-ci sont déclarées en tant que "public" - meth temp_max: Int + fun temp_max: Int do return _temp_max_ # Attribut défini juste en dessous end - attr _temp_max_: Int # Une température maximale + var temp_max_: Int # Une température maximale # Les autres attributs sont bien sûr hérités ! - redef meth to_s_head: String # On redéfinit cette méthode + redef fun to_s_head: String # On redéfinit cette méthode do # nous avons vu le "append" et le "+" sur les chaînes, mais la # méthode la plus simple reste la construction "{}" qui