Oggetti e dati primitivi Parte 2 Introduzione agli oggetti Interagiamo con oggetti di uso quotidiano, conoscendone le funzioni, ma non il funzionamento interno Gli oggetti hanno uno stato e un comportamento Gli oggetti sono scatole nere dotate di interfaccia che limita l’accesso ai meccanismi interni Un oggetto sw è una astrazione o un modello della realtà che limita il numero dei dettagli rappresentati all’essenziale per il contesto considerato Gli oggetti software Anche un oggetto sw ha uno stato, descritto e rappresentato da – una o più variabili • Una variabile è un dato individuato da un identificatore – ed un comportamento definito dai metodi Un oggetto è costituito dall’insieme delle variabili e dei metodi Oggetti e classi Gli oggetti sono generati da una classe La classe è uno schema per produrre una categoria di oggetti strutturalmente identici Gli oggetti creati usando una classe si dicono istanze della classe Una classe è una fabbrica di istanze: possiede lo schema e la tecnica di produzione La classe costituisce il prototipo Gli oggetti come astrazione STUDENTE nome cognome stati età voti Studia() Dorme() Ripete() comportamenti Un oggetto che modella una bicicletta – Una velocità (20 Km/h), giro dei pedali (15 g/m), marcia (5°) – Sono variabili di istanza, di proprietà di ciascuna bicicletta modellata Gli oggetti come astrazione – 2 Il modello di bicicletta rappresenta funzioni come frenare o cambiare marcia, che modificano le variabili d’istanza Si chiamano metodi d’istanza perché hanno accesso alle variabili d’istanza JAVA: Le istanze, gli oggetti Definita una classe, si possono creare un arbitrario numero di oggetti appartenenti alla classe Creo l’oggetto (istanza) “tangibile” JAVA: il concetto di Incapsulamento Le variabili di un oggetto, che ne rappresentano lo stato, sono nascoste all’interno dell’oggetto, accessibili solo ai metodi Idealmente i metodi proteggono le variabili Per diverse necessità esistono 4 diversi livelli di accesso a metodi e variabili Questa nozione si chiama: incapsulamento dei dati – Consente modularità e flessibilità – Nasconde le informazioni fornendo un’interfaccia JAVA: In concetto di Astrazione L’astrazione nasconde o ignora dettagli inessenziali Un oggetto è un’astrazione – Non ci preoccupiamo dei suoi dettagli interni per usarlo – Non conosciamo come funziona il metodo println quando l’invochiamo Effettuiamo astrazioni continuamente Possiamo anche scrivere software complesso organizzandolo attentamente in classi e oggetti JAVA: I messaggi tra oggetti – il dialogo Gli oggetti interagiscono tra loro per ottenere funzioni più complesse – Laura chiede a Nino informazioni sul suo oggetto. – Nino restituisce le informazioni desiderate solo se lo ritiene opportuno (ad esempio se le condizioni sono “sicure”) Gli oggetti sw per interagire si mandano messaggi – Chiedendo di eseguire un certo metodo I messaggi – 2 Spesso i metodi necessitano di informazioni per poter essere eseguiti: i parametri Tre componenti: – L’oggetto a cui il messaggio è rivolto – Il metodo da eseguire per ottenere un certo effetto – I parametri se necessari al metodo I messaggi - 3 Un oggetto può essere visto come un insieme di servizi che possiamo chiedere che siano eseguiti I servizi sono definiti dai metodi – Il comportamento degli oggetti è definito dai metodi – il meccanismo di invio dei messaggi consente l’interazione Gli oggetti che comunicano possono essere “distanti” – Su macchine diverse – Non appartenenti allo stesso modello Inviare messaggi Chiediamo il servizio di stampa, invocando il metodo println dell’oggetto System.out System.out.println (“Le cose importanti per prime."); oggetto metodo informazioni fornite al metodo: i parametri Java: I membri delle classi Le classi contengono 2 tipi di membri, definiti per l’intera classe o per le singole istanze – Le variabili o i campi, che rappresentano lo stato della classe o degli oggetti – I metodi, che rappresentano il codice eseguibile sottoforma di istruzioni Il tipo di un oggetto è definito dalla classe di appartenenza Punto p = new Punto(25, 30); Java: un Esempio Class Uomo { public int eta; public String nome, cognome; } La classe Uomo ha tre campi che rappresentano l’età il nome ed il cognome I campi sono dichiarati public, cioè chiunque acceda alla classe Uomo può modificarli Java: I campi statici di classe Generalmente i campi sono associati alle istanze della classe – Contengono informazioni specifiche per ogni oggetto Per varie ragioni può essere utile avere campi associabili alla classe – Condivisibili da tutti gli oggetti della classe, specifiche della classe e non degli oggetti – Le variabili di classe – Esempio: l’origine è una variabile di classe, riferimento a un oggetto della classe Point, cioè di tipo Point public static Point origine = new Point(); Java: Lavorare con le stringhe - String Java mette a disposizione oggetti di tipo predefinito Ad esempio String per rappresentare stringhe Ogni stringa, delimitata dalle virgolette “, è un oggetto della classe String – Una stringa letterale non può essere spezzata su più righe nel codice String nome= “Laura”; String cognome = new String(“Papaleo”); Creare oggetti - 1 Gli oggetti vengono creati mediante un metodo di istanziazione, detto costruttore – Gli oggetti creati sono collocati in un’area di memoria e sono accessibili mediante riferimenti (le frecce!) Le variabili che rappresentano oggetti contengono il loro riferimento Point altoSinistra = new Point (); Point bassoDestra = new Point(); bassoDestra.x = 112; bassoDestra.y = 40; Creare oggetti - 2 Si usa l’operatore new per creare un oggetto new è uno speciale metodo detto costruttore Si dice anche istanziare un oggetto Un oggetto è un’istanza di una particolare classe titolo = new String (“Fondamenti di progettazione sw"); Chiamata al costruttore, per creare un nuovo oggetto Creare oggetti – 3 Per la classe String non è necessario invocare il costruttore new per creare un oggetto stringa corso = “Corso di JAVA"; Speciale sintassi che vale solo per questa classe System.out.println (“Questa frase non ha senso."); Il riferimento all’oggetto di tipo String viene passato come parametro al metodo println JAVA: Concatenazione di stringhe L’operatore di concatenazione di stringhe + viene usato per appendere una stringa ad un altra Il simbolo + è anche usato per l’operazione di addizione aritmentica L’operatore + viene valutato da sinistra a destra – Le parentesi possono essere usate per alterare l’ordine di esecuzione Sequenze di escape Alcuni caratteri speciali possono dare luogo ad ambiguità System.out.println (“Laura disse: “Ciao" e poi sorrise"); La sequenza di escape inizia con il carattere backslash \ e indica che il carattere che segue va trattato in modo speciale System.out.println (“Laura disse: \“Ciao\" e poi sorrise"); Sequenze di escape Alcune sequenze di escape in Java: Sequenza Significato \b \t \n \r \" \' \\ backspace tabulazione newline ritorno virgolette doppie virgoletta backslash JAVA: Tabella di metodi per stringhe Tipo di ritorno Nome del metodo Argomenti Rif. a String toUpperCase Rif. a String toLowerCase Rif. a String concat int length Rif. a String substring Due numeri interi int compareTo Rif. a String Rif. a String JAVA: Prototipi e segnature La signature di un metodo è costituita dal – Nome del metodo – Tipo degli argomenti Per utilizzare un metodo occorre conoscerne anche il prototipo – Segnatura – Tipo del valore di ritorno Overloading. Overloading È possibile che due metodi con lo stesso nome diversi per segnatura JAVA: Le Variabili Una variabile è un dato identificato da un identificatore, che rappresenta l’indirizzo della cella di memoria in cui il dato è archiviato Una variabile deve essere dichiarata, specificandone l’identificatore e il tipo di informazione che deve contenere Tipo del dato Nome della variabile int totale; int contatore, temp, risultato; Più variabili possono essere specificate in un’unica dichiarazione Variabili Nella dichiarazione può essere già assegnato un valore iniziale alla variabile int somma = 0; int base = 32, max = 149; Quando in un programma si richiama una variabile si usa il suo valore Variabili riferimento a un oggetto Una variabile può contenere un valore di un tipo primitivo o il riferimento a un oggetto Il nome di una classe può essere usato per dichiarare una variabile di riferimento a un oggetto String titolo; Nessun oggetto viene creato in questa dichiarazione L’oggetto stesso deve essere creato separatemente titolo = new String (“Java. Manuale”); titolo = “Java. Manuale”; JAVA: Gli Identificatori Gli identificatori sono le parole usate dal programmatore Un identificatore è composto da lettere, cifre, il carattere underscore _ e il segno $ Non possono iniziare con una cifra Java è sensibile alle maiuscole, case sensitive – Totale e totale sono identificatori diversi JAVA: Gli Identificatori Alcuni identificatori sono definiti da noi Altri sono stati definiti da altri programmatori e noi li usiamo (esempio: println) Alcuni identificatori speciali sono detti parole riservate e hanno un significato prestabilito Una parola riservata non può essere ridefinita JAVA: Alcune Parole riservate Sono gli identificatori predefiniti nel linguaggio: abstract boolean break byte byvalue case cast catch char class const continue default do double else extends false final finally float for future generic goto if implements import inner instanceof int interface long native new null operator outer package private protected public rest return short static super switch synchronized this throw throws transient true try var void volatile while Assegnamento Una istruzione di assegnamento modifica il valore di una variabile L’operatore di assegnamento è indicato con = totale = 55; – L’espressione alla destra del carattere = è valutata e il suo valore viene assegnato alla variabile a sinistra – L’eventuale valore precedente di totale è sovrascritto – Si possono assegnare solo valori compatibili con il tipo dichiarato JAVA: Dichiarazione ed Uso di Costanti Una costante è un identificatore il cui valore non può essere modificato dopo la sua dichiarazione iniziale – Il compilatore segnala un errore se si cerca di modificare una costante Si dichiara con final final int ALT_MIN = 69; – Rendono chiari valori letterali altrimenti non evidenti – Rendono il codice modulare, facilitandone il cambiamento – Prevengono errori involontari