Difference between revisions of "Property/fr"

From Lazarus wiki
Jump to navigationJump to search
(Created page with "{{property}} <br> Retour aux mots réservés. == Documentation == Official FPC documentation: [http://www.freepascal.org/docs-html/ref/refse24.html] == ...")
 
m (Fixed syntax highlighting)
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{property}}
+
{{Property}}
<br>
+
 
 
Retour aux [[Reserved words/fr|mots réservés]].
 
Retour aux [[Reserved words/fr|mots réservés]].
 
== Documentation ==
 
== Documentation ==
Official FPC documentation: [http://www.freepascal.org/docs-html/ref/refse24.html]
+
Documentation officielle FPC: [http://www.freepascal.org/docs-html/ref/refse24.html]
  
 
== Description ==
 
== Description ==
Line 9: Line 9:
  
 
== Example ==
 
== Example ==
<syntaxhighlight>
+
 
 +
<syntaxhighlight lang=pascal>
 
type
 
type
 
   TCar = class
 
   TCar = class
Line 25: Line 26:
 
procedure TCar.SetColor(CarColor: string);
 
procedure TCar.SetColor(CarColor: string);
 
begin
 
begin
   //we can do other things here, too, such as housekeeping, notifying others of changes,
+
   //Nous pouvons faire d'autres choses ici, telles que le ménage, des notification de changement,
 +
  // validition d'autres variables, logging, etc.
 
   //validating against other variables, logging, etc -e.g.
 
   //validating against other variables, logging, etc -e.g.
 
   if CarColor='Pink' then
 
   if CarColor='Pink' then
     ShowMessage('Note: pink is not a very common color for a car.');
+
     ShowMessage('Note: le rose n''est pas une couleur courante pour une voiture.');
 
   FColor:=CarColor;
 
   FColor:=CarColor;
 
end;
 
end;
  
procedure PropertyExample();  //shows how to set properties and read them
+
procedure PropertyExample();  //Montre comment affecter des propriétés et les lires
 
var
 
var
   MyCar: TCar;                // Will hold a TCar instance; used in the example subAuto
+
   MyCar: TCar;                // Une intance de TCar; utilisée dans l'exemple
 
begin
 
begin
   MyCar := TCar.Create;        // Create the object
+
   MyCar := TCar.Create;        // Crée l'objet,
 
   try
 
   try
     MyCar.Color:='Green';      // Sets the color property... which calls the setcolor function... which sets the object's FColor variable
+
     MyCar.Color:='Green';      // Définit la propriété Color... qui appelle la procédure setcolor ... qui affecte la variable FColor.
     showmessage(MyCar.Color);  // Now read the object property again... should show Green
+
     showmessage(MyCar.Color);  // Lit maintenant la propriété Color... doit montrer 'Green'
 
   finally
 
   finally
     MyCar.Free;                // Free the memory for the object again, regardless of what errors occurred in the rest of the code
+
     MyCar.Free;                // Libère la mémoire de l'objet, même si une erreur s'est produite
 
   end;
 
   end;
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Objects as properties ==
+
== Objets en propriétés ==
You can assign objects as properties, e.g.:
+
 
<syntaxhighlight>
+
Vous pouvez affecter des objets en propriétés, par exemple :
 +
 
 +
<syntaxhighlight lang=pascal>
 
type
 
type
 
   TEngine = class
 
   TEngine = class
Line 58: Line 62:
 
     property Engine: TEngine read FMyEngine;
 
     property Engine: TEngine read FMyEngine;
 
   implementation
 
   implementation
   ...
+
   //...
   Code in TCar that creates and frees FMyEngine as needed (e.g. in the constructor and destructor)
+
   // Code dans TCar qui crée et libère FMyEngine comme voulu
   ...
+
  // (i.e. dans le constructeur et le destructeur)
 +
   // ...
 
</syntaxhighlight>
 
</syntaxhighlight>
Read access here means something that may not be obvious at first glance. Outside code has read only access to the ''pointer''/reference to the TEngine object in question, which means it cannot create or destroy the object.
 
  
However, it can use this read access to access the properties of the FMyEngine object and change those.
+
L'accès en lecture peut ne pas sembler évident à première vue. Le code client (extérieur à la classe) dispose seulement d'un accès en lecture seule à la référence de l'objet TEngine en question, ce qui signifie que l'on ne peut pas créer ou réaffecter l'objet. C'est la référence de l'objet qui est protégée. L'objet peut être modifié à travers ses propres propriétés et méthodes.
 +
 
 +
'''Attention''' : l'appel à Free aussi reste possible, ce qui peut amener des bugs difficiles à résoudre, le développeur de la partie cliente doit donc respecter ce choix de conception et ne pas invoquer Free sur l'objet en propriété.
 +
 
 +
Si vous voulez donner la responsabilité au code appelant de créer et détruire l'objet, vous pouvez aussi définir l'accès en écriture, par exemple:
  
If you wish to give calling code the responsibility of creating and destroying the object, you can also assign write access, e.g.
+
<syntaxhighlight lang=pascal>
<syntaxhighlight>
 
 
...
 
...
 
   public
 
   public
Line 73: Line 80:
 
...
 
...
 
</syntaxhighlight>
 
</syntaxhighlight>
[[category:Pascal]]
 
[[category:FPC]]
 
{{AutoCategory}}
 
[[Category:Control Structures]]
 

Latest revision as of 12:45, 23 February 2020

Deutsch (de) English (en) suomi (fi) français (fr)

Retour aux mots réservés.

Documentation

Documentation officielle FPC: [1]

Description

Le mot réservé property fait partie de la programmation orientée objet. Il permet plusieurs niveaux d'accès (read, read/write etc) depuis l'extérieur à des variables dans la classe.

Example

type
  TCar = class
  private
    FColor: string;
    FBuildYear: integer;
    procedure SetColor(CarColor: string);
  public
    property Color: string read FColor write SetColor; //Lit directement la variable FColor 
    // écrit à travers la procédure SetColor qui change la variable FColor.
    // Une autre option est de faire simplement "write FColor" pour changer directement 
    // la variable FColor...
  end;

procedure TCar.SetColor(CarColor: string);
begin
  //Nous pouvons faire d'autres choses ici, telles que le ménage, des notification de changement,
  // validition d'autres variables, logging, etc. 
  //validating against other variables, logging, etc -e.g.
  if CarColor='Pink' then
    ShowMessage('Note: le rose n''est pas une couleur courante pour une voiture.');
  FColor:=CarColor;
end;

procedure PropertyExample();   //Montre comment affecter des propriétés et les lires
var
  MyCar: TCar;                 // Une intance de TCar; utilisée dans l'exemple
begin
  MyCar := TCar.Create;        // Crée l'objet,
  try
    MyCar.Color:='Green';      // Définit la propriété Color... qui appelle la procédure setcolor ... qui affecte la variable FColor.
    showmessage(MyCar.Color);  // Lit maintenant la propriété Color... doit montrer 'Green'
  finally
    MyCar.Free;                // Libère la mémoire de l'objet, même si une erreur s'est produite
  end;
end;

Objets en propriétés

Vous pouvez affecter des objets en propriétés, par exemple :

type
  TEngine = class
  ...
  TCar = class
  private
    FMyEngine: TEngine;
  public
    property Engine: TEngine read FMyEngine;
  implementation
  //...
  // Code dans TCar qui crée et libère FMyEngine comme voulu
  // (i.e. dans le constructeur et le destructeur)
  // ...

L'accès en lecture peut ne pas sembler évident à première vue. Le code client (extérieur à la classe) dispose seulement d'un accès en lecture seule à la référence de l'objet TEngine en question, ce qui signifie que l'on ne peut pas créer ou réaffecter l'objet. C'est la référence de l'objet qui est protégée. L'objet peut être modifié à travers ses propres propriétés et méthodes.

Attention : l'appel à Free aussi reste possible, ce qui peut amener des bugs difficiles à résoudre, le développeur de la partie cliente doit donc respecter ce choix de conception et ne pas invoquer Free sur l'objet en propriété.

Si vous voulez donner la responsabilité au code appelant de créer et détruire l'objet, vous pouvez aussi définir l'accès en écriture, par exemple:

...
  public
    property Engine: TEngine read FMyEngine write FMyEngine;
...