OOAD - Modello a oggetti

Il modello a oggetti visualizza gli elementi in un'applicazione software in termini di oggetti. In questo capitolo esamineremo i concetti e le terminologie di base dei sistemi orientati agli oggetti.

Oggetti e classi

I concetti di oggetti e classi sono intrinsecamente collegati tra loro e costituiscono la base del paradigma orientato agli oggetti.

Oggetto

Un oggetto è un elemento del mondo reale in un ambiente orientato agli oggetti che può avere un'esistenza fisica o concettuale. Ogni oggetto ha -

  • Identità che lo distingue dagli altri oggetti del sistema.

  • Stato che determina le proprietà caratteristiche di un oggetto nonché i valori delle proprietà che l'oggetto possiede.

  • Comportamento che rappresenta le attività visibili esternamente eseguite da un oggetto in termini di cambiamenti nel suo stato.

Gli oggetti possono essere modellati in base alle esigenze dell'applicazione. Un oggetto può avere un'esistenza fisica, come un cliente, un'auto, ecc .; o un'esistenza concettuale intangibile, come un progetto, un processo, ecc.

Classe

Una classe rappresenta una raccolta di oggetti con le stesse proprietà caratteristiche che mostrano un comportamento comune. Fornisce il progetto o la descrizione degli oggetti che possono essere creati da esso. La creazione di un oggetto come membro di una classe è chiamata istanziazione. Quindi, object è un'istanza di una classe.

I componenti di una classe sono:

  • Un insieme di attributi per gli oggetti che devono essere istanziati dalla classe. Generalmente, diversi oggetti di una classe hanno qualche differenza nei valori degli attributi. Gli attributi sono spesso indicati come dati di classe.

  • Un insieme di operazioni che ritraggono il comportamento degli oggetti della classe. Le operazioni vengono anche chiamate funzioni o metodi.

Example

Consideriamo una classe semplice, Circle, che rappresenta il cerchio della figura geometrica in uno spazio bidimensionale. Gli attributi di questa classe possono essere identificati come segue:

  • x – coord, per denotare la coordinata x del centro
  • y – coord, per denotare la coordinata y del centro
  • a, per indicare il raggio del cerchio

Alcune delle sue operazioni possono essere definite come segue:

  • findArea (), metodo per calcolare l'area
  • findCircumference (), metodo per calcolare la circonferenza
  • scale (), metodo per aumentare o diminuire il raggio

Durante la creazione di istanze, vengono assegnati valori per almeno alcuni degli attributi. Se creiamo un oggetto my_circle, possiamo assegnare valori come x-coord: 2, y-coord: 3 e a: 4 per rappresentare il suo stato. Ora, se l'operazione scale () viene eseguita su my_circle con un fattore di scala di 2, il valore della variabile a diventerà 8. Questa operazione porta un cambiamento nello stato di my_circle, cioè l'oggetto ha mostrato un certo comportamento.

Incapsulamento e occultamento dei dati

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. Permette di accedere agli elementi della classe dall'esterno solo attraverso l'interfaccia fornita dalla classe.

Dati nascosti

Tipicamente, una classe è progettata in modo tale che i suoi dati (attributi) siano accessibili solo tramite i suoi metodi di classe e siano isolati dall'accesso esterno diretto. Questo processo di isolamento dei dati di un oggetto è chiamato nascondere i dati o nascondere le informazioni.

Example

Nella classe Circle, l'occultamento dei dati può essere incorporato rendendo invisibili gli attributi dall'esterno della classe e aggiungendo altri due metodi alla classe per accedere ai dati della classe, vale a dire:

  • setValues ​​(), metodo per assegnare valori a x-coord, y-coord e a
  • getValues ​​(), metodo per recuperare i valori di x-coord, y-coord e a

Qui i dati privati ​​dell'oggetto my_circle non sono accessibili direttamente da nessun metodo che non sia incapsulato all'interno della classe Circle. Dovrebbe invece essere accessibile tramite i metodi setValues ​​() e getValues ​​().

Passaggio del messaggio

Qualsiasi applicazione richiede una serie di oggetti che interagiscono in modo armonioso. Gli oggetti in un sistema possono comunicare tra loro utilizzando il passaggio di messaggi. Supponiamo che un sistema abbia due oggetti: obj1 e obj2. L'oggetto obj1 invia un messaggio all'oggetto obj2, se obj1 vuole che obj2 esegua uno dei suoi metodi.

Le caratteristiche del passaggio dei messaggi sono:

  • Il messaggio che passa tra due oggetti è generalmente unidirezionale.
  • Il passaggio dei messaggi consente tutte le interazioni tra gli oggetti.
  • Il passaggio di messaggi implica essenzialmente il richiamo di metodi di classe.
  • Oggetti in processi diversi possono essere coinvolti nel passaggio dei messaggi.

Eredità

L'ereditarietà è il meccanismo che consente di creare nuove classi a partire da classi esistenti estendendo e perfezionando le sue capacità. Le classi esistenti sono chiamate classi base / classi padre / superclassi e le nuove classi sono chiamate classi derivate / classi figlio / sottoclassi. La sottoclasse può ereditare o derivare gli attributi ei metodi della / e superclasse a condizione che la superclasse lo consenta. Inoltre, la sottoclasse può aggiungere i propri attributi e metodi e può modificare qualsiasi metodo della superclasse. L'ereditarietà definisce una relazione "è - un".

Example

Da una classe Mammifero, è possibile derivare un certo numero di classi come Umano, Gatto, Cane, Mucca, ecc. Gli esseri umani, i gatti, i cani e le mucche hanno tutti le caratteristiche distinte dei mammiferi. Inoltre, ognuno ha le sue caratteristiche particolari. Si può dire che una mucca "è - un" mammifero.

Tipi di ereditarietà

  • Single Inheritance - Una sottoclasse deriva da una singola superclasse.

  • Multiple Inheritance - Una sottoclasse deriva da più di una superclasse.

  • Multilevel Inheritance - Una sottoclasse deriva da una superclasse che a sua volta deriva da un'altra classe e così via.

  • Hierarchical Inheritance - Una classe ha un numero di sottoclassi ognuna delle quali può avere sottoclassi successive, continuando per un numero di livelli, in modo da formare una struttura ad albero.

  • Hybrid Inheritance - Una combinazione di eredità multipla e multilivello in modo da formare una struttura reticolare.

La figura seguente mostra gli esempi di diversi tipi di ereditarietà.

Polimorfismo

Il polimorfismo è originariamente una parola greca che significa la capacità di assumere più forme. Nel paradigma orientato agli oggetti, il polimorfismo implica l'utilizzo di operazioni in modi diversi, a seconda dell'istanza su cui stanno operando. Il polimorfismo consente a oggetti con diverse strutture interne di avere un'interfaccia esterna comune. Il polimorfismo è particolarmente efficace durante l'implementazione dell'ereditarietà.

Example

Consideriamo due classi, Circle e Square, ciascuna con un metodo findArea (). Sebbene il nome e lo scopo dei metodi nelle classi siano gli stessi, l'implementazione interna, ovvero la procedura di calcolo dell'area, è diversa per ciascuna classe. Quando un oggetto della classe Circle invoca il suo metodo findArea (), l'operazione trova l'area del cerchio senza alcun conflitto con il metodo findArea () della classe Square.

Generalizzazione e specializzazione

La generalizzazione e la specializzazione rappresentano una gerarchia di relazioni tra classi, dove le sottoclassi ereditano dalle superclassi.

Generalizzazione

Nel processo di generalizzazione, le caratteristiche comuni delle classi vengono combinate per formare una classe in un livello gerarchico superiore, cioè le sottoclassi vengono combinate per formare una superclasse generalizzata. Rappresenta una relazione "è - una - specie - di". Ad esempio, "la macchina è un tipo di veicolo terrestre" o "la nave è un tipo di veicolo acquatico".

Specializzazione

La specializzazione è il processo inverso della generalizzazione. Qui, le caratteristiche distintive dei gruppi di oggetti vengono utilizzate per formare classi specializzate da classi esistenti. Si può dire che le sottoclassi sono le versioni specializzate della superclasse.

La figura seguente mostra un esempio di generalizzazione e specializzazione.

Collegamenti e associazione

Link

Un collegamento rappresenta una connessione attraverso la quale un oggetto collabora con altri oggetti. Rumbaugh lo ha definito come “una connessione fisica o concettuale tra oggetti”. Tramite un collegamento, un oggetto può richiamare i metodi o navigare attraverso un altro oggetto. Un collegamento rappresenta la relazione tra due o più oggetti.

Associazione

L'associazione è un gruppo di collegamenti aventi una struttura comune e un comportamento comune. L'associazione rappresenta la relazione tra gli oggetti di una o più classi. Un collegamento può essere definito come un'istanza di un'associazione.

Grado di associazione

Il grado di un'associazione indica il numero di classi coinvolte in una connessione. Il grado può essere unario, binario o ternario.

  • UN unary relationship collega oggetti della stessa classe.

  • UN binary relationship collega oggetti di due classi.

  • UN ternary relationship collega oggetti di tre o più classi.

Rapporti di cardinalità delle associazioni

La cardinalità di un'associazione binaria indica il numero di istanze che partecipano a un'associazione. Esistono tre tipi di rapporti di cardinalità, ovvero:

  • One–to–One - Un singolo oggetto di classe A è associato a un unico oggetto di classe B.

  • One–to–Many - Un singolo oggetto di classe A è associato a molti oggetti di classe B.

  • Many–to–Many - Un oggetto di classe A può essere associato a molti oggetti di classe B e viceversa un oggetto di classe B può essere associato a molti oggetti di classe A.

Aggregazione o composizione

L'aggregazione o composizione è una relazione tra classi mediante la quale una classe può essere composta da qualsiasi combinazione di oggetti di altre classi. Consente di posizionare gli oggetti direttamente all'interno del corpo di altre classi. L'aggregazione è indicata come una relazione "parte-di" o "ha-una", con la capacità di navigare dall'intero alle sue parti. Un oggetto aggregato è un oggetto composto da uno o più altri oggetti.

Example

Nella relazione, "una macchina ha - un motore", l'auto è l'oggetto intero o l'aggregato, e il motore è una "parte - della" macchina. L'aggregazione può denotare:

  • Physical containment - Ad esempio, un computer è composto da monitor, CPU, mouse, tastiera e così via.

  • Conceptual containment - Esempio, l'azionista ha una quota.

Vantaggi del modello a oggetti

Ora che abbiamo esaminato i concetti fondamentali relativi all'orientamento agli oggetti, varrebbe la pena notare i vantaggi che questo modello ha da offrire.

I vantaggi dell'utilizzo del modello a oggetti sono:

  • Aiuta nello sviluppo più rapido del software.

  • È facile da mantenere. Supponiamo che un modulo sviluppi un errore, quindi un programmatore può correggere quel particolare modulo, mentre le altre parti del software sono ancora attive e in esecuzione.

  • Supporta aggiornamenti relativamente senza problemi.

  • Consente il riutilizzo di oggetti, design e funzioni.

  • Riduce i rischi di sviluppo, in particolare nell'integrazione di sistemi complessi.