Domanda

Esiste un principio ingegneristico orientato agli oggetti che afferma qualcosa sulla falsariga di "una classe dovrebbe conoscere solo i contratti delle classi che prende come argomenti, o quelli interni che utilizza. "

Il contro-esempio, in C ++, è:

Foo::bar( Baz* baz)
{
  baz()->blargh()->pants()->soil();  // this is bad, Foo knows about blarghs and pants
}

Questo principio ha un nome? Inoltre, il principio reale piuttosto che la mia parafrasi sopra sarebbe bello da vedere.

È stato utile?

Soluzione

La legge del demeter grazie a Jim Burger dice:

La Legge di Demetra (LoD), o Principio della conoscenza minima, è una linea guida di progettazione per lo sviluppo di software, in particolare programmi orientati agli oggetti. La linea guida è stata inventata alla Northeastern University verso la fine del 1987 e può essere sinteticamente sintetizzata come "Parla solo con i tuoi amici immediati". L'idea fondamentale è che un determinato oggetto dovrebbe assumere il meno possibile sulla struttura o sulle proprietà di qualsiasi altra cosa (compresi i suoi sottocomponenti).

Altri suggerimenti

Ciò può o non può essere compilato (a causa delle parentesi dopo il puntatore baz), ma il tuo esempio rompe almeno un principio a cui riesco a pensare. Infrange la Legge di Demetra (credo anche chiamata Legge della parsimonia). I principi principali possono essere trovati qui: SOLID Principi

A parte questi, non sono sicuro che esista un nome specifico per quello che stai descrivendo. Puoi cercare la Legge di Demetra su wikipedia.

Guarda I principi SOLID di Robert Martin . In particolare, guarda il Principio della responsabilità singola . La complessa catena di dipendenze nel tuo esempio sembra spezzare l'SRP.

L'incapsulamento - di per sé - non è un principio. Fa parte del raggiungimento dei vari principi. Insieme a eredità, polimorfismo e altre caratteristiche OO più oscure.

Vorrei dire qui che una buona incapsulamento aiuta a ridurre accoppiamento - - che è un buon obiettivo per qualsiasi incapsulamento decente a parte l'ovvio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top