Newsgroup: it.comp.programmare
Titolo: Spiegazioni sul concetto di "oggetto"

siccome sulla programmazone classica (non a oggetti) sono ad un buon
livello, vorrei sapere se c'è qualche risorsa web utile a spiegare in poche
parole cosa si intende e come funziona la programmazione orientata agli
oggetti - una spiegazione del concetto - del perche' si usa
grazie

Halo ha scritto:

allora, mi sembra che su 
programmazione.it
 ci siano guide abbastanza 
complete. se ti accontenti di un'infarinatura generale e sicuramente 
incompleta, ecco.
il concetto di oggetto e' piu' o meno come il concetto di automobile. tu 
sai guidare un'automobile perche' il costruttore ti fornisce 
un'interfaccia standard cosicche' ti devi preoccupare solo di 
schiacciare i pedali, girare il volante e cambiare le marce senza 
preoccuparti di come effettivamente tutte queste cose funzionino 
all'interno dell'auto. premendo l'acceleratore l'auto va piu' veloce ma 
non ti devi preoccupare se quel motore e' un benzina, una turbina a 
reazione, un cinese che pedala o un monometilidrazina, quello sta al 
produttore deciderlo. analogamente sai leggere il tachimetro, 
l'indicatore del carburante e una fila di altre cose utili e che 
presumibilmente troverai in tutte le automobili.
l'oggetto, in questo caso, realizza il concetto di incapsulamento ovvero 
fornisce una serie di proprieta' (quantita' di carburante) e metodi 
(volante) in modo da poter essere istruito su cosa fare su di esso o su 
eventuali dati. in sostanza, se vuoi ordinare un array di dati, potresti 
invocare il metodo sort su un oggetto di tipo array e l'oggetto 
ricerchera' al suo interno la procedura da eseguire e la eseguira'.
inoltre, non vorrei sbagliare - non ho studiato filosofia - ma questa e' 
un concetto che per primo era stato formulato da Platone: nel senso 
comune esiste una idea di automobile pero', concretamente, vediamo 
centinaia di implementazioni diverse della stessa idea, a chi piace 
sportiva, a chi piace solida, a chi piace elegante e via cosi'. pero' 
ogni modello di auto "eredita" certe caratteristiche (tipo le ruote, il 
volante, il motore) da un'"idea" di automobile. Da notare che l'idea di 
automobile non specifica come queste caratteristiche siano realizzate, 
semplicemente dice che un'automobile deve averle. stara' al costruttore 
"estendere" l'idea di automobile secondo i suoi gusti e le sue 
capacita'. in questo caso l'idea si chiama "classe madre" (o padre, a 
seconda dei gusti :). a questo punto anche l'automobile e' una classe 
anche se, piu' probabilmente, nel caso di un'auto, sarebbe piu' 
appropriato chiamarla oggetto. la distinzione qui e' molto labile. 
possiamo in generare chiamare classe una classe che fornisce una serie 
di metodi per operare su dati od oggetti di altro tipo. una cassetta 
degli attrezzi, insomma. chiamiamo una classe oggetto quando questa, al 
suo interno, non solo fornisce dei metodi ma contiene anche dei dati che 
sono accessibili dall'esterno o meno. nel caso specifico un'auto e' un 
oggetto perche' fornisce il volante ma anche l'informazione sul 
carburante. una cassetta degli attrezzi e' una classe perche' fornisce 
metodi per operare su altri dati ma non contiene dati su cui operare. mi 
tornerebbe un po' male se il produttore, oltre alla chiave inglese, mi 
vendesse anche un bullone... non avrebbe molto senso ;)
l'esempio della cassetta degli attrezzi e' anche un ottimo caso di 
modularita'. e' vero che ci parlano di modularita' e riutilizzabilita' 
anche quando scriviamo una funzione in C. il fatto e' che quella 
funzione, una volta compilata, non la puoi staccare dal programma e 
riportarla pari pari in un altro programma. devi prendere il codice e 
ricompilarlo assieme al secondo programma. se invece ti passassero una 
classe o un oggetto gia' compilato (tipo l'auto, non e' che te la 
vendono in scatola di montaggio) tu puoi assolutamente prenderli e 
usarli in un altro programma solo preoccupandoti di usare metodi e 
proprieta' correttamente.
concetti generali, mi saro' perso qualcosa e in proposito chiedo agli 
altri, se vogliono, di integrare. pero' in buona sostanza questo e' 
quello che permette la famigerata OOP. ci sono rimasto un po' male nello 
scoprirlo visto che programmavo in VB praticamente da quanto e' uscita 
la versione 2 e non avevo mai pensato che tutti quei puntini 
significassero proprio chiamare metodi e proprieta' di un oggetto.
ora, velocemente, ecco un esempio in non so che linguaggio (scrivo a 
caso :) di oggetto:
class dog:
	properties:
	public colour furColour
	public boolean hasFleas
	methods:
	public method bark() returns void
	private method scratch() returns boolean
	constructor:
	public dog(colour c):
		colour = c
		randomly hasFleas = scratch()
	bark():
		writeline("ARF!")
	scratch():
		writeline(">scratch<")
		return random(true, false)
bene, ora se tu crei il tuo cane gli puoi dire di abbaiare mentre lui, 
casualmente, si grattera' e impostera' la proprieta' hasFleas con vero o 
falso che tu potrai leggere e sapere se il tuo cane ha bisogno di un 
lavaggio antipulci oppure no :) una eventuale classe che implementa il 
lavaggio antipulci potra' accedere alla proprieta' hasFleas del tuo cane 
(visto che e' pubblica) e settarla a false (oppure true nel caso il 
lavaggio non sia stato sufficiente).
-- 
Morpheu5