Title: Linguaggi di Programmazione Secondo Semestre / 08 - OOP

Q: Tipi di dato astratto
A: I tipi di dato astratto sono dei tipi a cui si può accedere solo attraverso l'interfaccia.
L'atrazione di questi tipi di dato ha il vantaggio che astrae un interfaccia all'utente.
Con gli ADT abbiamo:
- nome del tipo astratto A
- la rappresentazione concreta (che viene nascosta) T
- implemntazioni di operazioni per la manipolazioni dei valori di A
- L'astrazione rende T modificabile attraverso le operazioni in A
L'information hiding migliora la componibilità del codice, avendo una indipendenza dalla rappresentazione.
(es. il tipo astratto per avere type saifty non dovrebbe avere side-effects cioè andare oltre alla loro competenza)
Questo porta alla rapresentation indipendence

Q: Moduli
A: I moduli servono per aggregare più ADT,funzioni etc.. con competenza simile. Vengono accopagnati dagli operatori di visibilità per nascondere l'implementazione

Q: Oggetti Esistenziali e Tipi esistenziali
A: ## Tipo esistenziale
Nell'esistenziale vogliamo un oggetto che deve avere certe proprietà.
> N.B. La definizione precedente di SC non gestisce uno stato interno (né lavora con i riferimenti) come l'esempio più complesso di Rust, che implementa una forma ibrida di ADT.
negli esistenziali è  impossibile avere più implementazioni interoperanti dello stesso tipo di dato astratto (se definisco due CounterADT con due tipi esistenziali differneti non possiamo utilizziare le operazioni tra loro)
Nei tipi esistenziali abbiamo solo un istanza per implmentazione c'è un dato per tipo
## Oggetti esistenziali
Gli oggetti esistenziali consente a più implmentazioni dello stesso tipo esistenziale di interagire.
Gli oggetti esistenziali mangengono all'interno e portano l'associazione con il loro tipo esistenziale
ogni oggetto ha la propria rappresentazione interna e implementa le proprie operazioni, un programma può liberamente mescolare implementazioni diverse dello stesso tipo di oggetto (esistenziale)
Inoltre si può mischiare con il sottotipaggio ed ereditarietà, poichè le istanze condividono lo stesso tipo esistenziale possono essere manipolate dallo stesso codice client.

Q: Oggetti
A: oggetto: una capsula che contiene sia dati che operazioni per manipolarli e che fornisce un'interfaccia al mondo esterno attraverso la quale è possibile accedervi.
ammissibile che ogni oggetto specifichi la propria implementazione, può diventare difficile da gestire e dispendioso specificare molte volte la stessa implementazione solo per avere istanze diverse dello stesso oggetto
Una classe è un modello per un insieme di oggetti: stabilisce i loro dati, fissa il noome e le signature la visibilità e implementazione dei metodi.