Programma
Introduzione alla programmazione ad oggetti
Meccanismi di astrazione. Il concetto di modulo software. Incapsulamento e information hiding. Progettazione top-down e bottom-up. Dal paradigma procedurale al paradigma OO. Classe come tipo dato astratto. Classi ed oggetti. Interfaccia.
Introduzione a Java
Caratteristiche del linguaggio Java. Compilatori ed interpreti. Interprete Java (Java Virtual Machine). Bytecode. Collegamento dinamico. Compilazione on-the-fly. Concorrenza. Struttura di un’applicazione Java. Unità di compilazione: files .java e .class. Sintassi Java. Documentazione delle classi.
Classi ed oggetti
Attributi e metodi. Specificatori public, privati e protetta. Invocazione di metodi e passaggio di parametri. Chiamate di metodi interni ed esterni. Variabili locali e variabili static. Metodo costruttore. Oggetti come attributi di una classe. Interazione tra oggetti. Distruttore. Operazioni di finalizzazione. Specificatore this. I Packages. Classe ArrayList. Array di oggetti.
Riuso del software
Composizione. Ereditarietà. Classe base e derivate. Overriding, overloading, shadowing. Qualificatore Final. Chiamate a Super.
Estensione del software
Polimorfismo. Early e late binding. Classi astratte. Upcasting. Costruttori e distruttori. Ereditarietà multipla. Interfacce. Classi astratte.
Input/Output
Stream. I/O su file. Handling IOException. Incapsulamento di Stream.
Eccezioni
Guarded region. Exception Handler. Definizione di classi derivate da Exception.
Interfacciamento grafica
Libreria di classi Swing. Frames. Panels. Layout Managers. Classe Graphics. Bottoni e menu. Gestione degli eventi in Java.
Progetti Java completi
(tracce d'esame svolte)
Scrittura e lettura su file
FileInputStreamTest.java
1 import java.io.*;
2 public class FileInputStreamTest {
3 public static void main(String[] args) {
4 // Il file da leggere.
5 File f = new File("prova.txt");
6 // Riferimento allo stream.
7 FileInputStream in = null;
8 try {
9 // Stabilisco lo stream.
10 in = new FileInputStream(f);
11 // Leggo finché ci sono dati.
12 int i;
13 while ((i = in.read()) != -1) {
14 char c = (char) i;
15 System.out.print(c);
16 }
17 } catch (IOException e) {
18 // Problema!
19 System.out.println("Problema durante la lettura...");
20 System.exit(1);
21 }
22 }
23 }
FileOutputStreamTest.java
1 import java.io.*;
2 public class FileOutputStreamTest {
3 public static void main(String[] args) {
4 // Il file da leggere.
5 File f = new File("prova.txt");
6 // Riferimento allo stream.
7 FileOutputStream out = null;
8 try {
9 // Stabilisco lo stream.
10 out = new FileOutputStream(f);
11 // Scrivo "Ciao".
12 out.write("Ciao".getBytes());
13 } catch (IOException e) {
14 // Problema!
15 System.out.println("Problema durante la scrittura...");
16 System.exit(1);
17 }
18 }
19 }
Test.java
1 import java.io.*; // la importo xke serve per stampare la listain un file di testo
2 interface AUT {
3 // Non serve mettere public perchè è tutto nello stesso file
4 public void accendi(Auto a); // prende in ingresso la classe Auto
5 }
6
7 abstract class Autovetture implements AUT {
8 // Attributi
9 protected String tipo;
10 protected int ruote;
11 protected int cilindrata;
12 protected String colore;
13 protected boolean statoMotore=false; // deve dire true=motore acceso false=motore spento, inizialmente il motore è spento
14
15 // Costruttore
16 public Autovetture(String tipo, int ruote, int cilindrata, String colore, boolean statoMotore) {
17 this.tipo = tipo;
18 this.ruote = ruote;
19 this.cilindrata = cilindrata;
20 this.colore = colore;
21 this.statoMotore = statoMotore;
22 }
23
24 // Metodi
25 public abstract void accendi(Auto a);
26 public abstract void spegni(Auto a); // Essendo astratti non hanno implementazione, li implemento nella classe figlia Auto
27
28 // Definisco dei metodi get in modo tale da ritornare i parametri delle autovetture alla classe di test
29 String getTipo() {
30 return tipo;
31 }
32
33 int getRuote() {
34 return ruote;
35 }
36
37 int getCilindrata() {
38 return cilindrata;
39 }
40
41 String getColore() {
42 return colore;
43 }
44
45 boolean getStato() {
46 return statoMotore;
47 }
48 }
49
50 class Auto extends Autovetture {
51 // Ha bisogno di un costruttore che richiama il costruttore della classe padre
52 protected String codiceMatricola;
53 protected int codice;
54 protected int numeroMarce; // È private dal main ma accessibile dalle classi figlie, meglio mettere tutto protetto
55 protected int contatore=0; // Dichiaro statico perchè non è legato a nessun oggetto in particolare
56
57 // Costruttore
58 public Auto(String tipo, int ruote, int cilindrata, String colore, boolean statoMotore, String codiceMatricola, int numeroMarce) {
59 super(tipo, ruote, cilindrata, colore, statoMotore); // Richiama gli attributi della classe padre, perché per istanziare un auto sono necessari anche quelli
60 this.codiceMatricola = codiceMatricola;
61 this.numeroMarce = numeroMarce;
62 // int contatore = 0; // Non lo posso mettere altrimenti azzererei ogni volta che creo un autovettura il contatore
63 contatore++; // Metto nel costruttore, perché questo serve per creare gli oggetti, se mettessi un contatore anche nella classe autovettura, questo costruttore erediterebbe quello della classe padre e stamperebbe e conterebbe ogni volta anche il contatore della classe padre
64 System.out.println("Il numero di auto istanziate fino ad ora è ---> " + contatore);
65 }
66
67 // Implementazione metodi astratti
68 public void accendi(Auto a) {
69 if (a.statoMotore == true) {
70 try {
71 throw new Error(); // Se è già acceso genero un'eccezione con throw e vado al catch
72 } catch (Error e) {
73 System.out.println("ERROR! La macchina è già accesa");
74 }
75 } else {
76 statoMotore = true;
77 System.out.println("Ora la macchina si è accesa!");
78 }
79 }
80
81 public void spegni(Auto a) {
82 if (a.statoMotore == false) {
83 try {
84 throw new Error();
85 } catch (Error e) {
86 System.out.println("Error! La macchina è già spenta");
87 // System.exit(1);
88 }
89 } else {
90 statoMotore = false;
91 System.out.println("Ora la macchina è spenta!");
92 // System.exit(2);
93 }
94 }
95
96 // Implementazione metodi concreti
97 public void avanti() {
98 System.out.println("L'auto sta andando avanti!");
99 }
100
101 public void indietro() {
102 System.out.println("L'auto sta andando indietro!");
103 }
104
105 public String toString() {
106 String s = "Hai istanziato una " + tipo + " che ha " + numeroMarce + " marce.";
107 return s;
108 }
109}
Camion extends Auto
110 class Camion extends Auto {
111 // Attributi
112 protected double lunghezza_rimorchio;
113 protected double peso;
114 protected int limite_velocita;
115 protected int marcia_inserita = 0; // La retromarcia è contata come marcia 0
116
117 // Costruttore
118 public Camion(String tipo, int ruote, int cilindrata, String colore, boolean statoMotore, String codiceMatricola, int numeroMarce, double lunghezza_rimorchio, double peso, int limite_velocita) {
119 super(tipo, ruote, cilindrata, colore, statoMotore, codiceMatricola, numeroMarce);
120 this.lunghezza_rimorchio = lunghezza_rimorchio;
121 this.peso = peso;
122 this.limite_velocita = limite_velocita;
123 }
124
125 // Metodi
126 public void inserisciMarce(int n) {
127 marcia_inserita = n;
128 if (marcia_inserita <= numeroMarce) {
129 System.out.println("Il camion ha inserito la marcia " + marcia_inserita);
130 } else {
131 System.out.println("ERRORE, metti una marcia da 0 a " + numeroMarce);
132 }
133 }
134
135 public void caricaRimorchio(double n) {
136 peso = n;
137 System.out.println("Il camion ora porta un rimorchio di " + peso + " KG");
138 }
139
140 public void scaricaRimorchio() {
141 peso = 0;
142 System.out.println("Il camion ora non porta nessun rimorchio");
143 }
144 }
InterfacciaGrafica extends JFrame
145 class InterfacciaGrafica extends JFrame {
146 private Container c;
147 private JPanel p;
148 private JLabel l1, l2, l3, l4, l5;
149 private JTextField t1, t2, t3, t4, t5;
150
151 public InterfacciaGrafica() {
152 super("Caratteristiche Autovetture"); // Imposta il titolo del frame invisibile
153 setSize(300, 150); // Per impostare le dimensioni e la posizione (misure in pixel)
154 setLocation(200, 100); // (0,0) angolo sup. sin.
155 setResizable(true); // Per ridimensionare con mouse
156 c = getContentPane(); // Recupera il "muro grezzo"
157 p = new JPanel(); // Per inserimento componenti con layout di tipo FlowLayout
158
159 // Cioè uno di seguito all'altro da sinistra a destra
160 p.setLayout(new GridLayout(5, 1)); // Per evidenziare allineamento 5 RIGHE, 1 COLONNA
161 c.add(p); // Aggiunge il pannello
162
163 l1 = new JLabel("TIPO");
164 p.add(l1);
165 t1 = new JTextField(10);
166 p.add(t1);
167
168 l2 = new JLabel("STATO MOTORE");
169 p.add(l2);
170 t2 = new JTextField(10);
171 p.add(t2);
172
173 l3 = new JLabel("RUOTE");
174 p.add(l3);
175 t3 = new JTextField(10);
176 p.add(t3);
177
178 l4 = new JLabel("CILINDRATA");
179 p.add(l4);
180 t4 = new JTextField(10);
181 p.add(t4);
182
183 l5 = new JLabel("COLORE");
184 p.add(l5);
185 t5 = new JTextField(10);
186 p.add(t5);
187
188 setVisible(true); // Mostra il frame (dimensioni 300x150)
189 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
190 }
191 }
Test
192 public class Test {
193 public static void main(String[] args) {
194 // Questa parte è per fare gli esperimenti
195 Auto c = new Auto("Smart", 4, 2000, "rossa", false, "SD");
196 }
197 }
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.
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.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti di Programmazione ad oggetti - Java
-
Programmazione JAVA
-
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java
-
Programmazione ad oggetti e Java (1)