13.07.2015 Views

Paradigmi di Programmazione

Paradigmi di Programmazione

Paradigmi di Programmazione

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

!"#$%&&'()#*%+%+!"#$"',,'()#*%+-")%*&'&'+'$.)+-$$%&&)!"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9Slide 1<strong>Para<strong>di</strong>gmi</strong> <strong>di</strong> <strong>Programmazione</strong>! Un linguaggio supporta uno stile <strong>di</strong> programmazionese possiede funzioni che ne rendono conveniente(semplice, sicuro, efficiente) l’uso:• librerie standard• ambienti <strong>di</strong> programmazione• controlli in compilazione e/o in esecuzioneSlide 2


<strong>Programmazione</strong> Procedurale! Definire le procedureI linguaggi supportano questo para<strong>di</strong>gma seforniscono la possibilità <strong>di</strong>:• passare argomenti• restituire valoriSlide 3<strong>Programmazione</strong> Modulare! Definire i moduli/%'.)(('()#*%++++++++++++++++++++++-"$'*)(('()#*%0%..%+1"#2%03"%+++++++++++++++++++0%)+0'&)• Modulo: insieme <strong>di</strong> procedure poste in relazione aidati che utilizzano (pila, lista, ...)• Risulta sufficiente lo stile <strong>di</strong> programmazioneprocedurale se non esiste la necessità <strong>di</strong> definire uninsieme <strong>di</strong> procedure con dati associatiSlide 4


Tipo <strong>di</strong> Dato Astratto! Definire tipi <strong>di</strong> dato e insieme completo <strong>di</strong> operazioni• I tipi <strong>di</strong> dato astratto (o tipi definiti dall’utente) presentanocaratteristiche simili ai tipi <strong>di</strong> dato predefiniti dal linguaggio• visibilità, controlli in fase <strong>di</strong> compilazione, ecc.• Se non esiste la necessità <strong>di</strong> più istanze <strong>di</strong> un tipo <strong>di</strong> datoastratto, risulta sufficiente lo stile <strong>di</strong> programmazione con“dati nascosti” (programmazione modulare)• Il tipo <strong>di</strong> dato astratto è, in generale, poco flessibile; non èpossibile adattarlo ad un nuovo utilizzo, se nonmo<strong>di</strong>ficandone la definizione.Slide 5Para<strong>di</strong>gma <strong>di</strong> <strong>Programmazione</strong> ad Oggetti! Occorre uno strumento che consenta <strong>di</strong> operare una<strong>di</strong>stinzione tra le proprietà <strong>di</strong> tipi <strong>di</strong> dati più generali e leproprietà specifiche <strong>di</strong> singoli sottotipi• Nota: se non vi è alcuna similitu<strong>di</strong>ne tra i tipi del problema è sufficientel’astrazione <strong>di</strong> dato.<strong>Programmazione</strong> Orientata agli Oggetti! Analisi del problema in termini <strong>di</strong> concetti (oggetti) che locostituiscono (modello concettuale del problema)Slide 6


Para<strong>di</strong>gma <strong>di</strong> <strong>Programmazione</strong> ad Oggetti! Intende promuovere nei programmi caratteristiche ritenute fondamentali:• Modularità• Information hi<strong>di</strong>ng (incapsulamento)• Riusabilità• Progettazione incrementale• Rapida prototipizzazione! I linguaggi <strong>di</strong> programmazione orientati agli oggetti sono accomunati datre fattori:!"-':40&'8,"5% ;


Concetto <strong>di</strong> Classe! “Entitá”/tipo che definisce leproprietà (attributi, meto<strong>di</strong>) cheaccomunano una famiglia <strong>di</strong>oggetti:• Uno stesso insieme <strong>di</strong> operazioni• Una stessa struttura esterna• Uno stesso comportamento! Consente la creazione <strong>di</strong>istanze (oggetti)! Riunisce proprietà dei tipi <strong>di</strong>dato e dei moduliSlide 9Classi e Istanze (Oggetti)! Un oggetto è un’istanza <strong>di</strong> una classe (che è il suo tipo ed ilmodulo che ne regola l’accesso).• Istanziare un oggetto <strong>di</strong> una determinata classe significa:• Dichiarare una variabile <strong>di</strong> quel tipo• Allocare <strong>di</strong>namicamente spazio per un oggetto <strong>di</strong> quel tipo• Oggetti della stessa classe hanno operazioni uguali (meto<strong>di</strong>), maspecifici valori per gli attributi (dati <strong>di</strong>versi).• Un metodo può accedere ai dati dell’oggetto (parte privata delmodulo).! Come si in<strong>di</strong>ca al metodo su quale oggetto agire ?• Istanza corrente <strong>di</strong> un oggetto (this o self).Slide 10


Classi- double x- double y- numOfPointsPoint+ Point(double x, double y)+ void move(double dx, double dy)+ int howMany()! Una classe Point,espressa nellanotazione standardUML (Unified ModelingLanguage).• Dati privati.• Funzioni pubbliche.• Membri <strong>di</strong> istanza.• Membri <strong>di</strong> classe.Slide 13OggettiaPoint:Pointx:double = 1.3y:double = -5.8! Un oggetto innotazione UML.• Un oggetto è un’istanza<strong>di</strong> una classe (che è ilsuo tipo ed il modulo chene regola l’accesso).• Un oggetto ha strutturaed operazioni della suaclasse, ma specificivalori per gli attributi.Slide 14


Ere<strong>di</strong>tarietà! L’ere<strong>di</strong>tarietà è un meccanismo base della OOP,ma ha più aspetti <strong>di</strong>versi.! La prima <strong>di</strong>stinzione da fare è tra ere<strong>di</strong>tarietà <strong>di</strong>interfaccia ed ere<strong>di</strong>tarietà <strong>di</strong>implementazione.Slide 15Subtyping! Se le classi sono tipi, l’ere<strong>di</strong>tarietà è unarelazione tra tipi, che chiamiamo subtyping.! Se il tipo C è un sotto-tipo del tipo B, cosasignifica C is-a B ?• Tutto quello che posso fare ad un B lo posso fareanche ad un C.! Principio <strong>di</strong> Sostituibilità <strong>di</strong> Liskov.Slide 16


Inheritance! L’ere<strong>di</strong>tarietà è una relazione tra moduli, chechiamiamo inheritance.! L’inheritance garantisce l’Open/Closed Principle.• Un sotto-modulo avrà accesso privilegiato al modulobase (accesso protected in C++ e Java).• Un sotto-modulo potrà cambiare o estenderel’implementazione del modulo base.Slide 17Sintassi per l’ere<strong>di</strong>tarietà in Java!"#$%"&'%$("&%)'*+Shapepublic abstract class Shape {// …}class Square extends Shape {// …}Circle Triangle SquareSlide 18


Sintassi per l’ere<strong>di</strong>tarietà in Java,-.*$-$%#+/&'%$("&%)'*+«interface»Shapepublic interface Shape {// …}class Square implements Shape {// …}Circle Triangle SquareSlide 19Sintassi per l’ere<strong>di</strong>tarietà in Java0$1&2+/&'%$(-3*#&.*+public abstract class Shape {// ...}Shape«interface»Persistentpublic interface Persistent {// ...}Circle Triangle Squareclass Square extends Shapeimplements Persistent {// ...}Slide 20


Gerarchie <strong>di</strong> ere<strong>di</strong>tarietà…ObjectComponent…GenericoButton Checkbox Choice List ScrollbarCanvas Container Label TextComponentPanelAppletScrollPane WindowDialog FrameFileDialogTextAreaTextFieldSpecializzatoSlide 21Polimorfismo! Il polimorfismo è una caratteristica essenziale deilinguaggi orientati agli oggetti.! Permette <strong>di</strong> trattare in modo uniforme tipi “simili”,ma rispettandone le <strong>di</strong>fferenze.! Spesso il polimorfismo si usa per garantire ilSingle Choice Principle.Slide 22


Polimorfismo! Si in<strong>di</strong>viduano delle operazioni comuni per interfaccia, ma<strong>di</strong>verse per comportamento.! Una classe <strong>di</strong>chiara la funzione e delle sottoclassi neforniscono <strong>di</strong>verse implementazioni.Shape+ void draw(GC& aCtx)Circle Triangle Square+ void draw(GC& aCtx) + void draw(GC& aCtx) + void draw(GC& aCtx)Slide 23Polimorfismo! Per il Principio <strong>di</strong> Sostituibilità:• Un riferimento <strong>di</strong> tipo Shape può puntare a oggetti <strong>di</strong>tipo Shape o <strong>di</strong> una sottoclasse.! Esiste un tipo statico ed un tipo <strong>di</strong>namico:/+:%#45'5+-%#5+:%#7,&#)+=,)+8,"5%>#7+-?+')'5%#'#-%8:+&,#5+8,/+:%#7+"'8+-%#######5+:%#7,&&@%AA,55%#:0"5'5%#'#)0" 5+8,Slide 24


OOP! Le tecnologie OO permeano tutto il ciclo <strong>di</strong> sviluppo delsoftware• OOA - (Object Oriented Analysis)• OOD - (Object Oriented Design)• OOP - (Object Oriented Programming)! Le soluzioni proposte dalla OOP nascono daconsiderazioni generali <strong>di</strong> Ingegneria del Software.• Le tecnologie orientate agli oggetti cercano <strong>di</strong> favorire laprogettazione <strong>di</strong> software <strong>di</strong> qualità.Slide 27

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!