OOAD - Principi orientati agli oggetti

Principi di sistemi orientati agli oggetti

La struttura concettuale dei sistemi orientati agli oggetti si basa sul modello a oggetti. Esistono due categorie di elementi in un sistema orientato agli oggetti:

Major Elements- Per maggiore, si intende che se un modello non ha nessuno di questi elementi, cessa di essere orientato agli oggetti. I quattro elementi principali sono:

  • Abstraction
  • Encapsulation
  • Modularity
  • Hierarchy

Minor Elements- Per minore, si intende che questi elementi sono parte utile, ma non indispensabile del modello a oggetti. I tre elementi minori sono:

  • Typing
  • Concurrency
  • Persistence

Astrazione

Astrazione significa concentrarsi sulle caratteristiche essenziali di un elemento o oggetto in OOP, ignorandone le proprietà estranee o accidentali. Le caratteristiche essenziali sono relative al contesto in cui l'oggetto viene utilizzato.

Grady Booch ha definito l'astrazione come segue:

"Un'astrazione denota le caratteristiche essenziali di un oggetto che lo distinguono da tutti gli altri tipi di oggetti e quindi forniscono confini concettuali ben definiti, relativi alla prospettiva dello spettatore."

Example - Quando viene progettata una classe Student, gli attributi enrolment_number, name, course e address sono inclusi mentre vengono eliminate caratteristiche come pulse_rate e size_of_shoe, poiché sono irrilevanti nella prospettiva dell'istituto scolastico.

Incapsulamento

L'incapsulamento è il processo di associazione di attributi e metodi all'interno di una classe. Attraverso l'incapsulamento, i dettagli interni di una classe possono essere nascosti dall'esterno. La classe dispone di metodi che forniscono interfacce utente mediante le quali è possibile utilizzare i servizi forniti dalla classe.

Modularità

La modularità è il processo di scomposizione di un problema (programma) in un insieme di moduli in modo da ridurre la complessità complessiva del problema. Booch ha definito la modularità come -

"La modularità è la proprietà di un sistema che è stato scomposto in un insieme di moduli coesivi e liberamente accoppiati."

La modularità è intrinsecamente collegata all'incapsulamento. La modularità può essere visualizzata come un modo per mappare astrazioni incapsulate in moduli fisici reali con elevata coesione all'interno dei moduli e la loro interazione o accoppiamento tra moduli è bassa.

Gerarchia

Nelle parole di Grady Booch, "La gerarchia è la classificazione o l'ordinamento dell'astrazione". Attraverso la gerarchia, un sistema può essere costituito da sottosistemi interrelati, che possono avere i propri sottosistemi e così via fino a raggiungere i componenti di livello più piccolo. Utilizza il principio del "divide et impera". La gerarchia consente il riutilizzo del codice.

I due tipi di gerarchie in OOA sono:

  • “IS–A” hierarchy- Definisce la relazione gerarchica nell'ereditarietà, per cui da una superclasse può essere derivato un numero di sottoclassi che possono ancora avere sottoclassi e così via. Ad esempio, se deriviamo una classe Rosa da una classe Fiore, possiamo dire che una rosa "è – un" fiore.

  • “PART–OF” hierarchy- Definisce la relazione gerarchica in aggregazione mediante la quale una classe può essere composta da altre classi. Ad esempio, un fiore è composto da sepali, petali, stami e carpello. Si può dire che un petalo è una "parte di" fiore.

Digitando

Secondo le teorie del tipo di dati astratto, un tipo è una caratterizzazione di un insieme di elementi. In OOP, una classe viene visualizzata come un tipo con proprietà distinte da qualsiasi altro tipo. La digitazione è l'applicazione della nozione che un oggetto è un'istanza di una singola classe o tipo. Inoltre, impone che oggetti di diverso tipo non possano essere generalmente scambiati; e possono essere scambiati solo in modo molto limitato se assolutamente necessario.

I due tipi di digitazione sono:

  • Strong Typing - Qui, il funzionamento su un oggetto viene verificato al momento della compilazione, come nel linguaggio di programmazione Eiffel.

  • Weak Typing- Qui, i messaggi possono essere inviati a qualsiasi classe. L'operazione viene verificata solo al momento dell'esecuzione, come nel linguaggio di programmazione Smalltalk.

Concorrenza

La concorrenza nei sistemi operativi consente di eseguire più attività o processi contemporaneamente. Quando esiste un singolo processo in un sistema, si dice che esiste un unico thread di controllo. Tuttavia, la maggior parte dei sistemi ha più thread, alcuni attivi, alcuni in attesa di CPU, alcuni sospesi e altri terminati. I sistemi con più CPU consentono intrinsecamente thread di controllo simultanei; ma i sistemi in esecuzione su una singola CPU utilizzano algoritmi appropriati per fornire un tempo di CPU equo ai thread in modo da consentire la concorrenza.

In un ambiente orientato agli oggetti, ci sono oggetti attivi e inattivi. Gli oggetti attivi hanno thread di controllo indipendenti che possono essere eseguiti contemporaneamente con thread di altri oggetti. Gli oggetti attivi si sincronizzano tra loro così come con oggetti puramente sequenziali.

Persistenza

Un oggetto occupa uno spazio di memoria ed esiste per un determinato periodo di tempo. Nella programmazione tradizionale, la durata di un oggetto era tipicamente la durata dell'esecuzione del programma che lo ha creato. Nei file o nei database, la durata dell'oggetto è maggiore della durata del processo di creazione dell'oggetto. Questa proprietà per cui un oggetto continua ad esistere anche dopo che il suo creatore cessa di esistere è nota come persistenza.