IV. Rendre une « fonction classe » poopj abstraite▲
On peut rendre une « fonction classe » non instanciable en passant l'option _abstract à true.
L'option _abstract
Sélectionnez
try {
var funcClass =
$.
dvjhClass._create
(
{
// contenu du premier objet anonyme
},
{
/*
* contenu du second objet anonyme
*
* $.dvjhClass définit les options : _abstract,
* _auteur, _copyright, et _version
* mais il n'utilise que la première.
* Vous pouvez modifier les autres à votre
* convenance et en utiliser d'autres.
*/
_abstract
:
true
}
);
}
catch(
err){
alert
(
err);
}
Cette possibilité ne doit pas être négligée :
- On peut écrire une « fonction classe » abstraite, c'est-à-dire une « fonction classe » qui n'implémente pas toutes les méthodes qui sont nécessaires à son fonctionnement. C'est la « fonction classe » fille (la classe qui hérite) qui a la responsabilité de fournir l'implémentation des méthodes manquantes ;
- On peut écrire l'équivalent d'une interface en écrivant une « fonction classe » abstraite qui ne contient qu'un squelette, c'est-à-dire des attributs non initialisés et des méthodes non implémentées ;
- On peut écrire l'équivalent d'une « fonction classe » Math, c'est-à-dire une « fonction classe » non instanciable et constituée entièrement d'attributs et de méthodes statiques.
Une fonction classe abstraite (poopj4.html)
Sélectionnez
try {
var Personne =
$.
dvjhClass._create
({
_builder
:
function(
prenom,
nom){
this.
prenom =
prenom ||
""
;
this.
nom =
nom ||
""
;
/*
* On doit enregistrer l'adresse de chaque
* instance de la fonction classe Personne.
*
*, Mais on délègue cette responsabilité à
* la classe qui héritera de celle-ci.
*/
this.
adresse =
""
;
// valeur non disponible
},
getAdresse
:
function(
){
return this.
adresse;
// valeur non disponible
},
setAdresse
:
function(
value){
// implémentation non disponible
},
toString
:
function(
){
return "Personne : "
;
}
},
{
_abstract
:
true
}
);
/*
* Dans le cas d'une classe abstraite on choisit de
* retourner un objet vide (new Object) plutôt que
* de déclencher une exception, car dans ce cas
* l'opérateur new construit un objet invalide.
*/
var dvjh =
new Personne
(
"Daniel"
,
"Hagnoul"
);
console.log
(
typeof dvjh,
dvjh);
}
catch(
err){
alert
(
err);
}
Une fonction classe interface
Sélectionnez
try {
var IEtudiant =
$.
dvjhClass._create
({
_builder
:
function(
prenom,
nom,
adresse,
numero,
classe,
interne){
this.
prenom =
""
;
this.
nom =
""
;
this.
adresse =
""
;
this.
numero =
""
;
this.
classe =
""
;
this.
interne =
""
;
},
getPrenom
:
function(
){},
getNom
:
function(
){},
getAdresse
:
function(
){},
getNumero
:
function(
){},
getClasse
:
function(
){},
getInterne
:
function(
){},
setPrenom
:
function(
value){},
setNom
:
function(
value){},
setAdresse
:
function(
value){},
setNumero
:
function(
value){},
setClasse
:
function(
value){},
setInterne
:
function(
value){},
toString
:
function(
){
return "IEtudiant : "
;
}
},
{
_abstract
:
true
}
);
}
catch(
err){
alert
(
err);
}
Une fonction classe statique
Sélectionnez
try {
var PIERRE =
$.
dvjhClass._create
({
_builder
:
function(
){
// même vide, le constructeur doit toujours exister
},
toString
:
function(
){
return "PIERRE : "
;
}
},
{
_abstract
:
true
}
);
PIERRE.
prenom =
"Pierre"
;
PIERRE.
nom =
"Dupond"
;
PIERRE.
rue =
"27 Rue de la Joie"
;
PIERRE.
ville =
"Tristesseville"
;
PIERRE.
fonction =
"Directeur exécutif"
;
PIERRE.
telephone =
"+32 844 256 612"
;
PIERRE.
email =
"direction@supertrust.com"
;
PIERRE.
vacances =
function(
date){
// retourne true si PIERRE est en vacances à cette date
return AgendaPierre
(
"vacances"
,
date);
};
PIERRE.
rendezvous =
function(
type,
visiteurs,
date){
// retourne true si PIERRE accepte ce rendez-vous
return AgendaPierre
(
type,
visiteurs,
date);
}
console.log
(
PIERRE,
PIERRE.
prototype);
}
catch(
err){
alert
(
err);
}