INTRODUZIONE ALLA PROGRAMMAZIONE AD OGGETTI Slide Aggiuntive
Lezione 1 <ul><li>Panoramica sui paradigmi di programmazione  </li></ul><ul><li>e introduzione alla programmazione orienta...
Paradigmi di programmazione <ul><li>Programmazione non strutturata </li></ul><ul><li>Programmazione procedurale </li></ul>...
Programmazione non strutturata Il programma è costituito da un unico blocco di codice detto &quot;main&quot; dentro  il qu...
Programmazione procedurale Il concetto base è quello di raggruppare i pezzi di programma ripetuti in porzioni di codice ut...
Programmazione modulare Le procedure aventi un dominio comune   (ad esempio, procedure che eseguono operazioni matematiche...
Programmazione orientata agli oggetti (Object Oriented Programming - OOP) E’ basato sul fatto che esistono una serie di og...
Origini della programmazione ad oggetti <ul><li>Anni ’60: Simula 1 e Simula 67 </li></ul><ul><li>Anni ’70: Smalltalk </li>...
Motivazioni  <ul><li>Migliorare la qualità del software </li></ul><ul><li>I programmi di grandi dimensioni vengono scompos...
Programmazione ad oggetti <ul><li>Oggetti </li></ul><ul><li>Classi  </li></ul><ul><li>Interazione tra oggetti </li></ul><u...
Oggetti  <ul><li>Per capire cos’è un oggetto prendiamo spunto dalla vita reale: un oggetto è un’automobile, un computer, u...
Oggetti  <ul><li>Ad un preciso oggetto assegniamo un nome: chiameremo quindi un oggetto di classe automobile  auto1   </li...
Oggetti <ul><li>Un altro oggetto  auto2  potrò avere le seguenti caratteristiche: </li></ul><ul><li>- Velocità = 60 </li><...
Oggetti <ul><li>Nella terminologia OOP le caratteristiche di un oggetto vengono chiamate attributi, i comportamenti vengon...
Classi <ul><li>Possono esistere più oggetti che hanno gli stessi attributi, anche con valori diversi, e che dispongono deg...
Classi  <ul><li>La struttura di una classe è la seguente: </li></ul>Diagramma  delle classi <nome classe>  <attributo1> <a...
Classi  <ul><li>Esempio:  </li></ul>Automobile  Velocità Colore Numero di porte Marca   Avviati Accelera Fermati Gira Camb...
Interazione tra oggetti  <ul><li>Un programma ad oggetti è formato da tanti oggetti che comunicano ed interagiscono tra lo...
Interazione tra oggetti <ul><li>Un messaggio è costituito da 3 parti: </li></ul><ul><ul><li>un destinatario, cioè l’oggett...
Interazione tra oggetti <ul><li>Per esempio, se abbiamo una classe automobile e una classe autista, un oggetto di classe a...
Incapsulamento  <ul><li>Con il termine incapsulamento si indica la proprietà degli oggetti di incorporare al loro interno ...
Interfaccia  <ul><li>Un oggetto può essere utilizzato inviando ad esso i messaggi. L’insieme dei messaggi, che consentono ...
Accesso agli attributi <ul><li>Anche gli attributi sono nascosti nell’oggetto  </li></ul><ul><li>Per poter leggere o modif...
Accesso agli attributi <ul><li>Alcuni linguaggi hanno cercato di superare questa difficoltà consentendo un modo diverso pe...
Lezione 3 <ul><li>Programmazione ad oggetti </li></ul><ul><li>Ereditarietà </li></ul><ul><li>Polimorfismo  </li></ul>
Ereditarietà  <ul><li>L’ereditarietà è lo strumento che permette di costruire nuove classi utilizzando quelle già sviluppa...
Ereditarietà <ul><li>La classe che è stata derivata da un’altra usando l’ereditarietà prende il nome di sottoclasse. La cl...
Ereditarietà Mezzi di trasporto Veicoli a motore Mezzi non a motore Auto  Moto  Autobus  Bicicletta  Cavallo
Ereditarietà <ul><li>La sottoclasse eredita dalla sopraclasse tutti gli attributi e tutti i metodi con la possibilità di i...
Ereditarietà <ul><li>L’ereditarietà  serve a definire nuove classi, derivate da altre, che ereditano gli attributi e i met...
Ereditarietà <ul><li>Esistono due tipi di ereditarietà: </li></ul><ul><li>- singola e multipla  </li></ul>
Ereditarietà <ul><li>Si parla di ereditarietà singola   quando una sottoclasse deriva da un’unica sopraclasse  </li></ul>s...
Ereditarietà <ul><li>Si parla di ereditarietà multipla   quando una classe deriva da due o più sopraclassi  </li></ul>Mezz...
Polimorfismo  <ul><li>Il polimorfismo indica la possibilità per i metodi di assumere forme, cioè implementazioni, diverse ...
Polimorfismo <ul><li>Durante l’esecuzione del programma, un’istanza della classe veicoli a motore può rappresentare sia un...
Upcoming SlideShare
Loading in...5
×

Programmaoggetti[1]

1,408

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,408
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Programmaoggetti[1]

  1. 1. INTRODUZIONE ALLA PROGRAMMAZIONE AD OGGETTI Slide Aggiuntive
  2. 2. Lezione 1 <ul><li>Panoramica sui paradigmi di programmazione </li></ul><ul><li>e introduzione alla programmazione orientata agli oggetti </li></ul>
  3. 3. Paradigmi di programmazione <ul><li>Programmazione non strutturata </li></ul><ul><li>Programmazione procedurale </li></ul><ul><li>Programmazione modulare </li></ul><ul><li>Programmazione ad oggetti </li></ul>
  4. 4. Programmazione non strutturata Il programma è costituito da un unico blocco di codice detto &quot;main&quot; dentro il quale vengono manipolati i dati in maniera totalmente sequenziale
  5. 5. Programmazione procedurale Il concetto base è quello di raggruppare i pezzi di programma ripetuti in porzioni di codice utilizzabili e richiamabili ogni volta che se ne presenti l'esigenza; queste porzioni di codice sono chiamate procedure. Il programma è costituito da un unico file.
  6. 6. Programmazione modulare Le procedure aventi un dominio comune (ad esempio, procedure che eseguono operazioni matematiche) vengono raggruppate in moduli separati. Il programma è costituito da più file.
  7. 7. Programmazione orientata agli oggetti (Object Oriented Programming - OOP) E’ basato sul fatto che esistono una serie di oggetti che interagiscono vicendevolmente, scambiandosi messaggi ma mantenendo ognuno il proprio stato ed i propri dati.
  8. 8. Origini della programmazione ad oggetti <ul><li>Anni ’60: Simula 1 e Simula 67 </li></ul><ul><li>Anni ’70: Smalltalk </li></ul><ul><li>Anni ’80: ADA – consacrazione della programmazione ad oggetti </li></ul><ul><li>Tra i più noti linguaggi di programmazione ad oggetti: Java, C++, Delphi, C#, Visual Basic.NET </li></ul>
  9. 9. Motivazioni <ul><li>Migliorare la qualità del software </li></ul><ul><li>I programmi di grandi dimensioni vengono scomposti in moduli, che chiameremo oggetti </li></ul><ul><li>Ne trae beneficio la fase di manutenzione </li></ul><ul><li>Riutilizzo del codice </li></ul>
  10. 10. Programmazione ad oggetti <ul><li>Oggetti </li></ul><ul><li>Classi </li></ul><ul><li>Interazione tra oggetti </li></ul><ul><li>Incapsulamento </li></ul><ul><li>Interfaccia </li></ul><ul><li>Accesso agli attributi </li></ul>
  11. 11. Oggetti <ul><li>Per capire cos’è un oggetto prendiamo spunto dalla vita reale: un oggetto è un’automobile, un computer, una casa, e così via </li></ul><ul><li>Un oggetto può essere definito elencando sia le sue caratteristiche sia i suoi comportamenti, cioè le funzioni che mette a disposizione </li></ul><ul><li>Elencando le caratteristiche e i comportamenti, diamo una definizione generica </li></ul><ul><li>Un oggetto però è un’entità particolare, con le sue caratteristiche specifiche. </li></ul>
  12. 12. Oggetti <ul><li>Ad un preciso oggetto assegniamo un nome: chiameremo quindi un oggetto di classe automobile auto1 </li></ul><ul><li>Quindi l’oggetto auto1 potrà essere così descritto: </li></ul><ul><li>- Velocità = 80 </li></ul><ul><li>- Colore = rosso </li></ul><ul><li>- Numero di porte = 5 </li></ul><ul><li>- Marca = bmw </li></ul>
  13. 13. Oggetti <ul><li>Un altro oggetto auto2 potrò avere le seguenti caratteristiche: </li></ul><ul><li>- Velocità = 60 </li></ul><ul><li>- Colore = nero </li></ul><ul><li>- Numero di porte = 4 </li></ul><ul><li>- Marca = fiat </li></ul><ul><li>Quindi gli oggetti sono diversi a seconda del valore assunto dalle loro caratteristiche, ma condividono la stessa struttura </li></ul>
  14. 14. Oggetti <ul><li>Nella terminologia OOP le caratteristiche di un oggetto vengono chiamate attributi, i comportamenti vengono chiamati metodi </li></ul><ul><li>I metodi sono le operazioni che un oggetto è in grado di compiere </li></ul><ul><li>Un oggetto è quindi formato da attributi e metodi </li></ul>
  15. 15. Classi <ul><li>Possono esistere più oggetti che hanno gli stessi attributi, anche con valori diversi, e che dispongono degli stessi metodi. Si dice che questi oggetti appartengono alla stessa classe </li></ul><ul><li>Una classe specifica gli attributi, senza indicarne il valore, e i metodi che devono avere gli oggetti che appartengono alla classe </li></ul><ul><li>La classe quindi crea più oggetti tutti con gli stessi attributi e gli stessi metodi. Gli oggetti creati a partire da una classe vengono chiamati istanze della classe </li></ul><ul><li>Due istanze della stessa classe sono distinguibili solo per il valore dei loro attributi, mentre il loro comportamento (metodo) è lo stesso </li></ul>
  16. 16. Classi <ul><li>La struttura di una classe è la seguente: </li></ul>Diagramma delle classi <nome classe> <attributo1> <attributo2> … <metodo1> <metodo2> …
  17. 17. Classi <ul><li>Esempio: </li></ul>Automobile Velocità Colore Numero di porte Marca Avviati Accelera Fermati Gira Cambia marcia Rifornisciti
  18. 18. Interazione tra oggetti <ul><li>Un programma ad oggetti è formato da tanti oggetti che comunicano ed interagiscono tra loro. </li></ul><ul><li>L’interazione tra gli oggetti avviene con un meccanismo chiamato scambio di messaggi </li></ul><ul><li>Un oggetto, inviando un messaggio ad un altro oggetto, può richiedere l’esecuzione di un metodo </li></ul><ul><li>Un oggetto può interagire con un altro oggetto per diversi motivi: per modificarne lo stato, per richiedere un’informazione o per attivare un comportamento </li></ul>
  19. 19. Interazione tra oggetti <ul><li>Un messaggio è costituito da 3 parti: </li></ul><ul><ul><li>un destinatario, cioè l’oggetto verso il quale il messaggio è indirizzato; </li></ul></ul><ul><ul><li>il metodo che si vuole attivare, che deve essere uno dei metodi messi a disposizione dall’oggetto destinatario; </li></ul></ul><ul><ul><li>l’insieme dei parametri che vengono passati all’oggetto quando si richiede l’attivazione del metodo </li></ul></ul>
  20. 20. Interazione tra oggetti <ul><li>Per esempio, se abbiamo una classe automobile e una classe autista, un oggetto di classe autista, per esempio autista1 per inviare all’oggetto auto1 di classe automobile il messaggio che richiede di aumentare la velocità può scrivere: </li></ul><ul><li>auto1.accelera() </li></ul>
  21. 21. Incapsulamento <ul><li>Con il termine incapsulamento si indica la proprietà degli oggetti di incorporare al loro interno sia gli attributi che i metodi, cioè le caratteristiche e i comportamenti dell’oggetto. Tutto ciò che si riferisce ad un certo oggetto è racchiuso e contenuto all’interno dell’oggetto stesso </li></ul><ul><li>Gli attributi e i metodi sono incapsulati nell’oggetto. In questo modo tutte le informazioni utili che riguardano un oggetto sono al suo interno. Questo è uno dei vantaggi della programmazione ad oggetti </li></ul>
  22. 22. Interfaccia <ul><li>Un oggetto può essere utilizzato inviando ad esso i messaggi. L’insieme dei messaggi, che consentono l’interazione con gli oggetti, rappresenta la sua interfaccia </li></ul><ul><li>L’interfaccia è costituita dall’elenco dei metodi identificati dal loro nome. Per ogni metodo occorre indicare anche il numero e il tipo dei parametri e il valore di ritorno del metodo </li></ul><ul><li>Chi utilizza l’oggetto deve conoscere solo la sua interfaccia. In questo modo può sapere quali metodi possono essere invocati, quali sono i parametri da passare e che cosa ricaverà come valore di ritorno </li></ul>
  23. 23. Accesso agli attributi <ul><li>Anche gli attributi sono nascosti nell’oggetto </li></ul><ul><li>Per poter leggere o modificare il valore di un attributo, si dovrebbe utilizzare un metodo che esegue l’operazione richiesta </li></ul><ul><li>Per esempio, se volessimo conoscere il valore della velocità dell’oggetto auto1 dovremmo usare il seguente messaggio: auto1.leggiVelocità() </li></ul><ul><li>Questo garantisce l’information hiding, ma comporta che per ogni attributo dell’oggetto siano definiti il metodo per leggere e il metodo per modificare il suo valore </li></ul>
  24. 24. Accesso agli attributi <ul><li>Alcuni linguaggi hanno cercato di superare questa difficoltà consentendo un modo diverso per manipolare gli attributi; in questo caso ci si riferisce direttamente agli attributi: </li></ul><ul><li>auto1.velocità </li></ul><ul><li>Questa modalità di accesso agli attributi viola la regola dell’information hiding, perché gli attributi non restano più nascosti all’interno dell’oggetto, ma offre la facilitazione di poter manipolare gli attributi senza usare i messaggi </li></ul>
  25. 25. Lezione 3 <ul><li>Programmazione ad oggetti </li></ul><ul><li>Ereditarietà </li></ul><ul><li>Polimorfismo </li></ul>
  26. 26. Ereditarietà <ul><li>L’ereditarietà è lo strumento che permette di costruire nuove classi utilizzando quelle già sviluppate </li></ul><ul><li>Quando una classe viene creata attraverso il meccanismo di ereditarietà a partire da un’altra classe, essa riceve in eredità tutti gli attributi e i metodi della classe generatrice </li></ul>
  27. 27. Ereditarietà <ul><li>La classe che è stata derivata da un’altra usando l’ereditarietà prende il nome di sottoclasse. La classe generatrice di una sottoclasse si chiama sopraclasse </li></ul><ul><li>Queste relazioni tra le classi individuano una gerarchia che nasce da un processo di specializzazione. Infatti le classi che si trovano in cima alla gerarchia sono le più generali e man mano che si scende si trovano classi più specializzate </li></ul>
  28. 28. Ereditarietà Mezzi di trasporto Veicoli a motore Mezzi non a motore Auto Moto Autobus Bicicletta Cavallo
  29. 29. Ereditarietà <ul><li>La sottoclasse eredita dalla sopraclasse tutti gli attributi e tutti i metodi con la possibilità di inserire le differenze. </li></ul><ul><li>La nuova classe si differenzia dalla sopraclasse in due modi: </li></ul><ul><li>- per estensione, quando la sottoclasse aggiunge nuovi </li></ul><ul><li>attributi e metodi che si sommano a quelli ereditati </li></ul><ul><li>- per ridefinizione, quando la sottoclasse ridefinisce i </li></ul><ul><li>metodi ereditati, viene cioè data un’implementazione </li></ul><ul><li>diversa di un metodo </li></ul>
  30. 30. Ereditarietà <ul><li>L’ereditarietà serve a definire nuove classi, derivate da altre, che ereditano gli attributi e i metodi, con la possibilità di ridefinirli o di aggiungerne di nuovi. </li></ul>
  31. 31. Ereditarietà <ul><li>Esistono due tipi di ereditarietà: </li></ul><ul><li>- singola e multipla </li></ul>
  32. 32. Ereditarietà <ul><li>Si parla di ereditarietà singola quando una sottoclasse deriva da un’unica sopraclasse </li></ul>sopraclasse sottoclasse sottoclasse
  33. 33. Ereditarietà <ul><li>Si parla di ereditarietà multipla quando una classe deriva da due o più sopraclassi </li></ul>Mezzi di trasporto Animali Cavallo
  34. 34. Polimorfismo <ul><li>Il polimorfismo indica la possibilità per i metodi di assumere forme, cioè implementazioni, diverse all’interno della gerarchia delle classi </li></ul><ul><li>Tutti i veicoli a motore possiedono il metodo accelera </li></ul><ul><li>- Le sottoclassi automobile e moto ereditano il </li></ul><ul><li>metodo accelera, ma è probabile che lo </li></ul><ul><li>ridefiniscano per adeguarlo alle particolari </li></ul><ul><li>esigenze </li></ul><ul><li>- Il metodo accelera dell’automobile si manifesterà con la </li></ul><ul><li>pressione del pedale, mentre nella moto sarà </li></ul><ul><li>implementato con il movimento della manopola </li></ul><ul><li>Queste due diverse implementazioni evidenziano l’aspetto polimorfico del metodo accelera </li></ul>
  35. 35. Polimorfismo <ul><li>Durante l’esecuzione del programma, un’istanza della classe veicoli a motore può rappresentare sia una automobile che una moto </li></ul><ul><li>Non è possibile sapere, prima dell’esecuzione, se si tratta di una automobile o di una moto </li></ul><ul><li>Il collegamento dinamico garantisce che, richiamando il metodo, tra tutte le implementazioni venga scelta quella corretta che corrisponde all’oggetto interessato </li></ul>

×