martedì 13 gennaio 2015

Verifica del 08/01/2015 - Esercizio 1 in versione C++ e JAVA con rappresentazione UML

Esercizio no.1
1.   Realizzare la Classe Persona costituita dai seguenti membri:
      a.     Proprietà non accessibili dall’esterno della classe
                i.      Cognome
                ii.      nome
                iii.      cittaDiNascita
      b.     Metodi
                i.      Costruttori
                        1.       Persona // inizializza le proprietà ai valori nulli
                        2.      Persona(cognome,nome,citta) // le proprietà vengono fornite all’atto dell’istanza                                  dell’oggetto
                ii.      inserisciDati
                iii.      aggiornaDati
                iv.      visualizzaDati

2.      Esegui il test della classe costruendo un main che crei due istanze di due oggetti, il primo che ne richiama il costruttore senza parametri ed il secondo che richiami il costruttore con parametri. Creati gli oggetti scrivere un programma che utilizzi gli oggetti ed i metodi che li costituiscono.

3.      Si fornisca inoltre una rappresentazione grafica della classe utilizzando le regole dei diagrammi UML

Codice in C++:

# include <iostream>
# include <string.h>

using namespace std;

class Persona{   //CREO LA CLASSE persona
private:   //parametri non accessibili al di fuori della classe
char Cognome[15];   
char Nome[15];
char CittaDiNascita[25];
public:   //metodi accessibili dal main
Persona();   //costruttore che inizializza i parametri a NULL
Persona(char C[15], char N[15], char CdN[25]);   //costruttore con passaggio di parametri
void inserisciDati();   //metodo per inserimento dei dati
void aggiornaDati();   //metodo per aggiornamento dei dati
void visualizzaDati();   //metodo per visualizzare i dati
};

Persona::Persona()   //COSTRUTTORE della classe Persona senza passaggio di parametri
{
strcpy (Cognome,"");   //inizializzo le stringhe
strcpy (Nome,"");  
strcpy (CittaDiNascita,"");
};

Persona::Persona(char C[15], char N[15], char CdN[25])   //COSTRUTTORE della classe Persona con passaggio di parametri
{
strcpy (Cognome, C);   //inserisco il contenuto passato come parametro C-N-CdN all'interno delle variabili della classe Persona COGNOME-NOME-CITTADINASCITA
strcpy (Nome, N);
strcpy (CittaDiNascita, CdN);
};

void Persona::inserisciDati()   //METODO per inserimento dei dati
{
cout<<"Inserisci il Cognome: "<<endl;  //chiedo all'utente di inserire un dato per la variabile Cognome
cin>>Cognome;   //assegno l'input alla variabile Cognome
cout<<"Inserisci il Nome: "<<endl;   //chiedo all'utente di inserire un dato per la variabile Nome
cin>>Nome;   //assegno l'input alla variabile Nome
cout<<"Inserisci il Luogo di Nascita: "<<endl;   //chiedo all'utente di inserire un dato per la variabile CittaDiNascita
cin>>CittaDiNascita;   //assegno l'input alla variabile CittaDiNascita
};

void Persona::visualizzaDati()   //METODO per visualizzare i dati
{
cout<<"Cognome: "<<Cognome<<endl;   //stampa della variabile Cognome
cout<<"Nome: "<<Nome<<endl;   //stampa della variabile Nome
cout<<"Luogo di Nascita: "<<CittaDiNascita<<endl;   //stampa della variabile Luogo di Nascita
};

void Persona::aggiornaDati()   //METODO per aggiornare i dati
{
cout<<"Cognome ATTUALE: "<<Cognome<<endl;   //stampo il contenuto attuale della variabile Cognome
cout<<"Inserisci NUOVO Cognome: "<<endl;   //chiedo all'utente di inserire un nuovo dato per la variabile Cognome 
cin>>Cognome;   //assegno il nuovo input alla variabile Cognome
cout<<"Nome ATTUALE: "<<Nome<<endl;   //stampo il contenuto attuale della variabile Nome
cout<<"Inserisci NUOVO Nome: "<<endl;   //chiedo all'utente di inserire un nuovo dato per la variabile Nome 
cin>>Nome;   //assegno il nuovo input alla variabile Nome
cout<<"Città di Nascita ATTUALE: "<<CittaDiNascita<<endl;   //stampo il contenuto attuale della variabile CittaDiNascita
cout<<"Inserisci NUOVA CittaDiNascita: "<<endl;   //chiedo all'utente di inserire un nuovo dato per la variabile CittaDiNascita
cin>>CittaDiNascita;   //assegno il nuovo input alla variabile CittaDiNascita
};

main()
{
Persona obj;   //istanza dell'oggetto obj tramite costruttore senza passaggio di parametri
Persona objParametri ("Rossi","Mario","Milano");   //istanza dell'oggetto objParametri tramite costruttore con passaggio di parametri
cout<<"Verifica Lab. Inf. 08/01/2015 - Marchesi Giacomo 4A Informatica Serale"<<endl<<endl;
cout<<endl<<"Oggetto istanziato tramite COSTRUTTORE SENZA PASSAGGIO DI PARAMETRI: "<<endl;
cout<<endl<<"Chiamata al metodo visualizzaDati: "<<endl;
obj.visualizzaDati();   //chiamata al metodo visualizzaDati della Classe Persona
cout<<endl<<"Chiamata al metodo inserisciDati: "<<endl;
obj.inserisciDati();   //chiamata al metodo inserisciDati della Classe Persona
cout<<endl<<"Chiamata al metodo visualizzaDati: "<<endl;
obj.visualizzaDati();   //chiamata al metodo visualizzaDati della Classe Persona
cout<<endl<<"Chiamata al metodo aggiornaDati: "<<endl;
obj.aggiornaDati();   //chiamata al metodo aggiornaDati della Classe Persona
cout<<endl<<"Chiamata al metodo visualizzaDati: "<<endl;
obj.visualizzaDati();   //chiamata al metodo visualizzaDati della Classe Persona
cout<<endl<<"Oggetto istanziato tramite COSTRUTTORE CON PASSAGGIO DI PARAMETRI: "<<endl;
cout<<endl<<"Chiamata al metodo visualizzaDati: "<<endl;
objParametri.visualizzaDati();   //chiamata al metodo visualizzaDati della Classe Persona
cout<<endl<<"Chiamata al metodo inserisciDati: "<<endl;
objParametri.inserisciDati();   //chiamata al metodo inserisciDati della Classe Persona
cout<<endl<<"Chiamata al metodo visualizzaDati: "<<endl;
objParametri.visualizzaDati();   //chiamata al metodo visualizzaDati della Classe Persona
cout<<endl<<"Chiamata al metodo aggiornaDati: "<<endl;
objParametri.aggiornaDati();   //chiamata al metodo aggiornaDati della Classe Persona
cout<<endl<<"Chiamata al metodo visualizzaDati: "<<endl;
objParametri.visualizzaDati();   //chiamata al metodo visualizzaDati della Classe Persona
}

Codice in JAVA:

import java.io.InputStreamReader;   //librerie per utilizzo BufferReader
import java.io.BufferedReader ;
import java.io.IOException;

public class Persona {
private String Nome= new String();
private String Cognome= new String();
private String LuogoDiNascita= new String();;
public Persona() {   //costruttore senza passaggio di parametri
Nome="";
Cognome="";
LuogoDiNascita="";
}
public Persona(String N, String C, String LdN) {   //costruttore con passaggio di parametri
Nome=N;
Cognome=C;
LuogoDiNascita=LdN;
}
public void inserisciDati() {   //metodo pubblico per inserimento dati in Input da utente
/*utilizzo readLine() messo a disposizione dalla classe BufferedReader. BufferedReader è 
una classe dedicata alla lettura di buffers (sequenze di caratteri), che il metodo readLine() 
restituisce sotto forma di stringhe. La classe BufferedReader, a sua volta, deve essere 
inizializzata fornendo un reader (lettore) di stream di input.
*/
InputStreamReader reader = new InputStreamReader (System.in);   //lettore bufferizzato
BufferedReader myInput = new BufferedReader (reader);   //utilizzo lettore bufferizzato chiamato reader
//per instanziare un oggetto di tipo BufferedReader che permette di utilizzare metodo readLine() 
//per la lettura di intere stringhe
System.out.println("Inserisci Nome: ");
try {
Nome = myInput.readLine();   //utilizzo oggetto myInput per richiamare metodo readLine(), in questo caso 
} catch (IOException e) { //viene richieto utilizzo del try catch
e.printStackTrace();
}
System.out.println("Inserisci Cognome: ");
try {
Cognome = myInput.readLine();   //utilizzo oggetto myInput per richiamare metodo readLine(), in questo caso 
} catch (IOException e) { //viene richieto utilizzo del try catch
e.printStackTrace();
}
System.out.println("Inserisci Luogo di Nascita: ");
try {
LuogoDiNascita = myInput.readLine();   //utilizzo oggetto myInput per richiamare metodo readLine(), in questo caso 
} catch (IOException e) { //viene richieto utilizzo del try catch
e.printStackTrace();
}
}
public void aggiornaDati() {   //metodo pubblico per aggiornamento dati in Input da utente
InputStreamReader reader = new InputStreamReader (System.in);
BufferedReader myInput = new BufferedReader (reader);
System.out.println("Nome INSERITO: " +Nome);
System.out.println("Inserisci NUOVO Nome: ");
try {
Nome = myInput.readLine();   //utilizzo oggetto myInput per richiamare metodo readLine(), in questo caso 
} catch (IOException e) { //viene richieto utilizzo del try catch
e.printStackTrace();
}
System.out.println("Cognome INSERITO: " +Cognome);
System.out.println("Inserisci NUOVO Cognome: ");
try {
Cognome = myInput.readLine();   //utilizzo oggetto myInput per richiamare metodo readLine(), in questo caso 
} catch (IOException e) { //viene richieto utilizzo del try catch
e.printStackTrace();
}
System.out.println("Luogo di Nascita INSERITO: " +LuogoDiNascita);
System.out.println("Inserisci NUOVO Luogo di Nascita: ");
try {
LuogoDiNascita = myInput.readLine();   //utilizzo oggetto myInput per richiamare metodo readLine(), in questo caso 
} catch (IOException e) { //viene richieto utilizzo del try catch
e.printStackTrace();
}
}
public void visualizzaDati() {   //metodo pubblico per visualizzare dati
System.out.println("Nome: " +Nome);
System.out.println("Cognome: " +Cognome);
System.out.println("Luogo di Nascita: " +LuogoDiNascita);
}

}


public class main {

public static void main(String[] args) {
System.out.println("Verifica del 08/01/2015 versione JAVA");
Persona obj1;   //creo oggetto obj1 di classe Persona
obj1 = new Persona();   //alloco spazio in memoria e restituisco indirizzo 
Persona obj2;   //creo oggetto obj1 di classe Persona
obj2 = new Persona("Mario","Rossi","Milano");   //alloco spazio in memoria e restituisco indirizzo 
System.out.println("Ciclo di prova su oggetto istanziato SENZA passaggio di parametri obj1");
obj1.visualizzaDati();   //chiamata al metodo visualizzaDati
obj1.inserisciDati();   //chiamata al metodo inserisciDati
obj1.visualizzaDati();   //chiamata al metodo visualizzaDati
obj1.aggiornaDati();   //chiamata al metodo aggiornaDati
obj1.visualizzaDati();   //chiamata al metodo visualizzaDati
System.out.println("Ciclo di prova su oggetto istanziato CON passaggio di parametri obj2");
obj2.visualizzaDati();   //chiamata al metodo visualizzaDati
obj2.aggiornaDati();   //chiamata al metodo aggiornaDati
obj2.visualizzaDati();   //chiamata al metodo visualizzaDati
}

}

Diagramma UML: