Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-06-2009, 10:30   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[C#]Dubbi utilità polimorfismo

Buondì a tutti

Ieri sera mentre cercavo di andare avanti con una delle mie applicazioncine, mi sono accorto che due classi che avevo scritto sono praticamente identiche: Hanno lo stesso numero di campi, devono effettuare le stesse identiche cose. L'unica piccola differenza sta nel nome di alcuni campi di queste classi:

Codice:
//Classe ManutenzioneVeicolo

private int id_manutenzione;
private int id_veicolo;
private string tipoManutenzione;
private DateTime dataManutenzione;
private double importo;
private bool pagato;
private string descrizione;

//Classe ScadenzeVeicolo
private int id_scadenza;
private int id_veicolo;
private string tipoScadenza;
private DateTime dataScadenza;
private double importo;
private bool pagato;
private string descrizione;

//etc...
Come vedete, sono praticamente identiche.
Ho pensato quindi di creare una classe base, far ereditare le due classi da quest'ultima e fare l'override dei metodi vari.

Poi... mi son detto:
Ma forse in questo caso particolare, una 'complicazione' del genere non mi serve, dato che potrei utilizzare un'unica classe per questo scopo.

Ho allargato un pò il ragionamento e mi è venuto un dubbio:

Ovunque ci sia l'applicazione del polimorfismo, se per qualche ragione devo ridisegnare o eliminare la classe base, poi tutto il lavoro fatto sulle altre classi viene gettato al vento ?

Cioè, in questo mio modo rudimentale di creare una classe a se stante per ogni cosa, vedo un vantaggio: se elimino o cambio soltanto la classe che mi interessa, non vado ad impattare su nessun'altra parte del programma.

Qualcuno potrebbe chiarirmi questi dubbi?

Grazie mille

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 11:09   #2
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Il trucco é sempre quello:
non forzare le relazioni di ereditarietá. Se esiste, é lampante. Se devi cercare una similitudine vuol dire che non lo é: se proprio hai bisogno di un comportamento comune, un'interfaccia potrebbe aiutarti.
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 11:12   #3
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Puoi anche ricorrere ai Component Object e creare un oggetto, che ne so, DatiVeicolo da assegnare poi alle varie classi...
in questo caso ha senso perchè le due classi in se non mi sembra abbiano relazioni ereditarie naturali, ma i dati che contengono si.
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 11:42   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Fra le possibili scadenze ci può essere anche una manutenzione ? E quali altri tipi di scadenze ?
Vedo quel private string tipoScadenza; che mi lascia qualche dubbio.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 11:57   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Ho pensato quindi di creare una classe base, far ereditare le due classi da quest'ultima e fare l'override dei metodi vari.
E costa di più o di meno, anzichè avere due classi distinte anche se simili ?
Avessi 30 classi da derivare capirei...

Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Ovunque ci sia l'applicazione del polimorfismo, se per qualche ragione devo ridisegnare o eliminare la classe base, poi tutto il lavoro fatto sulle altre classi viene gettato al vento ?
Tempo fa feci ad un docente una domanda simile alla tua, e mi fu risposto : "Le classi non si modificano mai. Si specializzano." Affermazione un po' "integralista" ( nella vita reale ho sempre visto gente che le classi le modificano eccome ), ma sicuramente fatta da persona che sapeva il fatto suo, ed è anche il caso di questo discorso, credo.
Se elimini la classe base, che bisogno potresti avere delle sue derivate ?
Se già stai ipotizzando di poter eliminare una di quelle classi, mantenendone l'altra la risposta forse è già data : è il caso di tenerle separate.
La classe base dovrebbe sempre essere disegnata in modo tale da non aver bisogno di vere e proprie "modifiche".

Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Cioè, in questo mio modo rudimentale di creare una classe a se stante per ogni cosa, vedo un vantaggio: se elimino o cambio soltanto la classe che mi interessa, non vado ad impattare su nessun'altra parte del programma.
Secondo me non è affatto "rudimentale". Molti pensano che se non si usano le caratteristiche più "spinte" di un linguaggio, stanno scrivendo codice "rudimentale"...
Soprattutto se sei nella fase in cui, magari all'inizio della stesura di un progetto, non hai chiaro di quante/quali classi realizzare, stai sul semplice.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 12:13   #6
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Come vedete, sono praticamente identiche.
Ho pensato quindi di creare una classe base, far ereditare le due classi da quest'ultima e fare l'override dei metodi vari.
Il problema secondo me sta qui.
Se devi fare l'override di tutti i metodi perche' le due classi non hanno nulla in comune se non i nomi dei campi, e soprattutto se non hai l'esigenza di centralizzare i processi*, allora il polimorfismo non ti serve.

* Ad esempio il trovarsi a dover gestire una collezione di oggetti base, e di richiamare su ciascuno di essi un metodo che tutti gli oggetti di tale collezione hanno (grazie all'ereditarieta') indipendentemente dal tipo, come per esempio l'estrazione di descrittivi per la visualizzazione in una griglia, lo store in un database, l'aggregazione per qualche calcolo, etc.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 12:17   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da cionci Guarda i messaggi
Fra le possibili scadenze ci può essere anche una manutenzione ?
Che ci dici?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 12:18   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Che ci dici?
Smell like teen refactoring
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 12:20   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da cionci Guarda i messaggi
Smell like teen refactoring
Sì, io dicevo a Raoul quotando te, perchè ho lo stesso dubbio
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 12:21   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Tra l'altro ci sono anche altre cose che puzzano...esiste una classe veicolo ? La classe veicolo mi immagino che abbia il suo id all'interno ed abbia al suo interno anche una lista di scadenze. Allora che ci fa id veicolo nelle altre classi ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 12:22   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da cionci Guarda i messaggi
Tra l'altro ci sono anche altre cose che puzzano...esiste una classe veicolo ? La classe veicolo mi immagino che abbia il suo id all'interno ed abbia al suo interno anche una lista di scadenze. Allora che ci fa id veicolo nelle altre classi ?
Ho il leggerissimo sospetto che quelle classi non siano altro che la rappresentazione di "Value Object" corrispondenti a tabelle di un database...
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 13:14   #12
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Ho il leggerissimo sospetto che quelle classi non siano altro che la rappresentazione di "Value Object" corrispondenti a tabelle di un database...
Eccomi

Inizio da banryu79:

Esatto, il database è già esistente, oddio.. database, diciamo 5/6 tabelline

Le classi non servono ad altro che a rappresentare i dati di queste tabelle quindi è come dici tu.

@cionci:
Si, esiste una classe veicolo con il suo id, ma non ha nulla come scadenze o altro. Si limita a esporre i campi contenuti nella relativa tabella del database.

@gugoXX
In questo caso specifico, centralizzare i processi effettivamente non mi occorre.

Di fondo mi pare di capire dalle vostre risposte che se ho un database progettato a cane, di conseguenza qualsiasi cosa ci possa fare io non potrà mai essere veramente decente.

Capisco anche che scrivendo codice sotto una mal progettazione, è evidente che possano venire dubbi anche sui principi cardine della programmazione a oggetti.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 13:17   #13
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da cionci Guarda i messaggi
Fra le possibili scadenze ci può essere anche una manutenzione ? E quali altri tipi di scadenze ?
Vedo quel private string tipoScadenza; che mi lascia qualche dubbio.
per entrare più nel dettaglio:

come scadenze sono intese soltanto: bolli, assicurazioni, multe, gps.

per le manutenzioni sono intese invece solo: ordinarie/straordinarie
e nel campo descrizione viene inserito soltanto il testo relativo al numero di fattura di chi ha riparato l'autoveicolo.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 13:42   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Se le classi incapsulano i dati del DB allora non devi fare alcuna gerarchia, se fai una gerarchia nelle classi la devi fare anche nel DB e viceversa, altrimenti non ha senso.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 14:46   #15
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Ovunque ci sia l'applicazione del polimorfismo, se per qualche ragione devo ridisegnare o eliminare la classe base, poi tutto il lavoro fatto sulle altre classi viene gettato al vento ?

Cioè, in questo mio modo rudimentale di creare una classe a se stante per ogni cosa, vedo un vantaggio: se elimino o cambio soltanto la classe che mi interessa, non vado ad impattare su nessun'altra parte del programma.
Quanto dici è esatto. Il perchè deriva da uno dei cardini della prospettiva orientata agli oggetti che è il principio di autonomia.

La premessa è che un sistema orientato agli oggetti è fatto di oggetti e contrariamente a quanto si legge in alcuni mirabolanti testi oggetto NON E' ogni cosa.

In un sistema orientato agli oggetti con il termine oggetto si individua una qualsiasi parte autonomamente definibile di un fenomeno. Detto altrimenti una qualsiasi definizione intesa come insieme denominato di predicati è anche la definizione di un oggetto solo se tale definizione non dipende da altre definizioni esistenti nel sistema.

Sebbene la classe in sè non sia un elemento fondamentale dell'orientamento agli oggetti è facile notare come essa rientri pienamente nel concetto di definizione di oggetto in base all'osservazione che essa definisce un modello di comportamento uniforme per un insieme di oggetti: in pratica è una fabbrica di cloni. C'è una definizione di oggetto con la particolarità "meccanica" che da questa definizione può essere usata per produrre un numero infinito di oggetti identici.

Posto che le classi sono definizioni quando una classe deriva da un'altra ciò che succede è che tra la definizione derivata e quella derivante si instaura un rapporto di dipendenza: la definizione derivante richiede che esista la definizione derivata. En passant deve notarsi come la relazione di dipendenza tra definizioni non sia transitiva (questione centrale, se fosse transitiva ogni sistema orientato agli oggetti non potrebbe che essere un sistema composto di un solo oggetto).

Ora se oggetto è tutto ciò che in fenomeno è definibile autonomamente e io mi trovo di fronte a due definizioni A (superclasse) e B (sottoclasse) una delle quali richiede l'altra risulta evidente che A e B sono parti di un solo oggetto.

La superclasse è sempre parte della definizione di un oggetto, qualsiasi intervento sulla parte ha per definizione effetto sul tutto ergo quando cambi qualcosa nella superclasse hai un effetto collaterale.

L'idea della classe a sè stante per ogni cosa corrisponde in linea di principio all'individuazione statica dei diversi oggetti che esistono nel fenomeno.

Da un punto di vista dinamico è necessario tuttavia che gli oggetti "comunichino" tra loro. La comunicazione richiede condivisione di parti della proprio definizione e il punto di equilibrio dell'orientamento agli oggetti sta nella selezione di quelle definizioni che possono essere condivise senza pregiudicare l'esatta rappresentazione di un fenomeno in termini di oggetti, ciò che è reso possibile dalla considerazione che se le definizioni A e B richiedono l'esistenza di una definizione C, A e B risultano comunque reciprocamente indipendenti.

Cioè posso anche dire "ok elimino la classe base e dichiaro due classi separate, magari ripetendo le stesse cose due volte" ma prima o poi qualcuno dovrà "collegarsi" a quelle classi. A un certo punto qualcuno vorrà sapere se la manutezione sia stata pagata. Se per dirlo fa riferimento alla definizione "ManutenzioneVeicolo" allora ManutenzioneVeicolo perderà la propria identità di oggetto in favore della costituizione di un diverso oggetto XYZ + ManutenzioneVeicolo. E' lì che entrano in gioco ereditarietà e composizione: separi la definizione di ManutenzioneVeicolo in due parti (diciamo ManutenzioneVeicolo che estende Manutenzione, giusto per fare un esempio) e così facendo permetti all'oggetto ManutenzioneVeicolo (che è la composizione di due definizioni) di comunicare con un altro oggetto senza perdere la propria autonomia di definizione cioè senza perdere la propria identità nel sistema.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
Axiom Space ha completato un importante ...
Gli aeroplani Airbus utilizzeranno i sat...
Una nuova immagine della cometa interste...
'La soluzione a un problema che non esis...
Radeon RX 9000 sì, Ryzen 9000 no:...
Amazon versa 180 milioni al Fisco e canc...
Meta, il Board di Supervisione guarda o...
DJI rivoluziona le consegne aeree: il nu...
Fibercop e Microsoft Italia uniscono per...
App Store Award 2025: scarica le 17 app ...
NVIDIA fa marcia indietro, il supporto P...
Addio definitivo alla GeForce GTX 1080: ...
Numeri record per gli iPhone 17: Apple s...
L'Italia del 2025 raccontata da Google: ...
Piaggio lancia Porter NPE, il pick-up el...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:22.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v