+ All Categories
Home > Documents > Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i...

Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i...

Date post: 18-Feb-2019
Category:
Upload: lammien
View: 220 times
Download: 0 times
Share this document with a friend
30
Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011
Transcript
Page 1: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

Programmazione a OggettiModulo B

Progetto

Dott. Alessandro Roncato

4/10/2011

Page 2: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

2

Progetto

Da svolgere singolarmenteScadenza consegna: una settimana prima dello scritto;Valutazione in base a:Corretta compilazione ed esecuzioneAderenza ai principi della POFunzionalità

Inviare sorgenti progetto a [email protected]

Page 3: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

3

Negozio

Scrivere un'applicazione Java per la gestione di una Negozio

L'applicazione dovrà consentire:Al proprietario di inserire nuovi prodotti, registrare il

ricevimento della merce, le vendite e i resiIl negozio vende vari tipi di prodotti che hanno

gestioni differenti (es. scadenza, i.v.a. etc. diverese)

Ulteriori dettagli emergeranno via via nel corso delle lezioni

Page 4: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

4

Caratteristiche

Non interessano aspetti grafici o di animazione, stretto necessario per poter utilizzare il codice scritto.

Ecco un esempio di come potrebbe apparire una particolare funzionalità.

Page 5: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

5

Esempio aspetto

E' preferibile che i controlli siano attivati/disattivati in funzione della possibilità o meno di fare quell'attività

Page 6: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

6

Come iniziareNel Modulo B vedremo degli “esempi” (Design

Patterns) che aiuteranno a progettare il codice seguendo i paradigmi della programmazione a oggetti.

Inizieremo oggi cercando di capire come dividere il codice nei vari oggetti.

IMPORTANTE: prima di scrivere codiceBisogna capire cosa e come scriverlo

Page 7: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

7

A cosa serve la progettazioneNei casi reali prima di realizzare un qualsiasi

manufatto è buona norma fare un progetto.Il progetto serve a:1) idea del risultato finale (+ modello in scala)2) stimare tempi e costi3) controllare che le varie componenti siano

compatibili tra di loro4) dividere il lavoro tra più persone5) etc.

Page 8: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

8

A cosa serve la progettazionePrima di realizzare una qualsiasi applicazione è

buona norma fare un progetto.Il progetto serve a:1) idea del risultato finale (+ prototipo GUI)2) stimare tempi e costi3) controllare che le varie componenti siano

compatibili tra di loro4) dividere il lavoro tra più persone5) etc.

Page 9: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

9

Quanti oggetti?

Se intendiamo gestire tutta la nostra applicazione con un unico oggetto, il risultato sarà molto simile all'approccio non orientato agli oggetti.

Un unico “spazio” e tutto il codice e i dati presenti in questo spazio saranno strettamente dipendenti.

Page 10: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

10

Svantaggi unico oggetto

Non ho nessun vantaggio PODifficile riusoInterdipendenza codice altissimaDifficile debugDifficile manutenzioneDifficile da suddividere l'implementazione con più

persone

NON SCRIVERE CODICE E DIVIDERE POI!

Page 11: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

11

Quanti oggetti?

Altra soluzione: un oggetto Java per ogni oggetto “reale”:Un oggetto Negozio Un oggetto Utente per ogni utenteUn oggetto Prodotto per ogni prodottoUn oggetto Scontrino per ogni Venditaetc.

ELENCARE TUTTI GLI OGGETTI

Page 12: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

12

Vantaggi

Facilmente divisibili tra i vari sviluppatoriOgni singolo “componente” è facilmente

debuggabile, riusabile e mantenibileLo “spazio” di dipendenza “interna” del codice è

ridotto in quanto il codice è diviso in più partiC'é però interdipendenza “esterna” anche tra gli

spazi: come limitarla?

Page 13: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

13

Quanti oggetti?

Visto che passando da un oggetto a tanti, abbiamo ottenuto dei vantaggi, perché non spingersi oltre e suddividere ulteriormente gli oggetti in modo da avere più oggetti Java di quelli del mondo reale?

Aumenta la dipendenza esterna tra oggetti È più difficile da suddividere il lavoro tra

programmatori

Page 14: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

14

Quante classi?Tipi diversi di oggetti hanno bisogno di classi

diverse, quindi il numero di classi corrisponde al numero di oggetti diversi (questo vale per tutti i linguaggi a oggetti fortemente tipati).

Delle volte non è così semplice capire se due oggetti hanno bisogno di due classi diverse oppure se possono essere gestiti dalla stessa classe

Page 15: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

15

Classi del progetto

1 oggetto di tipo Negozio => 1 classe NegozioTanti oggetti di tipo Scaffale => 1 classeTanti oggetti Utenti => 1 classeTanti oggetti di tipo Prodotto => 1 classe Prodotto

oppure 1 classe/interfaccia e più sottoclassi ( Alimentari, Riviste, Elettrodomestici, Casalinghi) ?

Page 16: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

16

Cos'è la dipendenza esterna? (*)

C'è dipendenza esterna quando una classe “ha a che fare” con un'altra classe, cioè:1) Una classe estende un'altra classe2) Gli oggetti di una classe hanno una relazione con

oggetti di un'altra 3) Un metodo di una classe usa un oggetto di

un'altra classe

Page 17: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

17

Esempio di dipendenza

Estensione: la classe Elettrodomestico estende la classe Prodotto

Relazione: un oggetto Scontrino è relativo a un Prodotto

Uso: probabilmente il metodo che “calcolaTotale” di un oggetto Carrello/Spesa avrà bisogno di accedere all'oggetto Prodotto per recuperare il prezzo.

Page 18: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

18

Perché ridurre dipendenza?

Una modifica (per debug, manutenzione, riuso etc.) ad una classe implica una possibile modifica alle classi dipendenti

Quindi se due classi NON sono dipendenti, ho libertà di modificarle senza problemi

Page 19: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

19

Come ridurre la dipendenza

Riducendo la parte “visibile” dalle classi.L'incapsulamento dei linguaggi ad oggetti

permette al compilatore di controllare la dipendenza tra classi

La parte visibile è costituita dagli attribiti pubblici

Page 20: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

20

Incapsulamento

Incapsulamento codice = funzioni e procedureIncapsulamento dati = strutture (es. strutc

del C)Incapsulamento di codice (metodi) + dati

(variabili) + controllo visibilità = oggetti

Page 21: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

21

A cosa serve?

L'incapsulamento permette di controllare le dipendenze esterne rendendo invisibili alcune parti (che chiameremo interne o private)

Oltre che al controllo della dipendenza, permette anche di evitare l'accesso non controllato rendendo più “affidabile” l'uso delle classi stesse

Page 22: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

22

Analogia con il mondo reale

Gli oggetti di uso più comune (lavatrice, radio etc.) vengono incapsulati per rendere inaccessibili la parte interna. L'involucro (oltre a una funzione estetica che non ci interessa) permette di aumentare la semplicità d'uso dell'oggetto stesso e ne impedisce un uso improprio.

Page 23: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

23

In pratica?

public class PRodott{private String nome;…private boolean isScaduto(){... }...public String getNome(){...}public double getPrezzo(){...}...} Dipendenza

Page 24: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

24

Java BeanConvenzione Javanon ci sono campi (variabili d'istanza) pubblici;

public Type getNome()proprietà in lettura “nome” di tipo Typepublic void setNome(Type a)proprietà in scrittura “nome” di tipo Type(se il tipo è boolean get diventa is) public Oggetto () definito il costruttore di default

Page 25: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

25

Ridurre dipendenza

public class Prodotto{ String nome; Lotto lotto; public String getNome(){return nome;} public void setNome(String n) {nome=n;} public boolean isScaduto() {return now().after(lotto.getScadenza()); } ...}

Page 26: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

26

Come riduce dipendenza?

Contrariamente a quanto previsto, si scopre che la data di scadenza non è la stessa per tutti i prodotti dello stesso lotto.

Per questa ragione viene aggiunta anche la data di scadenza al singolo prodotto.

Page 27: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

27

Come riduce dipendenza?

public class Prodotto{ String nome; Calendar scadenza; public String getNome(){return nome;} public void setNome(String n) {nome=n;} public boolean isScaduto() {return now().after(scadenza);} ...}

Page 28: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

28

Come riduce dipendenza?

Anche se l'implementazione della classe è cambiata (aggiunta di un attributo e modifica di un metodo), dato che la parte pubblica (interfaccia) non è cambiata, le altre classi non vengono influenzate da questa modifica.

Page 29: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

29

Quali classi?

Serve una classe per gli ScaffaliChe vantaggi e svantaggi ci sono?E per i Clienti Hanno bisogno di una classe o

basta una Stringa?Primo passo del progetto è elencare tutte le

classiSecondo è stabilire le relazioni tra classi

Page 30: Programmazione a Oggetti Modulo B - dsi.unive.itpo/2011/SlidesB/Lezione1.pdf · seguendo i paradigmi della programmazione a oggetti. Inizieremo oggi cercando di capire come ... 2)

30

Tipi di relazioni (*)

Estensione (IS-A)

Associazioni

Dipendenze (uso di attributi)


Recommended