Sei sulla pagina 1di 7

/*Creazioni di programmi object oriented :

Nei linguaggi di programmazione orientati ad oggetti, l'attivit principale consis


te nella progettazione delle classi. Questa ha il compito di individuare le clas
si dettagliandone gli attributi e il modo con cui interagiscono tra loro (metodi
). La fase successiva alla progettazione delle classi la loro implementazione tr
amite un linguaggio di programmazione. Con il linguaggio Java, una classe viene
implementata con i seguenti passi:
- Dichiarazione
- Dichiarazione
l nome;
- Dichiarazione
ore di ritorno,

della classe,specificando il nome;


degli attributi,specificando il livello di visibilit, il tipo e i
dei metodi, specificando il livello di visibilit, il tipo del val
il nome,l'elenco dei parametri e le istruzioni.

Un programma OOP in java solitamente composto da pi classi.In genere conveniente


salvare ogni classe in un file separato. In questo modo in ogni classe viene ass
ociato un file con estensione .java che, una volta compilato, genera il corrispo
ndente file .class . Tra tutte le classi di un programma una deve contenere il m
etodo main, che il primo metodo attivato dall'interprete durante l'esecuzione de
l programma. Se un programma composto da pi classi, l'interprete Java deve essere
richiamato indicando il nome della classe con il metodo main.
I linguaggi OOP, per distinguere ci che una classe vuole mostrare all esterno da ci
che vuole tenere nascosto, permettono di definire una sezione pubblica ed una pr
ivata. Nella sezione pubblica devono essere inseriti gli attributi e i metodi ch
e si vuole rendere visibili all'esterno e quindi utilizzabili da altri oggetti.
Nella sezione privata ci sono gli attributi e i metodi che non sono accessibili
e che vengono usati dall'oggetto per implementare i suoi comportamenti. I livell
i di visibilit consentono di realizzare con le classi la tecnica dell'information
hiding.Il termine information hiding indica il mascheramento delle modalit di im
plementazione di un oggetto, rendendone disponibile all esterno solo le funzionalit.
L'applicazione pratica del mascheramento consiste nel dichiarare gli attributi u
sando il livello di visibilit private. In questo modo le strutture dati dell'ogge
tto saranno nascoste e non direttamente accessibili per la lettura e la modifica
.L'unica modalit per modificare questi dati sar quella di usare dei metodi con vis
ibilit pubblica, in particolare il metodo get per leggere il valore di un attribu
to e restituirlo, set per modificare il valore di un attributo.
Si puo creare un array di oggetti quando ci sono molte istanze della stessa clas
se e li si vuole gestire in maniera efficace. Un vettore di oggetti ha come limi
tazione la dimensione non modificabile, si dichiara cosi :
nomeClasse nomieOggetto[]=new nomeClasse[dim];
******OPERAZIONI SULLE STRINGHE********
stringa.toLowerCase() // stringa tutto minuscolo
stringa.toUpperCase() // stringa tutto maiuscolo
stringa.subString(5,7)// prende la sottostringa dal carattere 5 al 7
stringa.equals("Stringa")// confronta stringhe
**********POLIMORFISMO********
Considerando una relazione di ereditariet, le sottoclassi hanno la possibilit di r
idefinire i metodi ereditati (mantenendo lo stesso nome), oppure lasciarli inalt
erati perch gi soddisfacenti . Il polimorfismo indica la possibilit per i metodi di
assumere forme diverse all'interno della gerarchia delle classi.Sono presenti d
ue tipi di polimorfismo : overriding e overloading . L'overriding o sovrapposizi
one dei metodi consiste nel ridefinire nella classe derivata un metodo ereditato
, con lo scopo di modificarne il comportamento; il nuovo metodo deve avere lo st
esso nome e gli stessi parametri del metodo che viene sovrascritto . L'overloadi

ng o sovraccarico di metodi la possibilit di utilizzare lo stesso nome per compie


re operazioni diverse. Solitamente si applica ai metodi della stessa classe che
si presentano con lo stesso nome, ma con un numero o un tipo diverso di parametr
i. All'interno della stessa classe, usando l'overloading, si possono dichiarare
piu metodi con stesso nome ma con parametri diversi. Il compilatore, confrontand
o il numero e il tipo dei parametri, riesce a individuare quale metodo deve invo
care.
********STRUTTURE INFORMATIVE********
- Sono insiemi di dati eterogenei o omogenei
-Distinguiamo strutture astratte o fisiche
-Le strutture astratte vengono utilizzate per descrivere le relazioni fra le var
ie componenti della struttura attraverso la definizione delle propriet di tali co
mponenti (stringa,vettore,matrice,tabella,pila,grafo,record,lista,coda e albero)
-Le strutture fisiche descrivono come le componenti sono organizzate nella memor
ia del computer. Le strutture si dividono ulteriormente in :
-interne, che descrivono l'organizzazione in memoria di base
-esterne, che sono utilizzate per gestire i dati sulle unit delle memorie
di massa
-dinamiche, che vengono allocate nella memoria di base solo quando viene
effettuata l'esecuzione del programma, possono
cambiare le proprie dimensioni durante l'esecuzione del programm
a o della sua vita in genere
-statiche, che sono organizzate in termini di memoria di base e la memor
ia allocata viene decisa prima dell'esecuzione del
programma e tali strutture non possono cambiare dimensioni duran
te il loro funzionamento
-Sulle strutture informative possibile effettuare :
-operazioni locali, che interessano un solo elemento della struttura, ti
po modifica o visualizzazione
-operazioni globali, che interessano tutta la struttura, tipo concatenaz
ione,ricerca,ordinamento,compattazione,salvataggio su
memoria di massa o caricamento da memoria di massa
********LA PILA********
-E' una struttura lineare dove le operazioni di inserimento e di estrazione dei
dati avvengono sempre dalla stessa parte.
-La pila una struttura governata da una politica di tipo LIFO
-L'operazione di inserimento viene detta PUSH, mentre quella di estrazione POP
-E' necessario conoscere soltanto il punto in cui viene fatto l'inserimento oppu
re l'estrazione. Questo punto prende il nome di TOS
-Lo stack una struttura dinamica, perch le sue dimensioni possono non essere note
al momento della realizzazione.
-In ogni momento necessario tenere sotto controllo quando lo stack si svuota, pe
rch si potrebbe rischiare di chiedere un operazione di pop senza che vi sia un el
emento da estrarre dallo stack
********LA LISTA********
Le liste sono strutture dati che possono essere omogenee e non omogenee, lineari
e non lineari. Le liste lineari sono organizzate come insieme ordinato di eleme
nti. Ogni elemento ha un successivo e un precedente,ad esclusione del primo e de
ll'ultimo. In questa struttura per accedere all'elemento finale necessario parti
re dal primo elemento di una lista (la testa) e scorrere tutti gli elementi succ
essivi fino all'ultimo (coda). Di conseguenza questo tipo di organizzazione per
l'accesso alle componenti viene detto sequenziale. Se ogni elemento della lista
ha solo il riferimento al successore la lista detta monodirezionale,altrimenti b
idirezionale. La lista pu contenere un numero variabile di elementi nel tempo, pe
rtanto considerata una struttura dinamica. Alla creazione,la lista tipicamente v
uota, in seguito vengono inseriti gli elementi connettendoli secondo regole di o
rdinamento o di convenienza. Sulla lista si possono effettuare operazioni di mod
ifica, inserimento, visita,creazione e concatenazione. Per concatenare due liste
necessario collegare la coda della prima lista alla testa della seconda.

Una lista non lineare quando contengono al loro interno altre liste
********DIFFERENZA FRA LISTA E VETTORE********
-Il vettore ha un accesso casuale (diretto) mentre la lista sequenziale
-La lista pu avere un numero di elementi variabili nel tempo mentre il vettore no
-La lista pu contenere elementi di tipi diversi mentre il vettore no
********LA CODA********
La coda una struttura lineare di lunghezza variabile in cui gli inserimenti avve
ngono solo dopo l'ultimo elemento, le estrazioni invece dal primo elemento (FIFO
)
*/
.Descrivere la classe per il programma che calcola il volume di un parallelepipe
do a base quadrata estendendo la classe di base quadrato
class quadrato
{float lato,area;
void setLato()5
{lato=5;
}
void calcArea()
{area=lato*lato;
}
class parallelepipedo extends quadrato
{float altezza,volume;
void setAltezza()
{altezza=10;
}
void calcVolume()
{volume=area*altezza
}
}
class main()
{ public static void main(String Args[])
{
quadrato quad=new quadrato();
paralllelepido para=new parallelepipedo();
quad.setLato();
quadrato.calcArea();
para.setAltezza();
para.calcVolume();
}
}
.Cerchio e cilindro con overriding
public double area () //classe cilindro
{ double supBase,supLaterale,supTotale;
supBase=super.area()*2;
//super significa che si sta utilizzando il m
etodo della classe principale
supLaterale=circonferenza()*altezza;
supTotale=supBase+supLaterale;
return supTotale;
}

.Utilizzando il diagramma delle classi descrivere i seguenti oggetti:


-Hard disk, computer e stampante
HARD DISK
__________
TESTINA
CHIP
ROTORE
_________
LETTURA
SCRITTURA

COMPUTER
__________
CPU
RAM
VGA
MOTHERBOARD
_____________
CALCOLO

STAMPANTE
__________
CARTUCCE
TESTINE
UGELLI
SCANNER
_________
STAMPA
SCANSIONE

.Rappresentare una frazione numerica con numeratore e denominatore come una clas
se e operare su di essa la riduzione ai minimi termini
class frazione{
int num,den;
int calcMcd(int n,int d){
int resto;
r=n%d;
if (r==0)
return d;
}
.Realizzare un programma per gestire gare automobilistiche considerando le class
i per rappresentare i piloti e le auto e per gestire la griglia di partenza
import java.util.Scanner;
class gara{
Scanner leggi=new Scanner(System.in);
String scuderia,pilota;
void setDati()
{
System.out.println("Inserire scuderia");
scuderia=leggi.Next();
System.out.println("Inserire nome pilota");
pilota=leggi.Next();
}
}

.Dopo aver analizzato una frase inserita da tastiera, calcolare la frequenza del
le vocali e degli spazi bianchi.
class calcoli{
String stringa;
void setFrase(String frase)
{stringa=frase;}
void trasfMinusc(){
stringa.toLowerCase();
}
void calcola()
{
trasfMinusc();

}
}
class main{
public static void main(String Args[])
{
Scanner leggi=new Scanner(System.in);
calcoli stringa=new calcoli();
String frase;
System.out.println("Inserire frase");
frase=leggi.Next();
stringa.setFrase(frase);
stringa.calcola();
}
.Dichiarare una classe per rappresentare le informazioni di una persona e regist
rare il suo contatto email. Costruire una classe per rappresentare uno studente
estendo la classe "Anagrafica" con un attributo "matricola".
Anagrafica
_________
nome,cognome,mail,ok(boolean)
_________
registraDati()
stampaDati()
__________
A
||
Studente
___________
Matr
___________
stampaDati()
___________
class Anagrafica() {
String nome,cognome,mail;
boolean ok;
void registraDati()
{ Scanner leggi=new Scanner(System.in)
System.out.println("Inserire nome cognome e mail");
nome=leggi.Next();
cognome=leggi.Next();
mail=leggi.Next();
ok=true;
}
void stampaDati(){
System.out.println(nome+cognome+mail);}
}
class studente extends Anagrafica() {
int matricola;
void stampaDati(int matr){
this.matricola=matr;
System.out.println(nome+cognome+mail+matricola);
}
}
class main () {
public static void main (Stiring [] Args]) {
Scanner leggi=new Scanner (System.in);

boolean stud=false;
Anagrafica user1=new Anagrafica();
Studente user2=new Studente();
System.out.println("Sei studente?");
String risp=leggi.Next();
if (risp.equals("si"))
stud=true;
if(stud==false)
{ user1.registraDati();
user1.stampaDati():
}
else
{ user1.registraDati();
System.out.println("Inserire matricola");
int matr=leggi.NextInt();
user2.stampaDati(matr);
}
}
.Descrivere la classe per il programma che calcola il volume di un parallelepipe
do a base quadrata,estendendo la classe quadrato. La classe quadrato contenere a
l suo interno necessari a calcolare l'area e il perimetro di un quadrato conosce
ndone il lato.

class quadrato
{float lato,area;
void setLato()
{lato=5;
}
void calcArea()
{area=lato*lato;
}
class parallelepipedo extends quadrato
{float altezza,volume;
void setAltezza()
{altezza=10;
}
void calcVolume()
{volume=area*altezza
}
}
class main()
{ public static void main(String Args[])
{
quadrato quad=new quadrato();
paralllelepido para=new parallelepipedo();
quad.setLato();
quadrato.calcArea();
para.setAltezza();
para.calcVolume();
}
}

Scrivere un programma che calcola il costo di una telefonata conoscendo la sua d


urata in secondi, e il costo di 15 centesimi al minuto. definire un telefono cel
luare come estensione del telefono fisso in cui il calcolo del costo fatto consi
derando la tariffa di 12 centesimi come scatto alla risposta.
class telefonoFisso {
int durata,min;
public void telefonoFisso (int dur) {
durata=dur; }
public double calcolaMin(){
min=durata/60;
return min; }
public double calcolaCostoTot() {
double costoTot=calcolaMin()*0,15;
return costoTot; }
}
class telefonoMobile {
public double calcolaCstoTot() {
final double scatto=0,12;
double costoMob=(super.durata*0,35)+scatto;
return costoMob; }
}
import java.util.Scanner;
class main {
public static void main(String Args[]) {
Scanner leggi=new Scanner(System.in);
System.out.println("Inserire durata in secondi");
int dur=leggi.nextInt();
double c;
telefonoFisso fis=new telefonoFisso(dur);
telefonoMobile mob=new telefonoMobile();
System.out.println("Stai chiamando da fisso?");
int risp=leggi.nextInt();
if (risp==0)
c=fis.calcolaCostoTot();
else
c=mob.calcolaCostoTot();
System.out.println("Il costo "+c);
}
}
.Partendo dalla classe principale che simula una calcolatrice nel seguente modo:
Deve memorizzare 2 numeri ed eseguire le operazioni fondamentali, derivare da qu
esta classe, creare una classe del tipo calcolatrice che calcoli la somma dei qu
adrati dei due numeri, la differenza tra il quadrato del maggiore e quello del n
umero minore