Quote:
Originariamente inviato da PGI-Bis
Stai cercando di riprendere in mano l'OOP eppure nel tuo intero post non c'è una sola volta la parola "oggetto". C'è qualcosa che non va.
|

L'OOP l'ho utilizzato con PHP 5 (e se lo conosci capisci di che OOP parliamo). L'ho però studiato su un buon manuale di PHP interamente dedicato all'OOP (un bel mattone) e quindi ne parlava molto anche generalmente, introducendolo, prima di passare all'OOP versione PHP5.
Appena iniziai comunque lasciai PHP (e si parla di un buon annetto fà) quindi ho appreso le basi, sviluppato qualcosa e dato interessa all'OOP secondo le necessità.
Mi spiace se non ho ancora la terminologia adatta, cercherò di rimediare.
Inoltre in OOP tutto è un oggetto no? parlare di oggetto è generico (se ho ragione), quindi metodi e proprietà sono d'obbligo per farsi capire

(sempre se ho ragione).
Quote:
Non c'è alcuna convenienza nell'uso di una classe astratta rispetto ad un modulo piuttostoche ad una funzione.
Tutto quello che c'è sono gli oggetti che compongono il tuo sistema: è dalle caratteristiche di questi oggetti che ricavi la necessità di usare una classe totalmente o parzialmente definita o di non usarla affatto.
Quando usi una classe? Be', quando nel sistema hai una pluralità di oggetti che si comportano tutti quanti nello stesso modo.
|
Chiarissimo.
Quote:
Dunque domanda numero 1: nel tuo sistema hai una pluralità di oggetti che si comportano tutti quanti nel modo definito in AltraClasse? Se sì, AltraClasse è una classe, altrimenti, in C++, è un modulo.
|
L'esempio è inventato sul momento, ma si, nel mio caso AltraClasse accetta solo oggetti che si comportano in quel modo, altrimenti usa una altra classe. Esempio la classe di gestione delle Eccezioni, l'ho realizzata sia perchè tutte le eccezioni vanno gestite in quel modo sia per poter mantenere meglio il codice e in vista di cambiamenti mi basta modificare quella classe o i suoi metodi e sono apposto.
Quote:
Lo stesso vale per TestMe: pluralità -> classe, altrimenti modulo.
|
TestMe viene utilizzata per usufruire delle funzionalità delle altre classi. Anzichè dichiarare nel codice stesso un:
Exception* eccezioni = new Exception();
o nel caso AltraClasse* test = new AltraClasse();
Uso la classe TestMe che inizializza tutte le classi necessarie e quindi al verificarsi di date condizioni utilizzo i metodi previsti nella classe TestMe anzichè la classe specifica direttamente. E' un test che stò facendo supponendo di avere numerossime classi e che siano tutte utili al programma. Sono test che faccio per iniziare poi a scrivere un semplice engine 2D, in modo da poter utilizzare la classe Engine e gestire finestre e tutto da lì (anche se ogni cosa ha la sua classe specifica che ne definisce i metodi e le proprietà). Quindi a questa tua domanda, se TestMe è una classe o un modulo, sinceramente non saprei rispondere.
Quote:
E veniamo all'astrazione. TestMe dev'essere una classe astratta? Be', bisogna capire cosa diamine sia quest'astrazione, no?
Abbiamo detto che una classe è la rappresentazione di una pluralità di oggetti i quali si comportano allo stesso modo. Ho diecimila oggetti che hanno un nome e un cognome - o due, pluralità è più di uno. La manifestazione di quel nome e cognome è il comportamento che tutti gli oggetti di tipo X condivide.
Per le classi astratte il principio è identico: più d'un oggetto ha uno stesso "set" di comportamenti. Tra questi comportamenti che tutti quanti gli oggetti di tipo X possiedono almeno uno consiste nella definizione di un comportamento. Ho un nome, ho un cognome e devo dire come faccio a camminare.
Che significa dire AltraClasse è una classe il cui metod abc è astratto? Esattamente come succederebbe per una classe "normale" significa dire che c'è più di un oggetto che si comporta come descritto in AltraClasse. Siccome AltraClasse dice che tra le sue caratteristiche c'è la definizione di un comportamento, ogni oggetto AltraClasse avrà questa caratteristica, avrà cioè la definizione di quel comportamento.
|
Quindi astratto o meno lo scopo del metodo è sempre lo stesso, mi pare di capire: dire che l'oggetto X possiede il metodo Y.
Quote:
Da cui la domanda numero 2: posto che alla 1 tu abbia detto sì, tra le caratteristiche di questa pluralità di oggetti che si comporta come descritto in AltraClasse c'è la definizione di un comportamento? Oltre ad avere N nasi ed M bocche, gli oggetti di tipo AltraClasse devono anche definire qualcosa?
|
Può essere considerato comportamento anche il semplice settaggio delle variabili dell'oggetto ? E la sua lettura? Insomma, i metodi (volgarmente mi verrebbe da dire le funzioni definite nella classe) sono le definizioni del comportamento, no?
Quote:
E per ultima la numero 3: TestMe è la definizione di un oggetto di tipo AltraClasse? - parlo di oggetto anche se TestMe è una classe C++ perchè in C++ un modulo non è polimorfico e quindi occorre usare le classi anche per definire gli oggetti.
|
TestMe permette di definire un oggetto che tra i propri metodi ha quelli per gestire proprietà e oggetti attraverso i metodi di AltraClasse. In questo modo non ha senso, ma realmente si occupa di fornire tutti i metodi necessari al funzionamento del programma. In poche parole anzichè definire io nel codice una marea di oggetti, la classe TestMe li definisce tra i propri oggetti privati, mettendo a disposizione poi dei metodi per gestirli (il vantaggio è la comodità di dichiarare in seguito un solo oggetto e poter gestire tutto il funzionamento con i metodi a disposizione - che a loro volta gestiscono oggetti privati della classe -). Detta così è complicata, sicuramente per via della mia carenza in tecnicismi, ma spero di aver resto l'idea. Nel caso ti prego di dirmelo e provvederò quando prima a porvi rimedio in qualche modo.
Quote:
Questo è OOP. Iniziare il discorso dalle classi tout-court è fare orientamento alle classi, prospettiva che al momento è nota solo a certi autori dalla mente confusa.
|
Ti ringrazio mille, alla solita sei molto completo ed esaustivo nella risposta.
Purtroppo ho molte carenze e quel poco che sò (sapevo) si è arrugginito.
Grazie mille della pazienza e del tempo dedicato,
buona notte.