Developpement:Modèle et langage -1

De Wiki1000

Sommaire

Modification dans le langage.

Le contrôle de type.

Le contrôle de type a été ajouté au langage pour permettre un contrôle plus rigoureux du code source. Il devient ainsi possible de détecter certaine erreur lors de la compilation.

Toutefois pour rester compatible avec le code existant les erreurs signalées par le contrôle de type sont des avertissements.

Les types de données

Type Alias de Forme générique Post fixe Remarques
string
normalizedString string soap
anyURI string soap
tokenString string soap
byte
char Type ordinal
integer
int integer soap
unsigned integer soap
short integer soap
unsignedShort integer soap
long integer soap
unsignedLong integer soap
longint longint Type entier long
double
float double soap
currency soap as decimal
decimal currency soap
TDatetime soap as datetime
date
time
boolean
variant Type générique
base64Binary Type binaire soap
hexBinary Type binaire soap
Enumération
TObject Classes techniques
TStringList
TQuery
TDeleteObjectList
TDateBaseInfo
TBinaryContent
Objet métier TitObject Classes de base des stéréotypes
TdbObject
TObjectNode
List de d’objets métiers TObjectList LIST
Curseur d’objet métier TdbCursor CURSOR
Type de données du framework
TEnum
TNumeric
TQuantity
TQuantityWithRef
TQuotation
TMoney
TMoneyDT
TSCurrency
TSDouble
TSInteger
TSQuantity
TCounter
TFlag
TIdentity
TSQLIdentity
TDateList
TIntegerList
TController
TMemo
TBinary
TPicture

TxmlDataType

TxslDataType





Paramétrage des messages du compilateur

Les messages d’avertissement du contrôle de type peuvent être désactivé ou transformé en message d’erreur.

image2.png


image3.png

Les opérateurs et les méthodes de classe.

Les méthodes de classe.

Les méthodes de classe sont des méthodes portées par le type.

Constructeur de classe :

var inst2:MaClasse2;

begin

inst2 := MaClasse3.Create;

end;

Cette syntaxe est équivalent à

var inst2:MaClasse2;

begin

inst2 := ClassManager.CreateInstance(‘MaClasse3’);

end;


Toutefois :

Dans le premier cas une erreur est déclenchée si la classe MaClasse3 n’existe pas lors de la compilation.

Dans le second cas un avertissement est déclenché si la classe « MaClasse3 » n’existe pas lors de la compilation.

Méthode de classe Equivalence
Class.Create ClassManager.CreateInstance(‘ClasseName’)
Class.CreateList ClassManager.CreateObjectList(‘ClasseName’)
Class.CreateCursor ClassManager.CreateCursor(‘ClasseName’)
class.Find(const iWhere,iOrderBy :string ; iDescendant :boolean ; const iArgs :Array of variant]):TitObject ; ClassManager.Find(const iClassName :string ; const iWhere,iOrderBy :string ; iDescendant :boolean ; const iArgs :Array of variant]):TitObject ;


Exemples :

var x: TMaClasseP1;

begin

ShowMessage(TMaClasseP1.Find('uneChaine=%1',,FALSE,['Code1']).uneChaine);

//

x := TMaClasseP1.Find('uneChaine=%1',,FALSE,['Code2']);

if Assigned(x) then showMessage('ok') else showMessage('failed');

end;

var vcursor:TCursor;

begin

vCursor := TMaClasseP1.CreateCursor;

vcursor.Open;

while not vcursor.EOI do

begin

showMessage(vCursor.Instance.uneChaine);

vcursor.Next;

end;

vcursor.Close;

end;


Les opérateurs de classe.

Les opérateurs de classes opèrent sur des instances de classe.

Opérateur « is »

IS réalise un test d’héritage d’une instance par rapport à une classe.

Opérateur « as »

AS réalise un transtypage de type d’une instance de classe vers une autre, la validé du transtypage est contrôlé lors de l’exécution.

var inst2:MaClasse2; inst3:MaClasse3;

begin

inst2 := MaClasse3.Create;

if inst2 is MaClasse3 then

begin

inst3 := (inst2 as MaClasse3);

inst3.code3 := 'code3';

showMessage(inst3.code3);

showmessage((inst2 as MaClasse3).code3);

end

else showMessage('Is is FALSE');

end;

Tableaux ouverts

Les tableaux ouverts à une dimension sont supportés dans les variables locales et les paramètres de méthode.

Différences entre tableaux ouverts et tableaux statiques.

Un tableau statique réserve autant de place qu’il comporte d’éléments dans la pile d’exécution.

Un tableau statique peut être multi-dimensions.

Un tableau statique est toujours passé par valeurs.

Un tableau ouvert ne réserve qu’une entrée dans la pile d’exécution, cette entrée référençant un tableau d’éléments agrandit au fur et à mesure des affectations.

Un tableau ouvert ne peut être que mono-dimension.

Un tableau ouvert est toujours passé par adresse.

Il existe cependant des limitations sur l’usage des tableaux ouverts :

Leur dimension doit être un ; les tableaux ouverts multi-dimension ne sont pas supportés.

Ils ne peuvent contenir que des types simples ; les types objets ne peuvent pas être utilisés dans des tableaux ouverts.

Les indices de tableau ouvert commencent toujours à zéro.

Pour définir une variable locale de type tableau ouvert :

var v:Array of string; s:string; idx:Integer;

begin

v[0] := 'A';

v[1] := 'B';

//

s := ;

for idx:=0 to length(v)-1 do

s := s+v[idx];

//

showMessage(s);

Result := FALSE;

end ;

Utilisation des tableaux ouverts dans les paramètres de méthode.

Il est possible de définir des paramètres de méthode sous forme de tableau ouvert ; par exemple :

function MethodName(p2:Array of string):string;

var idx:Integer; stag:string;

begin

Result := ; stag := ;

for idx:=0 to length(p2)-1 do

begin

Result := Result+stag+p2[idx];

stag := ' ';

end;

end;


Un paramètre ouvert peut être appelé à partir d’un tableau constant, d’une variable locale de type tableau statique ou d’une variable locale de type tableau ouvert.

Pour appeler une méthode ayant des paramètres ouverts à partir d’un tableau constant:

var s:string;

begin

s := MethodName(['ah','que','coucou']);

showmessage(s);

end;

Pour appeler une méthode ayant des paramètres ouverts à partir d’une variable locale de type tableau statique :

var s:string; v:Array[0..2] of string;

begin

v[0] := 'ah';

v[1] := 'que';

v[2] := 'coucou';

s := MethodName(v);

showmessage(s);

end;

Rappelez-vous que les tableaux statiques sont passés par valeurs, la méthode ne peut pas modifier le contenu du tableau.

Pour appeler une méthode ayant des paramètres ouverts à partir d’une variable locale de type tableau ouvert :

var s:string; v:Array of string;

begin

v[0] := 'ah';

v[1] := 'que';

v[2] := 'coucou';

s := MethodName(v);

showmessage(s);

end;

Rappelez-vous que les tableaux ouverts sont passés par adresse, la méthode peut modifier le contenu du tableau.

A l’intérieur de la méthode il est possible d’affecter des valeurs aux tableaux :

function MethodName(p2:Array of string):string;

var idx:Integer; stag:string;

begin

Result := ; stag := ;

p2[length(p2)] := ‘ !’ ;

for idx:=0 to length(p2)-1 do

begin

Result := Result+stag+p2[idx];

stag := ' ';

end;

end;

Si l’indice d’affectation est supérieur à la taille du tableau celui-ci est agrandit et ses valeurs courantes sont conservées.

Dimensionnement des tableaux ouverts

L’agrandissement des tableaux ouverts est automatique, toutefois si vous ajoutez une grande quantité d’éléments à un tableau ouvert vous avez intérêt à utilisez la fonction setLength(tableau,taille) pour agrandir en une fois le tableau.

Les éléments non affectés d’un tableau ouvert sont non défini, par exemple :

var v:Array of string; s:string; idx:Integer;

begin

v[0] := 'A'; // initialise le tableau

v[2] := 'B'; // agrandi le tableau à 3 élements

//

s := ;

for idx:=0 to length(v)-1 do

s := s+v[idx];

//

showMessage(s);

Result := FALSE;

end ;


Provoquera une erreur car l’élément d’indice 1 du tableau est non défini.

Fonctions associés aux tableaux ouverts

Sur un paramètre tableau ouvert les fonctions suivantes sont utilisables :

fonction Description Exemple
function length(x) :Integer Retourne le nombre d’éléments du tableau if length(p)=3 then

begin

// 3 éléments de 0..2 dans le

// tableau

end ;

procedure setlength(x ;l :integer) Ajuste la taille du tableau // Positionne la taille du

// tableau à 10 éléments.

setLength(x,10) ;


Les nouveaux objets techniques.

Envoi de Mail

Le support de MapiExt a été ajouté pour permettre l’envoi de mail à partir du code métier sans ouvrir de message d’avertissement.

Procedure MailTo(const iDestinataire, iSubject, iBody : string);

TBinaryContent

Le type TBinaryContent permet de manipuler des données binaires chargé à partir de fichier ou de chaîne encodées en base64.

Les propriétés suivantes sont disponibles sur les types binaires :

AsBase64Binary

Lecture ou écriture des données encodées au format base64.

AsString

Lecture ou écriture des données contenues dans une chaine de caractère.

Hash

Retourne une chaine de caractère correspondant au sceau du contenu. Le sceau du contenu est le résultat en format hexadécimale (16 caractères) d’une compression du contenu par une clé DES.

Les fonctions suivantes sont disponibles

Tb64Compression = (b64Auto, b64ZlibSig, b64ZlibNoSig, b64None);

Function getAsBase64Binary(iCompression:Tb64Compression) :string ;

Procedure setAsBase64Binary(const value:string; iCompression:Tb64Compression);

Lecture et écriture des données en contrôlant le mode de compression

TStringList

Les propriétés suivantes sont disponibles sur les types binaires :

AsBase64Binary

Lecture ou écriture des données encodées au format base64.

Les fonctions suivantes sont disponibles

' 'Tb64Compression = (b64Auto, b64ZlibSig, b64ZlibNoSig, b64None);

Function getAsBase64Binary(iCompression:Tb64Compression) :string ;

Procedure setAsBase64Binary(const value:string; iCompression:Tb64Compression);

TxmlDocument

Ce type a été amélioré de nouvelles méthodes et propriétés.

Compression :

var xml:TxmlDocument; aString:string;

begin

xml := TxmlDocument.Create(nil);

//...

xml.Compression := cpxZLibNoSig;

xml.isCompressed := TRUE;

aString := xml.SaveToBase64;

end;

TxslDocument

Un composant TxslDocument pouvant contenir une feuille de style XSL et appliquer une transformation à un document source XML. Le résultat d’une transformation XSL peut être un autre document XML, un document HTML ou bien un document texte.

Les méthodes disponibles sur un TxslDocument :

Procedure TransformToXML(const source : TxmlDocument; dest :TxmlDocument) ;

Applique la transformation pour produire un nouveau document XML. La feuille de style doit être de type xMethodXML ou xMethodHtml

Procedure TransformToStream(const source : TxmlDocument; dest :TStream) ;

Applique la transformation pour produire un nouveau document XML. La feuille de style doit être du type xMethodText

Function TransformToString(const source : TxmlDocument) :string ;

Applique la transformation et retourne le résultat comme chaîne de caractère. La feuille de style peut être de tout type ; si le résultat est un document XML c’est sa représentation en chaîne de caractère qui est retournée.





Whos here now:   Members 0   Guests 0   Bots & Crawlers 1
 
Outils personnels