Concetti introduttivi Flashcards

1
Q

Identificatore

A

è il nome di una variabile (di un metodo o di una classe). Dovrebbe iniziare con una lettera minuscola (mentre il nome di una classe con una maiuscola). Non può iniziare con un numero. Non può contenere simboli ( tranne $ e _ ). è case sensitive.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

oggetto

A

è un entità di un programma, manipolabile tramite metodi.Una volta definita una classe x, essa può essere utilizzata per istanziare (ossia allocare spazio in memoria) un oggetto di tipo x.
Un oggetto appartiene a diverse classi (ad es. un oggetto system.out è un oggetto della classe PrintStream).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Metodo

A

è una sequenza di istruzioni che accede ai dati di un oggetto.
es.:
public static void main(String[] args) {
}
public = specificatore di accesso
(String[] args) = parametri
{} = corpo

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Classe

A

Una classe è un tipo di dato astratto rappresentante un elemento costituito secondo
determinate caratteristiche (attributi) e operazioni (metodi) eseguibili su di esso.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Interfaccia

A

Le interfacce sono un meccanismo di completa astrazione in grado di descrivere il comportamento di altre classi.
- Non hanno metodo costruttore e non può essere costruito un oggetto di tipo interfaccia.
- una classe può implemetare un num illimitato di interfacce
- tutte le sottoclassi che lo impementano devono fare la riscrittura dei metodi dell’interfaccia
- tutti i metodi e gli attributi sono astratti e statici
- la classe che lo utilizza deve usare la keyword implements
- i metodi sono pubblici astratti (ossia senza una vera implemtezione)
- si possono efinire metodi di default che non hanno bisogno di essere riscritti dalle sottoclassi
es.
public interface Measurable{
double getMeasure();
}
public class Rectangle implements Measurable{
@Override
public double getMeasure(){
// ridefinizione del metodo
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Vantaggi delle interfacce

A

MOTIVAZIONI
Il linguaggio Java usa l’ereditarietà singola.
Questo vuol dire che una classe ha sempre una sola superclasse da cui eredita variabili, proprietà e metodi.
L’ereditarietà singola è più semplice da gestire ma comporta dei limiti.
Per superare questi limiti, in Java sono state introdotte le interfacce.
Le interfacce generano errori se le sottoclassi che le implementano non ridefiniscono i metodi, generando quindi una garanzia che le sottoclassi definiscano quei particolari metodi, e uno standard dato che i metodi hanno firma uguale definita dall’interfaccia.
con java 8 sono stati introdotti i metodi default per evitare la riscrittura di codice per sottoclassi che implementavano lo stesso metodo con lo stesso identico corpo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Final

A

La keyword Final indica, se assegnata a..
- una classe, che non può avere sottoclassi
- un metodo, che non può essere sovrascritto da altre classi
- un attributo, che non può essere modificato successivamente (rappresenta ossia una costante)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Static

A

La keyword Static indica, se assegnata a..
- un metodo, che può essere usato senza istanziare un oggetto di quella classe
- un attributo, che sarà condiviso tra le istanze della classe

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Principi Solid

A

S - Single responsibility principle (principio di responsabilità singola)
ogni classe dovrebbe avere una singola responsabilità, e rappresentare un singolo aspetto del sistema. Esempio: se esiste una classe Database in grado di creare una connessione, leggere e modificare i dati del database, ogni compito deve essere affidato ad un’istanza
separata (ConnectionHandler, DataReader, DataWriter)

O - Open/close principle ( principio di estensione/chiusura)
ogni entità del codice dovrebbe essere facile da estendere, senza essere modificata. questo favorisce il ruso del codice e la stabilità del sistema.
Esempio: una classe non dovrebbe possedere attributi troppo specifici, poiché impedirebbe la possibilità di estenderne il funzionamento.
L - Links substitution principle (principio di separazione di links)
gli oggetti di una classe dovrebbero essere sostituibile senza alterare la correttezza dlecodice. una classe derivata deve rispettare il contartto (interfaccia, comportamento, pre e postcondizioni) della classe base. questo comportamento favorisce l’interoperabilità e l’estendibilità delle classi
Esempio: se una classe implementa un’istanza della classe Animale, sostituirla con la classe Cane non deve comportare modifiche al programma.
I - Interface segregation principle (principio di separazione delle interfacce)
le classi non dovrebbero essere dipendenti da interfacce che non utilizzzano. le interfacce dovrebbero essere corte, mimali, specifiche e le classi dovrebbero implementare tante interfacce quanti sono i ruoli che svolgono.
Esempio: un’interfaccia Measurable risulta troppo generica, poiché ogni oggetto è potenzialmente misurabile in qualche modo
D - Dipendency inversion principle (principio di inversione di dipendenze)
le classi di alto livello non dovrebbero dipendere da classi di basso livello. entrambi dovrebbero dipendere da interfacce o classi astratte per minimizzare dipendenza tra classi.
Esempio: se esiste una classe Animale e varie sue sottoclassi (Cane, Gatto, …),
il codice implementante un’istanza di tali classi deve essere scritto basandosi sulla classe Animale e non sulle sue sottoclassi

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Eccezioni

A

Esistono due categorie di eccezioni:
- controllate
Il compilatore verifica che l’eccezione non venga ignorata.
le eccezioni controllate sono dovute a circostanze esterne che il programmatore non puo evitare.
la maggior parte delle gestioni controllate vengono dalla gestione di I/O.
tutte le sottoclassi IOException sono eccezioni controllate
- non controllate
le eccezioni non controllate sono RuntimeException o Error
le sottoclassi di RuntimeException sono non controllate: NullpointerException
esempio di errore: OutOfMemoryError
rappresentano errori del programmatore

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Esempio di cattura eccezione

A

class CiaoMondo {

public static void main(String[] args)
{
System.out.print (“Ciao mondo, sono il primo programma in Java “);

String Nome;
String Cognome;

try { Nome = args[0]; }
catch (ArrayIndexOutOfBoundsException e) { 
  Nome="Non hai inserito il tuo Nome"; 
}

try { Cognome=args[1]; }
catch (ArrayIndexOutOfBoundsException e) { 
  Cognome="Non hai inserito il tuo Cognome"; 
}

System.out.println ("di "+Nome+" "+Cognome);   } }
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Classe Scanner

A

la classe Scanner è utile per la lettura di dati da file o altri flussi di dati in java.
Per leggere da un file bisogna costruir eun oggetto di tipo FileReader e usarlo per costruire un oggetto di tipo Scanner
Metodi e costruttori:
Scanner(File file) - costruisce un oggetto scanner che legge d aun file
Scanner(Stream in) - costruisce un oggetto scanner che legge da un origine di dati ad esempio System.in
hasNext() - restituisce True se il flusso di dati non è terminato
Next() - restituisce la prossima stringa nel flusso di input
nextInt() - restituisce il prossimo intero nel flusso di input
nextDouble() - restituisce il prossimo double nel flusso di input
close() - chiude lo scanner e rilascia le risorse associate

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Esempio classe scanner

A

import java.util.File;
import java.util.Scanner;
public class ScannerExample{
public static void main(String[] args){
String filePath = “path/file.txt”

	File file = new File(filePath);
	Scanner scanner = new Scanner(file);
	while (scanner.hasNext()){
	int num = scanner.nextInt();
	System.out.println("Il num è: "+num);
	}

	scanner.close();
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Classe PrintWriter

A

è una classe con la quale si può scrivere su un file o su un flusso dati.
i metodi e costruttori sono:
printReader(File source)
- printReader(Stream out)
- print(String)
- println(String)
- print(int)
- println(int)
close() - chiude

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Classe PrintWriter

A

è una classe con la quale si può scrivere su un file o su un flusso dati.
i metodi e costruttori sono:
printWriter(File source) - scrive sul file
printWriter(Stream out) - scrive sul flusso dati
print(String) - scrivesul flusso di output una stringa
println(String) - scrive sul flusso di output una stringa seguita da una linea
print(int) - scrive sul flusso di output un intero
println(int) scrive sul flusso di output un intero sgeuito da una linea
close() - chiude il PrintWriter e rilascia le risorse associate

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Esempio di classe PrintWriter

A

import java.util.PrintWriter
import java.util.File

public class PrintExample{
public static void main(String[] args){
String filePath = “path/file.txt”;
File file = new File(filePath);
PrintWriter printWriter = new PrintWriter(file);
printWriter.println(“prima riga”);
printWriter.print(“seconda riga”);
printWriter.close();

17
Q

Set

A

L’inetrfaccia set estende Collections. I set sono collezioni di valori non ordinati unici. Dispone di operazioni per aggiungere,rimuovere e ordinare valori molto efficeti. Le classi che impelmentano Set sono:
hashset - utilizza le tabelle hash per svolgere le operazioni in tempo costante. supporta l’eleemnto null come valore.
treeset - utilizza internamente una struttura ad albero, ch epermette di riordinare i valori. non permette il valore null.
HashLinkedSet - è implementato utilizzando una tabella hash e una lista doppiamente collegata.

18
Q

List

A

Due classi che implemetano List sono ArrayaList e LikedList.
ArrayList è un array ridimensionabile, mentre linkedlist sono liste doppiamente collegate.

capacità
ArrayList ha caapcità grande almeno quanto il num di valori presenti nell’array. la sua grandezza predefinita è 10. il ridimensionamento diminuisce l’efficenza delle operazioni quindi è sempre meglio specificare la dimensione al momento dell’inizializzazione dell’array.
LinkeList ha dimensione uguale al num di valori presenti e non si può prestabilire.

Sovraccarico di memoria
Un arrayList ha uno spazio allocato contiguo, efficente in termini di spazio ma comporta problemi di prestazione quando il garbage collector devono fare pulizia dello spazio di memoria.
un linkedlist invece ha per ogni nodo il valore e un puntatore al nodo succ e prec

19
Q

Map

A

Una map è una struttura dati che consente di memorizzare coppie chiavi-valori, dove si accede ai valori fornendo le chiavi. Non non sono ammessi duplicati di chiavi
HasMap non è dotata di metodi sincronizzati ma consente elementi con valore null;
HashTable è dotata di metodi sincronizzati ma non consente elementi con valore null;
TreeMap è una mappa che definisce un ordinamento degli elementi basato sul valore delle chiavi.

HashMap e HashTable forniscono le operaizoni in tempo costante. Treemap potendo fornire un ordinamento ttraverso la struttura ad albero ci riesc in tempo Nlogn

20
Q

Differenza tra map,list,set

A

Sono membri dell’interfaccia Collections.
List rappresenta una sequenza ordinata in Java i cui elementi sono accessibili dall’indice.
Set è una raccolta di elementi unici, che possono essere ordinati o no a seconda dell’implementazione.(hashset ordinati,linkedhashset ordinati a seconda di come sono stati inseriti,treeset ordinati secondo oridne naturale)
Map è una mappatura di valori con chiavi. in treemap è ordinato, in hashmap no.

List ammette duplicati, set no, map non ammette duplicati di chiavi.

List ammette num illimitato di valori null, set e map dipende dall’implementazione.

Acune delle classi del List interfaccia sono ArrayList e LinkedList mentre quello di Set l’interfaccia include HashSet, TreeSet e LinkedHashSet. Map l’interfaccia offre il HashMap, TreeMap, e LinkedHashMap classi.

21
Q

Stack

A

Java Collection Framework fornisce una classe denominata ‘Stack’. Questa classe Stack estende la classe Vector e implementa la funzionalità della struttura dati Stack.
gli elementi vengono aggiunti e rimossi solo da un’estremità. L’estremità in cui gli elementi vengono aggiunti e rimossi è chiamata ‘Top of the Stack’.
Poiché l’aggiunta e l’eliminazione vengono eseguite solo a un’estremità, il primo elemento aggiunto alla pila sembra essere l’ultimo elemento rimosso dalla pila. Pertanto lo stack è chiamato struttura dati LIFO (Last-in, First-out).

22
Q

Incapsulamento

A

L’incapsulamento è un concetto chiave della programmazione orientata agli oggetti. Consiste nell’accesso controllato ai dati mediamnte un’interfaccia pubblica. QUesto per prevenire l’uso non corretto dei dati o una scorretta modifica. L’implementazione si basa su dichiarare private alcuni membri di una classe e quindi inacessibili. Si potra accedere ad essi solo tramite alcuni metodi public.
Come una macchina, che ha al suo interno un meccanismo complicato e sensibile, che il guidatore non ha strettamente bisogno di conoscere: gli basterà conoscere la sua interfaccia pubblica (volante, camnio, freno, frizione,frecce…).
Questo è di vitale importanza per il mantenimento nel tempo delle classi, per evitare l’usura del codice.