Vai al contenuto

Cocoa, C++, Java, Obeject Or.


-YoShi-

Messaggi raccomandati

Dopo una breve esperienza amatoriale col C, da un po vorrei buttarmi sui linguaggi di programmazione orientati agli oggetti.

Mi son letto manuali, libri, pagine internet, ecc.. Ma non c'ho capito una mazza.

Fin ora ho capito che la classe è il gruppo che contiene gli oggetti simili (detti anche istanze della classe)

So che gli oggetti hanno a disposizione dei metodi e delle variabili d'istanza. E che per far funzionare il programma si tratta di mandare dei messaggi a determinati oggetti.

Qualcuno riesce a spiegarmi in maniera terra terra che diavolo sono i metodi e le variabili d'istanza?

Con tutti i doc che mi sono letto ho una confusione in testa allucinante..

Link al commento
Condividi su altri siti

I metodi sono funzioni che richiami sul tuo oggetto e all'interno del metodo puoi utilizzare le tue variabili...questo a grandi linee...precisamente puoi sia utilizzare oggetti e metodi messi a disposizione da classi gia esistenti oppure puoi crearti una tua classe con i tuoi metodi e le relative variabili (il tipo di variabile dipende dalla sua visibilita', se sono relative all'oggetto oppure al metodo,ecc )..spero di averti chiarito un attimino le idee!:D

Ps: qui puoi trovare ,secondo me, un buon manuale che spiega bene i concetti sulla progr OO (lo sto usando pure io per ripassare) :D

:ciao:

www.clams.altervista.org

Un mac....è per sempre!!!! :ok:

Link al commento
Condividi su altri siti

ti facio un esempio molto semplice

hai la classe AUTO

le variabili d'istanza:

COLORE, MARCA, MODELLO.

Con queste puoi definire di che tipo è la tua macchina.

Il primo passo è quello di scrivere il costruttore che non fa altro che prendere le tue variabili e settare le variabili di classe.

per esempio

costruttore(tuocolore,tuamarca,tuomodello){

COLORE=tuocolore;

MARCA=tuamarca;

MODELLO=tuomodello;

}

E' buona norma dichiarare le variabili d'istanza come private ed usare i metodi d'accesso

Per esempio

getColore() { return COLORE; }

Idem per setterle

setColore(tuocolore) { COLORE = tuocolore; }

Poi ci sono i metodi di gestione, per esempio:

accendiAuto();

spegniAuto();

accellera();

frena();

e così via...

Il modo di usare l'oggetto è il seguente:

fiesta = new auto("verde","ford","fiesta");

fiesta->accendiAuto() //nella funzione accendiAuto devi scrivere ciò che fa accendere l'auto

fiesta->accellera() //fa accellerare la tua ford fiesta verde

fiesta->frena() //fa frenare la tua ford fiesta verde

fiesta->spegniAuto() //spegni la tua auto.

Se rivernici la tua fiesta :D

fiesta->setColore("nera");

se invece vuoi sapere di che colore è la tua macchina al momento:

colore = auto->getColore();

Non so se ti ho aiutato o confuso, ma credo che l'esempio sia abbastanza chiaro :ciao:

PS.

Il codice non è in nessun linguaggio, non provare a compilarlo eheh

Link al commento
Condividi su altri siti

Credo di aver capito. Le variabili di istanza sono (nel tuo es. i colori,la marca, ecc. che definisco) nella dichiarazione. I file .h giusto?

Invece i metodi sono come io decido di usare queste variabili per creare.. l'oggetto?

@Cpu86. Un oggetto è della classe lo ho solo quando (dopo averlo dichiarato e definito) lo lancio con "alloc" e "init". Giusto?

Link al commento
Condividi su altri siti

Credo di aver capito. Le variabili di istanza sono (nel tuo es. i colori,la marca, ecc. che definisco) nella dichiarazione. I file .h giusto?

Invece i metodi sono come io decido di usare queste variabili per creare.. l'oggetto?

@Cpu86. Un oggetto è della classe lo ho solo quando (dopo averlo dichiarato e definito) lo lancio con "alloc" e "init". Giusto?

L'oggetto ce l'hai solo quando hai istanziato la classe e puoi usare il puntatore ritornato per accedere ai metodi. In Objective-C già dopo l'alloc hai un'oggetto.

Link al commento
Condividi su altri siti

Devi riflettere sul concetto di istanza. E' una cosa fondamentale in informatica.

Una classe fa parte di quello che Platone definiva mondo delle idee. La classe è l'idea. Poi nel mondo esistono le istanze di quell'idea.

Creare una classe è un pò come fare una typedef struct in C.

Tu dici che esiste magari un tipo che si chiama "auto" e che contiene una variabile di tipo *char "colore" e una variabile di tipo int "anno". E hai creato l'idea.

Poi "istanzi" i vari elementi. Esempio: "rover111" di tipo auto, colore bianco e anno 1996.

"fordmondeo", colore blu anno 2000.

Una classe è una cosa più complessa, che comprende tante altre cose.

ad esempio metodi (tipo funzini, procedure) specifiche per quella classe.

Oltre a quelli predefiniti ovviamente quelli che crei tu (se no che senso avrebbe?).

Per riprendere l'esempio di redvex crei una classe AUTO che ha come variabili COLORE, MARCA, MODELLO, e ha come metodi getColore() che ti restituisce il colore, uno che te lo setta e tutti i metodi che ti vengono in mente.

Poi con il costruttore istanzi un'oggetto di quella classe.

Dunque crei un oggetto di tipo AUTO che si chiama, che so, "mia auto".

Poi puoi manipolarne o conoscerne le variabili, gli attributi diciamo, cioè in questo caso COLORE MARCA e MODELLO.

Questo per iniziare.

Io penso che per conprendere più a fondo il senso della programmazione a oggetti potresti guardarti qualche manuale di UML, che è l'acronimo di Unified Modeling Language, che è una sorta di linguaggio di modellazione di oggetti (diciamo più di scenari).

Poi è solo una questione tecnica capire come ciò si implementa nei vari linguaggi di programmazione OO.

“Science is a differential equation. Religion is a boundary condition.†Alan Turing

Link al commento
Condividi su altri siti

Allora:

La classe è l'idea astratta di ciò che tu vuoi costruire; il nome della classe deve essere, per questo, esplicativo, come ad esempio la classe "Cavallo".

All'interno di questa classe, cioè dell'idea astratta, devi inserire i "nomi" di ciò di cui è formata la classe; per la classe cavallo, può essere "coda", "zampe", "orecchie"....

I metodi, nell' OO sono sinonimo di azione: all'interno dei metodi metti ciò che vuoi che si faccia, ovvero ad esempio, all'interno della classe "cavallo" potresti fare che "zampe" sia un metodo e all'interno di esso metti le specifiche che descrivono , ad esmpio, l'andatura del cavallo.

Gli oggetti sono la creazione fisica delle classi, cioè si passa dall'idea astratta all'oggetto vero e proprio, concreto.

Immagina la costruzione di una casa: l'ingegnere crea la classe, cioè il disegno della casa, i muri portanti, i piani, le scale, gli ascensori, il tetto, ecc....mentre il costruttore, il muratore, crea l'oggetto, cioè concretizza il disegno dell'ingegnere.

Attraverso i metodi le classi si scambiano messaggi e si dicono cosa fare: l'insieme di tutto questo genera un programma OO.

:-)

MacBook Pro Intel

iPhone 3G

iPod Nano per Nike+

Canon eos 1000D

... coming soon!:-)

Link al commento
Condividi su altri siti

Il librozzo sul C++ già ce l'ho. L'ho letto e stra letto, solo che sti dubbi la carta stampata nn me li toglie ;)

Se non riesco a farmi entrare in testa sta cosa non riesco neanche a buttare giù due righe di codice che dicano "Hello Word!"..

Ricapitolando:

Con la classe(Automobili) ho una definizione generica di quello che faranno gli oggetti(i vari modelli di macchina), i metodi(come fare a instanziare le variabili) e variabili di istanza(il colore, cilindrata, e tutto quello che riguarda una macchina).

Per creare l'oggetto "autoFiatPanda"

devo:

definire a che classe appartiene:

autoFiatPanda:Automobili;

poi devo spararla in memoria

autoFiatPanda init;

autoFiatPanda

E poi creo sta benedetta panda:

autoFiatPanda[Colore:Grigio, Cilindrata:1200, ecc..];

poi posso usarla per fare quello che mi pare

Ho detto bene oppure no?

Link al commento
Condividi su altri siti

Immagina la costruzione di una casa: l'ingegnere crea la classe, cioè il disegno della casa, i muri portanti, i piani, le scale, gli ascensori, il tetto, ecc....mentre il costruttore, il muratore, crea l'oggetto, cioè concretizza il disegno dell'ingegnere.

Attraverso i metodi le classi si scambiano messaggi e si dicono cosa fare: l'insieme di tutto questo genera un programma OO.

:-)

Allora quello che ho detto sopra è sbagliato ;) uff..

Quindi la classe contiene tutti i metodi (come usare le variabili, cioè il "come fare") e le variabili (nel caso della casa, i muri, cucina, camere, bagni)

Per fare un oggetto della classe Casa, lo istanzio (lo dichiaro), lo sparo in memoria e lo definisco (dico che laMiaCasa, ha 4 camere, 2 bagni, ecc..)

Giusto?

Link al commento
Condividi su altri siti

rileggi il mio esempio...

Se poi parli di c++ non hai nemmeno bisogno di allocare la memoria a manina, se vuoi creare il tuo oggetto nella memoria dinamica usi un new, altrimenti lo istanzi come se fosse un normale tipo, per esempio

Auto fiesta;

Oppure

Auto fiesta = new Auto(colore,marca,modello);

Ricapitolando:

Crei la classe definendoti com'è fatto il tuo oggetto (variabili d'istanza) e cosa dovrà fare (metodi), poi lo istanzi e lo usi :mazzodifiori:

Link al commento
Condividi su altri siti

Il problema è che i libri ti sparano l'esempio dell'automobile come prima cosa e te lo spiegano come evoluzione dal linguaggio C.

A me sembra una boiata (ci sono xò passato anche io al Poli)... non insegnerei mai C++ come evoluzione del C (solo un fatto pseudostorico), ma insegnerei C++ dicendo che certe funzioni e concetti presi in maniera "indipendente" e con un flusso pseudosequenziale di azioni si ha in un linguaggio del quale il C++ è solo temporalmente figlio che è il C (che peraltro sarebbe molto più utile spiegare cos'è il Modula2)

la classe è un concetto astratto gli uomini, i tavoli..., non come gruppi di singoli uomo e singoli tavolo, ma l'astrazione... le variabili sono il luogo il cui valore fa si che un uomo, un tavolo possano essere rossi (rosso è il valore che assume in un dato momento la variabile rossa per caratterizzare QUEL tavolo o quella macchina rossa).

Ora un uomo, un tavolo per dire che è alto tot, pesa tot... devi riservare della memoria dove salvare tale valore della variabile (come nel linguaggioC). La variabile esiste ovviamente nell'istanza "tavolo di casa mia" ma non ha senso nella classe. La classe puoi solo dire come è fatta (i tavoli possono avere un numero variabile di gambe, il colore che hanno...)... della classe spieghi solamente com'è fatto il concetto astratto.

Poi i metodi sono invece le insiemi di funzioni che modificano lo stato delle variabili interne oppure interagiscono con l'esterno. Un'istanza non può cambiare le variabili di un'altra istanza, della medesima classe e non, può solo agire per "attivare" il metodo di un'altra istanza (o di se stesso) della medesima classe o non.

... è tutto un pò più astratto, e per questo molto più intuitivo in realtà

Link al commento
Condividi su altri siti

il problema di passare dal c al c++ è proprio questo, conosco gente che programma in c++ come se avesse di fronte a se l'ansi c nudo e crudo. Il signor Bjarne Stroustrup è partito da struct e puntatori per creare il concetto di classe perchè noi potessimo usarle :)

Stessa cosa quando vedo in c++ qualcuno dichiarare le stringhe come char*, siamo o no nel XI secolo? :cincin:

Il C è una buona palestra, ma la mente non può fissarsi su concetti vecchi 40 anni :mazzodifiori:

Link al commento
Condividi su altri siti

Sai cosa, (parlo da uno che di C sa solo tirar fuori dei cicli if/else e printf "hello world") con il C tutto ha una procedura, devi fare questo e di conseguenza fai quell'altro.

Nel C++ o ObjC devi prima definire tutto quanto e poi puoi fare la procedura. Prima definisci quello che ti serve e poi lo puoi usare, è questo che mi incasina..

Questa è l'impressione che ho avuto, naturalmente, correggetemi se sbaglio..

Link al commento
Condividi su altri siti

Quello che chiami incasinare in realtà è la più grande conquista dell'uomo rispetto la macchina. Basta pensare a ciò che vuoi, ma pensa a com'è ciò che è...

... non devi caratterizzare tutto, ma solo quelle parti che ti servono.

Se una macchina ha certe caratteristiche, un domani potrai aggiungerne altre perchè nuove funzioni e desideri dal tuo sw verranno ad essere necessarie...

... da qui che la programmazione ad oggetti (non parliamo più di C++, please) si riferisce a progetti SW di media/alta complessità rispetto a quelli di bassa tipici della programmazione procedurale.

Si vede - scusa la franchezza - che non hai mai seguito un corso di Ingegneria del SW (un secondo alla memoria di Ghezzi... no, sta bene non preoccupatevi, è solo che penso a 8-9 anni fa e la cosa mi sconvolge, ma è un problema personale).... ripeto, senza offesa.

Link al commento
Condividi su altri siti

Si vede - scusa la franchezza - che non hai mai seguito un corso di Ingegneria del SW (un secondo alla memoria di Ghezzi... no, sta bene non preoccupatevi, è solo che penso a 8-9 anni fa e la cosa mi sconvolge, ma è un problema personale).... ripeto, senza offesa.

No, no, nessuna offesa, è che sono "ahimè" del tutto ignorante della materia.

Non sai quanto avrei voluto poter seguire uno di quei corsi, ma purtroppo ho dovuto piantar li l'uni per andare a lavorare.

Ora cerco di capire come "funziona" il computer e come far fare al computer quello che voglio io cercando anche di crearmi gli strumenti. Mi ci vorrà molto più tempo (da hobbista autodidatta) xò spero di farcela ;)

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...