Quale classe dovrebbe avere il metodo "interseca"?

4

Ho una classe Circle e una classe LineSegment , e voglio implementare un metodo che restituisca due punti (o uno o nessuno) per le intersezioni.

Come faccio a sapere in quale classe inserire questo metodo? Sarebbe meglio un separato "middle-man" Intersections class?

    
posta MCMastery 24.02.2018 - 16:35
fonte

4 risposte

8

Che ne pensi di implementare una funzione gratuita che assuma i soggetti come parametri, invece di legarli a una classe specifica, se non sai dire a chi dovrebbe appartenere in modo specifico?

Would a separate "middle-man" Intersections class be better?

Se stai lavorando con un linguaggio di programmazione come c # o java, che non supporta le funzioni gratuite , probabilmente dovresti avere una classe Intersections ( static ), ad es. come in c #:

public static class Intersections {
    public static IList<Point> GetIntersectionPoints(Circle c, LineSegment ls) {
        // ...
    }
}
    
risposta data 24.02.2018 - 16:40
fonte
3

Quindi potresti considerare una classe di base Shape o interface IShape dove viene dichiarato il metodo Intersection . Puoi sovrascriverlo in modo che ogni forma possa implementare la propria versione.

Tuttavia, alla fine, probabilmente avrai bisogno di doppia spedizione se utilizzi una lingua che non avere invio multiplo o multi-metodi.

Anche se il doppio invio a volte è un odore di codice, penso che quando si ha una funzione come l'intersezione tra due forme, che deve comprendere entrambe le forme per funzionare bene, sembra appropriato.

    
risposta data 24.02.2018 - 17:03
fonte
1

La classe di Intersections indipendente sembra una buona idea. Per farlo funzionare con tipi diversi (linee, cerchi, ellissi, quadrati, esagoni) è possibile utilizzare l'overload della funzione comune "GetIntersectionPoints". Le sezioni di codice ripetute possono essere ridotte definendo le funzioni di supporto esclusive della classe Intersections utilizzate solo nella classe Intersections.

    
risposta data 25.02.2018 - 13:50
fonte
0

Penso che l'intersezione non sia qualcosa di un cerchio, né la linea dovrebbe sapere. Dovrebbe esserci qualcosa di più alto, come un'Plane' o più astratto 'ShapeOnAPlaneRelation' con un metodo di cui hai bisogno.

    
risposta data 24.02.2018 - 18:02
fonte

Leggi altre domande sui tag