SlideShare a Scribd company logo
1 of 28
Download to read offline
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
Background
 Propedeuticità: Programmazione 1
   Scrivere un programma in un linguaggio
   imperativo (es. in C)
   Comprendere le variabili
   Strutture di controllo
   funzioni/subroutines
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)
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
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
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à
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
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
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
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
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
Programming Language
Evolution
Machine language
Assembler
“3rd generation” (COBOL, FORTRAN, C)
Specialized (Lisp, Prolog, APL)
“4th generation” (SQL, spreadsheets,
Mathematica)
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.
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
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
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
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
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”.
Oggetto
Oggetto
Light lt;
lt = new Light();
lt.on();
Creazione oggetto
Light lt;
lt = new Light();

Light lt = new Light();



String testo = new String();
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
Composizione (Composition)
 Composition: One class has another as a part
 (indicated by the diamond “aggregation”
 symbol)
Ereditarietà (Inheritance)
 extends
Ereditarietà (Inheritance)
 Gerarchia a radice unica (Object)
Polimorfismo / Overriding
 @ run time
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!

More Related Content

What's hot

2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#Marco Parenzan
 
Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)
Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)
Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)From The Front
 
Lezione 10 - Programmazione ad oggetti
Lezione 10 - Programmazione ad oggettiLezione 10 - Programmazione ad oggetti
Lezione 10 - Programmazione ad oggettiGiuseppe Cramarossa
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tuttiSalvatore Sorrentino
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Manuel Scapolan
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class LibraryManuel Scapolan
 

What's hot (7)

2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)
Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)
Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)
 
Lezione 10 - Programmazione ad oggetti
Lezione 10 - Programmazione ad oggettiLezione 10 - Programmazione ad oggetti
Lezione 10 - Programmazione ad oggetti
 
Campus La Camilla Corsi Autunno 2015
Campus La Camilla Corsi Autunno 2015Campus La Camilla Corsi Autunno 2015
Campus La Camilla Corsi Autunno 2015
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tutti
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class Library
 

Viewers also liked

C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式1138177709
 
C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式1138177709
 
Au Psy492 M7 A3 E Portf Dashchi C
Au Psy492 M7 A3 E Portf Dashchi CAu Psy492 M7 A3 E Portf Dashchi C
Au Psy492 M7 A3 E Portf Dashchi Ccdash72
 

Viewers also liked (8)

Lezione02
Lezione02Lezione02
Lezione02
 
C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式
 
Lezione03
Lezione03Lezione03
Lezione03
 
Lezione02
Lezione02Lezione02
Lezione02
 
C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式C 02 c语言的基本数据类型与表达式
C 02 c语言的基本数据类型与表达式
 
Lezione03
Lezione03Lezione03
Lezione03
 
Lezione01
Lezione01Lezione01
Lezione01
 
Au Psy492 M7 A3 E Portf Dashchi C
Au Psy492 M7 A3 E Portf Dashchi CAu Psy492 M7 A3 E Portf Dashchi C
Au Psy492 M7 A3 E Portf Dashchi C
 

Similar to Lezione01

Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéEdmondo Porcu
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaCristina Attori
 
Le 10 principali ragioni per cui Ruby fa pena
Le 10 principali ragioni per cui Ruby fa penaLe 10 principali ragioni per cui Ruby fa pena
Le 10 principali ragioni per cui Ruby fa penaAdvenias
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingMarco Breveglieri
 
Introduzione a scala prima parte
Introduzione a scala   prima parteIntroduzione a scala   prima parte
Introduzione a scala prima parteOnofrio Panzarino
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseFelice Pescatore
 
Erasmus+KA1 Piùeuropaascuola_CLIL2_A_TSANOS
Erasmus+KA1 Piùeuropaascuola_CLIL2_A_TSANOSErasmus+KA1 Piùeuropaascuola_CLIL2_A_TSANOS
Erasmus+KA1 Piùeuropaascuola_CLIL2_A_TSANOSclaudiadistefano
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Commit University
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaMarcello Teodori
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - TheoryNaLUG
 

Similar to Lezione01 (20)

Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
Strategie Per Un Lor Federato
Strategie Per Un Lor FederatoStrategie Per Un Lor Federato
Strategie Per Un Lor Federato
 
Pycon
PyconPycon
Pycon
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in Java
 
Le 10 principali ragioni per cui Ruby fa pena
Le 10 principali ragioni per cui Ruby fa penaLe 10 principali ragioni per cui Ruby fa pena
Le 10 principali ragioni per cui Ruby fa pena
 
Java introduzione
Java introduzioneJava introduzione
Java introduzione
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del Testing
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Introduzione a scala prima parte
Introduzione a scala   prima parteIntroduzione a scala   prima parte
Introduzione a scala prima parte
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
 
Vb.net
 Vb.net Vb.net
Vb.net
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione Base
 
ORM - Introduzione
ORM - IntroduzioneORM - Introduzione
ORM - Introduzione
 
Erasmus+KA1 Piùeuropaascuola_CLIL2_A_TSANOS
Erasmus+KA1 Piùeuropaascuola_CLIL2_A_TSANOSErasmus+KA1 Piùeuropaascuola_CLIL2_A_TSANOS
Erasmus+KA1 Piùeuropaascuola_CLIL2_A_TSANOS
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
 
Java lezione1
Java lezione1Java lezione1
Java lezione1
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - Theory
 
What's new in C# 7
What's new in C# 7What's new in C# 7
What's new in C# 7
 
2-Intro-Java.pdf
2-Intro-Java.pdf2-Intro-Java.pdf
2-Intro-Java.pdf
 

Lezione01

  • 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
  • 12.
  • 13. Programming Language Evolution Machine language Assembler “3rd generation” (COBOL, FORTRAN, C) Specialized (Lisp, Prolog, APL) “4th generation” (SQL, spreadsheets, Mathematica)
  • 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”.
  • 21. Oggetto Light lt; lt = new Light(); lt.on();
  • 22. Creazione oggetto Light lt; lt = new Light(); Light lt = new Light(); String testo = new String();
  • 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
  • 24. Composizione (Composition) Composition: One class has another as a part (indicated by the diamond “aggregation” symbol)
  • 26. Ereditarietà (Inheritance) Gerarchia a radice unica (Object)
  • 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!