1. Programmazione 2 (PR2)
Maurizio ATZORI
Dipartimento di Matematica e Informatica
Università di Cagliari
email: atzori@unica.it
http:/riemann.unica.it/~atzori/
Lezione 1: Introduzione al Corso PR2
2. Background
Propedeuticità: Programmazione 1
Scrivere un programma in un linguaggio
imperativo (es. in C)
Comprendere le variabili
Strutture di controllo
funzioni/subroutines
3. Orario lezioni
Martedì 14:30-16:10
Giovedì 14:30-16:10
Venerdì 16:30-19:10 (lab, con TA)
Sarete divisi in 2 gruppi:
16:30-17:45 Gruppo A
17:55-19:10 Gruppo B
Ricevimento Martedì dopo la lezione in aula
Obbligo di frequenza
60% delle presenze (compresi laboratori)
4. Carico di lavoro PR2
9 CFU; ogni CFU corrisponde a 25 ore:
8 ore di lezioni frontali, 4 ore di apprendimento
autonomo guidato e 13 ore di studio individuale
12 ore di esercitazioni pratiche e/o di laboratorio
con 13 ore di rielaborazione personale
9 cfu x 25 h = 225 h = (circa) 30 giorni full-
time
5. Etiquette
Telefoni spenti
No portatili, salvo diversa indicazione
No Facebook, email, chat ecc.
No bibite, cibo ecc.
Per qualsiasi dubbio chiedere alzando la mano
Interazione gradita
Materiale sul sito
6. Programma del corso
1) Tipi primitivi, enumerativi ed array
2) Il concetto di classe e sottoclasse,
rappresentazione UML. Metodi ed oggetti
3) Uso della gerarchia delle classi: ereditarietà e
polimorfismo, classi astratte, interfacce, tipi
generici
4) Implementazione di classi e oggetti: struttura
delle classi, implementazione delle interfacce,
modificatori di visibilità
7. Programma del corso
5) Estensione delle classi:
classi/sottoclassi/superclassi, ereditarietà,
overloading, polimorfismo
6) Tipi generici ed interfacce
7) Cenni alla JVM/garbage collection
8) Il meccanismo delle eccezioni: eccezioni
controllate e non controllate, gestione delle
eccezioni
9) La documentazione del codice: javadoc
10) Possibili estensioni: Android/JDBC/XML
8. Modalità Esame AA 2010/2011
Prova Scritta + di Laboratorio + Colloquio
SCRITTO: soluzione di alcuni esercizi e/o di
rispondere a delle domande a risposta multipla
PROVA LAB: viene richiesta la scrittura di
codice che soddisfi specifiche assegnate
COLLOQUIO: (in alcuni casi facoltativo) verterà
sui contenuti del corso. Padronanza degli
argomenti + padronanza del linguaggio tecnico
COMPITINI: (metà/fine corso) Chi supera
entrambi i compitini è ammesso al colloquio
9. Riferimenti
Libro di testo ufficiale:
Thinking in Java by Bruce Eckel
In libreria in Italiano, primo volume (4a edizione)
Online gratuito (inglese, 3a edizione, completo)
http://mindview.net/Books/TIJ/
http://www.omerique.net/Eckel/
The Java Tutorial
http://java.sun.com/docs/books/tutorial/
Praticamente tutti i testi su Java
10. Riferimenti – Thinking in Java
In via di definizione, in funzione dei feedback
I primi 12-16 capitoli del libro (circa 1 a
settimana):
1: Introduction to Objects
2: Everything is an Object
3: Controlling Program Flow
4: Initialization & Cleanup
5: Hiding the Implementation
6: Reusing Classes
11. Riferimenti – Thinking in Java
7: Polymorphism
8: Interfaces & Inner Classes
9: Error Handling with Exceptions
10: Detecting Types
11: Collections of Objects
12: The Java I/O System
13: Concurrency
14: Creating Windows & Applets
15: Discovering Problems
16: Analysis and Design
14. Why So Many Languages?
Bring the language “closer” to the problem.
But 4GLs are typically focused on specialized
domains (e.g., relational databases).
We want a language that is general purpose,
yet can easily be “tailored” to any domain.
15. Object-Oriented Languages
Smalltalk, C++, Java, etc…
You can make any kind of objects you want
How different from procedural languages?
No different at all: Every (reasonable) language is
“Turing complete”
Very different: Make expression easier, less
error-prone
16. O-O Languages (Alan Kay)
Everything is an object
A program is a bunch of objects telling each
other what to do, by sending messages
Each object has its own memory, and is made
up of other objects
Every object has a type (class)
All objects of the same type can receive the
same messages
17. Making Java Work
It's “easy as pie” to write procedural code in
Java
It takes some discipline (an attitude) to think
O-O
It's worthwhile to do it
18. Objects
An object has an interface, determined by its
class
A class is an abstract data type, or user-
defined type
Designing a class means defining its interface
19. Designers Design, Users Use
The interface is the critical part, but the details
(implementation) are important too.
BottleOfBeer
-topOn:Boolean
+open():void
+lift(height:int):void
+tilt(angle:int):void
Users use the interface (the “public part”); the
implementation is hidden by “access control”.
23. A Simple Model of Memory
The reference variable testo The String object
holds a memory location is at that location
0x1234 memory 22 C++ Versus Javan…
When you “speak of” the variable testo, you are “referring to”
the actual String object. When testo goes out of scope
it is automatically destroyed. The String object lives
on, but nobody can use it…unless there are other references to it
28. Codice Java polimorfico
Shape p1 = new Shape();
Shape p2 = new Circle();
Shape p3 = new Square();
Shape p4 = new Triangle();
p1.draw() // disegna una forma indefinita
p2.draw() // disegna un cerchio
p3.draw() // disegna un quadrato
p4 = p3;
p4.draw(); // cosa disegna???
Si, un quadrato!