Introduzione agli Array in C++. Argomenti trattati: decadimento a puntatore di un array; conseguenze del meccanismo di decadimento sul passaggio di array a funzioni; array multidimensionali e il concetto di puntatore ad array; come passare array multidimensionali a funzioni; gli iteratori come generalizzazione di un puntatore ad elemento di un array ed una breve scorsa di come usare gli iteratori con gli algoritmi standard (e.g., std::copy) del C++.
Introduzione ai puntatori e ai riferimenti in C++. Viene presentato il problema dello swap, come esempio motivante per l'introduzione della semantica di riferimento. Si procede con l'introduzione del concetto di puntatore, a cui segue una spiegazione dei basilare operatori di referenziazione e dereferenziazione. Il problema dello swap viene risolto mediante puntatori. Si procede con l'introduzione dei riferimenti, come alias di variabili esistenti. Il problema dello swap viene in ultimo risolto mediante riferimenti.
Introduzione agli Array in C++. Argomenti trattati: decadimento a puntatore di un array; conseguenze del meccanismo di decadimento sul passaggio di array a funzioni; array multidimensionali e il concetto di puntatore ad array; come passare array multidimensionali a funzioni; gli iteratori come generalizzazione di un puntatore ad elemento di un array ed una breve scorsa di come usare gli iteratori con gli algoritmi standard (e.g., std::copy) del C++.
Introduzione ai puntatori e ai riferimenti in C++. Viene presentato il problema dello swap, come esempio motivante per l'introduzione della semantica di riferimento. Si procede con l'introduzione del concetto di puntatore, a cui segue una spiegazione dei basilare operatori di referenziazione e dereferenziazione. Il problema dello swap viene risolto mediante puntatori. Si procede con l'introduzione dei riferimenti, come alias di variabili esistenti. Il problema dello swap viene in ultimo risolto mediante riferimenti.
A simple introduction to the Python programming language. In Italian. OLD: superseeded by Pycrashcourse 3.1.
Originally presented during the Networking class of the Computer Science course at the University of Parma
Introduzione al concetto di oggetto nel modello della memoria del C++ e ai suoi possibile tempi di vita (temporaneo, automatico, dinamico, ...). Relazione tra il tempo di vita e la visibilità (scope) di un oggetto. Gestione degli oggetti dinamici per tipi primitivi, strutture e array mediante l'utilizzo di puntatori (raw pointers).
co-authors: Scola Davide and Maia Nicoletta
Small workshop on Inferno, Limbo and the Dis virtual machine.
Inferno is a new operative system developped for creation and support of network systems and distribuited services.
There are three fundamental programming principles: all resources are files in a hierarchic file system, the network is a unic namespace like a file system hierarchic, it uses Styx that is a standard protocol of comunication for local and remote resources.
Limbo is the programming language for the Inferno OS.
The language is Object Based, you can compile it or interpret it with the Dis virtual machine (like Java virtual machine with a JIT compiler).
Limbo has a native support for: array, string, int, float, tuple (like record), channel (linda-like), and other...
The Limbo's channels are used to comunicate with other processes or with thread.
The Dis virtual machine is an environment for Limbo programs and it has important features: CISC architecture, memory-to-memory, many high level types, just in time compiler, ecc...
In the end of presentation there is a comparison between Dis, Java VM and C# .Net VM.
A simple introduction to the Python programming language. In Italian. OLD: superseeded by Pycrashcourse 3.1.
Originally presented during the Networking class of the Computer Science course at the University of Parma
Introduzione al concetto di oggetto nel modello della memoria del C++ e ai suoi possibile tempi di vita (temporaneo, automatico, dinamico, ...). Relazione tra il tempo di vita e la visibilità (scope) di un oggetto. Gestione degli oggetti dinamici per tipi primitivi, strutture e array mediante l'utilizzo di puntatori (raw pointers).
co-authors: Scola Davide and Maia Nicoletta
Small workshop on Inferno, Limbo and the Dis virtual machine.
Inferno is a new operative system developped for creation and support of network systems and distribuited services.
There are three fundamental programming principles: all resources are files in a hierarchic file system, the network is a unic namespace like a file system hierarchic, it uses Styx that is a standard protocol of comunication for local and remote resources.
Limbo is the programming language for the Inferno OS.
The language is Object Based, you can compile it or interpret it with the Dis virtual machine (like Java virtual machine with a JIT compiler).
Limbo has a native support for: array, string, int, float, tuple (like record), channel (linda-like), and other...
The Limbo's channels are used to comunicate with other processes or with thread.
The Dis virtual machine is an environment for Limbo programs and it has important features: CISC architecture, memory-to-memory, many high level types, just in time compiler, ecc...
In the end of presentation there is a comparison between Dis, Java VM and C# .Net VM.
Il Corso Programmazione Java Base di K-Tech (http://www.k-tech.it) ha come obiettivo quello di far comprendere le tecniche di programmazione orientata agli oggetti, cioè di modellare e “pensare” a oggetti, di trasmettere i concetti base del linguaggio e le basi per sviluppare piccole applicazioni in modo autonomo.
Il corso Programmazione Java Base è composto da dodici moduli:
1. Introduzione
2. Ciclo di sviluppo
3. Sintassi Elementare
4. Principi OOP
5. Classi e Oggetti
6. Concetti Object Oriented
7. Collections
8. Eccezioni
9. Input Output
10. Serialization
11. Unit Testing
12. Threads
Leggi il programma completo: http://www.k-tech.it/formazione/catalogo/programmazione_java_base
Introduzione al linguaggio Java per chi ha esperienza di C++. Non si parla di OOP, solo di linguaggio.
Codice sorgente dell'esercizio finale qui: https://pastebin.com/R4yZGQcy
2. Primo esempio
public class CiaoMondo
{ public static void main(String []args)
{
System.out.println("Ciao Mondo");
}
}
Possiamo notare in questo piccolo esempio:
-che ogni programma Java è O.O. infatti è contenuto in una classe
-L’uso delle parole chiave public, class, static, void
-La presenza del metodo main che serve come punto d’ingresso dell’applicazione
-Il file che contiene il sorgente deve avere lo stesso nome della classe pubblica, in
questo caso CiaoMondo.java (si notino le maiuscole)
-Le parentesi graffe che racchiudono i blocchi di istruzioni
3. Argomenti da linea di
comando
Invocando un’applicazione da linea di comando è possibile introdurre alcuni
argomenti:
Ad esempio:
java Benvenuto Fabio
public class Benvenuto
{ public static void main(String []args)
{
System.out.println("Ciao “ + args[0]);
}
}
Si può notare che args[] è un array di stringhe è viene automaticamente inizializzato
con gli argomenti da linea di comando.
Gli array verranno approfonditi in seguito, ma si noti che args[0] rappresenta il
primo argomento, nel esempio sarà Fabio.
Con args.length è possibile conoscere il numero di argomenti passati da linea di
comando
4. Le variabili
Le variabili sono in java fortemente tipizzate, i tipi di
dati primitivi sono molto simili a quelli del C.
Come in C++ le variabili possono essere dichiarate in
qualsiasi punto del codice e assumono una visibilità
che dipende essenzialmente dal blocco di istruzioni
(parentesi graffe) in cui si trovano.
5. Tipi di dati primitivi
• Interi
•int 4 byte
•long 8 byte
•short 2 byte
•byte 1 byte
• Reali
•float 4 byte
•double 8 byte
• Altri tipi primitivi
•boolean 1 byte vale solo true o false
•char 2 byte codifica UNICODE
6. Conversioni tra tipi di dati
Come in C esiste l’operatore ‘cast’
double c=1.9;
int a=(int)c; //attenzione non si tratta di un arrotondamento
char ch=‘a’;
int ascii=(int)ch; //si ottiene il codice ascii della lettera
Nel caso di conversioni tra Stringhe e numeri non è possibile utilizzare il
cast, ma si dovranno usare metodi diversi.
7. Operatori
•ARITMETICI
• Moltiplicazione *
• Divisione /
• Addizione +
• Sottrazione –
• Divisione Intera / purché i termini siano interi
• Resto della divisione intera %
• Le parentesi ()
•LOGICI
• || (OR) &&(AND) !(NOT)
•OPERATORI SUI BIT
• | (OR bit per bit) &(AND) >>(SHIFT a destra) <<(SHIFT a sinistra)
•CONFRONTI
• == (uguali) > < >= <= !=
9. Condizione ad uscita multipla
switch(voto)
{
case 5:
case 4:
System.out.println(“Insufficiente”);
break;
case 6:
System.out.println(“Sufficiente”);
break;
case 7:
System.out.println(“Discreto”);
break;
default:
System.out.println(“voto non valido”);
}
11. Commenti standard
Commenti in linea
// commento su una sola riga
Commenti su più linee
/*
testo del commento
su più linee
*/
12. Commenti per utilizzo di
javadoc
/**
* Commento javadoc
* può contenere tag HTML
* <b>Grassetto</b>
*/
Esistono anche opportuni tag per javadoc
@author
@param parametri dei metodi
@return valori di ritorno di un metodo
@see vedi anche..
@version 1.0
@since JDK1.0
13. Tipi di dati non primitivi
Il primo tipo di dato non primitivo che si incontra è String.
String permette di memorizzare dati di tipo stringa (alfanumerici). Si tratta
in realtà di una classe predefinita che possiede diversi metodi per
manipolare le stringhe.
String nome=“Paolo”; //Crea un oggetto di tipo stringa
String cognome=new String(“Rossi”);
nome=nome.toUpperCase(); //Crea una nuova stringa tutta maiuscola
//Si noti che i metodi sono associati all’oggetto
nome=nome + “!”; //Crea una nuova stringa = Paolo!
nome=nome+1; //Conatenazione tra stinghe e tipi primitivi
nome=nome +’a’;
String s=“”+2; //Conversione da tipo primitivo a stringa
RICORDIAMO i metodi di uso comune come
length(), equals(Str), compareTo(Str), charAt(n),
substring(b),substring(b,e)
14. Classi wrapper
Esistono classi corrispondenti a tutti i tipi primitivi ovvero:
Integer
Double
Float
Long
Boolean
Short
Byte
Sono molto utili quando è necessario attuare conversioni da Stringa a Numero, o
ad esempio in conversioni da decimale a Esadecimale, Binario, Ottale…
Ad esempio
String argomento=args[0];
int n=Integer.parseInt(argomento);
double x=Double.parseDouble(strValue);
15. Integer
La classe Integer è molto usata per convertire le stringhe in interi, ma dispone di
interessanti metodi per convertire da una base all’altra i numeri:
int n=Integer.parseInt(str,2); //Converte la stringa binaria str in intero
int n= Integer. parseInt(str,16); //Converta la stringa esadecimale str in intero
String s=Integer.toString(10,2); //converte 10 nella corrispondente stringa binaria
Esistono anche metodi specifici
toBinaryString(), toHexString()…..
16. Character
La classe Charcter dispone di alcuni metodi per determinare il tipo di carattere:
boolean b=Character.isDigit(ch); //determina se ch è un numero
boolean b=Character.isISOControl(ch); //determina se ch è di controllo
boolean b=Character.isLetter(ch); //determina se ch è una lettera
boolean b=Character.isLetterOrDigit(ch);
//determina se ch è una lettera o un numero
isUpperCase(ch); isLowerCase(ch); isWhitespace(ch)
Sono altri metodi dal significato abbastanza comprensibile.
17. Altri usi delle classi wrapper
Le classi Wrapper fungono anche da contenitori per valori delle variabili primitivi:
int k=5;
Integer kappa=new Integer(k);
In tal modo kappa diventa un oggetto e può essere utilizzato in tutti i contesti in cui non è
possibile usare delle variabili primitive: ad esempio potrebbe essere inserito in una Lista
concatenata.
Gli oggetti così istanziati dispongono di numerosi metodi, ad esempio è sempre possibile
ottenere di nuovo il tipo primitivo di origine:
k=kappa.intValue();
Si noti la differenza tra i metodi statici di Integer (detti metodi di classe):
int j=Integer.parseInt(str);
E quelli non statici (detti di istanza)
k=kappa.intValue();