Comparaison de deux styles d'écriture d'un programme.
Avec comme support de comparaison le même programme traité de deux manières différentes :
TestVLC et
PILPlayer ; tous deux, téléchargeables sur la forge de gambas-fr.org ou sur la logithèque de Gambas.
J'ai utilisé le même logigramme :
- choix d'une station de TV
- lecture dans un DrawingArea de la station TV
Différences entre les deux programmes :
- pour TestVLC, utilisation de formulaires et modules.
- pour PILPlayer, utilisation d'une Class exportée, de formulaires et de modules.
- La Class exportée reprend la forme d'un DrawingArea auquel on ajoute quelques propriétés, par héritage :1
2
3
4
5
| PROPERTY Brightness AS INTEGER USE $Brightness = 50 PROPERTY Contrast AS INTEGER USE $Contrast = 50 PROPERTY Hue AS INTEGER USE $Hue = 50 PROPERTY Saturation AS INTEGER USE $Saturation = 50 PROPERTY Gamma AS INTEGER USE $Gamma = 50
|
- Pour utiliser une icône personnalisée pour cette Class, il suffit de créer un répertoire nommé control dans le répertoire Projet de l'IDE et d'y déposer une icône que l'on nommera du même nom que notre Class (tout en minuscule) avec l'extension png.
- Pour pouvoir voir, ces propriétés, directement dans l'IDE, il suffit d'utiliser cette astuce :1
| PUBLIC CONST _Properties AS STRING = "*,Brightness{Range:0;100}=50,Contrast{Range:0;100}=50,Hue{Range:0;100}=50,Saturation{Range:0;100}=50,Gamma{Range:0;100}=50"
|
- Repérer l'étoile au début de la ligne d'énumération qui permet d'afficher toutes les propriétés héritées ainsi que les nouvelles. (si vous omettez l'étoile, vous ne verrez que les nouvelles propriétés, dans l'IDE.).
Voir la documentation, ici.- Vous pouvez aussi, ne pas utiliser le raccourci de déclaration des propriétés, en déclarant chacune des variables, de cette manière :1
2
3
4
5
| PRIVATE $Brightness AS INTEGER = 50 PRIVATE $Contrast AS INTEGER = 50 PRIVATE $Hue AS INTEGER = 50 PRIVATE $Saturation AS INTEGER = 50 PRIVATE $Gamma AS INTEGER = 50
|
- Ce qui vous oblige à enlever Use, et ce qui suit, dans la déclaration de chaque property et à déclarer les fonctions Read pour chacune d’entre elles :1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| PRIVATE FUNCTION Saturation_Read() AS INTEGER
RETURN $Saturation
END
PRIVATE FUNCTION Gamma_Read() AS INTEGER
RETURN $Gamma
END
PRIVATE FUNCTION Hue_Read() AS INTEGER
RETURN $Hue
END
PRIVATE FUNCTION Contrast_Read() AS INTEGER
RETURN $Contrast
END
PRIVATE FUNCTION Brightness_Read() AS INTEGER
RETURN $Brightness
END
|
- Les librairies externes de VLC sont regroupées au sein de cette Class :1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| PRIVATE ENUM libvlc_adjust_Enable = 0, libvlc_adjust_Contrast, libvlc_adjust_Brightness, libvlc_adjust_Hue, libvlc_adjust_Saturation, libvlc_adjust_Gamma
LIBRARY "libvlc:5"
PRIVATE EXTERN libvlc_new(argc AS INTEGER, argv AS String[]) AS POINTER PRIVATE EXTERN libvlc_media_player_new_from_media(p_md AS POINTER) AS POINTER PRIVATE EXTERN libvlc_media_player_set_xwindow(p_mi AS POINTER, drawable AS INTEGER) PRIVATE EXTERN libvlc_media_player_play(p_mi AS POINTER) AS INTEGER PRIVATE EXTERN libvlc_media_player_stop(p_mi AS POINTER) PRIVATE EXTERN libvlc_media_player_pause(p_mi AS POINTER) PRIVATE EXTERN libvlc_media_player_release(p_mi AS POINTER) PRIVATE EXTERN libvlc_media_release(p_md AS POINTER) PRIVATE EXTERN libvlc_release(p_instance AS POINTER) PRIVATE EXTERN libvlc_media_new_location(p_instance AS POINTER, path AS STRING) AS POINTER PRIVATE EXTERN libvlc_audio_set_volume(p_mi AS POINTER, i_volume AS INTEGER) AS INTEGER PRIVATE EXTERN XInitThreads() AS INTEGER IN "libX11:6.4.0" PRIVATE EXTERN libvlc_media_player_get_length(p_mi AS POINTER, l_ex AS POINTER) AS INTEGER PRIVATE EXTERN libvlc_media_player_get_time(p_mi AS POINTER) AS INTEGER PRIVATE EXTERN libvlc_media_add_option(p_mi AS POINTER, psz_options AS STRING) PRIVATE EXTERN libvlc_video_set_adjust_int(p_mi AS POINTER, option AS INTEGER, value AS INTEGER) PRIVATE EXTERN libvlc_video_set_adjust_float(p_mi AS POINTER, option AS INTEGER, value AS SINGLE)
|
Comparaison graphique dans l'IDE :
Les fichiers dans l'IDE :
~~
Le même formulaire dans l'IDE :
~~

Comparaison à l'écriture :
- Pour établir une bonne comparaison entre les deux modes, je vous invite à suivre dans TestVLC, toutes les lignes faisant référence à la librairie externe de VLC et voir comment elles sont "déportées" dans PILPlayer.
Comparaison à l'utilisation :
- On ne notera pas de différences notables entre les deux versions du programme.
- Personnellement j'aime bien la clarté du mode Class exportée avec héritage comparé au mode procédural. Il me semble, aussi y avoir un gain de rapidité et de stabilité.
- les tenants de la POO vous diront que la sécurité y est plus grande, je ne m'aventurerai pas là dessus car trop "jeune" en POO.
À vous, de comparer et d'apprécier ce qui vous convient le mieux.
====================
Navigation :
<-- Liens du Wiki : <--<-- Accueil du WIKI : <-- ====================
La Documentation :
====================
Liens Externes :
Haut de Page