P.O.O Concept basique.
Résolu
Tcha-tokey
-
Tcha-tokey -
Tcha-tokey -
Bonjour, je suis actuellement dqans une universite espagnol, et je crains de ne pas m'être compri avec le prof, mais il semble categorique.
Voila le plrobleme est tres simple.
Je possède une classe : User avbec plusieurs atributs et methodes. La visibilite de tous ces derniers est a protected.
Je possède une une autre classe administrateur, dans laquel j'ai une methode qui fait:
objetUser = new User(). //j'instanci un objet de User.
objetUser.setNom(****). J'appelle une methode protégé de la classe User avec l'objet User.
C'est ici que l'on entre en conflit avec mon professeur qui me dit que deja aucun langage poo ne me laisserait faire ça car ce serait detruire la capacite d'abstraction des langages POO.
Alors selon lui les methodes qui doivent etre appele depuis une autre classe, sont les methodes public.
Je ne comprend pas car si la methode est public il y a encore moins d'abstraction. Merci de me repondre rapidement, demain j'ai examen sur la P.O.O
Voila le plrobleme est tres simple.
Je possède une classe : User avbec plusieurs atributs et methodes. La visibilite de tous ces derniers est a protected.
Je possède une une autre classe administrateur, dans laquel j'ai une methode qui fait:
objetUser = new User(). //j'instanci un objet de User.
objetUser.setNom(****). J'appelle une methode protégé de la classe User avec l'objet User.
C'est ici que l'on entre en conflit avec mon professeur qui me dit que deja aucun langage poo ne me laisserait faire ça car ce serait detruire la capacite d'abstraction des langages POO.
Alors selon lui les methodes qui doivent etre appele depuis une autre classe, sont les methodes public.
Je ne comprend pas car si la methode est public il y a encore moins d'abstraction. Merci de me repondre rapidement, demain j'ai examen sur la P.O.O
A voir également:
- P.O.O Concept basique.
- Formule basique excel - Guide
- Concept map builder - Télécharger - Photo & Graphisme
- Eko concept avis - Forum Accessoires & objets connectés
- Sonnerie iphone basique - Forum iPhone
- Batch basique ✓ - Forum Autoit / batch
4 réponses
Il faut distinguer les concepts théoriques et la pratique du langage.
J'imagines que tu codes en Java, dans ce cas les méthodes protected peuvent aussi être utilisés au sein du même package. On est typiquement dans les "cas particuliers spécifiques du langage" dont je parlais.
Mais si tu es dans un package différent, tu ne peux pas utiliser tes méthodes protected, de même pour d'autres langages qui n'ont pas de notion de package par exemple.
Exemple :
plop/Toto.java
plop/Test.java
other/Test.java
J'imagines que tu codes en Java, dans ce cas les méthodes protected peuvent aussi être utilisés au sein du même package. On est typiquement dans les "cas particuliers spécifiques du langage" dont je parlais.
Mais si tu es dans un package différent, tu ne peux pas utiliser tes méthodes protected, de même pour d'autres langages qui n'ont pas de notion de package par exemple.
Exemple :
plop/Toto.java
package plop;
public class Toto
{
protected void foo()
{
System.out.println("foo");
}
}
plop/Test.java
package plop;
public class Test
{
public static void main(String[] args)
{
Toto toto = new Toto();
toto.foo(); // ok car dans le même package que Toto
}
}
other/Test.java
package other;
import plop.Toto;
public class Test
{
public static void main(String[] args)
{
Toto toto = new Toto();
toto.foo(); // ko car pas dans le même package que Toto
}
}
Ça dépend où tu es.
Une méthode protected ne sera pas visible par n'importe quelle classe, uniquement par ses classes filles (sauf cas particuliers spécifiques du langage), du coup ton appel de méthode ne fonctionnera pas en général.
Tu pourras bien sûr utiliser tes méthodes protected dans les classes filles (créer des méthodes qui ne peuvent jamais être appelées serait absurde), mais dans la plupart des cas l'appel de la méthode protected ce fera sur les objets this ou super, assez rarement sur une instance obtenue avec l'opérateur new.
Une méthode protected ne sera pas visible par n'importe quelle classe, uniquement par ses classes filles (sauf cas particuliers spécifiques du langage), du coup ton appel de méthode ne fonctionnera pas en général.
Tu pourras bien sûr utiliser tes méthodes protected dans les classes filles (créer des méthodes qui ne peuvent jamais être appelées serait absurde), mais dans la plupart des cas l'appel de la méthode protected ce fera sur les objets this ou super, assez rarement sur une instance obtenue avec l'opérateur new.
Je viens de taper le code sur eclipse et ça marche bien je n'ai aucune erreur (J'ai tout a fait le droit d'instancier un objet dans une autre classe, et d'appeler une methode privé ou protegé definite pour cette objet). Cela dit je ne vois toujours pas ce que le professeur voulai dire.
En POO, la classe doit répondre à un "contrat", si le contrat veux que n'importe quelle classe puisse modifier le nom, alors setNom devra être public. Si en revanche on veut interdire la modification du nom on la mettra private. Le protected n'intervient que dans le cas particulier où on aura besoin de modifier le nom au sein des classes filles. Mais pour un accesseur c'est quand même plutôt rare. Ici je dirais public.
Public ou protected ?
Je supose public vu que comme tu as dit plus haut tous les languages ne supporte pas les packages .
Merci