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++ - Concetto di
Forum - C/C++ - Concetto di "Classe"

Avatar
Navar (Normal User)
Newbie


Messaggi: 10
Iscritto: 30/10/2007

Segnala al moderatore
Postato alle 18:07
Mercoledì, 21/11/2007
Salve a tutti!Il mio problema è che non riesco a focalizzare bene il concetto (con conseguente utilità) di "classe"; benchè abbia effettuato delle ricerche (ad esempio su Wikipedia), non riesco comunque a capire nella "pratica" (se così si può dire!) il concetto di "classe"... come manuale di riferimento utilizzo il 'Deitel&Deitel' ("Fondamenti di Programmazione"), ma... nisba! 8-|
Se avete la pazienza di aiutarmi, ve ne sarei molto grato! (magari con un esempio..)
Grazie e ciao a tutti!;)

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 16:21
Giovedì, 22/11/2007
oraca! il deitel&deitel è uno dei migliori per il OOP-side del C++, cmq io avevo già fatto Java quindi se uno è nuovo a questo modello potrebbe avere difficoltà.

La definizione teorica che studiai tempo fa è "la classe è un astrazione logica di un elemento di un sistema (reale o meno), a cui sono atribuiti atributi (campi), operazioni (metodi) e/o associazioni con altre classi"

In conclusione, quando con un linguaggio strutturato come pascal si doveva calcolare l'area del cerchio si faceva la funziona calcola_area_cerchio(parametri)
si chiedeva l'input all'utente con la funzione leggi_dati e si richiamavano le procedure, quindi l'unità fndamentale del problema era "l'azione", con la OOP è l'attore, ovvero i vari elementi che interagendo fra loro giungono ad una soluzione comune svolgendo ognuno le sue responsabilità operando esclusivamente sui suoi dati o eventualmente chiedendo formalmente il permesso di leggere o scrivere nei dati della altre classi.
In conclusione riproducendo il problema in oop crei la classe Cerchio e sarà tutto incluso la e avrai

Cerchio c;
c.leggidati();
c.calcolaArea();

Quindi esempio pratico, mettiamo che vuoi implementare una simulazione di un habitat naturale avrai la classe Animale dove descriverai le caratteristiche di tutti gli animali, poi creerai Mammifero estendendo Animale, Balena estenderà Mammiferò ma implementerà l'interfaccia Nuotatore (anzi, la classe astratta, C++ nn ha interfacce) e mano a mano descriverai questi elementi mettendo dentro i loro atriuti e le operazioni che possono svolgere.

Alla fine creerai gli oggetti, ovvero istanze di queste classi nei quali potrai riempire i dati che hai descritto nella classe e richiamare i metodi, chessò

Balena b;
b.setColore("white");
b.respira();

respira sarà un metodo che verrà preso da Mammiferò e che riadatterai in modo diverso (la balena è mammifero ma respira diversamente dall'uomo per dire).

Da qui si colgono l'ereditarietà (estendere classi per crearne di specializzazioni, altro esempio persona - lavoratore - sportivo - calciatore ecc..) e l'altra caratteristica che si nota, o forse non tanto agli inizi, è il polimorfismo.

Metti caso che hai già una classe DatoreLavoro col metodo faiLavorare(Lavoratore t) e Lavoratore contiene il metodo lavora, DatoreLavoro richiamerà lavora che se Lavoratore sarà un Impiegato farà ciò che è descritto in Impiegato, se sarà un Operaio ciò che è descritto in Operaio (e questi sono da considerarsi elementi quindi altre classi) e così via.

Quindi le classi servono per descrivere gli attori del sistema, dare loro responsabilità e dati e farli interagire per aumentare la manuntenibilità del codice, il ricliclo del codice, la sua comprensibilità e la produttività.

basta pensare al sistema virtuale "computer", ad un livello utente hai le finestre che saranno classi con apri, chiusi, sposta(x, y), avrai Mouse con dentro i dati per la posizione, il metodo sposta ecc.. ecc..

Spero di averti chiarito, ciauz

Ultima modifica effettuata da netarrow il 22/11/2007 alle 16:25
PM Quote
Avatar
Navar (Normal User)
Newbie


Messaggi: 10
Iscritto: 30/10/2007

Segnala al moderatore
Postato alle 17:22
Giovedì, 22/11/2007
Sicuramente gli esempi che mi hai portato, mi hanno dato la possibilità di capire meglio certi concetti! (per il resto ci vuole, come in ogni cosa, esercizio e pratica!);)
Ti ringrazio molto per l'aiuto e cercherò di tenere a mente le tue dritte!:k:
Grazie per la disponibilità e ciao!:D

PM Quote