Question sur la POO : empêcher l'héritage d'une fonction public ?

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


dorian53
WRInaute accro
WRInaute accro
 
Messages: 1901
Inscription: Dim Avr 10, 2005 16:56

Question sur la POO : empêcher l'héritage d'une fonction pub

Message le Jeu Jan 08, 2009 13:00

Bonjour,

Est-il possible d'empêcher l'héritage d'une fonction à une classe fille... tout en gardant l'accès public par l'instanciation de la classe mère.

Exemple.

Code: Tout sélectionner
class A {
     public function test() {
     }
}


class B extends A {
     
}

Je veux pouvoir accéder $oA->test();
Mais pas à $oB->test();

En gros j'aurais besoin d'un mot clé tel que inherited.
Est-ce que cette notion existe dans la programmation objet (en PHP et ailleurs) ?
Est-ce qu'il y a des solutions pour simuler cette notion ?

Merci.


Bool
WRInaute accro
WRInaute accro
 
Messages: 1290
Inscription: Jeu Fév 26, 2004 15:59

Message le Jeu Jan 08, 2009 13:06

Hello,

en PHP il me semble que c'est le mot clé "final" qui sert à ça.

Edit : quoi que non, elle empêche la surcharge, pas l'appel.

En même temps si tu veux vraiment bloquer l'appel je pense que tu peux surcharger par une méthode private/protected. Mais... es tu sûr que ton héritage soit "justifié" en fait ?


dorian53
WRInaute accro
WRInaute accro
 
Messages: 1901
Inscription: Dim Avr 10, 2005 16:56

Message le Jeu Jan 08, 2009 13:17

Bool a écrit:en PHP il me semble que c'est le mot clé "final" qui sert à ça.

Edit : quoi que non, elle empêche la surcharge, pas l'appel.

J'ai eu la même réflexion :)


Bool a écrit:En même temps si tu veux vraiment bloquer l'appel je pense que tu peux surcharger par une méthode private/protected.

Intéressant je vais tester ça après avoir mangé rien que par curiosité même si c'est contraignant.


Bool a écrit:Mais... es tu sûr que ton héritage soit "justifié" en fait ?

A première vue oui.


Merci, je posterai le résultat du private même si je ne pense pas adopter cette solution.


dorian53
WRInaute accro
WRInaute accro
 
Messages: 1901
Inscription: Dim Avr 10, 2005 16:56

Message le Jeu Jan 08, 2009 14:16

dorian53 a écrit:
Bool a écrit:Mais... es tu sûr que ton héritage soit "justifié" en fait ?

A première vue oui.


J'vais finir par répondre non.

En effet, en appréhendant la problématique différemment la question ne se pose plus.

benjamin-reseauit-com
Nouveau WRInaute
 
Messages: 39
Inscription: Jeu Jan 08, 2009 15:00

Message le Jeu Jan 08, 2009 15:20

En java il y a effectivement final mais qui n'empêche pas l'utilisation.

Cependant il y a les interface pour faire ça :

si tu as
Code: Tout sélectionner
public class A implements AInterface {

   public void MethodeVisibleDansA() {
      
   }

   public void MethodeToujoursVisible() {
   }
   
}


public class B implements BInterface {
   
}

public interface CommonInterface {
   
   public void MethodeToujoursVisible();
   
   
}


public interface AInterface extends CommonInterface {
   public void MethodeVisibleDansA();
}

public interface BInterface extends CommonInterface {
   
}


Et que tu n'utilises que des interfaces, tu auras ce que tu veux. Je ne critiquerai pas l'approche. C'est sans doute un problème de conception derrière...

pense aussi à la composition sans rendra peut être ton problème plus simple




[/quote][/code]


ltressens
WRInaute passionné
WRInaute passionné
 
Messages: 551
Inscription: Ven Avr 02, 2004 14:52

Message le Jeu Jan 08, 2009 16:05

sinon tu peux regarder de quelle classe "this" est il instance dans l'implementation dans A.
Si pas instance de A (ne pas utiliser instanceof mais par exemple get_class() en php) alors return false


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités