Ereditarieta Concetto

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Ereditarieta Concetto - Presentation Transcript

    1. Lezione di Silvano Natalizi 28 ottobre 2008 Modulo Programmazione Orientata agli Oggetti 4° parte La relazione di Ereditarietà
    2. La guerra delle sedie
      • In un’azienda di software a due programmatori è affidato il medesimo problema e l’incarico di scrivere il programma. Il capo costringe alla competizione i due programmatori. Promette… a chi arriva per primo a dare una soluzione soddisfacente, …una di quelle sedie che tutte le persone importanti hanno nella silicon Valley!
    3. La specifica del problema
      • Disegnare un’interfaccia grafica con delle forme geometriche: un quadrato, un cerchio e un rettangolo.
      • Quando un utente clicca su di una forma, questa deve ruotare in senso orario di 360 gradi
      • e deve emettere un suono specifico
    4. I due programmatori
      • Simone è un programmatore procedurale
      • Pensa: quali sono le cose che deve fare questo programma ? Di quali funzioni ha bisogno ?
      • ruota e emettiSuono
      • Per cui si mette a scrivere le due procedure. D’altra parte che cosa è un programma se non una pila di funzioni ?
      • Matteo è un programmatore Orientato agli Oggetti
      • Pensa: quali sono gli oggetti di questo programma ?
      • Le Forme !
      • Per cui si mette a scrivere le classi degli oggetti. D’altra parte che cosa è un programma se non un insieme di oggetti che si scambiano messaggi ?
    5. I due programmi
      • ruota(numeroForma) {
        • // ruota la forma di 360°
        • }
      • emettiSuono(numeroForma){
        • // usa il numero della forma per scegliere il tipo di suono
        • // suonalo
        • }
      Cerchio Ruota(){ // codice per ruotare } emettiSuono(){ //codice per il suono del cerchio } Triangolo Ruota(){ //Codice per ruotare } emettiSuono(){ //codice per il suono del triangolo } procedurale Orientato agli oggetti
    6. Chi ha vinto la sedia ?
      • Simone sente si sente già seduto sull’acciaio arrotondato.
      • Ma…
      • Un momento c’è stata una variazione nelle specifiche del problema !
      Aggiunta alle precedenti specifiche
    7. Implementazione della nuova specifica
      • Simone si mette al lavoro
      • La funzione ruota() non deve essere modificata.
      • Ma emettiSuono(…) deve essere modificata:
      • emettiSuono(numeroForma){
        • Se la forma non è un’ameba usa il numeroForma per scegliere la musica e suonala
        • else
          • Suona la musica dell’ameba
          • }
      • Matteo si mette a ridere, tira fuori la sua penna e scrive una nuova classe:
      Ameba Ruota() { //codice per ruotare l’ameba } emettiSuono(){ //codice per emettere la musica dell’ameba }
      • Non deve modificare il codice già scritto
    8. C’è un errore, il manager dice…
      • In tono di disappunto, “Oh, no l’ameba non deve ruotare in quel modo:
      • Entrambi i programmatori hanno scritto il codice per la rotazione in questo modo:
        • Determina il rettangolo che include la forma
        • Calcola il centro di quel rettangolo e ruota la forma attorno a quel punto
      • Ma l’ameba deve ruotare non nel suo centro, ma attorno al suo punto estremo come un pendolo!
      • Simone, il procedurale procede alla correzione introducendo nella sua procedura ruota() un if/else e codifica la nuova funzione.
      • Ma il capo “Grosso errore! Onestamente non credi che la specifica possa cambiare di nuovo ?”
    9. Il nuovo codice
      • Simone, il procedurale
      • Ruota(numeroForma, x,y){
      • If la forma non è un’ameba calcola il punto centrale poi ruota
      • Else
      • calcola il punto estremo e poi ruota
      • Matteo modifica il metodo ruota(), ma solo all’interno della classe Ameba! Non tocca affatto il codice della altre classi.
    10. Ha vinto Matteo ?
      • Simone ha trovato un errore nel codice di Matteo
      • Hai del codice duplicato !
      • La procedura ruota() è addirittura in tutte e quattro le classi !
      • Hai realizzato un disegno poco intelligente
      • Devi mantenere quattro diversi metodi ruota()!
    11. La risposta di Matteo
      • Presumo che tu non abbia visto ancora il disegno finale !
      • Lascia che ti mostri come lavora l’ereditarietà
      • 1) Guardo a cosa hanno in comune le quattro classi
      • 2) esse sono forme e tutte ruotano ed emettono suoni. Pertanto faccio astrazione degli elementi in comune e li inserisco in una nuova classe che chiamo Forma
      • 3) quindi collego le altre quattro classi alla nuova classe “Forma” in una relazione chiamata di ereditarietà.
    12. Critica di Simone
      • Il problema è che la forma ameba ha una procedura ruota() e emettiSuono() completamente diversa dalle altre forme !
      • Ma il metodo di ameba come può fare qualcosa di diverso se eredita la sua funzionalità dalla classe “Forma” ?
    13. Matteo: l’ultima fase del lavoro
      • La forma “Ameba” può avere un suo comportamento diverso perché sovrascrive (overrides) i metodi della classe “Forma”
      • Pertanto quando qualcuno dice ad Ameba di ruotare, java sa esattamente quale metodo ruota() deve eseguire !
      • Sovrascrivere significa che una classe ridefinisce uno dei suoi metodi ereditati quando ha bisogno di cambiare o estendere il comportamento di quel metodo.
    14. Riepilogo fasi di lavoro 1
      • Guardare cosa c’è in comune tra le classi:
    15. 2) Gli elementi comune formano una nuova classe
    16. 3) Relazione di ereditarietà
    17. 4) Sovrascrittura dei metodi in Ameba
    18. Chi è il vincitore ?

    + silvanonatalizisilvanonatalizi, 2 years ago

    custom

    512 views, 0 favs, 2 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 512
      • 494 on SlideShare
      • 18 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 8
    Most viewed embeds
    • 15 views on http://didatticasilvanonatalizi.blogspot.com
    • 3 views on http://www.didatticasilvanonatalizi.blogspot.com

    more

    All embeds
    • 15 views on http://didatticasilvanonatalizi.blogspot.com
    • 3 views on http://www.didatticasilvanonatalizi.blogspot.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories