Développer Objet en LotusScript

Olivier FRANCHET a écrit le Jeudi 3 Juillet 2003 à 22:53:35

Le but de cet article n'est pas de vous exposer le concept de développement Objet. Pour cela, vous trouverez en fin d'article quelques liens où glaner ces informations, mais de vous présenter l'outil pour développer Objet en LotusScript : la Classe !

Le développement Objet en LS peut-être une étape pour ensuite passer à Java, c'est pourquoi je vais prendre le nommage préconiser pour ce dernier.


1. Une Classe en LotusScript


Pour ceux qui développent déjà en LS, vous utilisez déjà un ensemble de Classe comme NotesDocument, NotesSession, etc ... mais comment sont-elle construites ??? Bon ... je ne vais pas vous présenter le code d'une de ces Classes ... car je ne le connais tout simplement pas.

Par contre, autant apprendre par la pratique, donc nous allons construire les bases (je vais pas tout faire ;-) ) d'une Classe bien utile pour la gestion de tableau de chaine de caractères.

Avant toute chose, vous devez savoir que tout le code d'une classe est stocké dans la partie (Declaration) ... contrairement aux méthodes/fonctions classiques qui sont automatiquement isolées. Cet aspect pose un problème puisqu'une zone comme (Declaration) est limité à 64Ko en taille ... donc il vivement conseillé de faire attention à la taille de vos classes. Je vous conseil de faire 1 bibliothèque de script pour 1 classe ... et si elle est vraiment trop importante, la seule solution reste de stocker le code dans un fichier texte comme c:\maclasse.lss (l'extension .lss est donné par convention dans l'aide Designer) et d'utiliser %Define "c:\maclasse.lss" dans la bibliothèque.

Bon ... commencons par le début qui est la déclaration de la classe :

Class ArrayOfString
End Class


Cette simple construction est valide et vous pourriez donc d'ore et déjà instancier (créer) un objet de type 'ArrayOfString' :

Sub Initialize
  Dim myArray as ArrayOfString
End Sub


2. Les attributs et les 'Property'


Notre classe présente pour le moment un énorme défaut : elle est vide donc elle ne sert à rien.

Pour lui donner un peu plus de consistence, nous allons lui définir des attributs à usage privé et publique. La notion de privé et publique définisent un droit d'accès à ces variables ; privé pour un usage strictement réservé au sein de la classe, et publique pour donner l'accès depuis l'extérieur aux attributs de cet classe.

Class ArrayOfString
  array as Variant
  currentIndex as integer
End Class


'array' et 'currentIndex' sont donc des attributs de la classe. Par défaut ils sont publiques, ce qui signifie qu'ils sont visibles en dehors de la classe de la manière suivante :

Sub Initialize
  Dim myArray as ArrayOfString
  Dim dummyVariant as Variant

  print "Position courante dans le tableau : " & myArray.currentIndex
  dummyVariant = myArray.array
End Sub


Bien que le LS nous permet cette souplesse d'utilisation, je préfère opter pour une plus grande rigueur proche de Java, c'est à dire ne pas laisser les attributs de classe directement visible mais de passer par les 'Property' de type Get ou Set (assimilé aux 'Getter' et 'Setter' en Java) :

Class ArrayOfString
  private array as Variant
  private currentIndex as integer

  Property Get pos as integer
    index = me.currentIndex
  End Property

  Property Set pos as integer
    me.curentIndex = pos
  End Property

  Property Get length as integer
    length = UBound( me.array )
  End Property
End Class


'Me' est un mot réservé qui représente l'instance en cours de la classe. Par habittude et pour ne pas se mélanger les pinceaux avec les noms, il est préférable de préfixer systématiquement tous les attributs ou méthodes lors de leur emploi au sein de la classe.

Les 'Property' sont perçus comme des attributs classique par leur manipulation (affectation ou consultation) ... mais au niveau de leur implémentation, ils s'apparente à des méthodes.

Sub Initialize
  Dim myArray as ArrayOfString
  Dim dummyVariant as Variant

  print "Position courante dans le tableau : " & myArray.pos
  print "Taille du tableau : " & myArray.length
  myArray.pos = 5
End Sub


3. Les méthodes Function et Sub


Je ne vais pas m'étendre sur la construction et l'utilisation des méthodes d'une classe... mais si vous pensez qu'il faille approfondir ce point (dans ce cas, je reprend les bases même du développement LS ;-) ), faite-le moi savoir.

Au niveau de la sécurité, les méthodes ont 2 niveaux : publique ou privée.

Class ArrayOfString
  ...
   private sub trim()
   end sub

   public sub sort()
   end sub
   ...
End Class


4. Les méthodes new() et delete()


Ces 2 méthodes sont caractéristiques d'une classe. Elles peuvent être assimilées aux méthodes initialize() et terminate() des objets Domino dans le sens ou new() est systématiquement appelé lors de la création d'un nouvel objet et delete() à la destruction de ce dernier.

L'utilisation de la méthode new() se comprend aisement. Elle va permettre de créer l'environnement de la objet, donc d'initialiser un certains nombre d'attributs. La méthode delete() va pour sa part nous permettre de réaliser des actions juste avant la destruction de l'objet, comme par exemple la destruction des objets crées au sein de l'objet courant. Ce dernier point est vital car il va permettre d'avoir une optimisation de l'utilisation de la mémoire de la machine, et ce n'est jamais un mal d'y prêter attention.

Pour m'expliquer sur ces méthodes, débutons avec new() par laquelle je vais initialiser un objet de type NotesLog qui est très utile pour le débugage de cette classe mais aussi pour toutes autres méthodes/objets utilisant cette dernière.

Class ArrayOfString
   private session as NotesSession
   private log as NotesLog

   private array as Variant
  ...
   public sub new()
     set session = new NotesSession
     set log = new NotesLog("ArrayOfString-Class")

     call log.OpenNotesLog(...,...)
   end sub
   ...
End Class


Lors de la création d'un objet de type ArrayOfString, la méthode new() étant systématiquement sollicité, j'ai donc pu initialiser l'environnement de travail de mon objet.

La méthode delete() est tout aussi simple. Dans ce cas présent, delete() me permet de détruire les objets préalablement crées dans new().

Class ArrayOfString
   private session as NotesSession
   private log as NotesLog

   private array as Variant
  ...
   public sub delete()
     call log.close()

     delete log
     delete session
   end sub
   ...
End Class



5. Liens

Introduction à la programmation orienté objet (POO) sur le site de Comment Ca Marche ?
Using the object oriented features of LotusScript sur le site de Lotus Developer Domain
Creating Custom Classes in LotusScript par Johan Känngård
The Unfinnished LotusScript Book par Julian Robichaux

Commentaire(s)

Aucuns commentaires

Ajouter un commentaire





Se souvenir de mes informations?



Les balises HTML ne sont pas permises dans les commentaires. Pour faire un lien, il suffit de donner l'URL, préfixée par http://.