Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Felino
1508 }
1509
1510 public Gatto(String nome){ //Costruttore 2
1511 super(nome); //super invoca il costruttore 2 di Felino
1512 }
1513
1514 public void verso(){ //Definisco il metodo verso(), non e’ piu’
astratto
1515 System.out.println("Miao");
1516 }
1517 }
1518
1519 //Classe derivata 2.2
1520 public class Leone extends Felino{
1521
1522 public Leone(){
1523 super();
1524 }
1525
1526 public Leone(String nome){
1527 super(nome);
1528 } 14/12/22, 16:00 :: page 27
jEdit − ISTRUZIONI.java
1529
1530 public void verso(){
1531 System.out.println("Roar");
1532 }
1533 }
1534
1535
1536
1537
1538
1539
1540
1541
1542 /** INTERFACCE **/
1543
1544 /* L’interfaccia e’ una componente di un programma che contiene delle
istruzioni
1545 che lo "schematizzano". Puo’ contenere costanti pubbliche e metodi(senza
corpo).
1546 L’interfaccia viene creata in un file con lo stesso nome come per le classi ma
al posto
1547 della parola class c’e’ la parola "interface". */
1548
1549 //Esempio: interfaccia che contiene i metodi che calcolano e restituiscono
l’area e il perimetro di un oggetto
1550 public interface Misuarabile{
1551
1552 public double getPerimetro();
1553 public double getArea();
1554 }
1555
1556 /* Una classe che implementa un’interfaccia deve definire un corpo per ogni
metodo
1557 specificato nell’interfaccia. Se non definisce il corpo di tutti i metodi deve
essere
1558 dichiarata astratta.
1559 Per implementare un’interfaccia, va scritto nella dichiarazione della classe
la parola
1560 chiave "implements" e il nome dell’interfaccia.
1561 Una classe puo’ implementare piu’ di un’interfaccia e l’interfaccia puo’
essere implementata
1562 da piu’ classi. */
1563
1564 //Esempio:
1565 public class Quadrato implements Misurabile{
1566 private double lato;
1567
1568 public Quadrato(double lato){
1569 this.lato = lato;
1570 }
1571
1572 public double getArea(){
1573 return lato * lato;
1574 }
1575
1576 public double getPerimetro(){
1577 return lato * 4;
1578 }
1579 }
1580
1581
1582 /* Come per la classe anche un’interfaccia e’ un tipo riferimento. Un oggetto
di
1583 tipo interfaccia puo’ invocare solo i metodi definiti nell’interfaccia. */
14/12/22, 16:00 :: page 28
jEdit − ISTRUZIONI.java
1584
1585 //Esempio:
1586 public static void visualizza(Misurabile figura){ //Passo un parametro
figura di tipo interfaccia Misurabile
1587 double perimetro = figura.getPerimetro();
1588 double area = figura.getArea();
1589 System.out.println("Perimetro: " + perimetro + "Area: " + area);
1590
1591
1592 /* E’ possibile definire una nuova interfaccia che estende un’interfaccia gia’
esistente
1593 utilizzando una sorta di ereditarieta’. Si puo’ quindi creare un ’interfaccia
formata da un insieme
1594 di metodi: quelli da lei definiti e quelli ereditati. */
1595
1596
1597
1598
1599
1600
1601
1602
1603 /** LISTE (fatte male e incomplete) **/
1604
1605 /* Una lista e’ una struttura dati dinamica che consiste in blocchi di dati
concatenati.
1606 Gli elementi della lista sono chiamati NODI, in una parte del nodo sono
contenuti i dati
1607 nell’altra invece e’ contenuto il COLLEGAMENTO ad un altro nodo.
1608 In Java i nodi sono realizzati come oggetti di una classe nodo mentre i
collegamenti sono
1609 realizzati sotto forma di riferimenti a un altro nodo, cioe’ come variabili
d’istanza del
1610 tipo del nodo.
1611 Il collegamento TESTA non e’ nella lista dei nodi, infatti non e’ un nodo ma
solo
1612 un collegamento che punta al primo nodo.
1613 Si indica la fine di una lista impostando a NULL la variabile d’istanza
collegamento
1614 dell’ultimo nodo, per controllare se una variabile contiene null si usa
l’operatore "==". */
1615
1616 //Esempio
1617 TESTA
1618 COLLEGAMENTO:NODO1
1619 |
1620 v
1621 NODO1 NODO2 NODO3
1622 DATI: Giovanni DATI: Marco DATI: LUCA
1623 COLLEGAMENTO: NODO2 −> COLLEGAMENTO: NODO3 −> COLLEGAMENTO: NULL
1624
1625
1626 //Esempio: Classe che rappresenta i nodi di una lista
1627 public class NodoLista {
1628 private String dati;
1629 private NodoLista collegamento; //la variabile d’istanza "collegamento" e’
di tipo classe NodoLista
1630
1631 public NodoLista(){ //Costruttore di default
1632 collegamento = null;
1633 dati = null;
1634 }
1635 14/12/22, 16:00 :: page 29
jEdit − ISTRUZIONI.java
1636 public NodoLista(String valoreDati, NodoLista valoreCollegamento) {
//Costruttore 2
1637 dati = valoreDati;
1638 collegamento = valoreCollegamento; //la variabile
"valoreCollegamento" e’ di tipo classe NodoLista e contiene il riferimento
al nodo successivo
1639 }
1640
1641 public void setDati(String nuoviDati) {
1642 dati = nuoviDati;
1643 }
1644
1645 public String getDati() {
1646 return dati;
1647 }
1648
1649 public void setCollegamento(NodoLista nuovoCollegamento) {
1650 collegamento = nuovoCollegamento;
1651 }
1652
1653 public NodoLista getCollegamento() {
1654 return collegamento;
1655 }
1656 }
1657
1658 /* In una lista e’ possibile effettuare diverse operazioni come inserire,
modificare o
1659 eliminare un elemento, verifare se la lista e’ vuota, verificare la
lunghezza...
1660 In una classe che rappresenta una lista concatenata si hanno quindi i seguenti
metodi:
1661
1662 − una variabile d’istanza "testa" di tipo NodoLista che contiente il
riferimento
1663 al primo nodo.
1664
1665 − un costruttore di default che imposta a null la variabile testa nel caso in
cui
1666 la lista sia vuota.
1667
1668 − un metodo aggiungiNodoInTesta che aggiunge un nodo all’inizio della lista
concatenata
1669 cosi’ che il nuovo nodo diventi il primo della lista. Per farlo viene
assegnato un nuovo
1670 nodo alla variabile testa e per collegare il nuovo nodo al resto della lista
si assegna
1671 alla variabile d’istanza "collegamento" del nuovo nodo il riferimento al
primo.
1672 Il costruttore assegna alla variabile d’istanza "posizione" del nuovo nodo,
il vecchio
1673 primo nodo referenziato da "testa".
1674
1675 − un metodo eliminaNodoInTesta che rimuove il primo nodo della lista
concatenata e fa si
1676 che la variabile "testa" faccia riferimento a quello che prima era il
secondo nodo.
1677
1678 − un metodo mostraLista che stampa a schermo il contenuto di tutti i nodi, per
farlo
1679 viene inizializzata una variabile d’istanza "posizione" di tipo NodoLista
che contiene
1680 un riferimento a un nodo ed inizialmente contiene lo stesso riferimento
della variabile 14/12/22, 16:00 :: page 30
jEdit − ISTRUZIONI.java
1681 testa per posizionarsi sul primo nodo. Tramite un ciclo while, dopo aver
visualizzato
1682 i dati contenuti in un nodo, il riferimento contenuto in "posizione" passa
da un nodo al successivo.
1683 Quando si arriva al valore di posizione == null, il ciclo while termina.
1684
1685 − un metodo lunghezza che conta il nomero di nodi della lista.
1686
1687 − un metodo nellaLista per cercare un elemento nella lista. */
1688
1689
1690 //Esempio: classe di una lista concatenata che utilizza la classe NodoLista
1691 public class ListaConcatenataDiStringhe {
1692 private NodoLista testa;
1693
1694 public ListaConcatenataDiStringhe(){ //Costruttore di default
1695 testa = null;
1696 }
1697
1698 public void aggiungiNodoInTesta(String datiDaAggiungere) { //Metodo che
aggiunge un nodo in cima alla lista
1699 testa = new NodoLista(datiDaAggiungere, testa);
1700 }
1701
1702 public void mostraLista() { //Metodo che stampa i dati della
lista
1703 NodoLista posizione = testa; //Inizializzo la variabile
posizione che ha contiente lo stesso riferimento di testa
1704 while (posizione != null) { //controllo che il collegamento di
posizione non sia null, se e’ null termina il ciclo
1705 System.out.println(posizione.getDati()); //stampo i dati di
posizione
1706 posizione = posizione.getCollegamento(); //pongo posizione uguale
al valore che ha il suo collegamento, ovvero il nodo successivo
1707 }
1708 }
1709
1710 public int lunghezza() { //Metodo che conta i nodi della lista
(simile a mostraLista)
1711 int conteggio = 0;
1712 NodoLista posizione = testa;
1713 while (posizione != null) {
1714 conteggio++;
1715 posizione = posizione.getCollegamento();
1716 }
1717 return conteggio;
1718 }
1719
1720 public void eliminaNodoDiTesta() { //Metodo per eliminare il nodo in
cima alla lista
1721 if (testa != null) //controllo che la lista non sia vuota
1722 testa = testa.getCollegamento(); //testa si collega al nodo
a cui era collegato il primo nodo (ovvero al secondo)
1723 else {
1724 System.out.println("Si sta eliminando da una lista vuota");
1725 System.exit(0);
1726 }
1727 }
1728
1729 public boolean nellaLista(String elemento) {
1730 return trova(elemento) != null;
1731 }
1732
1733 private NodoLista trova(String elemento) {
14/12/22, 16:00 :: page 31
jEdit − ISTRUZIONI.java
1734 boolean trovato = false;
1735 NodoLista posizione = testa;
1736 while ((posizione != null) && !trovato) {
1737 String datiAllaPosizione = posizione.getDati();
1738 if (datiAllaPosizione.equals(elemento))
1739 trovato = true;
1740 else
1741 posizione = posizione.getCollegamento();
1742 }
1743 return posizione;
1744 }
1745 }
1746
1747 //Esempio: classe Test
1748 public class ListaConcatenataDiStringheDemo {
1749 public static void main(String[] args) {
1750
1751 ListaConcatenataDiStringhe lista = new ListaConcatenataDiStringhe();
1752
1753 lista.aggiungiNodoInTesta("Uno");
1754 lista.aggiungiNodoInTesta("Due");
1755 lista.aggiungiNodoInTesta("Tre");
1756
1757 System.out.println("La lista ha " + lista.lunghezza() + " elementi.");
1758
1759 lista.mostraLista();
1760
1761 if (lista.nellaLista("Tre"))
1