Anteprima
Vedrai una selezione di 1 pagina su 5
Classi astratte e interfacce in java Pag. 1
1 su 5
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Classi astratte e interfacce

Classe astratta:

· È una classe implementata in modo parziale, contiene la

· dichiarazione di alcuni metodi (metodi astratti che

verranno implementanti dalla classi che estenderanno)

di cui viene specificata la signature ma non il corpo,

nella classe astratta alcune implementazioni possono

essere fornite, non è quindi un'astrazione pura.

Non può essere istanziata proprio perché definita in

· modo incompleto, può essere però estesa. Le classi che

estendono la classe astratta sono classi concrete e

possono essere istanziate

Le classi astratte sono progettate per essere estese da

· altre classi che forniscono delle opportune

implementazioni per i metodi astratti per sfruttare il

concetto di polimorfismo

Classi astratte servono principalmente a:

· Definire il comportamento comune per tutte le

· classi che estenderanno

Dichiarare -senza implementare- le funzionalità

· che devono essere implementate da tutte le classi

che estenderanno

La classe astratta si indica come:

· public abstract class Forma

Metodo astratto si indica come:

· public abstract double area(); //indico che ogni forma

deve saper calcolare la propria area, avendo un metodo

public double area();

Immaginiamo di avere forma astratta e quadrato

· concreta:

Quadrato q=new Quadrato(2, “bianco”);

Forma f=new Quadrato(10, “rosso”);

ora su quadrato posso chiamare tutti i metodi della

classe quadrato, invece su forma posso chiamare solo i

metodi che sono presenti nella classe astratta Forma, e

non quelli in Quadrato

Se una classe contiene almeno un metodo astratto, il

· compilatore insiste

che la classe deve essere dichiarata astratta.

Qualsiasi sottoclasse di classi astratte deve fornire

· un'implementazione di metodo astratto o dichiararsi

astratto.

Abstract è l’opposto di final, ad esempio una classe final

· non può avere sottoclassi, invece una classe astratta

deve avere una sottoclasse

Interfacce:

· Non viene data l’implementazione di nulla, è astrazione

· pura

Non introducono dipendenze tra classi che comunque

· non ne hanno ma comunque consentono di

rappresentare una sorta di collegamento logico

Permettono l’estensibilit poiché è possibile aggiungere

· moduli e collegarli agli altri mediante interfacce. E'

estendibile purchè sia chiaro qual è l'interfaccia di

collegmamento che definisce il contratto, il

comportamento minimale, che gli altri componenti

possono sfruttare

Nel momento in cui dichiariamo che implementiamo

· un'interfaccia il compilatore richiede che noi forniamo

l'implementazione di tutti i metoid definiti nell'interfacce

da cui ereditiamo.

L’interfaccia è scritta come:

· Interface Driveable{

}

Essendo puramente astratte non ha senso che abbiano

· degli attributi, a meno di casi particolari, cioè costanti,

essi devono essere:

Costanti

· Statiche

· pubbliche

·

Essa definisce univocamente quale sarà il

· comportamento minimale deglio oggetti che

erediteranno da essa

Le classi che ereditano da essa sono costrette a fornire

· l’implementazione dei metodi definiti dall’interfaccia

Una interfaccia non ha un costruttore

· Ha senso che i metodi siano solo pubblici. Non ci

· possono essere metodi statici. Essendo i metodi solo

pubblici non dichiariamo i modificatori di visibilità.

(forse?)

Tutto ciò che è nell’interfaccia è implicitamente astratto

· quindi non necessita della keyword abstract

L’interfaccia è una sorta di contratto, anche se ci metto

· un set minimo di metodi, esso è come un contratto che

dice che l’oggetto che estende l’interfacci avrò almeno

questi metodi, possiamo ad esempio diffonderlo dandolo

al nostro team etc…

Pregio rispetto alle classi astratte: In java si può

· estendere solo da un oggetto per volta, mediante le

interfacce si ha una sorta di ereditarietà multipla

ereditando da più interfacce, possiamo quindi estendere

una classe (astratta o concreta) e implementare quante

interfacce vogliamo. Due interfacce possono avere lo

stesso nome, non è un problema perché non ho

implementazione.

Esempio di classe che estende 2 interfacce:

class AvisCar implements Driveable, Rentable{

Dettagli
Publisher
A.A. 2023-2024
5 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher ab502 di informazioni apprese con la frequenza delle lezioni di Programmazione a oggetti e ingegneria del software 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 Pavia o del prof Antonino Nocera.