# data[].attributes.headline
Fasi di realizzazione del software e qualità del software

# data[].attributes.subject
Fasi di realizzazione del software e qualità del software

# data[].attributes.attachment_link.description
Il progetto software e la qualità Storicamente sono state formulate varie metodologie di lavoro per organizzare il ciclo di vita di un processo software. Anni '90. I modelli Incrementali . I modelli a cascata risultano a volte pococonvenienti e non adeguati alla domanda di software COTS sempre più interattivo (per esempio Internet).

# data[].attributes.attachment_link.description
SPECIFICA DEI REQUISITI * le diverse tipologie di requisiti software * i requisiti utente e i requisiti di sistema * i requisiti funzionali e i requisiti non funzionali

# data[].attributes.attachment_link.title
UML Diagrams Online | Online UML Tool | UML Diagram Creator | Creately

# data[].attributes.attachment_link.description
Draw UML diagrams online with easy to use UML tools. Support class diagrams, use case diagrams and other UML types. 100's of templates to get started quickly.

# data[].attributes.attachment_link.description
Popplet is the best app for sharing visual ideas.

# data[].attributes.body
FASE di Esplorazione

# data[].attributes.attachment_link.description
Popplet is the best app for sharing visual ideas.

# data[].attributes.attachment_link.description
Dropbox is a free service that lets you bring your photos, docs, and videos anywhere and share them easily. Never email yourself a file again!

# data[].attributes.attachment_link.title
[ITA] JAVA tutorial per principianti - YouTube

# data[].attributes.attachment_link.description
Una serie di tutorial su Java che spiegano passo passo come arrivare ad essere capaci di fare una generica applicazione grazie a questo potentissimo linguagg...

# data[].attributes.body
Libro java

# data[].attributes.attachment_link.keywords[]
java® platform

# data[].attributes.attachment_link.description
The Java Development Kit (JDK) APIs are specific to the JDK and will not necessarily be available in all implementations of the Java SE Platform. These APIs are in modules whose names start with jdk.

# data[].attributes.attachment_link.description
Comunicazione e sincronizzazione Teoria: Esercizi sulle condizioni di Bernstein La comunicazione tra processi: Modello a memoria comune (p. 1-17) (UniBo) Modello a scambio di messaggi (p. 1-17) (Un...

# data[].attributes.attachment_link.title
Programmazione multi-thread, Stefano Russo " Programmazione II (ING) " Ingegneria " Federica e-Learning

# data[].attributes.attachment_link.description
Lezione 7 del corso elearning di Programmazione II (ING). Prof. Stefano Russo. Università di Napoli Federico II. Argomenti trattati: Programmazione multi thread.

# data[].attributes.attachment_link.description
Stati di un thread Se sul computer c'è un'unica CPU, a un dato momento può essere eseguito un unico thread; la CPU passerà da un thread a l'altro per dare l'impressione della simultaneità. Bene, ma in base a quali meccanismi viene scelto un thread piuttosto che un altro e come può il programmatore intervenire in queste scelte?

# data[].attributes.attachment_link.readable_text
Il concetto di programmazione ad oggetti è un concetto molto esteso e fino a questo momento abbiamo toccato solo alcuni aspetti abbastanza superficiali tant'è che, magari, un programmatore devoto alla programmazione procedurale potrebbe non averne ancora apprezzato i vantaggi.
Diciamo che elemento essenziale della programmazione ad oggetti è l'astrazione ovvero il processo per il quale descriviamo in maniera essenziale una certa cosa.
Abbiamo usato l'astrazione nel definire la classe "Numeri" con gli attributi "numeroX" e "numeroY" e abbiamo usato l'astrazione anche ogni qual volta abbiamo scritto uno dei metodi della classe "OperazioniSuNumeri" ovvero i metodi "somma" e "sottrazione" nei quali abbiamo espresso un concetto ben definito.
Diciamo che l'astrazione è la base di tutto e se combinata con altri elementi fondamentali della programmazioni ad oggetti quali l' incapsulamento, ereditarietà e il polimorfismo si arriva all'essenza finale della programamzione ad oggetti ovvero la possibilità del riuso del codice per lo sviluppo di altro software.

Ogni software house oggi esistente sfrutta proprio la proprietà del riuso del codice per velocizzare il processo produttivo e per l'implementazione delle nuove funzionalità. Quindi la base del codice sarà la prima versione e quelle successive saranno solo ed esclusivamente una estensione delle funzionalità previste inizialmente e, se il codice è stato scritto con intelligenza, sarà possibile aggiungere funzionalità senza andare, in nessun modo, a modificare i pezzi di codice scritti precedentemente.
Non a caso, negli ultimi anni, molti linguaggi web come per esempio il PHP (nato come linguaggio di programmazione puramente precedurale) è diventato, con l'introduzione della versione 5, un vero e proprio linguaggio orientato agli oggetti per poter sfruttare i benefici sopra esposti. I tre concetti di incapsulamento, ereditarietà e polimorfismo, verranno trattati in maniera approfondita durante la trattazione della guida.

Incapsulamento

A questo punto occupiamoci del concetto di incapsulamento. Grazie a questo concetto il codice di una classe risulta più robusto (ovvero meno esposto ad errori derivanti dall'errato utilizzo dell'applicazione da parte dell'utente) e conferisce una migliore manutenzione del codice in caso di modifiche o di migliorie da introdurre in un secondo momento. L'idea di base dell'incapsulamento è quella di controllare l'accesso degli attributi di una classe utilizzando dei metodi per la gestione degli stessi.

Dunque la prima cosa è quella di rendere gli attributi della classi non modificabili direttamente dall'esterno e creare dei metodi con modificatore public affinchè possano essere utilizzati per l'accesso ai dati.
Dal punto di vista dell'implementazione, dunque, l'utente chiamerà semplicemente il metodo per l'inserimento di un valore in un attributo di una classe senza preoccuparsi di cosa faccia questo metodo all'atto pratico. In definitiva si da la disponibilità all'utente di utilizzare delle interfacce pubbliche per l'accesso ai dati. Sarà compito del programmatore scrivere un codice robusto per queste interfacce pubbliche implementando opportuni controlli relativi all'input inserito dall'utente.
Nel caso in cui l'interfaccia pubblica necessiti di alcune migliorie o controlli aggiuntivi sarà sufficiente quindi modificare il codice relativo all'interfaccia senza modificare niente dal punto di vista dell'utente. L'utente userà la stessa interfaccia senza essere al corrente che sono state apportate modifiche.

Questa logica di programmazione è applicata nella vita reale per molte operazioni che noi effettuaiamo ogni giorno. A tutti sarà capitato di mettere in moto un automobile e a questo punto vi chiedo: dal punto di vista del guidatore che differenza fa tra mettere in moto una macchina con motore a benzina ed un'altra a motore Diesel? Assolutamente nessuna. La nostra interfaccia pubblica è la fessura nella quale noi giriamo la chiave, poi sarà compito dell'interfaccia pubblica gestire l'avvio della macchina a seconda che si tratti di un motore a benzina o Diesel.

Nella prossima lezione vedremo in che modo, dal punto di vista del codice, è possibile implementare il concetto dell'incapsulamento.

# data[].attributes.attachment_link.description
Il concetto di programmazione ad oggetti è un concetto molto esteso e fino a questo momento abbiamo toccato solo alcuni aspetti abbastanza superficiali tant'è che, magari, un programmatore devoto alla programmazione procedurale potrebbe non averne ancora apprezzato i vantaggi.Diciamo che elemento essenziale della programmazione ad oggetti è l'astrazione ovvero il

# data[].attributes.attachment_link.readable_text
In questa lezione metteremo in atto i principi dell'incapsulamento esposti precedentemente. Come prima cosa bisogna rendere gli attributi della classe in maniera tale che non siano direttamente accessibili dall'esterno. Ciò si ottiene dichiarando gli attributi della classe usando il modificatore di visibilità private.
Usando il private si rendono gi attributi della classi visibili solo ed esclusivamente all'interno della classe, dunque potranno manipolarli solo i metodi facente parte della stessa classe. Andiamo adesso a scrivere una classe che rappresenta un'anagrafica di una determinata persona:

public class Anagrafica { private String nome; private int annoDiNascita; }
In questo modo abbiamo bloccato dall'esterno l'accesso diretto agli attributi, infatti nel caso in cui istanziassimo la classe e cercassimo di accedere all'atributo usando l'operatore "." riceveremo un errore del compilatore che ci avvertirà che le variabili "nome" e "annoDiNascita" non sono visibili.
Adesso non ci resta che creare un'interfaccia pubblica da utilizzare poi nella nostra classe di Implementazione per poter accedere ai dati. Estendiamo, quindi, il codice della classe "Anagrafica" nel seguente modo:

public class Anagrafica { private String nome; private int annoDiNascita; public void setNome(String n) { nome=n; } public String getNome() { return nome; } public void setAnnoDiNascita(int anno) { annoDiNascita=anno; } public int getAnnoDiNascita() { return annoDiNascita; } }
Abbiamo dunque creato due interfacce pubbliche per ogni attributo della classe: uno per l'assegnazione del valore e uno per recuperare il valore dell'attributo.
Adesso possiamo andare a scrivere la nostra classe di Implementazione:

public class Implementazione { public static void Main(String args[]) { Anagrafica anagrafica = new Anagrafica(); anagrafica.setNome("Matteo"); anagrafica.setAnnoDiNascita(1987); } }
Se eseguissimo la classe "Implementazione" assegneremo il valore "Matteo" alla variabile "nome" e il valore "1987" alla variabile "annoDiNascita".
Fino a questo momento non si vedono grossi vantaggi nell'utilizzo dell'incapsulamento, ma proviamo a pensare se volessimo fare un controllo sulla data di nascita per limitare l'accesso a qualche risorsa da parte degli utenti. Cosa dovremo andare a modificare? La risposta è semplice, dovremo esclusivamente andare a modificare il metodo "setAnnoDiNascita(int anno)" della classe "Anagrafica" lasciando totalmente inalterata la classe "Implementazione". Eseguiamo la modifica, per esempio accettando solo utenti nati nell'arco di tempo 1990-2000.

public void setAnnoDiNascita(int anno) { if(anno >= 1990 && anno<=2000) { annoDiNascita=anno; } else{ System.out.println("Non puoi accedere"); } }
E' evidente nel caso avessimo più attributi e volessimo successivamente modificare le interfacce pubbliche magari facendo controlli più raffinati sull'input da parte dell'utente basterà modificare il codice relativo nella classe originaria senza toccare in alcun modo la classe di implementazione. Tutto ciò è in perfetto accordo con quanto espresso precedentemente riguardo il concetto di riuso del codice.
Fino a questo momento abbiamo ottenuto un incapsulamento per gli attributi della classe. Usando però il modificatore private applicato ad un metodo, di fatto si ottiene un incapsulamento funzionale. L'incampusulamento funzionale ha lo scopo di rendere ancora più semplice il codice dell'interfaccia di implementazione, per esempio creando un unica interfaccia pubblica per l'inizializzazione dei dati e poi nella classe originarie scrivere l'interfaccia pubblica in modo che contenga tutti i metodi "setNomeAttributo" relativi alla classe. In questo caso ogni metodo del tipo "setNomeAttributo" verrà dichiarato con modificatore di visibilità private per ottenere l'incapsulamento funzionale. In questo modo se si provasse ad accedere al metodo dall'esterno otterremo lo stesso errore di quando cercavamo di accedere dall'esterno ad un attributo della classe che era dichiarato privato.

# data[].attributes.attachment_link.description
In questa lezione metteremo in atto i principi dell'incapsulamento esposti precedentemente. Come prima cosa bisogna rendere gli attributi della classe in maniera tale che non siano direttamente accessibili dall'esterno. Ciò si ottiene dichiarando gli attributi della classe usando il modificatore di visibilità private.Usando il private si rendono gi attributi della classi visibili solo ed esclusivamente all'interno della classe, dunque potranno manipolarli solo i metodi facente parte della stessa classe.