Consiglio oop su queste classi

di il
11 risposte

Consiglio oop su queste classi

Buonasera ,

Mi date per favore un consiglio su come rendere oop l'utilizzo di due classi che qui riporto come esempio o come "scheletro".

Vorrei poter creare una terza classe che possa accedere ai metodi di entambe.
Entrame la classi hanno metodi in override , all'interno dei quali vorrei in qualche modo accedere ai metodi dell'altra classe che sono sempre
in override ed eventualmente ai metodi che aggiungo.
Ho implementato diverse soluzioni che però mi portano sempre ad accedere in una sola direzione.
Ad esempio posso accedere al Framework1 ma non al Framework2 o viceversa.
Ho utilizzato un observer/observable che funziona , ma successivamente si presenta lo stesso problema .

Prima classe che eredità da un framework. Il framework1

public class Classe1 extends Framework1{
    
        public Classe1 () {
        }
        
        @Override
        public void onEvent4() { // Esempio evento per classe Classe1
        }
}



Seconda classe che estende il listener . Crea un oggetto di un altro Framework. Il framework2.

public class Classe2 extends ListenerAdapter{
    
        private Framework2 framework2;
    
        public Classe2 () {

            framework2 = new Framework2();
            framework2.addEventListener(new Classe2());
            
        }
        
        @Override
        public void onEvent2 () { // esempio evento per classe Classe2
            
        }
}

public class Main {
    public static void main(String[] args) {

    }
}

11 Risposte

  • Re: Consiglio oop su queste classi

    Cyrano ha scritto:


    Vorrei poter creare una terza classe che possa accedere ai metodi di entambe.
    Allora questa terza classe deve poter ricevere (e tenersi) i riferimenti ad un oggetto Classe1 e un oggetto Classe2. Puoi farlo?
  • Re: Consiglio oop su queste classi

    ..ho ragionato così:
    Dovrei "multiereditare".
    Le due classi , Classe1 e Classe2 , svolgono le stesse funzioni , ma con metodi diversi nelle definizioni e nel numero perchè si interfacciano a 2 mondi diversi ( sono due protocolli).
    La terza classe risponderebbe quindi alla domanda is-a.
    Devo creare una terza classe , Classe3, perchè Classe1 ha già una super-classe. ( non credo comunque di essere obbligato a estenere class1 per utilizzare il framework1)

    Sto pensando a:
    - La classe 2 può essere una inner class?
    - Creare una interfaccia

    Edit:
    Ho letto meglio la tua domanda. Si posso creare due oggetti di Classe1 e Classe2 e poi forse ereditare
  • Re: Consiglio oop su queste classi

    Cyrano ha scritto:


    Dovrei "multiereditare".
    Non puoi, non "di classe".

    Cyrano ha scritto:


    La terza classe risponderebbe quindi alla domanda is-a.
    Prima hai solamente detto "che possa accedere ai metodi di entambe". E per questo, cioè poter invocare dei metodi in quelle due classi, è sufficiente avere i riferimenti.
  • Re: Consiglio oop su queste classi

    Provo
  • Re: Consiglio oop su queste classi

    Il punto però è .... cosa vuoi farci.
  • Re: Consiglio oop su queste classi

    In origine sono due protocolli implementati in due client differenti. Il mio programma ( chiamiamelo per esempio bridge) deve "unire" questi due mondi "traducendo" i comandi di uno e dell'altro ogni volta che Framework1 vuole parlare con Framework2 e viceversa.
    esempio:
    
    Bridge ascolta entrambi  ( OnEvent)  -> Framework1 vuole inviare un messaggio a Framework2 = Bridge prende il messaggio testuale di  Framework 1 e usa Framework 2 per parlare con server srv2
    
    Bridge ascolta entrambi  ( OnEvent)  -> Framework2 vuole inviare un messaggio a Framework1 = Bridge prende il messaggio testuale di  Framework 2 e usa Framework 1 per parlare con server srv1
    
    
  • Re: Consiglio oop su queste classi

    A parte il fatto che in Classe2 nel costruttore quel new Classe2() non ha senso (e tra l'altro consumi stack fino ad un bel StackOverflowError) ... continuo a non capire a cosa servirebbe la terza classe.
  • Re: Consiglio oop su queste classi

    andbin ha scritto:


    A parte il fatto che in Classe2 nel costruttore quel new Classe2() non ha senso (e tra l'altro consumi stack fino ad un bel StackOverflowError)
    Quando ho aperto il topic ho fatto un errore di trascrizione..Credo sia quello un annidamento infinito

    andbin ha scritto:


    ... continuo a non capire a cosa servirebbe la terza classe.
    All'inizio volevo avere entrambi i riferimenti delle due classi, ma con te mi sono reso conto che è una sciochezza.
    Ora ho scoperto che Classe 1 eredita Framework 1 perchè Framework1 è astratto e quindi non posso instanziare e fare tutto in una classe con due oggetti Classe1 e Classe2.
    Devo per forza ereditare , ma in java non posso scrivere extends classe,classe, visto che devo estendere anche ListenerAdapter Quindi sono di nuovo nei guai perchè dovrei farlo con le interfacce (?) oppure con una terza classe, sinceramente non lo so
  • Re: Consiglio oop su queste classi

    Buongiorno ,
    Mi son complicato la vita per nulla insieme ad un paio di NullPointer che mi hanno fatto credere di essere sulla strada sbagliata
    Mi sono svincolato da tutto ed è funzionante, posso accedere a tutti i metodi di una e dell'altra e con tutti gli event registrati. Non uso più Observer/Observable.

    Nel Main
    
            classA = new ClassA();   /* New classA Object  */
            classB = new ClassB();   /* New classB Object   */
            classA.login(classB);     /* classA Login to classB */ Passa l'istanza a ClassA
            classB.login(classA);     /* classB Login to classA */ Passa l'istanza a ClassB
    
    Ora che lo vedo sembra banale . ( anzi lo è )
    Grazie e scusami se ti ho fatto perdere tempo ))
  • Re: Consiglio oop su queste classi

    Vabbè ... non ci ho capito granché ... non so cosa sono per te Framework1/Framework2, non so a cosa servono, non so cosa stai realizzando in generale ...
    Ma se hai risolto .....
  • Re: Consiglio oop su queste classi

    Si volevo semplificare al massimo l'esposizione del problema .Non c'è tutto lo sto riscrivendo;
    Main - https://pastebin.com/50mkzb4
    ClasseA - https://pastebin.com/WzJ11Lg
    ClasseB - https://pastebin.com/ZP8Trke
Devi accedere o registrarti per scrivere nel forum
11 risposte