1
|
2 |
3 |
4
Elenco delle pagine di "Il
linguaggio Java: lez.6"
Introduzione e Unità didattica 5.1) - Pagina 1
Introduzione e Unità didattica 5.2) - Pagina 2
Unità didattica 5.3) - Pagina 3
Unità didattica 5.4) - Pagina 4
Unità didattica 5.5) - Pagina 5
Unità didattica 5.6) - Pagina 6
Obiettivi:
Il Lettore al termine di questo capitolo dovrà essere in grado di
- Comprendere le ragioni della nascita della
programmazione ad oggetti (unità 5.1).
- Saper elencare i paradigmi ed i concetti
fondamentali della programmazione ad oggetti (unità 5.2).
- Saper definire ed utilizzare il concetto di
astrazione (unità 5.2)
- Comprendere l’utilizzo e l’utilità
dell’incapsulamento (unità 5.3, 5.4).
- Comprendere l’utilizzo e l’utilità del
reference this (unità 5.4).
- Comprendere l’utilizzo e l’utilità
dell’ereditarietà (generalizzazione e specializzazione)(unità 5.5,
5.6).
- Conoscere la filosofia di Java per quanto
riguardo la semplicità di apprendimento (unità 5.3, 5.5).
- Conoscere le conseguenze dell’utilizzo
contemporaneo di incapsulamento ed ereditarietà (unità 5.6).
Unità didattica 5.1)
- Breve storia della programmazione ad oggetti
Scrivere un programma, significa
in qualche modo simulare su di un computer concetti e modelli
fisici. Nei primi tempi, la programmazione era concepita come una
serie di passi lineari. Invece di considerare lo scopo del programma
nella sua interezza creandone un modello astratto, si cercava di
arrivare alla soluzione del problema superando passaggi intermedi.
Questo modello di programmazione orientato ai processi, con il
passare del tempo, e, con il conseguente aumento delle dimensioni
dei programmi, ha chiaramente mostrato i suoi difetti. Infatti,
aumentando il numero delle variabili e delle iterazioni tra esse da
gestire, un programmatore in difficoltà, aveva a disposizione
strumenti come le variabili globali, ed il comando goto. In questo
modo, agli inizi degli anni ottanta, per la programmazione
procedurale fu coniato il termine dispregiativo "spaghetti code",
dal momento che i programmi crescendo in dimensioni, davano sempre
più l’idea di assomigliare ad una massa di pasta aggrovigliata.
La programmazione orientata agli oggetti nasce ufficialmente sin
dagli anni sessanta con il linguaggio Simula-67. In realtà non si
trattava di un linguaggio orientato agli oggetti "puro", ma con esso
furono introdotti fondamentali concetti nella programmazione quali
le classi e l’ereditarietà. Fu sviluppato da nel 1967 da Kristen
Nygaard dell’università di Oslo e Ole Johan Dahl del Centro di
Calcolo Norvegese, ed a dispetto dell’importanza storica, non si può
parlare di un vero e proprio successo presso il grande pubblico. Nei
primi anni ’70 nacque lo Smalltalk, sviluppato inizialmente da Alan
Kay all’Università dello Utah, e successivamente, da Adele Goldberg
e Daniel Ingalls allo Xerox Park, centro di ricerca di Palo Alto in
California. Smalltalk si può considerare un linguaggio ad oggetti
"puro", introdusse l’incapsulamento e la release Smalltalk-80 ebbe
anche un discreto successo negli Stati Uniti. A lungo andare però,
sebbene considerato da molti come ideale ambiente di programmazione,
rimase confinato (come Simula) nei centri di ricerca universitari di
tutto il mondo, considerato come oggetto di studio più che
d’utilizzo. L’introduzione nel mondo della programmazione dei
concetti di classe e di oggetto, che, di fatto, rendono i programmi
più facilmente gestibili, non provocò quindi immediatamente una
rivoluzione nell’informatica. Ciò fu dovuto al fatto che proprio
agli inizi degli anni settanta, linguaggi come il C, ottenevano i
migliori risultati implementativi, come ad esempio il sistema
operativo Unix, tutt’oggi ancora utilizzatissimo. Negli anni ’80
però, ci si rese conto della limitatezza della programmazione
strutturata, il che fu essenzialmente dovuto ad una progressiva
evoluzione dell’ingegneria del, che iniziava a realizzare i
programmi con una filosofia incrementale. Linguaggi come il C, come
abbiamo già detto, per apportare modifiche al offrono
strumenti come le variabili globali e il comando goto che si possono
considerare ad alto rischio. Ecco che allora fu provvidenzialmente
introdotta l’estensione del linguaggio C, realizzata da Bjarne
Stroustrup, nota con il nome di C++. Questo nuovo linguaggio
effettivamente ha rivoluzionato il mondo della programmazione.
Essendo un’estensione del C, un qualsiasi programma scritto in C
deve però poter essere compilato da un compilatore C++. Ciò, anche
se ha favorito la migrazione in massa dei programmatori C verso il
C++, si è rivelato anche il limite essenziale del C++. Infatti, si
possono scrivere programmi che fanno uso sia della filosofia ad
oggetti sia di quella procedurale, abbassando così le possibilità di
buon funzionamento dei programmi stessi. Da qui l’idea di realizzare
un nuovo linguaggio che doveva essere "veramente" orientato agli
oggetti. Java, infatti, ci propone uno stile di programmazione che
quasi ci "obbliga" a programmare correttamente ad oggetti. Inoltre,
rispetto al C++, sono state eliminate tutti gli strumenti "ambigui"
e "pericolosi", come ad esempio il famigerato comando goto,
l’aritmetica dei puntatori, e, di fatto, per utilizzare una
variabile globale, ci si deve proprio impegnare! Mentre il C++ ha il
merito di aver fatto conoscere al grande pubblico la programmazione
ad oggetti, Java ha il merito di averne fatto apprezzare l’utilizzo.
La programmazione orientata agli oggetti, è una scienza, o meglio,
una filosofia adattabile alla programmazione. Essa si basa, su
concetti esistenti nel mondo reale, con i quali abbiamo a che fare
ogni giorno. È già stato fatto notare al lettore che gli esseri
umani posseggono da sempre i concetti di classe e di oggetto.
L’astrazione degli oggetti reali in classi, fa superare la
complessità della realtà. In questo modo possiamo osservare oggetti
completamente differenti, riconoscendo in loro caratteristiche e
funzionalità che li accomunano, e quindi associarli ad una stessa
classe. Per esempio, sebbene completamente diversi, un sassofono ed
un pianoforte, appartengono entrambi alla classe degli strumenti
musicali. La programmazione ad oggetti inoltre, utilizzando il
concetto di incapsulamento, rende i programmi composti da classi che
nascondono i dettagli di implementazione dietro ad interfacce
pubbliche, le quali permettono la comunicazione tra gli oggetti
stessi che fanno parte del sistema. È favorito il riuso di codice
già scritto, anche grazie a concetti quali l’ereditarietà ed il
polimorfismo, che saranno prossimamente presentati al lettore.
Elenco delle pagine di "Il
linguaggio Java: lez.6"
Introduzione e Unità didattica 5.1) - Pagina 1
Introduzione e Unità didattica 5.2) - Pagina 2
Unità didattica 5.3) - Pagina 3
Unità didattica 5.4) - Pagina 4
Unità didattica 5.5) - Pagina 5
Unità didattica 5.6) - Pagina 6