Modularità vs Polimorfismo (concetti principali OOD)

1

Booch fornisce 4 concetti principali (principi) di OOD (vedi il suo libro Analisi orientata agli oggetti e progettazione con applicazioni):

  1. Astrazione
  2. incapsulamento
  3. Modularità
  4. Gerarchia

Di solito ci imbattiamo in questi 4:

  1. Astrazione
  2. incapsulamento
  3. Il polimorfismo
  4. Inheritance

Sono quelli equivalenti? Dovrei capire la modularità come un altro termine per il polimorfismo? Come dalla definizione di Booch, non ho questa sensazione:

Modularity is the property of a system that has been decomposed into a set of cohesive and loosely coupled modules.

Per quanto comprendo qui i moduli sono come i pacchetti Java. Non so se questo è ciò che significa Booch.

    
posta Narek 07.04.2016 - 15:08
fonte

3 risposte

2

Modularità e polimorfismo non sono la stessa cosa.

Il polimorfismo ti permette di avere un riferimento ad un certo tipo di interfaccia (uso la parola in un senso agnostico della lingua) senza conoscere o preoccupare (essendo accoppiato) l'implementazione. Ti consente di modificare il comportamento del codice cambiando i tipi / l'implementazione che usi.

La modularità è, come indicato nella tua citazione, una misura di quanto bene diviso in blocchi il tuo codice. Molto approssimativamente, se diverse parti del tuo sistema possono essere scambiate senza rompere cose non correlate, maggiore è la tua modularità. Si tratta di creare cose complesse da semplici, invece di costruire una cosa complessa fin dall'inizio.

I due sono talvolta correlati (il polimorfismo è un ottimo strumento per il disaccoppiamento che può aiutare a raggiungere una maggiore coesione che può portare a una maggiore modularità, ma non sono la stessa cosa, e non implica necessariamente l'altro.

    
risposta data 07.04.2016 - 15:18
fonte
2

i Principi OO che menzioni nel primo elenco sono linee guida per la progettazione del programma. (ce ne sono altri oltre a quelli: SOLID per esempio.)

I principi OO sono una raccolta di idee e parte della mentalità di OO; la comprensione dei principi OO come l'astrazione, l'incapsulamento e la modularità ti aiuterà a prendere buone decisioni progettuali di fronte al compito di creare nuove classi nel codice.

Alcune di queste decisioni potrebbero includere

  • Quale nome scelgo per una classe o un metodo?
  • A quale classe appartiene un metodo o campo / proprietà?
  • Devo aggiungere questa linea di codice a un metodo o crearne uno nuovo?
  • Una classe dovrebbe essere divisa in più classi separate?
  • Le due classi dovrebbero essere unite insieme?
  • Quali altre classi dovrebbero avere accesso all'interfaccia di una classe?

D'altra parte, Polymorphism e Ereditarietà non sono principi ma strumenti linguistici; proprio come for e while sono strumenti di linguaggio.

Anche se sono spesso citati come le caratteristiche linguistiche che definiscono la programmazione OO, questa linea di pensiero è in qualche modo fuorviata perché può essere usata in modi che si scontrano con molti principi OO. Un sacco di codice OO eccezionalmente buono è stato scritto senza utilizzare l'ereditarietà o il polimorfismo.

Ci sono occasioni in cui l'ereditarietà e il polimorfismo sono strumenti utili, proprio come ci sono occasioni in cui do..while o switch sono strumenti utili; e dovresti certamente capire cosa sono e come / quando usarli.

Tuttavia è un errore considerare o l'ereditarietà o il polimorfismo come principi OO, o che siano "obiettivi" su cui lavorare. La realtà è che possono e sono spesso oggetto di abusi, con conseguente codice errato (di solito da parte dei programmatori che ritengono che qualsiasi utilizzo dell'eredità sia una buona cosa o che trattano l'ereditarietà come strumento di riutilizzo del codice).

    
risposta data 07.04.2016 - 22:21
fonte
-1

n. 3 e 4 non sono equivalenti. Il polimorfismo e la modularità, come affermato in un'altra risposta, sono cose molto diverse. E l'ereditarietà delle classi è un modo in cui il linguaggio di programmazione moderno offre la gerarchia attraverso un modello "è un".

    
risposta data 07.04.2016 - 15:20
fonte