Anteprima
Vedrai una selezione di 11 pagine su 49
Appunti secondo parziale di Fondamenti di programmazione Pag. 1 Appunti secondo parziale di Fondamenti di programmazione Pag. 2
Anteprima di 11 pagg. su 49.
Scarica il documento per vederlo tutto.
Appunti secondo parziale di Fondamenti di programmazione Pag. 6
Anteprima di 11 pagg. su 49.
Scarica il documento per vederlo tutto.
Appunti secondo parziale di Fondamenti di programmazione Pag. 11
Anteprima di 11 pagg. su 49.
Scarica il documento per vederlo tutto.
Appunti secondo parziale di Fondamenti di programmazione Pag. 16
Anteprima di 11 pagg. su 49.
Scarica il documento per vederlo tutto.
Appunti secondo parziale di Fondamenti di programmazione Pag. 21
Anteprima di 11 pagg. su 49.
Scarica il documento per vederlo tutto.
Appunti secondo parziale di Fondamenti di programmazione Pag. 26
Anteprima di 11 pagg. su 49.
Scarica il documento per vederlo tutto.
Appunti secondo parziale di Fondamenti di programmazione Pag. 31
Anteprima di 11 pagg. su 49.
Scarica il documento per vederlo tutto.
Appunti secondo parziale di Fondamenti di programmazione Pag. 36
Anteprima di 11 pagg. su 49.
Scarica il documento per vederlo tutto.
Appunti secondo parziale di Fondamenti di programmazione Pag. 41
Anteprima di 11 pagg. su 49.
Scarica il documento per vederlo tutto.
Appunti secondo parziale di Fondamenti di programmazione Pag. 46
1 su 49
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

OVERRIDING VS OVERLOADING

→i metodi overloaded sono a tutti gli effetti metodi diversi (hanno argomenti diversi).Hanno in comune solo il nome

→i metodi overridden sono definizioni di un metodo già esistente: tra loro esiste la relazione di mascheramento

OVERRIDING DI METODI

→più in generale l’overriding permette di ridefinire e specializzare metodi definiti in una superclasse 10

METODI SUPER

→nel caso di un metodo overriden è comunque possibile invocare il metodo nella versione della superclasse con la

sintassi super.nomeMetodo

→di solito è proprio il nuovo metodo a invocare quello da lui mascherato

→in caso contrario l’uso di super in assenza di una sua versione overriden fa nascere dubbi sulla correttezza del

progetto

→la parola chiave isolata serve per invocare il costruttore della classe padre da dentro il costruttore della

super()

classe figlia e deve essere la prima istruzione del costruttore

IL PROCESSO DI COSTRUZIONE

COSTRUZIONE DI UN’INSTANZA

→in virtù del meccanismo di ereditarietà, la costruzione di un'istanza di una classe non coinvolge solo la definizione

della classe stessa ma anche quella delle sue superclassi (almeno una c’è sempre:Object)

→pertanto quando si invoca il costruttore di una classe si scatena un processo che non si limita all’esecuzione del

codice del costruttore (che viene effettuata solo alla fine di tale processo)

→la costruzione è preceduta da:

- caricamento di tutte le superclassi

- inizializzazione dello loro variabili static

→la costruzione è costituita dalle fasi:

1. assegnazione dei valori di default agli attributi

2. chiamata al costruttore della classe base (quello di default oppure tramite si scatena

super):

la risalita nella gerarchia dei costruttori

3. esecuzione inizializzazione esplicite degli attributi

4. esecuzione del corpo del costruttore 11

12

POLIMORFISMO E LATE BIDING

SELEZIONE DEL METODO DA ESEGUIRE

→nel caso di metodi overloaded la selezione del metodo da eseguire è implicita nella chiamata e si fa al momento

della compilazione

→nel caso di metodi overriden la selezione dipende dall’oggetto al quale è riferita l’invocazione NON dal riferimento

attraverso il quale l’invocazione è veicolata

→per questo motivo la selezione deve venire effettuata durante l’esecuzione (late binding)

POLIMORFISMO

→Il polimorfismo permette di scrivere codice generico che si adatta automaticamente a tutte le specializzazioni di

una certa classe (anche quelle future)

→Il trucco è la selezione del metodo sulla base dell’oggetto durante l’esecuzione

→la generalità si paga con la perdita di efficienza 13

14

VANTAGGI DEL POLIMORFISMO:

- il polimorfismo permette di creare nuove classi derivate senza cambiare nulla nel codice delle classi che

usano le loro superclassi;

- RIUSO AUTOMATICO del codice di classi esterne + possibilità di utilizzare le nuove classi gratis

N.B. se l’impostazione è corretta si può cambiare/aggiungere molto lavorando poco.

COME BLOCCARE LA FILIAZIONE:

La parola chiave indica che è una definizione è definitiva

final

Per esempio:

- attributo = una costante

final

- metodo = non può avere overridden *

final

- classe = non può avere sottoclassi *

final

*servono ad aumentare l’efficienza: eliminano l’overhead legato al potenziale polimorfismo

Le classi e i sono

String, Math wrapper final.

CLASSI ASTRATTE

DAL POLIMORFISMO ALL’ASTRAZIONE:

→ le sottoclassi possono specializzare il comportamento di un metodo ereditato: in questo casi si suppone che il

metodo abbia un comportamento più generico definito in una superclasse.

- in alcuni casi il comportamento generico per il metodo non esiste: ha senso solo definire le sue varianti

specializzate. In questo caso nella superclasse il metodo ha il ruolo di segnaposto astratto per le implementazioni

nelle sottoclassi.

METODI ASTRATTI E CLASSI ASTRATTE:

→ un metodo astratto senza implementazione è preceduto dalla parola (nessuna implementazione!

abstract

diverso da implementazione vuota {}

→ una classe che contiene metodi astratti deve a sua volta essere definita come astratta

- le sottoclassi per poter essere istanziabili devono implementare i metodi astratti specificati

UNA CLASSE ASTRATTA UNA SUA CLASSE DERIVATA 15

UN’ALTRA SUA CLASSE DERIVATA UN’ALTRA ANCORA

IL CERCHIO SI CHIUDE

CLASSI ASTRATTE:

→ una classe può essere definita come astratta anche se non ha metodi astratti, però non può avere istanze

dirette ma solo sottoclassi

- variabili di una classe astratta sono ammesse e conterranno riferimenti a istanze di sottoclassi

INTERFACE

VERSO L’EREDITÀ MULTIPLA

→Java non ammette l’eredità multipla (da più classi) : per questo motivo è stato introdotto il concetto di interface

INTERFACE: - è una sorta di classe astratta ancora più astratta (classe astratta allo stato puro)

- una classe può implementare un numero arbitrario di interfacce (keyword: implements)

- la definizione è analoga a quella di una classe ma:

- gli attributi presenti (ma di solito non ci sono) sono implicitamente e

static final

(costanti)

- tutti i metodi sono implicitamente e

abstract friendly

- può essere o

public friendly 16

EREDITÀ MULTIPLA

→ l’assenza di aspetti implementativi ereditabili elimina i principali problemi legati all’eredità multipla

→ si stabilisce solo quali metodi bisogna ereditare, ma in nessun caso la loro codifica.

→ se una classe implementa un deve fornire un’implementazione per tutti i metodi da essa specificati

interface

EREDITÀ TRA INTERFACCE

→ una interfaccia può ereditare da un’altra (keyword e quindi aggiungere nuovi metodi per specializzarla

extends)

→ vale ovviamente la possibilità di eredità multipla tra interfacce

→ come una classe astratta, l’interfaccia non può avere istanze, però sono ammessi riferimenti a istanze di classi

che le implementano

USO DELLE INTERFACE

→ un nome di può comparire come tipo di una variabile, come tipo di argomento di un metodo, come

interface

tipo ritornato da un metodo.

UTILITÀ DELLE INTERFACCE

→ le permettono di specificare comportamenti standardizzati senza vincolare come essi vengono

interface

realizzati all’interno di una classe. Tali comportamenti permettono la combinazione flessibile di classi (una classe

può essere sostituita da un’altra se implementa la stessa interface.

→ in combinazione con il polimorfismo sono molto agevolati sia il riuso sia la modifica sia l’aggiunta di classi.

17

N.B. ESEMPIO A PAG 98 PPT “L’EREDITARIETà”

INTERFACE DA JAVA8: metodi statici

→Precedenti versioni di Java non permettevano l’uso di metodi statici nelle interface.

→Java8 lo permette:

- è una naturale estensione;

- non viola lo spirito dell’interface;

- sono parte dell’interfaccia e non possono essere sovrascritti nella classi che le implementano;

- l’uso di @Override con un metodo statico genera un errore di compilazione;

Bisogna usare il nome dell’interfaccia nella chiamata dei metodi.

Per esempio e non

Shape.sumAreas() sumAreas()

Metodi statici non possono modificare variabili statiche

INTERFACE DA JAVA8: metodi di default

→Java8 permette la definizioni di metodi di default (metodi concreti nelle interfacce)

→Avere un implementazione di default può essere molto comodo e permette di aggiungere comportamenti ad

interface esistenti senza rompere classi che implementano l’interface.

→una classe che implementa l’interfaccia erediterà il comportamento predefinito del metodo oppure lo potrà

sovrascrivere

→Metodi possono convivere con metodi astratti e metodi statici

default

→Ha problemi con ereditarietà multipla.

→Una classe può ereditare metodi predefiniti da più interfacce e questi possono entrare in conflitto:

- le classi vincono: succede quando una classe estende un’altra ed implementa un'interfaccia,

ereditando lo stesso metodo da entrambe;

- le interfacce rimangono in conflitto: quando una classe implementa due interfacce che hanno

lo stesso metodo predefinito; la sua sovrascrittura nella classe è obbligatoria 18

LE CLASSI INTERNE

→una classe definita all’interno di un’altra classe o di un metodo, viene detta classe interna (inner class)

→se una classe viene definita all’interno di un’altra classe ma al di fuori dei metodi, allora tale classe sarà visibile a

tutti i metodi della classe che la contiene

aggiungi le ultime pagine 19

10. ECCEZIONI

ECCEZIONI

→ci possono essere svariati errori che si possono verificare in esecuzione.

GESTIONE DELLE ECCEZIONI

→ECCEZIONI: situazione che impedisce la regolare continuazione del programma.

→le eccezioni devono essere gestite -> la gestione delle eccezioni è distinta dal codice per il funzionamento

normale

→N.B.: la gestione di un’eccezione può avvenire in un punto diverso da quello dove l’eccezione si verifica

LA CATTURA DELLE ECCEZIONI

→l’esecuzione di certe istruzioni può generare (in gergo “lanciare”) eccezioni.

→un’eccezione generate è in realtà un oggetto appartenente ad una certa classe che viene creato a seguito del

verificarsi di un’anomalia.

- questo oggetto contiene informazioni su cosa è successo e viene “catturato” e utilizzato dal

codice per la gestione delle eccezioni

SCOPI DELLA GESTIONE ECCEZIONI

→1. evitare numerosi controlli sparpagliati e ripetuti, concentrandosi in sezioni di codice apposite

2. tenere distinti codice normale e codice di gestione anomalie

3. invogliare (o obbligare) a tener conto delle anomalie in modo appropriato

TRY-CATCH

DA JAVA 7:catch multiplo

→è possibile catturare eccezioni di più classi nello stesso blocco catch 20

GESTIONE ECCEZIONE INPUT

→i metodi della classe possono dar luogo a tre tipi di eccezione:

nextQualcosa Scanner

se il dato non è nel formato appropriato

- inputMismatchExpetion se non ci sono dati →difficilmente può succedere per

- noSuchElementExcpetion

un’instanza associata alla tastiera

se l'istanza di Scanner non è in grado di fornire dati(il suo stato non

- IllegalStateExpetion

è attivo) →difficilmente può

Dettagli
A.A. 2022-2023
49 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher benedettaanglani2312 di informazioni apprese con la frequenza delle lezioni di Fondamenti di programmazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Brescia o del prof Serina Ivan.