Pages: [1]   Go Down
Print
Author Topic: Metodi abstract  (Read 1802 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
207
Matricola
*
Offline Offline

Posts: 95


« on: 16-02-2010, 09:02:07 »

Forse sarà una domanda stupida, ma come si fa a capire da una terza prova che un metodo è abstract?
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #1 on: 16-02-2010, 22:42:06 »

Forse sarà una domanda stupida, ma come si fa a capire da una terza prova che un metodo è abstract?

Lo capisci dalla prova stessa, a seconda di quello che ti chiede intuisci come devi impostare.
Per esempio se il testo dicesse, lo invento:

"Una ditta produce computer di diverso genere, quelli con RAM 1 giga, quelli con RAM 2 giga e quelli con 4 giga di RAM......"

Capirai che dovrai impostare un classe astratta di tipo:

abstract class Computer
{
.............
}


Se il testo dicesse:

"Una ditta produce insaccati, tra cui, Mortadelle, Prosciutti cotti e Prosciutti crudi....."
Da qui capisci che ci sarà una classe:

abstract class Insaccati
{
.....
}

E poi a parte farai le classi che ereditano le proprietà degli insaccati, quindi a parte avrai le classi:

public class Prosciutti cotti
{
...

}

public class Prosciutti crudi:
{
...
}


public class Mortadelle
{
...
}

Così per esempio "potrebbe andare", è stato un testo di esame che avevo io.

P.S ti faccio osservare che bisogna leggere bene, come ti ho detto "potrebbe andare", però pensandoci bene, si potrebbe pensare
di non mettere due classi Prosciutti cotti e Crudi, ma si potrebbe mettere in questo caso una classe astratta Prosciutti, e poi le altre due che
erediteranno le proprietà saranno:

public class Cotti
{
...
}

public class Crudi
{
....
}


Spero di essere stato chiaro, se hai dubbi chiedi per quel che ricordo sarò felice di risponderti.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
crypt0
Apprendista Forumista
**
Offline Offline

Posts: 109


« Reply #2 on: 20-02-2010, 11:42:39 »

Così per esempio "potrebbe andare", è stato un testo di esame che avevo io.

P.S ti faccio osservare che bisogna leggere bene, come ti ho detto "potrebbe andare",
E infatti non va.

La definizione che hai dato tu corrisponde a quella di superclasse, e per abstract non si intende superclasse!

Una classe diventa abstract se e solo se ha al suo interno metodi abstract.

Cos'è un metodo abstract?
È un metodo dichiarato ma non implementato nella classe stessa.

Un tipico esempio è
Code:
abstract public double perimetro();

A cosa serve?
Serve a permettere il polimorfismo, cioè a consentirti di usare metodi specifici delle sottoclassi chiamandoli da un oggetto della superclasse.

Ad esempio immagina una struttura di oggetti geometrici del tipo Quadrilateri <--- Rettangoli <--- Quadrati e di inizializzare un array
Code:
Quadrilateri []vett = new Quadrilateri[30]
istanziati scegliendo casualmente tra rettangoli e quadrati.

Per poter utilizzare la funzione "perimetro()", che non è in comune tra i due tipi di oggetti a disposizione, dovresti chiamare quella specifica di ogni sottoclasse utilizzando un codice simile:
Code:
if(vett[i] instanceof Quadrato)
     perimetro = ((Quadrato) vett[i]).perimetro();
Scelta sconvenientissima.

Qual'è la soluzione?
produrre un codice simile per definire le classi
Code:
abstract class Quadrilatero{
   ...
   abstract public double perimetro();
   ...
}
E poi istanziare singolarmente tale metodo in ogni sottoclasse.
In tal modo il metodo sarà in comune, e quindi chiamarlo da un oggetto formalmente appartenente alla superclasse non comporterà un errore di compilazione, e il metodo da applicare sarà scelto direttamente in fase di esecuzione senza alcuno sforzo da parte del programmatore. (binding dinamico)

Utile, no?
« Last Edit: 20-02-2010, 11:58:57 by crypt0 » Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #3 on: 20-02-2010, 13:47:49 »

Azz.. che cantonata..   pray
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
crypt0
Apprendista Forumista
**
Offline Offline

Posts: 109


« Reply #4 on: 22-02-2010, 18:14:54 »

Azz.. che cantonata..   pray
Capita  univ
Logged
corsair
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 273



« Reply #5 on: 23-02-2010, 17:15:16 »

una domanda.. in una gerarchia in cui le superclassi non sono abstract, una sotto classe può  essere abstract?
Logged
newPeppe
Matricola
*
Offline Offline

Posts: 35


« Reply #6 on: 23-02-2010, 19:37:29 »

certo se il metodo non viene definito nella classe derivata essa dovra essere dichiarata abstract se ad essa deriviamo una nuova classe essa se non vorra essere definita abstract il metodo della super super classe dovrà essere definito!
Logged
corsair
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 273



« Reply #7 on: 23-02-2010, 19:42:21 »

scusa ma non ho capito.. troppi essa ciao
EDIT:
Ok rileggendo credo di essere stato ambiguo pure io nel porre la domanda..
Riformulo:
Si ha una gerarchia di classi.. ad un certo punto si può creare una classe abstract? anche se le superclassi non lo sono?
Per capirci meglio faccio un esempio..
class A
class B extends A
abstract class C extends A
class D extends C
class E extends C
C può essere astratta anche se A non lo è?
L'esempio dovrebbe rendere bene l'idea.
« Last Edit: 23-02-2010, 20:43:15 by corsair » Logged
Pages: [1]   Go Up
Print
Jump to: