Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - vantaggi nella programmazione orientata agli oggetti
Forum - C/C++ - vantaggi nella programmazione orientata agli oggetti

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
steve__92 (Normal User)
Rookie


Messaggi: 22
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 0:55
Giovedì, 06/08/2009
ciao a tutti, come passatempo negli ultimi mesi stavo imparando le basi del c++.
forse la domanda può risultare un pò stupida e da noob, ma è giusto per togliermi una curiosità e capire meglio il linguaggio.
stavo dando un occhiata alla oop, ma non capisco quali sono i veri vantaggi che offre.
che vantaggi ha rispetto alle funzioni?
perchè usare la oop?

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 2:16
Giovedì, 06/08/2009
Il vantaggio principale è che l'essere umano vede tutto come un oggetto, quindi la programmazione ad oggetti è più produttiva, comprensibile(e manutentibile) e il codice è pienamente riutilizzabile(perchè ogni classe dovrebbe essere indipendente).
Ti faccio un esempio, se io volessi fare un gioco in cui alleno una serie di animali, dovrei fare una cosa del genere:

Classe animale:
metodi
-Mangia
-Bevi
-ecc...
variabili
-Salute
-Fame
-ecc...

Poi, grazie all'ereditarietà creerei una(o più) clase figlia di animale:

Classe cane(eredita da Animale):
metodi    (ora non c'è bisogno di riscrivere i membri di animale, ma solo di cane)
-Abbaia
-Mordi
-ecc...
variabili
-fedeltà
-aggressività
-ecc...

Altra classe:
Classe gatto(eredita da Animale):
metodi    (ora non c'è bisogno di riscrivere i membri di animale, ma solo di gatto)
-Miagola
-Mordi
-ecc...
variabili
-affettuosità
-ecc...

Avrei così creato una base per gestire degli animali. I vantaggi dell'oop non si limitano solo a questo, ma non è il caso di spiegarli tutti qui, quindi ti rimando ad una pagina di wikipedia che spiega in generale cos'è e a che cosa serve tale tecnica di programmazione.
http://it.wikipedia.org/wiki/Programmazione_orientata_agli ...

PM Quote
Avatar
steve__92 (Normal User)
Rookie


Messaggi: 22
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 14:45
Giovedì, 06/08/2009
se al posto della classe animale creo una funzione animale, con una serie di sotto funzioni (metodi) e per rendere pubbliche le variabili usassi i puntatori vedrei comunque il programma come diviso a oggetti.
il tuo esempio diventerebbe così:

funzione animale(eventuali parametri)
metodi
-funzione_mangia(eventuali parametri)
-funzione_bevi(eventuali parametri)
-ecc..
variabili
-salute   (oppure *salute)
-fame     (oppure *fame)
-ecc..

funzione cane(eventuali parametri)
-funzione animale(eventuali parametri) (che funge da eredità)
-funzione_abbaia()
-funzione_mordi()
-ecc..
variabili
-fedeltà (o *fedeltà)
-aggressività (o *aggressività)
ecc..

stessa cosa per il gatto.


quello che intendo io è che anche con le funzioni si piò vedere il programma come una serie di oggetti altrettanto manutenibile (se non voglio più il cane mi basta non usare più la sua funzione) e altrettanto comprensibile.

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 14:48
Giovedì, 06/08/2009
Il polimorfismo come lo implementi e soprattutto come crei le istanze di una funzione(supponiamo che io voglia avere un gruppo di 50 cani e 50 gatti)?

PM Quote
Avatar
steve__92 (Normal User)
Rookie


Messaggi: 22
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 15:09
Giovedì, 06/08/2009
con i parametri

Testo quotato

Postato originariamente da wikipedia:
La possibilità che le classi derivate implementino in modo differente i metodi e le proprietà dei propri antenati rende possibile che gli oggetti appartenenti a delle sottoclassi di una stessa classe rispondano diversamente alle stesse istruzioni. Ad esempio in una gerarchia in cui le classi Cane e Gatto discendono dalla SuperClasse Animale potremmo avere il metodo mangia() che restituisce la stringa "osso" se eseguito sulla classe Cane e "pesce" se eseguito sulla classe Gatto. I metodi che vengono ridefiniti in una sottoclasse sono detti "polimorfi", in quanto lo stesso metodo si comporta diversamente a seconda del tipo di oggetto su cui è invocato.



in una funzione diventerebbe:

funzione_cane(numero_animale, ecc..){  // numero_animale serve nel caso         variabile attacco = morso // volessi avere un altro cane con parametri diversi
variabile cibo = osso
funzione_animale(cibo, attacco, ecc..)
.....
}

funzione_gatto(numero_animale, cibo, ecc..){
variabile attacco = graffio
variabile cibo = pesce
funzione animale(cibo, attacco, ecc...)
......
}


forse con l'uso delle classi verrebbe un pò più semplice, ma non sò se c'è tutta questa differenza


PS. grazie per la risposta

Ultima modifica effettuata da steve__92 il 06/08/2009 alle 15:14
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 15:15
Giovedì, 06/08/2009
No sono molto più comode le classi, con le funzioni dovresti avere molti array di puntatori per simulare le istanze e tutte le altre cose e poi ricordati che le classi non sono funzioni ma sono tipi con cui puoi creare variabili che rappresentano oggatti(cani, gatti o quello che vuoi tu). I vantaggi dell'oop sono difficili da spiegare, però se lo studi e lo utilizzi li capirai da te(e non saprai più separartene).

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 15:30
Giovedì, 06/08/2009
Tieni anche conto che con la oop viene supportata in maniera intrinsica la relazione "is a" cioè "è un".
Se tu fai un metodo che accetta come parametro un oggetto "Animale" potrai passare Cani, Gatti, Mucche, che verranno automaticamente trattate da Animali quali essi sono.

Il tuo discorso cmq non è del tutto sbagliato, quando si usava solo l'assembler si tendeva a scrivere il codice come fosse strutturato anche se non supportava in maniera intrinsica questa strutturazione, era il programmatore che doveva farsi il mazzo a tenere tutto in ordine.

Stesso discorso per la programmazione strutturata, che in breve si è evoluta in modulare tendendo ad essere orientata agli oggetti, ma anche li c'era un limite del linguaggio, e il programmatore doveva fare artifizi per rendere pulito il software.

Così è nata la OOP, ed è diciamo un punto di svolta, però anche lei non è che rimarrà invariata per sempre, infatti se si osservano complessi progetti e in particolare framework di estensione di alcuni linguaggi (ad esempio rails per ruby, o spring per java) si nota che alcuni principi sviluppati dal programmatore sono ricorrenti e si potrebbero implementare intrinsicamente nel linguaggio stesso.
E' il casso della programmazione orientata agli aspetti ad esempio. Che io sappia ancora nessun linguaggio la implementa ma i grossi progetti "tendono" a questo quindi è facile che sia il post-oop.

P.S se proprio vuoi implementare con la strutturata quel genere di softare invece di creare una funzione animale dovresti usare le strutture

PM Quote
Avatar
steve__92 (Normal User)
Rookie


Messaggi: 22
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 20:14
Giovedì, 06/08/2009
Testo quotato

Postato originariamente da manvb.net:
I vantaggi dell'oop sono difficili da spiegare, però se lo studi e lo utilizzi li capirai da te



bhè, un occhiata gliela (oddio, si scrive così?) do di certo... se però faccio subito degli accorgimenti per vedere i punti di forza e i punti deboli sarebbe meglio

Testo quotato

Postato originariamente da netarrow:

Tieni anche conto che con la oop viene supportata in maniera intrinsica la relazione "is a" cioè "è un".
Se tu fai un metodo che accetta come parametro un oggetto "Animale" potrai passare Cani, Gatti, Mucche, che verranno automaticamente trattate da Animali quali essi sono.


un metodo che accetta come parametro un oggetto... interessante, non sapevo si potesse fare.
Testo quotato


...
Così è nata la OOP, ed è diciamo un punto di svolta


il problema è che io non riesco a capire qual'è questa svolta, certo, di miglioramenti ce ne sono senz' altro però per ora noto solo piccole cose.
non metto in dubbio che quando la imparerò e utilizzerò potrebbe sembrarmi una rivoluzione, ma per ora (che sò solo i concetti teorici, e nemmeno benissimo) non mi sembra niente di speciale.
Testo quotato


però anche lei non è che rimarrà invariata per sempre, infatti se si osservano complessi progetti e in particolare framework di estensione di alcuni linguaggi (ad esempio rails per ruby, o spring per java) si nota che alcuni principi sviluppati dal programmatore sono ricorrenti e si potrebbero implementare intrinsicamente nel linguaggio stesso.
E' il casso della programmazione orientata agli aspetti ad esempio. Che io sappia ancora nessun linguaggio la implementa ma i grossi progetti "tendono" a questo quindi è facile che sia il post-oop.


bhè, sono ancora un programmatore più che novizio e faccio fatica a pensare a un tipo di programmazione orientata agli aspetti (e non conoscevo nemmeno l'esistenza di rails e spring) però è un bene che ci sia il progresso. mi terrò sicuramente informato sull'arogmento.
Testo quotato


P.S se proprio vuoi implementare con la strutturata quel genere di softare invece di creare una funzione animale dovresti usare le strutture  


le strutture, se non vado errato, prevedono il salto incondizionato (goto) e siccome (credo per abbuso di utilizzo) è altamente sconsigliato da usare ho proprio saltato questa possibilità.

grazie anche a te per avermi risposto

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 20:23
Giovedì, 06/08/2009
Testo quotato


un metodo che accetta come parametro un oggetto... interessante, non sapevo si potesse fare.



se sei spiritoso, è la prova che non hai capito proprio niente.
se non sei spiritoso, hai capito ancora meno.

intendevo che accettando a parametro una superclasse puoi passare tutte le classi ereditanti da quella superclassi, implementando l'ereditarietà e il polimorfismo, e queste due sono la svolta (l'incapsulamento c'è già nella strutturata anche se diversamente implementato).

Testo quotato


le strutture, se non vado errato, prevedono il salto incondizionato (goto) e siccome (credo per abbuso di utilizzo) è altamente sconsigliato da usare ho proprio saltato questa possibilità.



per strutture intendo il raggruppamento di dati:
http://www.math.unipd.it/~sperduti/CORSO-C%2B%2B/Strutture ...

Ultima modifica effettuata da netarrow il 06/08/2009 alle 20:25
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo