Fondamenti di programmazione prof ssa elisa tiezzi
This presentation is the property of its rightful owner.
Sponsored Links
1 / 40

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi PowerPoint PPT Presentation


  • 94 Views
  • Uploaded on
  • Presentation posted in: General

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti. Dati  Istruzioni = Metodi. Programmazione Procedurale. Dati  Metodi = Classi. Programmazione a Oggetti. Programmazione OO. Concetti base : dati istruzioni Dati: variabili tipi Istruzioni:

Download Presentation

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Fondamenti di programmazione prof ssa elisa tiezzi

Fondamenti di ProgrammazioneProf.ssa Elisa Tiezzi

Programmazione orientata a oggetti


Programmazione oo

Dati  Istruzioni = Metodi

Programmazione Procedurale

Dati  Metodi = Classi

Programmazione a Oggetti

Programmazione OO

  • Concetti base:

    • dati

    • istruzioni

  • Dati:

    • variabili

    • tipi

  • Istruzioni:

    • istruzioni base

    • strutture di controllo

    • sotto-programmi


Cosa un oggetto

Variabili

(stato)

Metodi

(comportamenti)

Cosa è un oggetto

Un oggetto è una “scatola” software contenente

variabili (che descrivono lo stato di un oggetto)

e metodi (detti suoi membri, definiscono

i comportamenti)


Esempio i numeri razionali

razionale 3/4

Istanza:

un preciso oggetto

mul

sub

div

Variabili di istanza (campi):

contengono i valori (lo stato) del

numero razionale

3

add

num

div

isEqual

4

isBigger

Metodi di istanza:

agiscono sul numero razionale

Esempio: i numeri razionali


Cosa un messaggio

isBigger(razionale di confronto)

num

den

altro oggetto utilizzato

dal programma

razionale 3/4

Cosa è un messaggio

Gli oggetti interagiscono e comunicano tra loro usando i messaggi

per ottenere maggiori funzionalità e comportamenti più complessi


Usare gli o ggetti

Usare gli oggetti

  • Inviare un messaggio ad un oggetto significa invocare un metodo dell’oggetto

  • Accedere alle variabili di istanza di un oggetto significa poter manipolare o ispezionare il loro valore

  • Sintassi per invocare un metodo/accedere alle variabili di istanza di un oggetto:

    • all’interno della definizione di un oggetto:metodo(lista_di_parametri)variabile

    • all’esterno della definizione di un oggetto (operatore ‘.’):riferimentoOggetto.metodo(lista_di_parametri)riferimentoOggetto.variabile


Cosa una c lasse

Cosa è una classe

Una classe è un “prototipo” che definisce le variabili e i metodi comuni a tutti gli oggetti di un certo tipo.

Una classe è solo il modello di un oggetto e pertanto non riserva spazio di memoria per i suoi dati.

Ogni oggetto ha il suo spazio dati, un oggetto è un’istanza di una classe.


Esempio

classe Rational

mul

sub

div

add

int num

int den

isEqual

isBigger

Esempio

Tutti gli oggetti di tipo Rational possiedono i due campi interi num e den ed almenoi 6 metodi riportati


Fondamenti di programmazione prof ssa elisa tiezzi

oggetto 8/15

istanza di Rational

oggetto 4/5

istanza di Rational

mul

sub

mul

sub

div

div

add

add

int num=4

int den=5

int num=8

int den=15

isEqual

isEqual

isBigger

isBigger


Dichiarare un a classe

Dichiarare una classe

  • class nome_classe{// definizione variabili// definizione metodi}

  • Esempio:class Rational{int num;int den;// definizione metodi}


Dichiarare un oggetto

Dichiarare un oggetto

  • Sintatticamente la dichiarazione di un oggetto è del tutto analoga alla dichiarazione di una variabile di tipo primitivo

  • Esempio:

    • Rational primoNumero;essendo Rational una classe

  • La variabile dichiarata di tipo classe è un indirizzo ad un’area di memoria contenente l’oggetto vero e proprio


Istanza di un oggetto

Istanza di un oggetto

  • L’operatore new crea un oggetto del tipo “indicato” dal metodo che immediatamente segue

  • Sintassi:

    • riferimentoOggetto = new NomeClasse(lista_di_parametri);essendo riferimentoOggettouna variabile di tipo NomeClasse

  • L’esecuzione di una tale istruzione comporta:

    • l’allocazione della memoria necessaria a contenere l’oggetto

    • l’assegnazione a riferimentoOggetto dell’indirizzo di inizio dell’area di memoria allocata

    • l’inizializzazione delle variabili di istanza dell’oggetto dettate dalla lista di parametri del metodo NomeClasse(lista_di_parametri)


Fondere le due fasi

Fondere le due fasi

Rational primoNumero;primoNumero = new Rational(3,4);

è equivalente aRational primoNumero = new Rational(3,4);


Oggetti e metodi

Oggetti e metodi

  • Un metodo può ritornare il riferimento ad un oggetto del tipo dichiarato dal valore di ritorno del metodo

    • NomeClassenomeMetodo(lista_input)

  • Un metodo può avere un parametro formale di tipo classe. Al momento dell’invocazione di un tale metodo, il parametro è inizializzato con la copia

    • Rational mul(Rational number)


Tipi primitivi e tipo classe

Tipi primitivi e tipo classe

  • Un metodo non può cambiare il valore di una variabile di un tipo primitivo passatagli come argomento

  • Un metodo può cambiare i valori delle variabili di istanza dell’oggetto indirizzato dalla variabile tipo classe che gli è passata come parametro


Il metodo m ain

Il metodo main

  • main è un metodo speciale dal quale le applicazioni Java iniziano automaticamente l’esecuzione

  • Sintassi:public static void main(String args)

  • È buona norma non includere il metodo main nella definizione di una classe il cui scopo è esclusivamente quello di definire un tipo

    • eccezione: per debugging


Fondamenti di programmazione prof ssa elisa tiezzi

  • Esempio:class RationalTestpublic static void main(String args)/* corpo del metodo main */


I c ostruttori

I costruttori

  • Un costruttore è un metodo speciale designato a inizializzare le variabili di istanza

    • nome uguale a quello della classe

  • Viene richiamato automaticamente quando l’oggetto è creato

    • new NomeClasse(lista_di_parametri)

  • Un costruttore con una lista di argomenti vuota è detto costruttore di default

  • Se nella classe non è presente un costruttore, Java crea automaticamente un costruttore di default


Definizione dei costruttori

Definizione dei Costruttori

  • La dichiarazione di un costruttore non include un tipo di ritorno che è comunque un indirizzo

    • è un errore anteporre la parola chiave void

  • Esempio:class Rationalint num, den;Rational(int n, int d)num = n;den = d;...


Un esempio riassuntivo

Un esempio riassuntivo

class Rational

int num, den; // variabili di istanza

Rational(int n,int d) // costruttorenum = n;den = d;

Rational mul(Rational r) // operazione di moltiplicazionereturn new Rational(num*r.num,den*r.den);

// altre operazioni aritmetiche

boolean isBigger(Rational r) // confronto se maggiorereturn (num * r.den > den * r.num);

// altre operazioni di confronto

}


Fondamenti di programmazione prof ssa elisa tiezzi

class RationalTest

public static void main(String args)

Rational firstNum = new Rational(3,5);Rational secondNum = new Rational(2,3);boolean isBiggerResult;isBiggerResult = firstNum.isBigger(secondNum);

System.out.println (“Primo>secondo:“+isBiggerResult);


Firma signature di un metodo

Firma (signature) di un metodo

  • La firma di un metodo è data dal nome del metodo e dal numero, tipo e ordine dei suoi parametri

    • Esempio di firme diverse:

      • int myMethod(int i) è diverso da

        int yourMethod(int i)

      • int myMethod(int i) è diverso da

        int myMethod(int i, double j)

      • int myMethod(int i, double j) è diverso da

        int myMethod(double j, int i)

  • Il valore di ritorno di un metodo non fa parte della firma del metodo stesso

    • Esempio di firme uguali:

      • int myMethod(int i) ha la stessa firma di

        double myMethod(int j)


Sovraccaricamento

Sovraccaricamento

  • Lo stesso nome di un metodo ha più di una definizione all’interno della stessa classe

  • I metodi sovraccarichi hanno lo stesso nome ma firme diverse tra loro

    • I costruttori sono spesso sovraccaricati


Esempio1

sovraccaricamento

errore segnalato

dal compilatore

Esempio

class MethodOverload

int square(int x)

return x*x;

double square(double y)

return y*y;

int square(double x)

return x*x;

…………


Sovraccaricamento e conversione

Sovraccaricamento econversione

  • Se non si ha la corrispondenza con una qualche firma, Java effettua conversioni di tipo automatiche per trovare un’eventuale corrispondenza

    • una versione indesiderata del metodo può essere eseguita


Incapsulamento

INCAPSULAMENTO

  • Le variabili contenute in un oggetto dovrebbero essere modificate solo dal suo interno, solo i metodi dovrebbero essere gli unici responsabili del cambiamento delle variabili.

  • Un oggetto dovrebbe essere incapsulato rispetto a tutto il resto del sistema e dovrebbe interagire con le altre parti del programma solo attraverso un insieme specifico di metodi che definiscono i servizi che fornisce.


Modificatori

MODIFICATORI

  • Un modificatore è una parola chiave di Java usata per specificare delle caratteristiche particolari di un costrutto del linguaggio.

  • Alcuni modificatori sono chiamate modificatori di visibilità perché controllano fino a quale punto del programma è possibile usare un membro della classe.


Il modificatore public

Il modificatore public

  • Il modificatore public indica la totale assenza di restrizioni di visibilità

  • Le classi dichiarate public possono essere referenziate ovunque

    public class TwoDimensionalShape…………class shapeTestTwoDimensionalShape myShape;…………}


Fondamenti di programmazione prof ssa elisa tiezzi

  • I campi ed i metodi dichiarati public sono accessibili ovunque

    public class Apublic int x;public int getX()  return x; class Bpublic static void main(String[] args){A a = new A();a.x = 3;System.out.println(a.getX());}


Il modificatore private

Il modificatore private

  • Le variabili e i metodi dichiarati private sono accessibili soltanto dai metodi della classe in cui sono definiti


Esempio2

Esempio

public class TwoDimensionalShapeprivate int width, height;private int generate( int n )return 1+(int)( Math.random*n );public void setRandomWidth( int n )width = generate( n );public int getWidth( ){return width;}}


Fondamenti di programmazione prof ssa elisa tiezzi

class shapeTestpublic static void main( String[] args ){TwoDimensionalShape s = new TwoDimensionalShape();s.width = s.generate( 100 ); ERRORE DOPPIOs.setRandomWidth( 100 );System.out.println( s.getWidth( ) );}


Caratteristiche dell oop

Occultamento delle informazioni

protegge i dati all’interno di un oggetto

usa variabili di istanza private

non permette un loro accesso diretto

usa metodi public per accedere alle variabili

Incapsulamento

gli oggetti incapsulano attributi e metodi

nasconde i dettagli di una definizione di classe separando

interfaccia (API)

implementazione

Caratteristiche dell’OOP


La parola chiave static

La parola chiave static

  • Una variabile definita static è detta variabile di classe

  • Essa rappresenta informazioni valide per l’intera classe ed è condivisa da tutte le istanze della classe

  • Esempio:

    public class A

    static int x;

    ………


Fondamenti di programmazione prof ssa elisa tiezzi

  • Un metodo definito static è detto metodo di classe

  • Esso definisce un comportamento identico per tutte le istanze della classe ossia indipendente dagli oggetti

  • Esempio:

    Math.random()

  • E’ un errore di sintassi per un metodo static chiamare un metodo di istanza o accedere ad una variabile di istanza


Accedere a membri static

Accedere a membri static

  • I membri static di una classe esistono indipendentemente dall’esistenza di una istanza di tale classe

  • Due tipi di accesso

    • NomeClasse.nomeMetodo(lista_parametri)

      NomeClasse.nomeVariabile

    • rifOggetto.nomeMetodo(lista_parametri)

      rifOggetto.nomeVariabile

      essendo rifOggetto un riferimento a un oggetto ditipo NomeClasse


La parola chiave final

La parola chiave final

  • La parola chiave final riferita a una variabile indica che essa non può essere modificata

    • Sintassi:

      final tipo NOME= costante;

    • Esempio

      final double PI = 3.14159;


Fondamenti di programmazione prof ssa elisa tiezzi

Librerie di classi

Una libreria di classi è un insieme di classi che aiuta il programmatore nello sviluppo del software.

Un compilatore spesso viene distribuito con una libreria di classi fondamentali.

Si possono ottenere separatamente delle librerie commerciali.

Tecnicamente una libreria non fa parte della definizione del linguaggio.

La libreria standard viene distribuita con qualsiasi ambiente di sviluppo.


Api e package

API e package

Una libreria di classi è composta da gruppi di classi tra loro collegate, spesso indicate collettivamente come API (Application Programmer Interface). E’ possibile per esempio riferirsi al Java Database API quando si parla dell’insieme delle classi che permettono di interagire con una base di dati.

Le classi della libreria standard di Java sono raggruppate in package che, come le API, permettono di indicare con un unico nome delle classi tra loro collegate. Ad esempio la classe String fa parte del package java.lang.


La clausola import

La clausola IMPORT

  • Le classi del package java.lang sono automaticamente rese disponobili durante la scrittura di un programma.

  • Se si vogliono usare le classi appartenenti ad altri package, occorre specificare il nome della classe insieme al nome del package, oppure usare la clausola import.

  • Es.: java.util.Random

    import java.util.Random

    import java.util.*


  • Login