Last active
March 2, 2025 11:16
-
-
Save nicol-ograve/fd5f8cc45d295dd1d3da3bf75c28a901 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:math'; | |
// Classe astratta che definisce una figura geometrica | |
abstract class Figura { | |
double get area; // Getter astratto per l'area | |
double get perimetro; // Getter astratto per il perimetro | |
void descrizione() { | |
print("Sono una figura geometrica."); | |
} | |
} | |
// Mixin per oggetti che possono essere colorati | |
mixin Colorabile { | |
String _colore = "Bianco"; | |
String get colore => _colore; | |
set colore(String nuovoColore) { | |
_colore = nuovoColore; | |
print("Colore cambiato in $_colore."); | |
} | |
} | |
// Interfaccia per oggetti che possono essere scalati | |
abstract class Scalabile { | |
void scala(double fattore); | |
} | |
// Classe concreta: Cerchio | |
class Cerchio extends Figura implements Scalabile { | |
double raggio; | |
Cerchio(this.raggio); | |
@override | |
double get area => pi * raggio * raggio; | |
@override | |
double get perimetro => 2 * pi * raggio; | |
@override | |
void scala(double fattore) { | |
raggio *= fattore; | |
print("Il nuovo raggio è $raggio"); | |
} | |
@override | |
void descrizione() { | |
print("Sono un cerchio con raggio $raggio."); | |
} | |
} | |
// Classe concreta: Rettangolo | |
class Rettangolo extends Figura with Colorabile implements Scalabile { | |
double base, altezza; | |
Rettangolo(this.base, this.altezza); | |
@override | |
double get area => base * altezza; | |
@override | |
double get perimetro => 2 * (base + altezza); | |
@override | |
void scala(double fattore) { | |
base *= fattore; | |
altezza *= fattore; | |
print("Le nuove dimensioni sono base: $base, altezza: $altezza."); | |
} | |
@override | |
void descrizione() { | |
print("Sono un rettangolo di base $base e altezza $altezza, colore $colore."); | |
} | |
} | |
void main() { | |
// Creazione di un cerchio | |
Cerchio c = Cerchio(5); | |
c.descrizione(); | |
print("Area: ${c.area}"); | |
print("Perimetro: ${c.perimetro}"); | |
c.scala(1.5); | |
print("\n"); | |
// Creazione di un rettangolo | |
Rettangolo r = Rettangolo(4, 6); | |
r.descrizione(); | |
print("Area: ${r.area}"); | |
print("Perimetro: ${r.perimetro}"); | |
r.scala(2); | |
r.colore = "Blu"; // Usa il setter per cambiare colore | |
r.descrizione(); | |
} | |
// Esempio di utilizzo del copyWith | |
class Persona { | |
final String nome; | |
final int eta; | |
// Costruttore | |
Persona({required this.nome, required this.eta}); | |
// Metodo copyWith per creare una nuova istanza con modifiche opzionali | |
Persona copyWith({String? nome, int? eta}) { | |
return Persona( | |
nome: nome ?? this.nome, // Mantiene il valore attuale se non viene specificato un nuovo valore | |
eta: eta ?? this.eta, | |
); | |
} | |
@override | |
String toString() { | |
return "Persona(nome: $nome, età: $eta)"; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment