In questa guida tratteremo gli aspetti dell'analisi e della progettazione orientata agli oggetti. Per fare ciò utilizzeremo un linguaggio di modellazione chiamato UML (Unified Modelling Language), il quale ci aiuterà a rappresentare, soprattutto graficamente, cosa il nostro programma dovrà fare. Inoltre l'UML fornisce una rappresentazione molto chiara e compatta dell'intera struttura dell'applicazione che andremo ad analizzare.
Un po' di storia
Per quanto riguarda l'età dell'UML possiamo dire che è abbastanza recente in quanto la prima versione dell'UML è stata redatta dall'OMG (Object Management Group) nel 1997. Possiamo dire che le prime tecniche per la modellazione della struttura di un'applicazione risalgono a circa una decina di anni prima rispetto al rilascio del linguaggio UML vero e proprio. Queste metodologie, presentate da enti diversi, avevano i loro pregi e i loro difetti, ma il grande problema, in quel periodo, era che le varie metodologie proposte non presentavano un set di simboli universali, ma ogni metodologia ne adottava uno diverso dalle altre. Questa mancanza di simboli universali portava a conseguenti problemi di interpretazione, infatti un simbolo che per una metodologia di modellazione rappresentava l'associazione, magari per un'altra metodologia rappresentava una specializzazione di una classe. Questo causava frequenti incomprensioni nella lettura degli schemi prodotti e quindi si sentì l'esigenza di dover stabilire un set di simboli universali e creare una metodologia unica. Da questa volontà di standardizzare questo linguaggio, nacque appunto l'UML che racchiude i principali punti di forza delle metodologie che precedentemente erano state proposte.
A cosa serve UML?
Adesso il lettore potrebbe chiedersi: ma quale è la vera utilità dell'UML? Iniziamo con il fare un'analogia pratica applicata alla vita reale: UML è il linguaggio che consente di realizzare il progetto che un costruttore segue per realizzare la sua opera. E' impensabile costruire un palazzo senza un solido progetto iniziale da seguire fedelmente. Capito quindi, nella pratica cosa è l'UML, vediamo i principali punti di forza del linguaggio:
L'UML è un linguaggio molto semplice da imparare e molto intuitivo e ciò consente un rapido apprendimento di tutte le metodologie più importanti. Inoltre è estramente più semplice leggere uno schema di un'applicazione fatto in UML piuttosto che leggere il codice sorgente dell'applicazione stessa. Infatti la lettura dello schema UML permette una rapida comprensione delle varie funzionalità e tutte le relazioni tra i vari oggetti che la compongono, tutto ciò anche senza una conoscenza approfondita dell'UML. Situazione opposta è la lettura di codice sorgente di un'applicazione con un gran numero di classi: ciò richiede sicuramente molto più tempo rispetto alla lettura di uno schema UML e richiede un elevatissima conoscenza del linguaggio in cui l'applicazione è stata scritta.
La modifica di uno schema UML è estremamente più semplice rispetto ad una modifica da apportare ad un codice sorgente già scritto. Infatti molti dei bug che i software presentano sono dovuti ad un'errata fase di progettazione, che ha portato i programmatori a modificare la struttura del programma in fase di scrittura del codice. Immaginate infatti di programmare in C++ e avere una classe che possiede un certo numero di attributi e diversi metodi che compiono delle operazioni su questi attributi. Ad un certo punto della stesura del codice vi accorgete che un attributo dichiarato come string debba essere modificato in char *. Dovremo rimettere le mani in tutta la classe in quanto dovranno essere modificati tutti i file header con i prototipi dei vari metodi e anche tutte le varie implementazioni dei metodi. Capite bene che se si ha a che fare con progetti di grosse dimensioni ciò può portare ad uno spreco di tempo molto consistente ed un'alta probabilità di introdurre bug nel software.
In sostanza possiamo dire che se si crea un modello UML robusto e ben strutturato non avremo nessun problema a convertirlo in righe di codice e poi in un programma realmente funzionante. La raccomandazione che posso farvi è che conviene sempre spendere qualche ora in più nella revisione e nel miglioramento del vostro modello UML piuttosto che modificare successivamente il codice sorgente dell'applicazione.
Nel capitolo precedente abbiamo introdotto le caratteristiche principali del linguaggio UML. Possiamo dire che la vera utilità dell'UML può essere apprezzato solo ed esclusivamente quando si ha a che fare con la produzione di software di dimensioni considerevoli, con un numero di classi elevate e le relazioni tra le stesse abbastanza articolate. In progetti piccoli, come per esempio la...
Come esistono gli IDE di sviluppo per i linguaggi di programmazione esitono anche svariati editor che aiutano e velocizzano notevolmente la modellazzione nel linguaggio UML. Esistono svariati editor, sia quelli a pagamento sia quelli gratuiti. In questa guida viene, volutamente, tralasciata la trattazione per quanto riguarda gli editor a pagamento in quanto, essendo questa una guida indirizzata a chi...
Spiegato che cosa si intende per sviluppo software e forniti al lettore gli strumenti necessari per produrre diagrammi UML, possiamo iniziare la trattazione del linguaggio definendo i possibili diagrammi che possono essere realizzati. In questo elenco verranno citati solo i diagrammi più utilizzati, tralasciando volutamente gli altri. Al fine di comprendere molto rapidamente la guida si consiglia di avere...
Nel capitolo precedente abbiamo definito, in maniera molto rigorosa, che cosa è una classe. Data la rigorosità della definiszione, è possibile rimanere ancora distanti dal concetto di classe e per questo motivo è opportuno fornire alcuni esempi chiarificatori. Per quanto riguarda le entità fisiche una classe può rappresentare il concetto di casa, mentre per quanto riguarda entità applicative si...
Nel capitolo precedente abbiamo definito il concetto di classe. Adesso andremo a vedere come è possibile legare varie classi presenti nel nostro progetto con una relazione di associazione. Iniziamo con il dire che l'associazione, in UML, viene rappresentata da una linea che collega due classi. Solitamente agli estremi di questa linea si indicano le molteplicità della relazione , ovvero...
Nel capitolo precedente abbiamo definito in maniera chiara ed esaustiva che cosa si intende per associazione. In questo capitolo analizziamo altri tipi di associazione, per certi versi un po' più complessi, dette aggregazione e composizione. Spesso questo tipo di relazioni tra classi tendono ad essere confuse oppure ad essere utilizzate in maniera errata dato che la differenza che intercorre...
Fino a questo momento abbiamo parlato di classi, associazioni con le relative molteplicità, aggregazioni e composizioni. Solo con la conoscenza di questi strumenti è possibile realizzare diagrammi delle classi per progetti abbastanza articolati, ma per poter progettare software complessi è necessario introdurre alcuni concetti di programmazione ad oggetti come la derivazione e le interfacce .
Derivazione
Richiamiamo adesso il concetto di...
Arrivato a questo punto della trattazione il lettore ha tutti gli strumenti necessari per la realizzazione di qualsiasi diagramma delle classi, dal più banale al più complesso. Quello che però manca al lettore è una linea guida di come passare da una descrizione di un progetto, in maniera testuale, alla costruzione di un diagramma delle classi corretto e robusto....
Continuando nella lettura troveremo inoltre la classe custode. In questo caso non possiamo più utilizzare un attributo per identificare il custode dei recinti di terra e il sub che si occupa dell'area degli animali acquatici in quanto per i sub è richiesto un ulteriore attributo che sono le ore di immersioni totali (rappresentano l'esperienza di un sub). In questo...
Nei capitoli precedenti abbiamo analizzato il diagramma delle classi fornendo tutti gli strumenti necessari per la realizzazione di diagrammi di grosse dimensioni e di elevata complessità. Adesso analizzeremo un altro tipo di diagrammi anche questi molto utilizzati e importanti per la realizzazione di un progetto realmente funzionante: questi diagrammi sono i diagrammi dei casi d'uso. Ma cosa sono i...
Le relazioni nei diagrammi dei casi d'uso sono in numero nettamente inferiore rispetto ai diagrammi delle classi. Per quanto riguarda le relazioni esistenti tra gli attori, l'unica ammessa è la generalizzazione/specializzazione. Il concetto di questa relazione è identico a quello espresso nei diagrammi delle classi infatti la specializzazione di un attore è una sorta di qualificazione più specifica dell'attore...
Mostriamo adesso un esempio pratico e ragionato per la modellazzione di diagrammi dei casi d'uso in uno scenario un po' più ampio utilizzando tutte e tre le relazioni che abbiamo presentato nel capitolo precedente. Facendo un paragone con i diagrammi delle classi: questi diagrammi rispettano la struttura del nostro progetto e perciò la modellazzione non presenta molte libertà e...
Continuiamo adesso la realizzazione del nostro progetto. Abbiamo gestito il caso in cui l'utente acquisti il prodotto e non sia registrato, adesso bisogna gestire il caso in cui l'utente, già registrato, effettua il login e il nostro sistema verifica username e password inserite. Potremo inserire il controllo delle credenziali direttamente all'interno del caso d'uso acquisto prodotto, ma la verifica...
Andiamo adesso ad analizzare un altro tipo di diagramma: i diagrammi di sequenza. Nei capitoli precedenti abbiamo visto che i diagrammi dei casi d'uso forniscono informazioni sulle interazioni tra gli uteti e il nostro sistema, ma il caso d'uso in se non ci dava informazioni su cosa avvenisse realmente all'interno del nostro sistema. I diagrammi di sequenza servono per...
Continuiamo adesso il nostro esempio sul prestito dei libri. Come nel caso precedente mostriamo il diagramma UML ultimato per poi commentarlo in maniera dettagliata:
Premettiamo che nel diagramma sopra mostrato sono stati inseriti dei blocchettini che non sono necessari, ma ciò è stato fatto per rendere il diagramma più chiaro e leggibile dato che l'editor non permette molta personalizzazione. Dunque...
In questo capitolo ci occumeremo dei diagrammi di stato. Anche questi diagrammi, come i diagrammi di sequenza, descrivano un comportamento dinamico del sistema, ma a differnza di quelli di sequenza che rappresentano le interazioni presenti tra gli oggetti i diagrammi di stato modellano dinamicamento ciò che accade in un determinato oggetto. In sostanza si rappresenta il comportamento di un...
Andiamo adesso a definire la sintassi con cui rappresentare un generico stato in UML. Anche in questo caso forniamo un esempio grafico della sintassi per poi commentarla abbondantemente:
Come possiamo vedere la sintassi della modellazione di uno stato consta di tre parti principali: la prima rappresenta il nome che vogliamo dare allo stato (anche in questo caso cerchiamo di dare...
Fino a questo momento abbiamo mostrato vari tipi di diagrammi che danno una modellazione statica e dinamica del sistema. Analizziamo adesso i diagrammi di attività che servono per eseguire una modellazione del flusso di lavoro per un determinato caso d'suo. I diagramma dei casi d'uso, corredato di un diagramma di attività per ogni caso, fornisce una visione completa del...
A questo punto abbiamo terminato la nostra panoramica sull'UML. Al termine di questa guida il lettore avrà compreso l'enorme potenzialità che questo linguaggio di modellazione offre, infatti, con tutti i possibili diagrammi che è possibile realizzare possiamo rappresentare la struttura del nostro progetto, aspetti statici e dinamici di funzionamento, relazioni tra i vari componenti costituenti il progetto stesso e...
Abbiamo a cuore la tua privacy
Noi e i nostri partner archiviamo e/o accediamo a informazioni su un dispositivo. Cookie, identificatori del dispositivo o analoghi identificatori online (ad es. identificatori basati sull’accesso, identificatori assegnati casualmente, identificatori basati sulla rete) insieme ad altre informazioni (ad es. tipo di browser e informazioni sul browser, lingua, dimensioni dello schermo, tecnologie supportate, ecc.) possono essere archiviati sul o letti dal dispositivo dell’utente per riconoscerlo ogni volta che l’utente si connette a un’app o a un sito web, per una o più finalità qui presentate.
Con il tuo consenso, i tuoi dati possono essere utilizzati per quanto segue: Pubblicità e contenuti personalizzati, misurazione delle prestazioni dei contenuti e degli annunci, ricerche sul pubblico, sviluppo di servizi; Dati di geolocalizzazione precisi e identificazione attraverso la scansione del dispositivo.
I tuoi dati personali verranno trattati e le informazioni dal tuo dispositivo (cookie, identificatori univoci e altri dati del dispositivo) possono essere memorizzate, consultate e condivise con 181 partner, o utilizzate specificamente da questo sito o questa app. Alcuni fornitori potrebbero trattare i tuoi dati personali sulla base dell'interesse legittimo, al quale puoi opporti gestendo le tue opzioni qui sotto. Puoi revocare il tuo consenso in qualsiasi momento facendo clic sul link delle impostazioni sulla privacy situato in fondo alla pagina.
Puoi scegliere come utilizzare i tuoi dati personali. Noi e i nostri partner desideriamo il vostro permesso per fare quanto segue.
Alcuni partner non chiedono il tuo consenso al trattamento dei tuoi dati, ma fanno affidamento sul loro legittimo interesse commerciale. Guarda il nostro elenco di partner per conoscere gli scopi per cui credono di avere un interesse legittimo e come puoi opporti.
Questi sono i nostri partner pubblicitari che partecipano al Framework di trasparenza e consenso dello IAB, creato per garantire un uso trasparente e corretto dei dati.
Questi fornitori sono registrati su Google, ma non nel Transparency & Consent Framework di IAB Europe.
{"b_dec":{"def":"Rifiuta e chiudi","res":"Rifiuta e chiudi"},"priclt":"\u003Cdiv class=\u0022cl-consent-settings cl-consent-settings--is-hidden\u0022\u003E\u003Cstyle\u003E.cl-consent-settings{position:fixed;left:16px;bottom:calc(28px + var(--__lxG___css_var_privacy_icon_auto, 0px));z-index:100;transition:all 0.15s ease-in-out;transform:translateY(0)}.cl-consent-settings--is-hidden{transform:translateY(70px);opacity:0}.cl-consent-settings__hint{border-radius:4px;background:#282A3C;box-shadow:0 4px 24px 0 rgba(0,0,0,.15);color:#FFFCF2;position:absolute;right:-195px;top:0;bottom:0;margin:auto;height:40px;width:175px;display:flex;align-items:center;justify-content:center;padding:4px 12px;font-size:12px;font-weight:400;line-height:16px;cursor:default;user-select:none;transition:transform 0.3s ease,opacity 0.3s ease;transform:translateX(-22px);opacity:0;pointer-events:none;z-index:-1}.cl-consent-settings__hint::after{content:\u0022\u0022;position:absolute;left:-16px;top:0;bottom:0;margin:auto;width:0;height:0;border:0 solid transparent;border-top-width:12px;border-bottom-width:12px;border-right:16px solid #282A3C}.cl-consent-settings__btn{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;padding:0;border:none;background-color:#4b81e8!important;background-position:center center;background-size:30px 30px;background-repeat:no-repeat;box-shadow:0 0 20px 0 rgba(0,0,0,.35);z-index:70;position:relative;text-decoration:none;cursor:pointer}.cl-consent-settings__btn::before{content:\u0022\u0022;-webkit-mask-image:url(\u0022data:image\/svg+xml,%3Csvg xmlns=\u0027http:\/\/www.w3.org\/2000\/svg\u0027 width=\u002730\u0027 height=\u002730\u0027 viewBox=\u00270 0 30 30\u0027 fill=\u0027none\u0027%3E%3Cpath fill=\u0027%23fff\u0027 d=\u0027M15 2.813C8.28 2.813 2.812 8.28 2.812 15S8.28 27.188 15 27.188c6.72 0 12.188-5.468 12.188-12.188C27.188 8.28 21.72 2.812 15 2.812Zm0 1.874c5.686 0 10.313 4.627 10.313 10.313 0 5.686-4.627 10.313-10.313 10.313-5.686 0-10.313-4.627-10.313-10.313C4.688 9.314 9.314 4.687 15 4.687Zm-1.875 3.75a.937.937 0 1 0 0 1.875.937.937 0 0 0 0-1.874Zm5.156.938a1.406 1.406 0 1 0 0 2.812 1.406 1.406 0 0 0 0-2.812Zm-7.968 2.813a1.875 1.875 0 1 0 0 3.749 1.875 1.875 0 0 0 0-3.75Zm5.624 1.874a.938.938 0 1 0 0 1.876.938.938 0 0 0 0-1.876Zm4.688.938a.938.938 0 1 0 0 1.875.938.938 0 0 0 0-1.875Zm-8.906 2.813a1.406 1.406 0 1 0 0 2.812 1.406 1.406 0 0 0 0-2.813Zm6.562.937a1.406 1.406 0 1 0 0 2.813 1.406 1.406 0 0 0 0-2.813Z\u0027\/%3E%3C\/svg%3E\u0022);mask-image:url(\u0022data:image\/svg+xml,%3Csvg xmlns=\u0027http:\/\/www.w3.org\/2000\/svg\u0027 width=\u002730\u0027 height=\u002730\u0027 viewBox=\u00270 0 30 30\u0027 fill=\u0027none\u0027%3E%3Cpath fill=\u0027%23fff\u0027 d=\u0027M15 2.813C8.28 2.813 2.812 8.28 2.812 15S8.28 27.188 15 27.188c6.72 0 12.188-5.468 12.188-12.188C27.188 8.28 21.72 2.812 15 2.812Zm0 1.874c5.686 0 10.313 4.627 10.313 10.313 0 5.686-4.627 10.313-10.313 10.313-5.686 0-10.313-4.627-10.313-10.313C4.688 9.314 9.314 4.687 15 4.687Zm-1.875 3.75a.937.937 0 1 0 0 1.875.937.937 0 0 0 0-1.874Zm5.156.938a1.406 1.406 0 1 0 0 2.812 1.406 1.406 0 0 0 0-2.812Zm-7.968 2.813a1.875 1.875 0 1 0 0 3.749 1.875 1.875 0 0 0 0-3.75Zm5.624 1.874a.938.938 0 1 0 0 1.876.938.938 0 0 0 0-1.876Zm4.688.938a.938.938 0 1 0 0 1.875.938.938 0 0 0 0-1.875Zm-8.906 2.813a1.406 1.406 0 1 0 0 2.812 1.406 1.406 0 0 0 0-2.813Zm6.562.937a1.406 1.406 0 1 0 0 2.813 1.406 1.406 0 0 0 0-2.813Z\u0027\/%3E%3C\/svg%3E\u0022);background-color:#ffffff!important;mask-repeat:no-repeat;width:30px;height:30px}.cl-consent-settings__btn:hover+.cl-consent-settings__hint{transform:translateX(0);pointer-events:all;opacity:1}.cl-consent-settings__user{width:18px;height:18px;border-radius:50%;padding:0;border:1px solid #fff;background-color:#00AD98;background-image:url(\u0022data:image\/svg+xml,%3Csvg xmlns=\u0027http:\/\/www.w3.org\/2000\/svg\u0027 viewBox=\u00270 0 10 11\u0027 width=\u002710\u0027 height=\u002711\u0027 fill=\u0027none\u0027%3E%3Cpath fill=\u0027%23fff\u0027 stroke=\u0027%23fff\u0027 stroke-width=\u0027.1\u0027 d=\u0027M6.858 6.262A3.3 3.3 0 0 0 8.2 3.597C8.2 1.796 6.764.325 5 .325s-3.2 1.47-3.2 3.272c0 1.094.53 2.07 1.342 2.665A4.67 4.67 0 0 0 .45 10.5v.05h1v-.05c0-2.012 1.585-3.632 3.55-3.632s3.55 1.62 3.55 3.632v.05h1v-.05a4.67 4.67 0 0 0-2.692-4.238ZM5 1.345c1.22 0 2.2 1.002 2.2 2.252s-.98 2.25-2.2 2.25-2.2-1-2.2-2.25.98-2.252 2.2-2.252Z\u0027\/%3E%3C\/svg%3E\u0022);background-position:center center;background-size:9px 10px;background-repeat:no-repeat;z-index:75;position:absolute;top:-2px;right:-8px;text-decoration:none;visibility:hidden}\u003C\/style\u003E\u003Cbutton type=\u0022button\u0022 class=\u0022cl-consent-settings__btn\u0022\u003E\u003Cspan class=\u0022cl-consent-settings__user\u0022\u003E\u003C\/span\u003E\u003C\/button\u003E\u003Cdiv class=\u0022cl-consent-settings__hint\u0022\u003EImpostazioni sulla privacy e sui cookie\u003C\/div\u003E\u003C\/div\u003E","pricds":"show_in_the_footer","pricaa":1,"vcnt":181,"_t":{"titles":"Purposes|Purposes (Legitimate Interest)|Features|Special Features|Special Purposes|Scopi|Scopi (Interesse Legittimo)|Caratteristiche|Caratteristiche Speciali|Scopi Speciali","sp3_ret":"Le scelte che fai riguardo agli scopi e alle entità elencati in questo avviso sono salvate per un massimo di $sp3_retention$ nei seguenti cookie e variabili di archiviazione locale","ill_pp_ttl":"Esempi di Utilizzo","vndr_dtls_con":"Trattamento dei dati basato sul tuo consenso","vndr_dtls_li":"Trattamento dei dati basato sul legittimo interesse","vndr_dtls_fi":"Trattamento dei dati basato sul tuo consenso o interesse legittimo","cks_strg_dur":"dura $DURATION$","cks_strg_ses":"per la sessione attuale","cks_strg_not_used":"non utilizzato","cks_strg_dur_s":"sec","cks_strg_dur_i":"min","cks_strg_dur_h":"ora(e)","cks_strg_dur_d":"giorno(i)","cks_strg_dur_m":"mese(i)","cks_strg_dur_y":"anno(i)","vr_dts_purl":"URL della politica sulla privacy","vr_dts_dsurl":"URL di divulgazione dell\u0027archiviazione del dispositivo","vr_dts_dsurl_h":"Informazioni aggiuntive su archiviazione e operazioni","vr_dts_clmurl":"URL della richiesta di interessi legittimi","vr_dts_datac":"Categorie di dati","vr_dts_datac_h":"Categorie di dati raccolti in relazione agli scopi","vr_dts_stdret":"Conservazione dei dati standard (giorni)","vr_dts_stdret_h":"Il periodo standard è utilizzato a meno che non sia dichiarato un altro periodo per scopi specifici.","vr_dts_ret":"Conservazione dei dati (giorni)","vr_dts_usecks":"Usa i cookie","vr_dts_usecks_h":"Indica se il fornitore utilizza l\u0027archiviazione dei cookie (sessione o altro). SÌ indica che l\u0027archiviazione dei cookie è utilizzata. NO - l\u0027archiviazione dei cookie non è utilizzata.","vr_dts_usecksy":"Sì","vr_dts_usecksn":"No","vr_dts_cksage":"Età massima del cookie","vr_dts_cksage_h":"Il numero di secondi che rappresenta la durata potenziale più lunga per l\u0027archiviazione dei cookie su un dispositivo. Se un fornitore utilizza più cookie con durate diverse, rappresenta il cookie con la durata più lunga. Un numero negativo o 0 indica l\u0027archiviazione della sessione simile alla specifica Set-Cookie.","vr_dts_cksref":"Aggiornamento cookie","vr_dts_cksref_h":"Indica se i cookie vengono aggiornati dopo essere stati inizialmente impostati. SÌ - indica che il fornitore può aggiornare i cookie. NO - indica che il fornitore non aggiorna i cookie ogni volta che il browser viene ricaricato.","vr_dts_noncks":"Utilizza l\u0027accesso senza cookie","vr_dts_noncks_h":"Indica l\u0027uso da parte del fornitore di archiviazione non-cookie e accesso alle informazioni già memorizzate sul dispositivo di un utente. SÌ - indica che l\u0027accesso senza cookie è utilizzato. NO - indica che l\u0027archiviazione e l\u0027accesso senza cookie alle informazioni già memorizzate sul dispositivo di un utente non vengono utilizzati.","vr_dts_hgetl":"Limite della lunghezza della richiesta HTTP GET (Kbyte)","vr_dts_hgetl_h":"Dimensione massima della richiesta GET in kilobyte per aiutare a diagnosticare i problemi con il passaggio della stringa TC e limitare le stringhe di dimensioni eccessive.","vr_dts_addtnl":"Dati aggiuntivi","vr_dts_legaddr":"Indirizzo completo dell\u0027entità legale","vr_dts_b2bcont":"Dettagli di contatto B2B","vr_dts_terscp":"Ambito territoriale","vr_dts_terscp_h":"Indica le giurisdizioni UE\/SEE\/UK in cui il fornitore opera con TCF. Nota che questo è diverso dalla sede del fornitore.","vr_dts_env":"Ambiente","vr_dts_env_h":"Indica gli ambienti in cui il venditore opera","vr_dts_tserv":"Tipo di servizi","vr_dts_tserv_h":"Indica il tipo di servizi offerti dal venditore","vr_dts_trnsfout":"Trasferimenti internazionali fuori dall\u0027UE\/SEE","vr_dts_trnsfout_h":"Indica le giurisdizioni UE\/SEE\/UK in cui il fornitore opera con TCF. Nota che questo è diverso dalla sede del fornitore.","vr_dts_trnsfmch":"Meccanismi di trasferimento internazionale"}}