1 / 91

Programmazione ad O ggetti

Programmazione ad O ggetti. ( 09CBIPC, 09CBIMQ ) Corsi di Laurea in Ingegneria del cinema e dei mezzi di comunicazione Matematica per l’Ingegneria. Obiettivi del corso. Obiettivi

eagan
Download Presentation

Programmazione ad O ggetti

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmazione ad Oggetti ( 09CBIPC, 09CBIMQ ) Corsi di Laurea in Ingegneria del cinema e dei mezzi di comunicazione Matematica per l’Ingegneria Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  2. Obiettivi del corso • Obiettivi • Il corso ha lo scopo di introdurre i concetti base della programmazione ad oggetti dal punto di vista dell’ingegneria del software. • La metodologia di programmazione è presentata nel contesto delle diverse fasi che compongono il ciclo di vita del software ed è illustrata da numerosi esempi realizzati in linguaggio Java e descritti mediante diagrammi UML • Competenzeacquisite • Conoscenza teorica e sperimentale della metodologia di sviluppo del software objectoriented, del linguaggio Java, dell’ambiente integrato di sviluppo Eclipse • Prerequisiti • concetti base dell’informatica • linguaggio C Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  3. Programma • Algoritmi e strutture dati • Linguaggio Java • Complessità computazionale • Sviluppo di algoritmi per raffinamenti successivi • Algoritmi ricorsivi • Algoritmi di ordinamento • Algoritmi di ricerca • Strutture dati ricorsive • Liste, Stack, Code, Alberi • ObjectOrientedProgramming • Classi • Oggetti • Ereditarietà • Polimorfismo • Exception Handling • Java Class Library • Collections Framework • Files and Streams • Graphical User Interfaces • Reflection Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  4. Docente Prof. Silvano Rivoira Dipartimento di Automatica e Informatica 011 090 7056 silvano.rivoira@polito.it http://staff.polito.it/silvano.rivoira Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  5. Organizzazione del corso • Lezione • Mercoledì - 13.00/14.30 - aula 2T • Laboratorio • Mercoledi` - 14.30/16.00 – aula5T • Ricevimento • suappuntamento Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  6. Materiale e testi • Libri • The Java Tutorials • http://docs.oracle.com/javase/tutorial/index.html • P. Deitel, H. Deitel : Java How to Program, International Edition 9/E, Pearson, 2011 • http://catalogue.pearsoned.co.uk/catalog/academic/product?ISBN=9780273759768 • Software • Java Platform (JDK), Standard Edition (SE) • http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html • JDK API Documentation • http://www.oracle.com/technetwork/java/javase/documentation/java-se-7-doc-download-435117.html • Eclipse • http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/junor • Slides • http://staff.polito.it/silvano.rivoira/didattica.html Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  7. Esame • L'esame consiste in una prova scritta: • Algoritmi e strutture dati • Domande sulla teoria • ObjectOrientedProgramming • Sviluppo di un progetto software in linguaggio Java mediante Eclipse Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  8. Java language • Originally developed by James Gosling at Sun Microsystems and released in 1995 • It derives much of its syntax from C and C++ • Java applications are typically compiled to bytecode that can run on any Java Virtual Machine (JVM) regardless of computer architecture • As of May 2007 Sun relicensed most of its Java technologies under the GNU General Public License • Sun Microsystems was acquired by Oracle Corporation's in 2010 • Java is as of 2012 one of the most popular programming languages in use, particularly for client-server web applications, with a reported 10 million users • Google and Android, Inc. have chosen to use Java to design applicationsforthe Android operating system, an open-source operating system built on the Linux 2.6 kernel, designed primarily for touchscreen mobile devices (smartphones, tablet PCs, mobile Internet devices, …) Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  9. Java Environment • Java bytecodes • platform-independent intermediate language • Java Virtual Machine (Java VM) • virtual machine able to execute Java bytecodes Java source Java bytecodes Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  10. Java Portability • any implementation of Java VM can execute Java bytecodes Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  11. Java Security Check of correctness of parameter types and compliance with access rules Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  12. Java Platform • Java Application Programming Interface (Java API) • set of Java bytecodes libraries (packages) supporting a large range of functionalities • http://docs.oracle.com/javase/6/docs/api/index.html Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  13. Java Technology CDC = ConnectedDeviceConfiguration CLDC = ConnectedLimitedDeviceConfiguration PDA = Personal DigitalAssistant (palmare) POS = Point Of Sale Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  14. Java Platform - Standard Edition Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  15. Java Development Kit (JDK) Tools • javac • The compiler for the Java programming language. • java • The launcher for Java applications. • javadoc • API documentation generator. • appletviewer • Run and debug applets without a web browser. • jar • Manage Java Archive (JAR) files. • jdb • The Java Debugger. • javah • C header and stub generator. Used to write native methods. • javap • Class file disassembler • extcheck • Utility to detect Jar conflicts. Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  16. Java: HelloWorld program • public class HelloWorld • { • /* The HelloWorld class implements an application that • displays "Hello World!" to the standard output */ • public static void main ( String[] args ) { • System.out.println( "Hello World!" ); • } • } HelloWorld.java Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  17. EclipseIntegratedDevelopmentEnvironment (IDE) Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  18. Keyword Description Size/Format (integers) byte Byte-length integer 8-bit two's complement short Short integer 16-bit two's complement int Integer 32-bit two's complement long Long integer 64-bit two's complement (realnumbers) (real numbers) float Single-precision floating point 32-bit IEEE 754 double Double-precision floating point 64-bit IEEE 754 (othertypes) (other types) char A single character 16-bit Unicode character boolean A boolean value (true or false) true or false Java: Primitive Data Types Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  19. Operator Use Description + op1 + op2 Addsop1andop2 - op1 - op2 Subtracts op2fromop1 * op1 * op2 Multipliesop1byop2 Operator Use Description / op1 / op2 Dividesop1byop2 ++ op++ Incrementsopby1; evaluates to the value of op before it was incremented % op1 % op2 Computes the remainder of dividingop1byop2 ++ ++op Increments opby 1; evaluates to the value of op after it was incremented -- op-- Decrementsopby 1; evaluates to the value of op before it was decremented -- --op Decrementsopby 1; evaluates to the value of op after it was decremented Java: Arithmetic Operators Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  20. Java: Relational and ConditionalOperators Operator Use Returns true if > op1 > op2 op1is greater thanop2 >= op1 >= op2 op1is greater than or equal toop2 < op1 < op2 op1is less thanop2 <= op1 <= op2 op1is less than or equal toop2 == op1 == op2 op1and op2are equal != op1 != op2 op1andop2are not equal Operator Use Returns true if && op1 && op2 op1andop2are both true , conditionally evaluatesop2 || op1 || op2 eitherop1orop2istrue , conditionally evaluatesop2 ! ! op opis false & op1 & op2 op1andop2are both true , always evaluatesop1andop2 | op1 | op2 either op1orop2istrue , always evaluatesop1and op2 op1 ^ op2 ^ if op1andop2are different--that is if one or the other of the operands is true but not both Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  21. Operator Use Operation >> op1 >> op2 shift bits ofop1right by distanceop2 << op1 << op2 shift bits ofop1left by distanceop2 Operator Use Operation >>> op1 >>> op2 shift bits ofop1right by distanceop2(unsigned) & op1 & op2 bitwiseand | op1 | op2 bitwise or ^ op1 ^ op2 bitwisexor ~ ~op2 bitwise complement Java: Shift and LogicalOperators Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  22. Operator Use Equivalent to += op1 += op2 op1 = op1 + op2 -= op1 -= op2 op1 = op1 - op2 *= op1 *= op2 op1 = op1 * op2 /= op1 /= op2 op1 = op1 / op2 %= op1 %= op2 op1 = op1 % op2 &= op1 &= op2 op1 = op1 & op2 |= op1 |= op2 op1 = op1 | op2 ^= op1 ^= op2 op1 = op1 ^ op2 <<= op1 <<= op2 op1 = op1 << op2 >>= op1 >>= op2 op1 = op1 >> op2 >>>= op1 >>>= op2 op1 = op1 >>> op2 Java: AssignmentOperators op1=op2; Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  23. Operator Use Description ?: op1 ? op2 : op3 Ifop1is true, returnsop2. Otherwise, returns op3. [ ] type [] Declares an array of unknown length, which contains typeelements. [ ] type [ op1 ] Creates and array withop1elements. Must be used with the newoperator. [ ] op1[ op2 ] Accesses the element atop2index within the arrayop1. Indices begin at 0 and extend through the length of the array minus one. . op1.op2 Is a reference to theop2member ofop1. ( ) op1(params) Declares or calls the method namedop1with the specifiedparameters. The list of parameters can be an empty list. The list is comma-separated. (type) (type) op1 Casts (converts)op1totype . An exception will be thrown if the type ofop1is incompatible with type. new new op1 Creates a new object or array.op1is either a call to a constructor, or an array specification. instanceof op1 instanceof op2 Returns true ifop1is an instance ofop2 Java: OtherOperators Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  24. Java: Control Flow Statements - looping while (boolean expression) { statement(s)} do {statement(s)} while (boolean expression); for (initialization ; termination ; increment ) { statement(s) } Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  25. Java: Control Flow Statements – decisionmaking if (boolean expression) { statement(s) } switch (expression) { case constant expression :statement(s)break; ... ... default: statement(s)break; } if (boolean expression) { statement(s) } else { statement(s) } Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  26. Java: Control Flow Statements – branching label: someJavaStatement; Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  27. Java: CreatingArrays Declaring a Variable to Refer to an Array int[]anArray; // declare an array of integersfloat[]anArrayOfFloats;boolean[]anArrayOfBooleans; Object[]anArrayOfObjects;String[]anArrayOfStrings; Creating an Array anArray = new int[10]; // create an array of 10 integers Declaring, Creating and Initializingan Array boolean[] answers = { true, false, true, true, false }; Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  28. Java: UsingArrays Getting the Size of an Array arrayname.length Accessing an Array Element anArray[i] Copying Arrays System.arraycopy(Object source, intsrcIndex, Objectdest, intdestIndex,intlength) source Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  29. Java: IteratingthroughArrays (for statement) Iterating throughArrays • classForDemo • { • public staticvoidmain(String[] args) • { • int[] numbers = {1,2,3,4,5,6,7,8,9,10}; • for (int i=0 ; i<numbers.length ; i++) System.out.print(" " + numbers[i]); • } • } Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  30. Java: IteratingthroughArrays (enhancedfor statement) Iterating throughArrays • classEnhancedForDemo • { • public staticvoidmain(String[] args) • { • int[] numbers = {1,2,3,4,5,6,7,8,9,10}; • for (int item : numbers) System.out.print(" " + item); • } • } Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  31. Software Quality to perform the requirements and specification to perform the requirements and specification Functionality Usability to be user friendly to be user friendly to provide appropriate response and processing time to provide appropriate response and processing time Performance to be in a failure-free condition at all times to be in a failure-free condition at all times Reliability Software Quality to perform appropriately, relative to the amount of resources used to perform appropriately, relative to the amount of resources used Efficiency to be easily and transparently upgradable to be easily and transparently upgradable Scalability to have consideration for future growth to have consideration for future growth Extensibility Security to keep away from security threats to keep away from security threats Maintainability to be easily modifiable to be easily modifiable Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  32. Complessitàcomputazionale • algoritmo: sequenza finita di operazioni, capace di risolvere un determinato problema in un tempo finito • programma: rappresentazione di un algoritmo mediante un linguaggio di programmazione • dimensione di un problema : intero positivo n proporzionale allo spazio occupato dai dati di ingresso relativi al problema • complessità temporale ( o spaziale) di un algoritmo : indicazione deltempo( o dellospazio) richiesto dall'algoritmo in funzione della dimensione ndel problema Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  33. Complessità worst/average case • complessità nel caso peggiore ( worst-case ) : • Dn è l'insieme degli ingressi I di dimensione n • t(I) è il tempo di esecuzione relativo all'ingresso I • complessità media ( average-case ) : • p(I) è la probabilità di I W(n) = max { t(I) ç IÎ Dn } A(n) = å p(I) t(I) IÎDn Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  34. ComplessitàAsintotica insieme delle funzioni che crescono con rapidità non superiorea quella di f(n) insieme delle funzioni che crescono con rapidità uguale a quella di f(n) insieme delle funzioni che crescono con rapidità non inferiorea quella di f(n) O( f(n) ) Q( f(n) ) W( f(n) ) Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  35. NotazioneO O( f(n) )è l'insieme di tutte le funzioni g(n)tali che esistanodue costanti positivecemper cui : g(n) £ c f(n) , "n ( n ³ m ) g(n) ÎO( f(n) ) selim = c La notazione Odelimita superiormente la crescita asintoticadella complessità e fornisce quindi una indicazione della bontà di un algoritmo n ® ¥ g(n) f(n) • O(c) Ì O(log n) Ì O( (log n)k ) Ì O(n)Ì O( n(log n)k ) Ì • Ì O(nk) Ì O( nk(log n)h ) Ì O(nk+1) Ì O(dn) Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  36. NotazioneW W( f(n) )è l'insieme di tutte le funzioni g(n)tali che esistano due costanti positivecemper cui : g(n) ³ c f(n) , "n ( n ³ m ) g(n) ÎW(f(n)) selim = f(n) Î O( g(n) ) se e solo se g(n) ÎW( f(n) ) Un algoritmo di complessità O( f(n) )si diceottimose qualunque algoritmo che risolva lo stesso problema ha complessitàW ( f(n) ) g(n) f(n) ¥ n ® ¥ c > 0 Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  37. Programming in the Small/Large • Programming in the small • software projects are developed by single programmers • main problems to be solved: • choice of appropriate data structures • development ofefficient algorithms • Programming in the large • software projects are developed by large groups of programmers • different groups make • development (analysis, design, coding, integration, testing) • maintenance (extensions, upgrading) over large time intervals • main problems to be solved: • good choice of software components • communication of information among components • component integration Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  38. Sviluppo di algoritmi per raffinamentisuccessivi start definizione delle specifichedelproblema la soluzione del problema è esprimibile direttamente nel linguaggio di programmazione prescelto ? si no scomposizione del problema in una sequenza , o selezione, o iterazione di sottoproblemi e definizione delle specifiche di ciascun sottoproblema codifica della soluzione si no uno dei sottoproblemi generati coincide con uno dei problemi da cui è stato derivato ? soluzione ricorsiva del problema scelta di un problema si no ancora problemi da risolvere ? stop Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  39. P /* a,b interi positivi */ CALCOLA MassimoComuneDivisore(a,b) /* MCD(a,b) */ Massimo ComuneDivisore (1) MCD(a,b) = MCD(b,a) MCD(a,a) = a MCD(a,0) = a Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  40. P1 P /* a,b interi positivi */ { int x,y; P1: INIZIALIZZA x,y ; /* MCD(x,y) = MCD(a,b) */ while (x!=y) P2: RIDUCI |x-y| SENZA VARIARE MCD(x,y) ; } /* x = MCD(a,b) */ /* a,b interi positivi */ { x=a; y=b; } /* MCD(x,y) = MCD(a,b) */ Massimo ComuneDivisore (2) MCD(a,a) = a Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  41. P2 /* MCD(x,y) = MCD(a,b); x!=y */ { if (x>y) x -= y; else y -= x; } /* MCD(x,y) = MCD(a,b) */ Massimo ComuneDivisore (3) Se k è divisore comune di x e y Þx = k qx ; y = k qy Þ|x-y| = k |qx- qy| Þ k è divisore comune di |x-y| Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  42. P /* a,b interi positivi */ { int x,y; /* P1: INIZIALIZZA x,y */ x=a; y=b; /* MCD(x,y) = MCD(a,b) */ while (x!=y) /* P2: RIDUCI |x-y| SENZA VARIARE MCD(x,y) */ if (x>y) x -= y; else y -= x; } /* x = MCD(a,b) */ Massimo ComuneDivisore (4) Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  43. Massimo ComuneDivisore (5) • public class Mcd1 • { • public static void main( String[] args ) • { • System.out.println("MCD(42,56)= "+ mcd(42,56)); • } • staticintmcd(int a, int b) • { • while(a!=b) • if (a>b) • a -= b; • else • b -= a; • return a; • } • } Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  44. P /* a,b interi positivi */ { int x,y; P1: INIZIALIZZA x,y ; /* MCD(x,y) = MCD(a,b) */ while (y!=0) P3: RIDUCI ySENZA VARIARE MCD(x,y) ; } /* x = MCD(a,b) */ Massimo ComuneDivisore (6) MCD(a,0) = a P1 /* a,b interi positivi */ { x=a; y=b; } /* MCD(x,y) = MCD(a,b) */ Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  45. P3 /* MCD(x,y) = MCD(a,b); y!=0 */ { r = x % y; x = y; y = r; } /* MCD(x,y) = MCD(a,b) */ Massimo ComuneDivisore (7) Se k è divisore comune di x e y Þx = k qx ; y = k qy Þx % y = x – (x/ y) y = k(qx – (x / y) qy) Þ k è divisore comune di x % y MCD(x,y) = MCD(y,x%y) Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  46. P /* a,b interi positivi */ { intx,y,r; /* P1: INIZIALIZZA x,y */ x=a; y=b; /* MCD(x,y) = MCD(a,b) */ while(y!=0) /* P2: RIDUCI y SENZA VARIARE MCD(x,y) */ { r = x % y; x = y; y = r; } } /* x = MCD(a,b) */ Massimo ComuneDivisore (8) Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  47. Massimo ComuneDivisore (Euclide) • public class Mcd2 • { • public static void main( String[] args ) • { • System.out.println("MCD(42,56)= "+ mcd(42,56)); • } • staticintmcd(int a, int b) • { • int r; • while (b!=0) { • r = a % b; • a = b; • b = r; • } • return a; • } • } Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  48. Ricorsione n! = n*(n-1)! 1! = 1 Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  49. Algoritmiricorsivi (MCD) MCD(a,b) = MCD(b,a%b) MCD(a,0) = a mcd(36,42) 6 mcd(42,36) 6 /* a,b interi positivi */ intmcd(int a, int b) { if (b==0) returna; else returnmcd(b,a%b); } mcd(36,6) 6 mcd(6,0) 6 Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

  50. Algoritmiricorsivi (Fattoriale) n! = n*(n-1)! 1! = 1 24 fact(4) fact(3) 6 /* n intero positivo */ intfact(int n) { if (n==1) return 1; else return n * fact(n-1); } fact(2) 2 fact(1) 1 complessità: O(n) Silvano Rivoira - Dipartimento di Automatica e Informatica - Politecnico di Torino

More Related