WEBVTT

00:00.170 --> 00:01.040
Bentornati.

00:01.040 --> 00:07.390
In questo video, risolveremo un esercizio molto importante sull'astrazione e l'ereditarietà in Java.

00:07.400 --> 00:13.940
Pensate a un programma che ci permetta di calcolare l'area di un cerchio, di un rettangolo o di altre forme.

00:13.940 --> 00:20.480
Prima di tutto, inizierò come un principiante che cerca di creare e risolvere questo esercizio.

00:20.480 --> 00:26.180
Inizierò creando il cerchio e questa classe avrà il raggio.

00:26.180 --> 00:33.950
Poi creerò un costruttore Alt+ inserisci nel costruttore e creerò un metodo chiamato Calcola

00:33.950 --> 00:36.890
area che eseguirà il calcolo.

00:36.890 --> 00:45.500
Quindi 3. 14, che è il pi greco per il raggio al quadrato e si può scrivere così per il raggio per il raggio.

00:45.500 --> 00:51.890
Creiamo un altro metodo che ci permetta di calcolare il perimetro di questo cerchio nello stesso modo in

00:51.890 --> 00:58.250
cui restituisce un double e calcola il perimetro qui e restituisce due volte pi greco per il raggio.

00:58.250 --> 01:06.120
In questo modo creiamo una classe cerchio con raggio variabile doppio e calcoliamo l'area e il perimetro

01:06.120 --> 01:07.650
di questo cerchio.

01:07.650 --> 01:10.620
Creo un'altra forma chiamata Rettangolo.

01:10.620 --> 01:17.250
Il rettangolo ha lunghezza e larghezza come variabili e creerò il costruttore con la lunghezza e la larghezza.

01:17.250 --> 01:22.050
Quindi, ogni volta che devo creare un'istanza di rettangolo, devo passare la lunghezza e la larghezza.

01:22.050 --> 01:27.360
Ora creerò due metodi per calcolare l'area e il perimetro di questo rettangolo.

01:27.360 --> 01:34.440
L'area del rettangolo è pari alla lunghezza per la larghezza e il perimetro del rettangolo è pari a due volte la lunghezza più

01:34.440 --> 01:35.400
la larghezza.

01:35.400 --> 01:37.860
Passiamo ora alla classe My.

01:37.860 --> 01:45.630
Questa è la classe tester, quindi ho bisogno di creare un cerchio C uguale a new

01:45.630 --> 01:54.900
circle e devo passare il raggio radius è 5. 0 e devo creare un'istanza di rettangolo chiamata R uguale a nuovo rettangolo.

01:54.900 --> 02:01.020
Ho bisogno di passare la lunghezza che è 4. 0 e la larghezza è di sei punti z.

02:01.020 --> 02:06.930
Ora stampiamo l'area e il perimetro del rettangolo e del cerchio.

02:06.930 --> 02:13.950
Ho creato questi quattro messaggi area del cerchio, cerchio, perimetro area del rettangolo e perimetro del rettangolo

02:13.950 --> 02:16.590
e sto chiamando i rispettivi metodi.

02:16.590 --> 02:19.470
Eseguiamo il nostro programma ed eccoci qui.

02:19.470 --> 02:27.150
Il programma funziona bene, l'area viene calcolata sia per il rettangolo che per il cerchio e anche il perimetro.

02:27.150 --> 02:31.440
Ma c'è un concetto molto importante.

02:31.440 --> 02:37.350
È necessario sapere se è necessario creare un'altra forma, ad esempio un triangolo.

02:37.890 --> 02:43.890
E per errore non avete definito il perimetro di calcolo.

02:43.890 --> 02:50.390
Si definisce tutto ciò che è buono, come la base dell'altezza, si crea il costruttore e si crea l'area.

02:50.400 --> 02:58.140
Ma il triangolo è una forma che dovrebbe contenere il metodo di calcolo dell'area e del perimetro.

02:58.140 --> 03:01.110
E per errore non l'avete fornita.

03:01.110 --> 03:04.020
Non hai fornito il perimetro di calcolo.

03:04.200 --> 03:06.180
Cosa devo fare?

03:06.180 --> 03:13.440
Se guardiamo tra queste tre classi che abbiamo definito, ci sono codici comuni, come, ad esempio, calcolare

03:13.440 --> 03:20.490
l'area, calcolare il perimetro, ma approcci diversi, come il calcolo dell'area del cerchio è diverso da

03:20.490 --> 03:24.480
quello del rettangolo e da quello del triangolo e così via.

03:24.480 --> 03:32.880
Esiste un concetto comune per calcolare il perimetro e calcolare l'area che stiamo realizzando.

03:32.880 --> 03:37.770
E per ogni classe concreta, sempre gli stessi metodi.

03:37.770 --> 03:47.280
E dobbiamo sempre utilizzare il calcolo dell'area e del perimetro in ogni forma per crearla con un approccio migliore.

03:47.280 --> 03:53.490
Il trucco consiste nel creare una nuova interfaccia o una classe astratta chiamata shape.

03:53.490 --> 04:01.680
Ma preferisco shape se avete bisogno di definire solo i metodi che devono essere implementati forzatamente

04:01.680 --> 04:06.600
in ogni classe: calcola, calcola area e calcola perimetro.

04:06.600 --> 04:15.450
Ora ogni classe che implementa questa forma deve implementare ed essere obbligata a implementare i metodi calcola area

04:15.450 --> 04:17.310
e calcola perimetro.

04:17.310 --> 04:24.780
Prendiamo l'esempio del triangolo che implementa l'interfaccia di forma Alt+Invio e si può

04:24.780 --> 04:30.750
vedere che questa forma ci dice che si è perso il calcolo del perimetro.

04:30.750 --> 04:31.860
Eccoci qua.

04:31.860 --> 04:39.720
E per il cerchio ho bisogno di implementare la forma e si può vedere che il cerchio implementa, calcola l'area

04:39.720 --> 04:41.520
e calcola il perimetro.

04:41.520 --> 04:42.120
Esattamente.

04:42.120 --> 04:44.070
Il rettangolo è lo stesso.

04:44.070 --> 04:46.320
Si può notare che non c'è alcun errore.

04:46.320 --> 04:52.860
E si può notare che posso I, che è l'interfaccia che implementa il metodo in forma.

04:52.860 --> 04:57.530
Quindi, calcolare l'area è un metodo che viene implementato dalla forma.

04:57.540 --> 04:59.940
Ora se devo crearne un altro.

05:00.000 --> 05:00.660
Forma.

05:00.660 --> 05:06.780
Quindi, ad esempio, quadrato e questa forma quadrata implementa la forma.

05:06.780 --> 05:12.980
Quindi non devo preoccuparmi di quali metodi devo usare qui.

05:12.990 --> 05:13.950
Alt+Invio.

05:13.950 --> 05:20.970
Si può vedere che i metodi calcola area e calcola perimetro sono stati forzati

05:20.970 --> 05:26.010
ad essere implementati in questo quadrato.

05:26.040 --> 05:33.600
Ciò consente di avere una base di codice flessibile e manutenibile, in quanto è possibile aggiungere facilmente altre forme implementando

05:33.600 --> 05:38.430
l'interfaccia delle forme senza modificare il codice esistente.
