programmazione ad oggetti
TRANSCRIPT
LaLa Programmazione Programmazione
Orientata Orientata agliagli Oggetti Oggetti
(O.O.P.)
Object-Oriented Programming
Programmazione
imperativaimperativa
algoritmoalgoritmo
si basa sul concetto di :
Sappiamo che la
Insieme di istruzioni
che a partire daidati di input
permettono di ottenere dei risultati in output
Come si programma :
Applicando i principi della programmazione strutturata:
•metodologia di analisi Top-Down
• Strutture di controllo
-sequenza
-selezione
-iterazione
La Programmazione
si fonda invece sul concetto di :
orientata agli oggettiorientata agli oggetti
in cui ogniogni componenteè caratterizzato da
proprietà (attributi )
eazioni (metodi )
sistema sistema è un’insiemedi
entitàinteragenti
(oggetti )
sistemasistema
Come si programma in O.O.P. ?
… applicando i principi della programmazione strutturata
cioè ...
•metodologia di analisi Top-Down
•strutture di controllo
-sequenza
-selezione
-iterazione
Quindi quello che cambia è solamente del problema...
la visionela visione
algoritmoalgoritmo
sequenzasequenza interazioneinterazione
sistemasistema
Per cui è necessario individuare :
•le entità (gli oggetti) presenti all’interno del sistema
•le modalità di interazione reciproca
Non a caso si parla di programmazioneorientata agli oggetti
Programmi Programmi Algoritmi Algoritmi dati dati +
Per la risoluzione di un Problema
metodi metodi attributi attributi Oggetti Oggetti +
Per la gestione di un Sistema
Programmazioneimperativaimperativa
Problema complesso
Problema complesso
scomposizione in
procedurescomposizione in
procedurescomposizione in
entità interagenti(oggetti)
scomposizione in
entità interagenti(oggetti)
Sistema complesso
Sistema complesso
orientata agli oggettiorientata agli oggettiProgrammazione
ricapitolando...
Classi di oggettiClassi di oggetti
e
OggettiOggetti
(secondo il formalismo UML)
OggettoOggetto = istanzaistanza di una ClasseClasse
automobileautomobile
velocitàcolore
livello carburanteposizione marcia
velocitàcolore
livello carburanteposizione marcia
avviaaccelera
girafermati
cambia marciarifornisci
avviaaccelera
girafermati
cambia marciarifornisci
ClasseClasseFord Focus 1.4
Velocità = 108colore = nero
livello carburante = 15,6posizione marcia = 5
oggetto
Fiat Punto 60
Velocità = 65colore = verde
livello carburante = 32,4posizione marcia = 3
oggetto
nome classe
attributo1 attributo2 attributo3 attributo4
metodo1 metodo2 metodo3 metodo4 metodo5 metodo6
Diagramma delle Diagramma delle ClassiClassi
automobileautomobile
velocitàcolore
livello carburanteposizione marcia
velocitàcolore
livello carburanteposizione marcia
avviatiaccelerasterza
spegniticambia marcia
frena
avviatiaccelerasterza
spegniticambia marcia
frena
caratteristiche specifiche
comportamenti generali
Ford Focus 1.4
Velocità = 108colore = nero
livello carburante = 15,6posizione marcia = 5
nome oggetto
attributo 1 = val1 attributo 2 = val2 attributo 3 = val3 attributo 4 = val4
Diagramma degli Diagramma degli OggettiOggetti
Ferrari GA 04
Velocità = 83colore = rosso
livello carburante = 85,1posizione marcia = 2
cambiano le caratteristiche specifiche a
seconda dell’oggetto istanziato
( i comportamenti non ci sono perché comuni a tutti gli oggetti appartenenti a quella classe )
ClassiClassi
. . EreditarietàEreditarietà ee GerarchiaGerarchia di ereditarietàdi ereditarietà
. . TipiTipi di ereditarietàdi ereditarietà
. . PolimorfismoPolimorfismo
EreditarietàEreditarietà
automobile a gasautomobile a gas
velocitàcolore
livello carburanteposizione marcia
tipo di gas
velocitàcolore
livello carburanteposizione marcia
tipo di gas
avviaaccelerasterzafrena
cambia marciaaccendi luci
scambia gas-benz.
avviaaccelerasterzafrena
cambia marciaaccendi luci
scambia gas-benz.
NuovaNuova Classe Classe
automobileautomobile
velocitàcolore
livello carburanteposizione marcia
velocitàcolore
livello carburanteposizione marcia
avviaaccelerasterzafrena
cambia marciaaccendi luci
avviaaccelerasterzafrena
cambia marciaaccendi luci
ClasseClasse
classe genitrice
costruisco nuove classi partendo da quelle già esistenti
Gerarchia Gerarchia di ereditarietàdi ereditarietà
Mezzi di trasporto
Veicoli a motore Mezzi non a motore
Auto a gas
Barca Auto Moto CavalloBici
Gerarchia Gerarchia di ereditarietàdi ereditarietà
Mezzi di trasporto
Veicoli a motore
Auto a gas
Barca Auto Moto Classe
Sopraclasse (o Superclasse)
Sottoclasse
Classe
Sopraclasse (o Superclasse)
Sottoclasse
Classe
Sopraclasse (o Superclasse)
Tipi Tipi di ereditarietàdi ereditarietà
Eredità singola
Eredità multipla
Mezzi non a motore
CavalloBici
AnimaliMezzi non a motore
Cavallo
Mezzi di trasportoMezzi di trasporto
velocitànumero persone
senza patente
velocitànumero persone
senza patente
Veicoli a motoreVeicoli a motore
consumoconsumo
accendi spegni
accelerafrena
accendi spegni
accelerafrena
MotoMoto
cupolinonumero ruote
cupolinonumero ruote
piegaacceleraimpenna
piegaacceleraimpenna
EsempioEsempio di ereditarietàdi ereditarietà
EreditarietàEreditarietà
Classe
Sottoclasse
per Estensione quando la sottoclasse aggiunge nuovi attributi e metodi
1 .
La Sottoclasse si differenzia:
per Ridefinizione quando la sottoclasse ridefinisce i metodi riscrivendone il codice ereditato
( overriding del metodo )
2 .
Polimorfismo Polimorfismo . 1°. 1°
Indica la possibilità per i metodi di assumere forme diverse
(cioè implementazioni diverse) all’interno della gerarchia delle
classi
Veicoli a motore
AutoMoto
accelera accelera
accelera
implementazione
Polimorfismo Polimorfismo . 2°. 2°
Classe AutoClasse Auto
Frena Frena (mano, 3)
Frena Frena ( )
Frena Frena (motore)
parametri
=nome
( overloading dei metodi )
Indica la possibilità per i metodi di assumere forme diverse
(cioè implementazioni diverse) all’interno della stessa classe
OggettiOggetti
. . Attributi Attributi ee Metodi Metodi
. . IncapsulamentoIncapsulamento
. . Struttura Struttura degli oggettidegli oggetti
. . Interazione Interazione tra oggettitra oggetti
. L’interfaccia . L’interfaccia verso l’esternoverso l’esterno
metodimetodimetodimetodiattributiattributiattributiattributiOggettiOggetti +
attributoattributo1 attributo2 attributo3 attributo4
metodometodo1 metodo2 metodo3 metodo4 metodo5 metodo6
Costituiscono la memoria dell’oggetto e consentono di tenere traccia dello stato dell’oggetto
Sono le operazioni che un oggetto è in grado di compiere (comportamenti)
Attraverso i metodi un oggetto può accedere alla sua memoria e modificare il suo stato
OggettiOggetti metodimetodimetodimetodiattributiattributiattributiattributi +
attributiattributi attributiattributiDescrivono le proprietà statiche dell’oggetto
Nella programmazione gli attributi vengono realizzati attraverso l’uso delle variabili utilizzate dall’oggetto per memorizzare i dati
metodimetodimetodimetodiattributiattributiattributiattributiOggettiOggetti +
metodimetodi metodimetodiDescrivono le proprietà dinamiche dell’oggetto
Nella programmazione i metodi vengono realizzati attraverso la scrittura di codice (procedure e funzioni) che implementano le operazioni dell’oggetto
IncapsulamentoIncapsulamento
Viene visto come una scatola nera scatola nera (o blackbox) permettendo così il
mascheramento dell’informazione mascheramento dell’informazione ( ( information hidinginformation hiding )
La proprietà dell’oggetto di incorporare al suo interno attributi e metodi viene detta incapsulamento
metodimetodiattributiattributi
metodiattributiSezione PubblicaPubblica
Sezione PrivataPrivata
L’oggetto è quindi un contenitorecontenitore sia di strutture dati e sia di procedure che li utilizzano
Sezione PubblicaPubblica attributiattributi e e metodimetodi che si vogliono rendere visibilivisibili all’esterno
( e quindi utilizzabili dagli altri oggetti )
pubblicapubblica
Struttura Struttura degli oggettidegli oggetti
privataprivata
Sezione PrivataPrivata attributiattributi e e metodimetodi che non sono accessibilinon sono accessibili ad altri oggetti
( e quindi si rendono invisibili all’esterno )
L’interfaccia L’interfaccia verso l’esternoverso l’esterno
Un oggetto può essere utilizzato inviando ad esso dei messaggi
Ambienteesterno
L’interfaccia non consente di vedere come sono implementati i metodi, ma ne permette il loro utilizzo e l’accesso agli attributi pubblici
L’insieme dei messaggiL’insieme dei messaggi rappresenta l’interfaccial’interfaccia di quell’oggetto
Sezione
PubblicaPubblica
avvia( )accelera( )sterza( )frena( )
liv.carburantevelocità
Sezione
PrivataPrivata
?
Interazione Interazione fra gli oggettifra gli oggetti
Un programma ad oggettiprogramma ad oggetti è caratterizzato dalla presenza di tanti oggetti che interagisconointeragiscono fra loro attraverso il meccanismo dello
Ferrari GA 04
Velocità = 83colore = rosso
liv.carburante = 85,1posizione marcia = 2
Schumacher
Data Nascita = 3/1/69nazione = germania
peso = 74altezza = 174
scambio di messaggiscambio di messaggi
Metodi:accelera( )sterza( )frena( )
Messaggi:
FerrariGA2004.accelera( )
FerrariGA2004.frena( )
metodimetodi metodimetodi
Quando un oggetto invoca un metodo di un altro oggetto ?
Interazione Interazione fra gli oggettifra gli oggetti
• quando vuole avere un’informazione sul secondo oggetto
• quando vuole modificare lo stato del secondo oggetto
( in sostanza conoscere o modificare il valore dei suoi attributi )
Ferrari GA 04
Velocità = 83colore = rosso
liv.carburante = 85,3posizione marcia = 2
giri motore = 8700
Schumacher
Data Nascita = 3/1/69nazione = germania
peso = 74altezza = 174
Es. di scambio di messaggiEs. di scambio di messaggi
Metodo: accelera( )FerrariGA04.accelera( )
Serbatoio
quantità = 85,3tipo benz. = superF1
riserva = 15peso = 77,3
Serbatoio.diminuisci( )
Attributi: velocità = 92giri motore= 9300
Metodo: diminuisci( )
FerrariGA04.liv.carburante = 85,1
Attributo: quantità = 85,1
Attributo: liv.carburante =85,1
A B
C
A
B
C
Nuova MetodologiaNuova Metodologia
Per costruire un programma orientato agli oggetti occorre:
. Stabilire come gli oggetti interagisconointeragiscono fra loro.
. Definire le classiclassi, indicando gli attributiattributi e i metodimetodi
. Identificare gli oggettioggetti che caratterizzano il modello del problema
orientati agli oggettiorientati agli oggettiLinguaggi Linguaggi di programmazionedi programmazione
Linguaggi PuriPuri ogni cosa è un oggettoogni cosa è un oggetto
( ...anche un numero intero è definito come oggetto )
. SmalltalkSmalltalk
. Eiffel. Eiffel
Linguaggi ibridiibridi alcuni tipi di dati non sononon sono oggetti
( maggiore libertà a scapito di una maggiore chiarezza )
. C++C++
. Java . Java
. Visual Basic. Visual Basic
. Delphi. Delphi
# include <iostream.h>
class Base {
friend void funzione {Base&};
public:
int pubblico;
void Pubblico() {cout <<‘Pubblico: ‘<<pubblico<<end1;};
private:
int privato;
void Privato() {cout <<‘Pubblico: ‘<<pubblico<<end1;};
protected:
int protetto;
void Protetto() {cout <<‘Protetto: ‘<<protetto<<end1;};
};
void funzione{Base &istanza} {
istanza.pubblico =1;
istanza.privato =2;
istanza.protetto=3;
istanza.Pubblico();
istanza.Privato();
istanza.Protetto();
}
void main() {
Base istanzabase;
istanzabase.pubblico =10;
funzione(istanzabase);
}
C++C++
import java.applet.*;
import java.awt.*;
public class semplice extends Applet
{
private TextArea ta;
private Label l;
public void init()
{
ta = new TextArea(10,8);
l = new Label(“numeri casuali”, Label.CENTER);
l.setBackground(Color.Yellow);
setLayout(new BorderLayout());
add(l, “center”);
add(ta “east”);
generaNumeri();
}
Public void generaNumeri()
{
int casuale;
for (int i=1; i<=10; i++)
{
casuale = (int (Math.random()*1000);
ta.append(“-> ”+casuale+”\n”);
}
}
}
JavaJava
Private Sub Command1_Click()
N = Val(InputBox(“Numero di cui vuoi la radice quadrata :”,”Radice Quadrata”))
Msg = “La radice quadrata di “& N
SqrN = RadiceQ(N)
Select Case SqrN
Case 0
Msg = Msg & “è zero.”
Case –1
Msg = Msg & “è un numero immaginario.”
Case Else
Msg = Msg & “è” & SqrN
End Select
MsgBox Msg
End Sub
Visual BasicVisual Basic
unit somma;
Interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1 : TButton;
Edit1 : TEdit;
Edit2 : TEdit;
Edit3 : TEdit;
Button2 : TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit3.text := IntToStr(StrToInt(Edit1.text) + StrToInt(Edit2.text));
end;
end.
DelphiDelphi