Primi principi della OOP

Slides:



Advertisements
Presentazioni simili
Il paradigma Object Oriented
Advertisements

Programmazione ad oggetti
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità B1 Le basi della programmazione a oggetti.
Oggetti Java.
Recupero debito quarto anno Primo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Recupero debito quarto anno Primo incontro Esercizi
PHP.
Programmazione object oriented in C++
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
Funzioni definite dall’utente
JAVASCRIPT DIFFERENZA TRA JAVASCRIPT E JAVA TAG LO SCRIPT OGGETTI LE CLASSI FUNZIONE GESTORE DI EVENTI ELEMENTI DEL LINGUAGGI è un vero e proprio linguaggio.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Overriding.
Programmazione Corso di laurea in Informatica
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
CAPITOLO 3 ELEMENTI DI PROGRAMMAZIONE OBJECT-ORIENTED.
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Java base IV: Java e la programmazione O.O.
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Componenti fondamentali di un programma Java
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Introduzione alla programmazione Object Oriented
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
Programmazione a oggetti
OOP Object Oriented Programming Programmazione Orientata agli Oggetti
Programmazione ad oggetti
Lezione 1 Panoramica sui paradigmi di programmazione
Incapsulamento e information hiding
Programmazione ad oggetti
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
La Programmazione ad Oggetti
Attività 1 Introduzione alla OOP
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
La programmazione ad oggetti
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
13/08/02Input 1 Interagire con il computer Da tastiera Da riga di comando Funzioni di conversione.
UML Unified Modelling Language Linguaggio per la modellazione unificato.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Primi principi della OOP Incapsulamento, information hiding, overloading

Origini e sviluppo OOP Nasce come risposta a tutti i problemi legati alla produzione di programmi complessi che le tecniche di progettazione tradizionale di tipo procedurale non avevano risolto Punti distintivi: Considerare modelli di dati e algoritmi simultaneamente e non più in modo separato Consentire il riutilizzo di software già sviluppato nelle nuove applicazioni Descrive la realtà mediante modelli di dati “vicini” al modo naturale di pensare dell’uomo

Evoluzione Anni ‘60: Con i primi studi sull’intelligenza artificiale compare il principio che l’uomo sviluppa il proprio pensiero logico utilizzando oggetti Anni ‘70: Alan Kay crea il primo linguaggio object oriented, Smalltalk, che sviluppa a livello di codifica il concetto di oggetto Anni ’80 Le nuove tecniche si diffondono con C++ e con Visual Basic Anni ‘90: Java

Applicazioni OOP Attualmente le tecniche OO sono molto diffuse nelle seguenti applicazioni: Gestione di basi di dati Gestione di interfacce grafiche Sistemi multimediali (gestione di immagini, testi, animazioni, suoni e video) Applicazioni per reti di calcolatori

Progettazione procedurale e OO Il progetto si presenta come un insieme di classi di oggetti che incapsulano al loro interno sia i modelli dei dati che le operazioni (metodi). Il progetto è formato dal modello dei dati e dall’algoritmo risolutivo

Classe di oggetti Nella programmazione OO, una applicazione è composta da un insieme di CLASSI che rappresentano OGGETTI del mondo reale che interagiscono tra di loro. Una classe è una astrazione (idea astratta o modello) che definisce un insieme di OGGETTI di uno stesso tipo, ovvero una famiglia di oggetti aventi caratteristiche e comportamenti simili la classe è costituita da attributi e metodi gli attributi indicano le caratteristiche o proprietà che distinguono ogni esemplare della classe I metodi sono le funzionalità dell’oggetto, cioè i comandi che possono essere impartiti ad ogni esemplare della classe

Classi, attributi e metodi Classe: Automobile (entità astratta, modello generico di automobile); ogni automobile è caratterizzata da un colore, da una marca, da un modello, da una cilindrata,.....: sono gli attributi della classe ogni automobile può avviarsi, fermarsi, sterzare, accelerare, etc... : sono i metodi della classe

Oggetto o istanza “la mia auto” , "la tua auto", "l'auto del presidente", sono esemplari della classe Automobile presentano tutte le medesime proprietà e i medesimi comportamenti: hanno un colore, un modello, una marca, una cilindrata, si avviano, si fermano, sterzano, accelerano, ecc.... si dice che la classe è il modello (blueprint), lo stampino degli oggetti. un'istanza (o oggetto) di una classe corrisponde ad un esemplare reale, fabbricato da quel modello (da quello stampino) ogni istanza della classe ha caratteristiche e comportamenti comuni, ma si differenzia per i valori assunti dalle sue proprietà. Tutte le automobili hanno una marca, un modello, un colore, una cilindrata e possono avviarsi, frenare, sterzare, ecc.., ma la cilindrata, il colore, la marca e il modello variano da oggetto ad oggetto In ogni istanza le proprietà assumono valori.

Esempio Classe Automobile Proprietà Istanza1 Istanza2 marca modello colore alimentazione numero porte cilindrata targa ……….. Metodi avviati accelera cambia (numero marcia) frena fermati sterza (direzione) ……. Istanza1 miaAuto Proprietà marca="Fiat" modello="Punto" colore="verde" alimentazione="benzina" numero porte=5 cilindrata=1300 targa="....." Istanza2 tuaAuto marca="Opel" modello="Astra" colore="rosso" alimentazione="diesel" numero porte=5 cilindrata=1800 targa="....."

Test Fido e Pluto sono cani. Quale è l’oggetto e quale è la classe? Perché? Risposta Fido e Pluto sono oggetti (o istanze) della classe Cane; hanno stato diverso (ad esempio nome diverso, età diversa, colore diverso, razza diversa) e comportamento uguale (stessi metodi: corre, abbaia, salta, azzanna, mangia).

Metodi, attributi e stato Classe Quadrato un quadrato è caratterizzato da un lato; del quadrato possiamo calcolare l'area e il perimetro Proprietà / Attributi lato Comportamento / Metodi calcolaArea calcolaPerimetro Istanza / Oggetto alla classe Quadrato appartengono oggetti concreti che si differenziano per la misura del lato.

Attività di lettura Considera il seguente testo in linguaggio naturale Red e Toby sono animali. Entrambi mangiano quando hanno fame, si muovono e fanno versi. Red ha il mantello rosso e ha 3 anni ; Toby ha il mantello grigio e ha 4 anni. Individuare classi, oggetti, metodi , attributi e stato

Linguaggio naturale Equivalente Object Oriented Risposta corretta Nomi concreti Oggetti (entità del dominio) Red, Toby Nomi astratti Classi (generalizzazione di oggetti di uno stesso tipo) Animale Verbi Metodi o funzioni membro si muove, ha fame, mangia, fa versi Proprietà Attributi nome, colore, età Valori delle proprietà Stato nome=Red colore=rosso età=3 nome=Toby colore=grigio età=4  

Creazione di istanze e costruttori La creazione di un oggetto (o esemplare) a partire da una classe è chiamata istanziazione o creazione di un'istanza della classe.  Gli oggetti sono creati per mezzo di metodi speciali chiamati costruttori. Il costruttore ha lo stesso nome della classe e non ritorna niente. Possono esserci più costruttori per una classe a patto che prendano parametri diversi Se non viene dichiarato nessun costruttore ne viene creato automaticamente uno che inizializza tutti i campi con valori di default e non riceve argomenti. Si chiama costruttore di default   L'oggetto può essere creato all'interno di un'altra classe oppure del main.

Operatore new In Java si distingue tra la dichiarazione di una istanza e la sua vera e propria creazione, che avviene per mezzo di un operatore che si chiama new che alloca in memoria un nuovo oggetto del tipo richiesto Per esempio se in Java devo creare un'istanza della classe Automobile scriverò: Automobile miaAuto; // dichiarazione: miaAuto identifica un esemplare di Automobile miaAuto=new Automobile(); // creazione: con l'operatore new creo un nuovo esemplare di automobile e lo associo a miaAuto miaAuto è il riferimento (puntatore o reference) all'oggetto di classe Automobile istanziato.

Riferimento Dopo aver creato un oggetto si possono usare o modificare i suoi attributi o eseguire delle operazioni richiamando i suoi metodi. Per fare riferimento agli attributi di un oggetto si utilizzerà la seguente sintassi, basata sulla notazione puntata (dot notation): miaAutomobile.colore indica il colore della mia automobile Per assegnare un valore all'attributo colore (o per modificarlo) scrivo miaAutomobile.colore="verde"; N.B.: in Java miaAutomobile è una variabile riferimento ad un oggetto di classe Automobile, non è l'oggetto stesso! Per far eseguire un'azione all'oggetto utilizzerò ancora la notazione puntata richiamando uno dei metodi nel seguente modo: miaAutomobile.avviati() per avviare l’auto miaAutomobile.cambia(4) per inserire la quarta Generalizzando, scriverò: riferimentoOggetto.attributo riferimentoOggetto.metodo()

Esempio: classe Auto class Auto { // nome classe String marca; //definizione attributi String modello; int cil; int carburante; Auto(){ // definizione costruttore carburante=0; } void avviati(){ //definizione metodo avviati (non ha parametri né restituzione) System.out.println("mi sono avviata"); void rifornimento(int carb) { // metodo rifornimento (con paremetro quantità di carburante) carburante=carburante+carb; } }

Creare istanze La seguente classe TestAuto crea un’istanza di auto e testa alcuni metodi public class TestAuto { public static void main(String args[]){ Auto miaAuto; // dichiarazione riferimento ad Auto miaAuto=new Auto(); //creazione istanza miaAuto.marca="Fiat"; // accede agli attributi utilizzando il riferimento miaAuto.modello ="Punto"; miaAuto.cil=1100; miaAuto.rifornimento(40); //chiama il metodo rifornimento System.out.println("marca "+miaAuto.marca); //accede agli attributi per mostrare il valore System.out.println("modello= "+miaAuto.modello); System.out.println("cilindrata= "+miaAuto.cil); miaAuto.avviati(); //chiama il metodo avviati() } }

Accedere agli attributi Nell’esempio appena visto chi scrive la classe TestAuto che utilizza la classe Auto, modifica il valore degli attributi scrivendo: miaAuto.marca="Fiat"; miaAuto.modello ="Punto"; miaAuto.cil=1100; Questo non è un buon modo di programmare: è come se il programmatore “aprisse” l’oggetto auto e vi “mettesse le mani dentro” Nella realtà chi utilizza un oggetto, “non lo apre” e può non conoscerne i dettagli implementativi

Incapsulamento L'incapsulamento è la proprietà per cui un oggetto contiene ("incapsula") al suo interno gli attributi (dati) e i metodi (procedure) che accedono ai dati stessi. i dati (attributi) di un oggetto possono essere manipolati solo attivando i suoi metodi un metodo è attivato dall’oggetto a fronte di una specifica richiesta di servizio (messaggio) solo l’interfaccia pubblica dell’oggetto, costituita dai servizi che l’oggetto può offrire, è nota all’esterno si comunica con un oggetto inviandogli un messaggio in cui si specifica che cosa si vuole da esso

Visibilità Gli attributi e i metodi possono essere ---> pubblici visibili/accessibili direttamente dall'esterno ----> costituiscono l'interfaccia pubblica dell'oggetto ---> privati non sono visibili/accessibili all'esterno --->information hiding (occultamento delle informazioni) Ogni classe di ha due livelli, uno esterno (pubblico) ed uno interno (privato) Livello esterno o interfaccia pubblica Metodi e attributi visibili all’esterno, definisce i servizi che l’oggetto può fornire Livello interno o privato definisce le proprietà dell’oggetto (i dati) e le modalità di trattamento di questi dati (implementazione dei metodi)

Information hiding Nella programmazione orientata agli oggetti è buona regola occultare gli attributi (lo stato degli oggetti) rendendoli privati e dare accesso ai dati solo attraverso i metodi pubblici . L'occultamento prende il nome di Information hiding. Information hiding e incapsulamento sono due concetti distinti, ma strettamente legati.

Modello dei dati incapsulato

Dichiarazione e implementazione di una classe La costruzione di una classe avviene in due fasi: Dichiarazione o definizione della sua parte privata e pubblica (attributi e metodi) Implementazione dei metodi La visione di una classe è diversa per: Progettisti, che vedono anche l’implementazione interna della classe Utenti (altri progettisti e programmatori), che sono interessati solo all’interfaccia pubblica, con la dichiarazione delle intestazioni dei metodi

Vantaggi interfaccia pubblica Grazie all’interfaccia, gli utenti sono in grado di utilizzare gli oggetti di una classe per: impostare e recuperare il valore degli attributi richiamare i metodi

Visibilità della classe

Vantaggi incapsulamento L'incapsulamento nasconde i dettagli implementativi, impedisce di falsare lo stato dell'oggetto con dei valori non ammessi I valori delle variabili possono essere cambiati solo dall’oggetto e non dall'esterno. L’incapsulamento soddisfa le seguenti esigenze: programmazione molto disciplinata, a vantaggio del riuso e della manutenzione il bisogno di modularità la necessità di distinguere nettamente tra definizione e implementazione di un servizio (metodo)

Classe incapsulata = attributi privati + metodi pubblici I vantaggi principali portati dall'incapsulamento sono: robustezza, indipendenza e l'estrema riusabilità degli oggetti creati. Inoltre la sua manutenzione risulterà più semplice al programmatore.

Esempio Se non dichiaro privato l'attributo 'nome' della classe Animale, il suo contenuto può essere cambiato facilmente senza nessun controllo. Animale fido = new Animale(“Fido”); fido.nome = “Ralph"; // ma non era Fido?? Questa è una violazione dell'incapsulamento. Non abbiamo adeguatamente nascosto la variabile nome da modifiche arbitrarie

La black box L’incapsulamento permette di vedere l'oggetto come una black-box, cioè una scatola nera della quale conosciamo l'interfaccia e sappiamo cosa fa, ma non come lo fa. All'interno della scatola nera sono occultati tutti i suoi meccanismi segreti. Ciò è quello che avviene anche nella realtà. Si pensi ad oggetti comuni quali videogame, computer e automobile: noi non vediamo cosa c'è al loro interno, ma possiamo utilizzarli e interagire con essi. Per es. noi utilizziamo e guidiamo l'oggetto auto senza sapere come essa è fatta al suo interno, ma agendo su di essa attraverso leve, pulsanti, pedali, pulsanti che costituiscono l'interfaccia tra l'oggetto e noi e che ci consentono di attivare tutte le sue funzionalità. Allo stesso modo richiamiamo le diverse funzioni del nostro computer col mouse attraverso un'interfaccia grafica.

Il videogame Noi usiamo il videogame schiacciando dei pulsanti che attivano funzioni: conosciamo e utilizziamo solo la sua interfaccia pubblica

Il telefono Se volessimo fare un altro esempio potremmo prendere in considerazione un telefono. La maggior parte degli utenti, infatti, sa utilizzare il telefono, ma ne ignora il funzionamento interno. Chiunque può alzare la cornetta, comporre un numero telefonico e conversare con un'altra persona, ma pochi conoscono in dettaglio la sequenza dei processi scatenati da queste poche, semplici azioni. Evidentemente, per utilizzare il telefono, non è necessario prendere una laurea in telecomunicazioni: basta conoscere la sua interfaccia pubblica (costituita dalla cornetta e dai tasti), non la sua implementazione interna.

Conto Corrente Bancario Per fare un altro esempio pensiamo ad un conto bancario. Le informazioni utili (le proprietà) potranno essere rappresentate da: numero di conto, saldo, nome del cliente, indirizzo, tipo di conto, tasso di interesse e data di apertura. Le azioni che operano su tali informazioni (i metodi) saranno, invece: apertura, chiusura, versamento, prelevamento, cambio tipologia conto, cambio cliente e cambio indirizzo. L'oggetto Conto incapsulerà queste informazioni e azioni al suo interno. Noi possiamo modificare lo stato del conto (il saldo, per es.) attraverso l'operazione (metodo) di prelevamento o di versamento, e tutto questo senza accedere mai direttamente alla cassaforte della banca. Allo stesso modo è possibile interagire con l'oggetto attraverso la sua interfaccia pubblica, costituita da metodi pubblici.

Implementazione e segnatura L'implementazione dei metodi, ovvero il loro codice, è sempre nascosta; può essere visibile solo l'interfaccia, ovvero la firma o segnatura (la definizione). Allo stesso modo quando avviamo l'automobile dobbiamo solo sapere quale chiave girare, ma tutto ciò che accade dopo non lo vediamo e possiamo guidare l'auto anche ignorandolo!

Implementazione dell’incapsulamento Come già detto, a livello di implementazione, si ottiene l'incapsulamento semplicemente dichiarando privati gli attributi di una classe e quindi inaccessibili fuori dalla classe stessa. A tale scopo Java introduce il modificatore di metodo private. L'accesso ai dati potrà essere fornito da un'interfaccia pubblica costituita da metodi dichiarati public e quindi accessibili da altre classi. Se l'incapsulamento è gestito in maniera intelligente, le nostre classi potranno essere utilizzate nel modo migliore e più a lungo, giacché le modifiche e le revisioni potranno riguardare solamente parti di codice non visibili all'esterno.

Definizione di classe senza rispettare il principio dell'incapsulamento Classe Auto (senza rispettare il principio dell’incapsulamento) Classe TestAuto class Auto { public String marca; public String modello; public int cil; private int carburante; public Auto(){ carburante=0; } public void avviati(){ System.out.println("mi sono avviata"); public void rifornimento(int Carb) { Carburante=carburante+Carb; public class Test { public static void main(String args[]){ Auto miaAuto; miaAuto=new Auto(); // accesso diretto agli attributi miaAuto.marca="Fiat"; miaAuto.modello ="Punto"; miaAuto.cil=1100; miaAuto.rifornimento(40); System.out.println("marca "+miaAuto.marca); System.out.println("modello= "+miaAuto.modello); System.out.println("cilindrata= "+miaAuto.cil); miaAuto.avviati();

Definizione di classe rispettando il principio dell'incapsulamento Classe Auto incapsulata Classe TestAuto class Auto { private String marca; private String modello; private int cil; private int carburante; public Auto(){ // costruttore carburante=0; } public void avviati(){ System.out.println("mi sono avviata"); public void rifornimento(int Carb) { carburante=carburante+Carb; //metodi per l'accesso agli attributi privati public void setMarca(String m){ marca=m; public void setModello(String m){ modello=m; public void setCilindrata(int c){ cil=c; public void mostraStato(){ System.out.println("marca "+marca); System.out.println("modello= "+modello); System.out.println("cilindrata= "+cil); System.out.println(“carburante= "+carburante); } } public class Test { public static void main(String args[]){ Auto miaAuto; // dichiarazione //creazione auto miaAuto=new Auto(); // accesso diretto agli attributi miaAuto.setMarca("Fiat"); miaAuto.setModello("Punto"); miaAuto.setCilindrata(1100); miaAuto.rifornimento(40); miaAuto.mostraDati();

Overloading Consente di avere più metodi con definizione e implementazione diversa, ma con lo stesso nome Esempio: Immaginiamo di avere una classe Cane e una classe Gatto. Nella classe Cane possiamo definire i metodi void insegue (Cane c) oppure void insegue (Gatto g) I due metodi hanno stesso nome, ma diversa segnatura (cambia il tipo del parametri) e implementano due comportamenti diversi dello stesso animale

L’operatore “+” Pensiamo ad un operatore aritmetico che ci è molto familiare: il “+”, ovvero l’operatore di somma. la somma può essere fatta su tipi diversi, numeri interi, numeri in virgola mobile e perfino stringhe (in questo caso avremo la concatenazione) si tratta di operazioni diverse, su domini diversi, che presentano però notevole similitudine concettuale in quello che fanno, per cui noi le indichiamo con lo stesso nome In realtà l'uomo è abituato a pensare per similitudini, per cui l'overloading degli operatori, si rivelano un utile meccanismo.

L’istruzione println Un altro esempio di overload riguarda il metodo che in Java prende il nome di println() (ma ci sono istruzioni analoghe in tutti i linguaggi) Esistono almeno una decina di metodi println() diversi. È possibile passare al metodo non solo stringhe, ma anche interi, boolean, array di caratteri o addirittura Object. Anche in questo caso si tratta di metodi diversi con stesso nome e notevoli analogie. Il loro uso ci viene naturale e non ci piacerebbe certo se il linguaggio di programmazione a nostra disposizione ci costringesse ad utilizzare per fare operazioni simili molteplici metodi diversi come, per esempio: printIntero() per stampare interi printReale() per visualizzare numeri reali printString() per visualizzare dati di tipo String

Esempio di implementazione di overloading public class Matematica{ …………………. public int somma(int a, int b) { // somma interi e restituisce un intero return a + b; } public float somma(float a, float b) { // somma reali e restituisce un relae …………………………………… Quale metodo sarà utilizzato? Dipende dal tipo di parametri che verranno passati al momento della chiamata