PDA

View Full Version : Programmazione sugli oggetti e orientata agli oggetti


M86
14-01-2003, 21:03
Che cosa differenzia questi, se così si può dire, modi, di programmare?

soalle
14-01-2003, 22:17
object-based e object-oriented... differenze poche ma MOLTO importanti... un linguaggio object-oriented può contare sul polimorfismo.

M86
15-01-2003, 14:40
Originally posted by "soalle"

object-based e object-oriented... differenze poche ma MOLTO importanti... un linguaggio object-oriented può contare sul polimorfismo.
che significa polimorfismo

soalle
15-01-2003, 14:56
se ho due classi A e B di cui la seconda è derivata dalla prima e ridefinisce un metodo bravo() succede questo:

A a=new A();
a.bravo(); //supponiamo output: "Bravo A"
B b=new B();
b.bravo(); //supponiamo output: "Bravo B"

il bello è che se faccio:

A a= new B(); //e lo posso fare perché B "è" un A (B is-a A)
a.bravo(); //output: "Bravo B"

E questo ha importanti conseguenze nella progettazione di un software...

ilsensine
15-01-2003, 15:06
Originally posted by "soalle"

se ho due classi A e B di cui la seconda è derivata dalla prima e ridefinisce un metodo bravo()...


Non basta


#include <iostream.h>

class A {
public: const char *foo() { return "ciao "; }
};

class B: public A {
public: const char *foo() { return "bello\n"; }
};

void stampa(A *a) { cout << a->foo(); }

int main() {
stampa(new A);
stampa(new B);
return 0;
}

Uscita: "ciao ciao", non proprio ciò che ti aspetti



#include <iostream.h>

class A {
public: virtual const char *foo() { return "ciao "; }
};

class B: public A {
public: const char *foo() { return "bello\n"; }
};

void stampa(A *a) { cout << a->foo(); }

int main() {
stampa(new A);
stampa(new B);
return 0;
}

Uscita: "ciao bello"

M86
15-01-2003, 15:27
Originally posted by "soalle"

se ho due classi A e B di cui la seconda è derivata dalla prima e ridefinisce un metodo bravo() succede questo:

A a=new A();
a.bravo(); //supponiamo output: "Bravo A"
B b=new B();
b.bravo(); //supponiamo output: "Bravo B"

il bello è che se faccio:

A a= new B(); //e lo posso fare perché B "è" un A (B is-a A)
a.bravo(); //output: "Bravo B"

E questo ha importanti conseguenze nella progettazione di un software...

che posso usare la funzione newB ed A indistintamente
Se ho scritto una sciocchezza ma ho appena comincito a studiare il C++ quindi giò a capire che cos'è una classe ci arrivo per intuito conoscendo i CSS

ilsensine
15-01-2003, 15:30
che posso usare la funzione newB ed A indistintamente
Questo è sempre vero se B deriva da A. Controlla anche gli esempi che ho illustrato, nel secondo caso A e B sono classi polimorfe, nel primo no. La differenza è...virtuale :D

soalle
15-01-2003, 16:09
Originally posted by "ilsensine"



Non basta


#include <iostream.h>

class A {
public: const char *foo() { return "ciao "; }
};

class B: public A {
public: const char *foo() { return "bello\n"; }
};

void stampa(A *a) { cout << a->foo(); }

int main() {
stampa(new A);
stampa(new B);
return 0;
}

Uscita: "ciao ciao", non proprio ciò che ti aspetti



#include <iostream.h>

class A {
public: virtual const char *foo() { return "ciao "; }
};

class B: public A {
public: const char *foo() { return "bello\n"; }
};

void stampa(A *a) { cout << a->foo(); }

int main() {
stampa(new A);
stampa(new B);
return 0;
}

Uscita: "ciao bello"

Provengo da Java.... ;)

ilsensine
15-01-2003, 16:10
Originally posted by "soalle"



Provengo da Java.... ;)
In java tutti i metodi sono "virtuali"?
Bella, questa...

soalle
15-01-2003, 16:20
Of course... non c'è early binding (non esiste la keyword virtual)... limitazione ma anche molta più pulizia di progetto... (non che sia la panacea... però...)

soalle
15-01-2003, 16:22
Curiosità... per il sensine:

che cosa fai di ricerca? Spero di arrivarci anch'io... per adesso sono al 4°anno...

ilsensine
15-01-2003, 16:24
Originally posted by "soalle"

Of course... non c'è early binding (non esiste la keyword virtual)... limitazione ma anche molta più pulizia di progetto... (non che sia la panacea... però...)
No grazie, preferisco vivere :D :p

ilsensine
15-01-2003, 16:25
Originally posted by "soalle"

Curiosità... per il sensine:

che cosa fai di ricerca? Spero di arrivarci anch'io... per adesso sono al 4°anno...
Sto svolgendo una ricerca statistica sul perché, visto che il mio nick è ilsensine, la gente lo interpreti come il-tizio-chiamato-sensine :D

A parte gli scherzi, lavoro in una società di ricerca, mi occupo di un pò di tutto, dalla compressione alla crittografia

soalle
15-01-2003, 16:28
Originally posted by "ilsensine"


Sto svolgendo una ricerca statistica sul perché, visto che il mio nick è ilsensine, la gente lo interpreti come il-tizio-chiamato-sensine :D

A parte gli scherzi, lavoro in una società di ricerca, mi occupo di un pò di tutto, dalla compressione alla crittografia
Scusami... tra l'altro me l'avevi già fatto notare in passato... è che quando scrivo con la tastiera dopo "il" le mie mani mi mettono da sole lo spazio... :p ( :muro: ) spero di non ripetermi... :)

AnonimoVeneziano
16-01-2003, 21:20
Originally posted by "ilsensine"


il-tizio-chiamato-sensine :D


Ma lol, il tizio chiamato sensine!!!

ROTFL :D

ma che significa in realtà?

Ciao

ilsensine
16-01-2003, 21:23
Ilsensine è la divinità degli Illithid (roba di D&D); mi piace come suona, tutto qui

AnonimoVeneziano
16-01-2003, 22:00
Originally posted by "ilsensine"

Ilsensine è la divinità degli Illithid (roba di D&D); mi piace come suona, tutto qui

Io gioco ad AD&D (ambientazione Forgotten Realms e DragonLance) ma non ne avevo mai sentito parlare :p

Ciao

ilsensine
16-01-2003, 22:17
voi umani...che credete che il vostro mondo sia il centro del multiuniverso....

:D

Ciao

M86
17-01-2003, 12:48
il mio manuale di C++ è questo
http://www.programmazione.it/index.php?entity=ebook&isbn=8871920716&idArea=4
Il primi due capitoli sono d'introduzione e mentre il primo è piuttosto semplice l'altro se non conosci il C ti manda ai matti (infatti gli autori suggeriscono nel caso non ci si capisca nulla di saltarlo e di ritornarci in seguito)
Qualcuno di voi non è che lo conosce e lo ha letto così tanto per sapere come è stato studiarselo tutto?