IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

model implémentant la même interface


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Par défaut model implémentant la même interface
    Bonjour à tous,

    Je suis débutant en informatique et je me pose une question concernant les interfaces … Je suis entrain de faire une application et je souhaite faire ceci en JAVA:
    Appeler plusieurs class Services Fonctionnel implémentant le même interface de façon polymorphe (excuser-moi pour les éventuels manque de rigueur car je suis débutant).

    En bref, je souhaite avoir dans le Model une méthode type mémoriser par exemple qui prendrait en paramètre des objets différents (un Patient, une Consultation)…

    Quelqu'un peut-il me donner un conseil?

    Merci à tous.
    Bonne soirée


    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
     
    // but avoir seulement les 4 méthodes de l'interface pour tous les objets
    public class Model{
     
    	public void memoriser(Object objet) {
    		// TODO Auto-generated method stub
    	}
     
    	public Object editer(Object objet) {
    		// TODO Auto-generated method stub
    		return null;
    	}
     
    	public void modifier(Object objet) {
    		// TODO Auto-generated method stub
    	}
     
    	public void efface(Object objet) {
    		// TODO Auto-generated method stub
     
    	}
     
     
    package servicesFonctionnels;
     
    public interface IServicesFonctionnels<T> {
     
        public void memoriser(T objet);
     
        public T editer(T objet);
     
        public void modifier(T objet);
     
        public void efface(T objet);
    }
     
    package servicesFonctionnels;
     
    import servicescrud.AccesBDD;
    import servicesunitaires.ServicesUnitairesConsultation;
    import servicesunitaires.ServicesUnitairesPatient;
    import servicesunitaires.ServicesUnitairesTherapeute;
    import toolbox.Message;
    import entites.Consultation;
    import entites.Patient;
    import entites.Therapeute;
    import entites.clesCompose.ConsultationId;
     
    public class ServicesFonctionnelsConsultation implements IServicesFonctionnels<Consultation>{
     
    	private static ServicesUnitairesConsultation suConsultation = new ServicesUnitairesConsultation();
    	private static ServicesUnitairesPatient suPatient = new ServicesUnitairesPatient();
    	private static ServicesUnitairesTherapeute suTherapeute = new ServicesUnitairesTherapeute();
    	private AccesBDD singelton = AccesBDD.getInstance();
     
    	public void memoriser(Consultation pConsultation){
    		singelton.newTransaction();
    		Patient patientRecherche = suPatient.valider(pConsultation.getPatientAppartientConsultation());
    		if(Message.getStatut() == Message.TypeStatut.objetValide){
    			pConsultation.setPatientAppartientConsultation(patientRecherche);
    			Therapeute therapeuteRecherche = suTherapeute.valider(pConsultation.getTherapeuteExecuteConsultation());
    			if(Message.getStatut() == Message.TypeStatut.objetValide){
    				pConsultation.setTherapeuteExecuteConsultation(therapeuteRecherche);
    				suConsultation.validerContrainteTherapeuteSuitPatient(therapeuteRecherche, patientRecherche);
    				if(Message.getStatut() == Message.TypeStatut.ContrainteValideTherapeuteSuitPatient){
    					Consultation consultationRecherche = new Consultation();
    					ConsultationId id = new ConsultationId();
    					id.setDate(pConsultation.getDate());
    					id.setPatient_id(pConsultation.getPatientAppartientConsultation().getId());
    					consultationRecherche.setIdCompose(id);
    					consultationRecherche = suConsultation.valider(consultationRecherche);
    					if(Message.getStatut() == Message.TypeStatut.objetInexistant){
    						pConsultation.setIdCompose(id);
    						suConsultation.creer(pConsultation);
    						Message.setStatut(Message.TypeStatut.objetMemorise);
    					}
    				}
    			}
    		}
    		singelton.endTransaction();
    	}
     
    	public Consultation editer(Consultation pConsultation) {
    		singelton.newTransaction();
    		Consultation consultationRecherche = suConsultation.valider(pConsultation);
    		if(Message.getStatut() == Message.TypeStatut.objetValide){
    			Message.setStatut(Message.TypeStatut.objetEdite);
    		}
    		singelton.endTransaction();
    		return consultationRecherche;
    	}
     
    	public void modifier(Consultation pConsultation) {
    		singelton.newTransaction();
    		if(Message.getStatut() == Message.TypeStatut.objetEdite){
    			suConsultation.mettreAjour(pConsultation);
    			Message.setStatut(Message.TypeStatut.objetModifie);
    		}
    		singelton.endTransaction();
    	}
     
    	public void efface(Consultation pConsultation) {
    		singelton.newTransaction();
    		Consultation consultationRecherche = suConsultation.valider(pConsultation);
    		if(Message.getStatut() == Message.TypeStatut.objetValide){
    			suConsultation.supprimer(consultationRecherche);
    			Message.setStatut(Message.TypeStatut.objetEfface);
    		}
    		singelton.endTransaction();
    	}
     
    }
     
     
    package servicesFonctionnels;
     
     
    import servicescrud.AccesBDD;
    import servicesunitaires.ServicesUnitairesPatient;
    import toolbox.Message;
    import entites.Patient;
     
    public class ServicesFonctionnelsPatient implements IServicesFonctionnels<Patient>{
     
    	private static ServicesUnitairesPatient suPatient = new ServicesUnitairesPatient();
    	private AccesBDD singelton = AccesBDD.getInstance();
     
    	public void memoriser(Patient pPatient) {
    		singelton.newTransaction();
    		suPatient.creer(pPatient);
    		Message.setStatut(Message.TypeStatut.objetMemorise);
    		singelton.endTransaction();
    	}
     
    	public Patient editer(Patient pPatient) {
    		singelton.newTransaction();
    		Patient patientRecherche = suPatient.valider(pPatient);
    		if(Message.getStatut() == Message.TypeStatut.objetValide){
    			Message.setStatut(Message.TypeStatut.objetEdite);
    		}
    		singelton.endTransaction();
    		return patientRecherche;
    	}
     
    	public void modifier(Patient pPatient) {
    		singelton.newTransaction();
    		if(Message.getStatut() == Message.TypeStatut.objetEdite){
    			suPatient.mettreAjour(pPatient);
    			Message.setStatut(Message.TypeStatut.objetModifie);
    		}
    		singelton.endTransaction();
    	}
     
    	public void efface(Patient pPatient) {
    		singelton.newTransaction();
    		Patient patientRecherche = suPatient.valider(pPatient);
    		if(Message.getStatut() == Message.TypeStatut.objetValide){
    			suPatient.supprimer(patientRecherche);
    			Message.setStatut(Message.TypeStatut.objetEfface);
    		}
    		singelton.endTransaction();
    	}
     
     
     
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Par défaut recherche en cours
    Bonjour,

    Je suis entrain de rechercher mais malheureusement ça en marche pas…
    Peut-être que ce bout de code pourrait montrer ce que je veux faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void memoriser(Object objet) {
    		if(objet instanceof IServicesFonctionnels){
    			((IServicesFonctionnels<Object>) objet).memoriser(objet);
    		}
    	}

  3. #3
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    le fond du problème est que la classe qui appelle Model sait, je suppose, quel type d'objet il faut mémoriser (Patient, Consultation, etc.). Malheureusement, il ne transmet pas cette info au modèle qui doit la trouver lui-même en inspectant l'objet fournit.

    Du coup, une solution peut consister à fournir le type au Model pour récupérer l'implémentation qui va bien.
    Cela donnerait côté appelant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    model.getServiceFonctionnel(Consultation.class).memoriser(consultation);
    et côté Model:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Model{
     
     	// Ici un ou des champs contenant les services fonctionnels
     
     	public <T> IServicesFonctionnels<T> getServiceFonctionnel(Class<T> type) {
    		// Renvoi du service adapté en fonction de la classe en paramètre
    	}
    }

  4. #4
    Membre confirmé
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Par défaut merci pour la piste
    Hello,

    Merci beaucoup pour ta réponse!
    J'ai juste un doute comment écrire la méthode getServiceFonctionnel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public <T> IServicesFonctionnels<T> getServiceFonctionnel(Class<T> type) {
    		return IServicesFonctionnels<T> servicesFonctionnelsGenerique = new ServicesFonctionnelsConsultation(); // probleme ici, il je voudrait qu'on fasse un new ServicesFonctionnelsConsultation() ou SFPatient ou SF etc.
    	}
    La seule possibilité que je vois c'est de faire un if type = Consultation -> new ServicesFonctionnelsConsultation()
    Mais en fait sa m'aide pas beaucoup du coup!

    Une idée?
    Merci encore à tous pour votre aide

    P.-S. pour rappel je suis débutant, donc peut-être qu'une notion m'échappe!

  5. #5
    Membre confirmé
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Par défaut recherche en cours
    Donc pour illustrer mes propos ce serait quelque chose comme ça:

    (pas encore fonctionnel) ->

    Merci à tous!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    public <T> IServicesFonctionnels<T> getServiceFonctionnel(Class<T> type) {
    		IServicesFonctionnels<T> servicesFonctionnels = null;
    		switch (type) { // ici il y a une faute que je comprends pas :)
    		case Consultation.class:
    			servicesFonctionnels = (IServicesFonctionnels<T>) new ServicesFonctionnelsConsultation();
    			break;
     
    		default:
    			throw new RuntimeException("le services fonctionnels appelé n'existe pas");
    			break;
    		}
    		return servicesFonctionnels;
    	}

  6. #6
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Le switch ne fonctionne que sur les entiers et les Enums (et les String avec Java7).

    Tu peux faire du if/else avec une comparaison sur la classe.

    Je n'ai pas une assez bonne vision de ton appli, mais je serais tenté de remettre en cause l'existence de ta classe Model. A quoi sert-elle?
    Les classes appelantes ne peuvent-elle pas directement récupérer le IServiceFonctionnel approprié?

  7. #7
    Membre confirmé
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Par défaut modèle MVC
    Hello,

    Merci pour ta réponse c'est plus claire…
    Oui, tu as raison en fait ça sert pas à grand chose!

    C'est ma première application et je peine à mettre en place une architecture cohérente*…

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment implémenter une nouvelle interface graphique
    Par maubrun dans le forum Windows
    Réponses: 6
    Dernier message: 14/09/2008, 20h10
  2. Réponses: 3
    Dernier message: 08/06/2007, 09h50
  3. Deux implémentations pour une interface
    Par apqmwnqmap dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 09/05/2007, 15h21
  4. Liste des implémentations d'une interface
    Par YokoSop dans le forum Langage
    Réponses: 12
    Dernier message: 07/07/2006, 23h37
  5. Réponses: 5
    Dernier message: 23/02/2006, 00h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo