Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Con un prezzo di 2.999 euro, il Panasonic Z95BEG entra nella fascia ultra-premium dei TV OLED: pannello Primary RGB Tandem, sistema di raffreddamento ThermalFlow, audio Technics integrato e funzioni gaming avanzate lo pongono come un punto di riferimento
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
Abbiamo provato per diverse settimane il nuovo Magic V5 di HONOR, uno smartphone pieghevole che ci ha davvero stupito. Il device è il più sottile (solo 4.1mm) ma non gli manca praticamente nulla. Potenza garantita dallo Snapdragon 8 Elite, fotocamere di ottima qualità e batteria in silicio-carbonio che garantisce un'ottima autonomia. E il Prezzo? Vi diciamo tutto nella nostra recensione completa.
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro)
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro)
Google Pixel 10 Pro XL è il top di gamma della serie Pixel, presentando un ampio display Super Actua da 6.8 pollici insieme alle novità della serie, fra cui la ricarica wireless magnetica Pixelsnap e le nuove funzionalità AI avanzate. Il comparto fotografico include un sistema a tripla fotocamera con zoom Pro Res fino a 100x, mentre il processore Tensor G5 con 16GB di RAM garantisce prestazioni percepite molto elevate su Android.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-11-2005, 14:49   #1
shang84
Senior Member
 
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
[Programmazione Object Oriented] Buone norme..

Salve,
volevo sapere quali sono le buone norme di programmazione object oriented.

Intendo dire:

è bene che una classe abbia un costruttore non void all'interno del quale chiama i vari metodi (propri della classe) che inizializzano i diversi attrbuti private dalla classe.

Questi metodi in base al tipo di parametri passati al costrutture non void inizializzano gli attributi della classe in modo diverso.

Vengono chiamati in un'ordine preciso, altrimenti il programma crasha per Segmentation Fault in quanto il metodo 2 lavora sugli attributi inizializzati dal metodo 1 e cosi via.

Non chiedo questo perchè non mi gira il programma, ma bensi per far si che il codice che sto producendo sia il + mantenibile e il -caotico possibile.



Codice:
Classe A {
  private:
  attributo 1; //puntatore a dato da allocare dinamicamente tramite metodo1
  attributo 2;
  public A(parametro){
       metodo1(parametro);
       metodo2();
      //questo è l'ordine preciso in cui i due metodi devono essere chiamati
    // altrimenti a run time metodo2 che lavora su attributo1 (che ad es è un puntatore)
  // fa crashare il programma per segmentation fault in quanto l'attributo
  // non è stato allocato dinamicamente 

 }
private metodo1(p){...};
private metodo2(){...};

}
shang84 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 01:12   #2
breiko
Member
 
L'Avatar di breiko
 
Iscritto dal: Apr 2004
Città: Vicenza
Messaggi: 123
Quote:
è bene che una classe abbia un costruttore non void all'interno del quale chiama i vari metodi (propri della classe) che inizializzano i diversi attrbuti private dalla classe.
Il costruttore non ha tipo di ritorno quindi non esiste costruttore void o non void.

Poi va bene inizializzare le variabili di istanza di un oggetto con il costruttore, è l'utilizzo classico.

Nel tuo caso specifico però non ho chiara la situazione e quindi non posso darti altre soluzioni.

Ciao
__________________
Love, let me sleep tonight on your couch
And remember the smell of the fabric of your simple
city dress [Jeff Buckley - So real]
breiko è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 09:12   #3
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
allora, per buona norma una classe ben progettata deve aver un:
toString();
equals();
compareTo();
le variabili private e i metodi di accesso alle variabili set e get.

Per altre specifiche, non credo siano necessarie, al massimo ti consiglio di implementare cloneable e ridefinire il metodo clone();.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 09:21   #4
end.is.forever
Senior Member
 
Iscritto dal: Jul 2004
Messaggi: 1578
Quote:
Originariamente inviato da franksisca
allora, per buona norma una classe ben progettata deve aver un:
toString();
equals();
compareTo();
Stai scherzando vero?
end.is.forever è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 09:44   #5
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
forse ho dimenticato di specificare in java


perchè in JAVA è così
__________________
My gaming placement

Ultima modifica di franksisca : 08-11-2005 alle 09:59.
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 09:59   #6
akfhalfhadsòkadjasdasd
 
Messaggi: n/a
Quote:
Originariamente inviato da franksisca
allora, per buona norma una classe ben progettata deve aver un:
toString();
equals();
compareTo();
le variabili private e i metodi di accesso alle variabili set e get.

Per altre specifiche, non credo siano necessarie, al massimo ti consiglio di implementare cloneable e ridefinire il metodo clone();.
questo è lo stato dell'arte (buono per l'esame )
  Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:03   #7
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da trias
buono per l'esame
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:14   #8
end.is.forever
Senior Member
 
Iscritto dal: Jul 2004
Messaggi: 1578
Quote:
Originariamente inviato da franksisca
perchè in JAVA è così
Ma in nessun linguaggio
end.is.forever è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:22   #9
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da franksisca
allora, per buona norma una classe ben progettata deve aver un:
Una classe ben progettata deve fare nulla di piu' di quello che le e' richiesto, in qualunque linguaggio

Quindi se toString() non e' richiesto, non lo si scrive. Se per l'oggetto non ha senso essere clonato, non si implementa Cloneable. E cosi' via...
fek è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:24   #10
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da end.is.forever
Ma in nessun linguaggio
Non capisco cosa vuoi dire, magari in altri linguaggi non si chiamano in quel modo, ma il significato credo che sia da esplicitare in ogni oggetto, q eusto prp:

equals = ritorna tru se l'oggetto chiamato (a) è uguale all'oggetto chiamante (b), in java a.equals(b)

compareTo = ritorna un intero che individua l'ordine degli oggetti, sempre in java:
a.compareTo(b) =1 se a>b, =-1 se b>a, =0 se aè=b;
il toString() stampa l'oggetto.

Ripeto, in java si chiamano così, ma credo che siano delle otttime regole di lavoro ad oggetto.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:26   #11
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da fek
Una classe ben progettata deve fare nulla di piu' di quello che le e' richiesto, in qualunque linguaggio

Quindi se toString() non e' richiesto, non lo si scrive. Se per l'oggetto non ha senso essere clonato, non si implementa Cloneable. E cosi' via...
Vero, naturalmente, ma se mi vengono chiesti degli standard di scrittura di un oggetto, io quelli ce li metto sempre, anche se non mi servono, tanto non mi rubano più di 5 minuti, e se li guarderà qualcun'altro almeno qualcosa di comprensibile ci sarà.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:31   #12
end.is.forever
Senior Member
 
Iscritto dal: Jul 2004
Messaggi: 1578
Quote:
Originariamente inviato da franksisca
Non capisco cosa vuoi dire, magari in altri linguaggi non si chiamano in quel modo, ma il significato credo che sia da esplicitare in ogni oggetto, q eusto prp:

equals = ritorna tru se l'oggetto chiamato (a) è uguale all'oggetto chiamante (b), in java a.equals(b)

compareTo = ritorna un intero che individua l'ordine degli oggetti, sempre in java:
a.compareTo(b) =1 se a>b, =-1 se b>a, =0 se aè=b;
il toString() stampa l'oggetto.

Ripeto, in java si chiamano così, ma credo che siano delle otttime regole di lavoro ad oggetto.
Non sono norme di programmazione, sono particolari interfacce, quindi caratteristiche che alcuni elementi possono avere altri no.

Il metodo equals lo implementi quando per qualche ragione hai bisogno di confrontare due istanze di quella classe, compareTo quando le istanze di quella classe possono essere associate ad un insieme ordinato, toString (e ancora più raro) quando ti serve una rappresentazione sotto forma di stringa dell'istanza (quest'ultimo poi non lo si usa quasi mai, essendo inadatto a pattern di costruzione delle stringhe efficienti, e poi perchè molto spesso si preferisce delegare a classi apposite la conversione dato che non necessariamente è responsabilità della classe stessa).

Posso condividere il get dei campi privati, per il set già sono meno d'accordo, se hai un campo che è scrivibile e leggibile tanto vale che sia pubblico.
Questo a meno che tu non abbia bisogno di fare qualcosa al momento della scrittura/lettura, e anche qui (come per i 3 metodi di cui parli) si tratta sempre di casi particolari e non di norme.
end.is.forever è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:32   #13
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da franksisca
Vero, naturalmente, ma se mi vengono chiesti degli standard di scrittura di un oggetto, io quelli ce li metto sempre, anche se non mi servono, tanto non mi rubano più di 5 minuti, e se li guarderà qualcun'altro almeno qualcosa di comprensibile ci sarà.
Se un coding standard ti richiede di scrivere metodi anche se non ti servono non e' un buon coding standard e va modificato.

"L'unica riga di codice senza bug e' quella che non scrivi".

Non sono solo i 5 minuti che perdi per classe (che poi per 10 classi significano 50 minuti che puoi spendere magari semplificando il codice, per 100 classi sono gia' 500 minuti, quasi 10 ore, piu' di una giornata di lavoro). Quei metodi li paghi in termini di manutenzione del codice: se cambi qualcosa e il metodo che non usi non compila? lo devi modificare ad esempio; e se cambi l'implementazione della casse? devi cambiare anche quei metodi per riflettere la nuova implementazione, anche se non li usi da nessuna parte; e se li lasci scorretti? che senso avrebbe avere un'implementazione scorretta, nessuno.

Il codice deve esprimere solo e unicamente i concetti che servono alla risoluzione del problema e nient'altro.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:35   #14
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da end.is.forever
Posso condividere il get dei campi privati, per il set già sono meno d'accordo, se hai un campo che è scrivibile e leggibile tanto vale che sia pubblico.
Per buona norma e' sempre e comunque preferibile disaccoppiare i campi attraverso propert get/set, tanto che in linguaggi come C# questa norma e' diventata un costrutto del linguaggio.
La ragione e' disaccoppiare la semantica della proprieta' (ad esempio un contatore in una classe) dall'implementazione della proprieta' stessa (una variabile, oppure magari un ciclo, o quant'altro).
Disaccoppiare l'"interfaccia" dall'implementazione e' sempre una buona idea, perche' riduce gli errori.

Alcuni coding standard portano questo discorso al limite e richiedono che anche i campi privati (e non solo quelli pubblici) siano esposti attraverso property get/set.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:38   #15
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da franksisca
Non capisco cosa vuoi dire, magari in altri linguaggi non si chiamano in quel modo, ma il significato credo che sia da esplicitare in ogni oggetto, q eusto prp:
Come implementeresti compareTo() per una classe Complex che rappresenta numeri complessi?

Non per tutti gli oggetti (anzi per pochissimi, e per la precisione i value type ordinabili) ha senso un'operazione di comparazione.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:39   #16
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da fek
Se un coding standard ti richiede di scrivere metodi anche se non ti servono non e' un buon coding standard e va modificato.

"L'unica riga di codice senza bug e' quella che non scrivi".

Non sono solo i 5 minuti che perdi per classe (che poi per 10 classi significano 50 minuti che puoi spendere magari semplificando il codice, per 100 classi sono gia' 500 minuti, quasi 10 ore, piu' di una giornata di lavoro). Quei metodi li paghi in termini di manutenzione del codice: se cambi qualcosa e il metodo che non usi non compila? lo devi modificare ad esempio; e se cambi l'implementazione della casse? devi cambiare anche quei metodi per riflettere la nuova implementazione, anche se non li usi da nessuna parte; e se li lasci scorretti? che senso avrebbe avere un'implementazione scorretta, nessuno.

Il codice deve esprimere solo e unicamente i concetti che servono alla risoluzione del problema e nient'altro.

Sono d'accordo, infatti io molte volte non li uso, ma si parlava di standard.
Ora vi faccio un esempio:
Lo standard di progettazione di un software è questo(molto semplificato) diagramma UML,relazione e manuali, Implementazione, testing e pubblicazione.
Ora dimmi, fek, tu che sei un esempio per molti di noi, se tu nella tua vita lavorativa hai seguito questo sviluppo.
Io personalmente, ancora no, ma ritengo che come standard di progettazione vada bene.
ora, la stessa cosa succede per gli oggetti, almeno credo.
se devo fare un programma di inserimento in un database, è logico che il toString non lo uso, ma se mi chiedi come standard se ce lo metto, io allora ti rispondo di si, che come buona regola lo metterei.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:45   #17
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da franksisca
Sono d'accordo, infatti io molte volte non li uso, ma si parlava di standard.
Ora vi faccio un esempio:
Lo standard di progettazione di un software è questo(molto semplificato) diagramma UML,relazione e manuali, Implementazione, testing e pubblicazione.
Ora dimmi, fek, tu che sei un esempio per molti di noi, se tu nella tua vita lavorativa hai seguito questo sviluppo.
No, perche' questa metodologia di sviluppo (Waterfall) e' tutto fuorche' efficiente. Anzi, e' un metodo molto costoso, e assolutamente non ottimale, per scrivere codice e costruire software

Quote:
Io personalmente, ancora no, ma ritengo che come standard di progettazione vada bene.
ora, la stessa cosa succede per gli oggetti, almeno credo.
se devo fare un programma di inserimento in un database, è logico che il toString non lo uso, ma se mi chiedi come standard se ce lo metto, io allora ti rispondo di si, che come buona regola lo metterei.
Le buone regole non sono teoriche, sono pratiche e pragmatiche. Una regola e' buona se mi fa risparmiare tempo di sviluppo, mi riduce l'incidenza dei difetti, mi aumenta la produttivita'. Scrivere toString() per tutte le classi anche se non serve, o peggio ancora tale metodo non e' definibile per tale classe, non mi fa risparmiare tempo di sviluppo (anzi), non mi riduce l'incidenza dei difetti (anzi), non mi aumenta la produttivita' (anzi).
Inoltre non segue la regola d'oro della programmazione: "Keep it simple". Ricorda che programmare significa gestire la complessita' di una soluzione, mantenerla al minimo, e vuoi evitare tutto cio' che aumenta questa complessita' e non ti permette di gestirla.

Scrivere codice non utilizzato aumenta la complessita' di una soluzione e come tale non e' una buona regola di programmazione.

In parole povere, se non ti servono, non devi scrivere quei metodi. Questa e' una buona regola di programmazione
fek è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:50   #18
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da fek
No, perche' questa metodologia di sviluppo (Waterfall) e' tutto fuorche' efficiente. Anzi, e' un metodo molto costoso, e assolutamente non ottimale, per scrivere codice e costruire software
E io sono daccordo, ma in tutti i corsi di progettazione software è wuello considerato "migliore".

Quote:
Originariamente inviato da fek
In parole povere, se non ti servono, non devi scrivere quei metodi. Questa e' una buona regola di programmazione
E anche qui sono daccordo, ma ripeto, come regole di buona programmazione io le scriverei comunque, è vero che magari non le usano e mi inducono ad errore, ma se sbaglio un toString, o uno dei simili, che a livello di programmazione non sono niente di complicato(confronti e stampa di variabili interne), credo che la quantità d'errore sia davvero minima.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:54   #19
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 franksisca
allora, per buona norma una classe ben progettata deve aver un:
toString();
equals();
compareTo();
le variabili private e i metodi di accesso alle variabili set e get.

Per altre specifiche, non credo siano necessarie, al massimo ti consiglio di implementare cloneable e ridefinire il metodo clone();.
Non hanno senso per tutte le classi quindi non è vero che debbano essere sempre implementati...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2005, 10:56   #20
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da franksisca
E io sono daccordo, ma in tutti i corsi di progettazione software è wuello considerato "migliore".
Sbagliano

Quote:
E anche qui sono daccordo, ma ripeto, come regole di buona programmazione io le scriverei comunque, è vero che magari non le usano e mi inducono ad errore, ma se sbaglio un toString, o uno dei simili, che a livello di programmazione non sono niente di complicato(confronti e stampa di variabili interne), credo che la quantità d'errore sia davvero minima.
Davvero minima e' comunque diverso da zero.

Proviamo un discorso piu' pragmatico: mi dici quali di queste variabile la pratica di scrivere quei metodi anche quando non servono abbassa? Costo, tempo di sviluppo, numero di difetti.

Se una pratica mi abbassa uno di questi numeri, io sono felicissimo di attuarla. Altrimenti no.

In altre parole, se ti serve un mezzo per andare dal lavoro a casa, che distano cinque chilometri, ti compri una bicicletta, una macchina o un elicottero? Nella vita reale tu paghi qualcosa che non usi e che sai che non ti serve?

E' la stessa cosa nel codice: dammi un buon motivo per pagare qualcosa in termini di tempo e io pago. Altrimenti non pago. "Perche' si fa cosi'" non e' un buon motivo.
fek è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli Recensione OnePlus Watch 3 43mm: lo smartwatch c...
L'immagine del telescopio spaziale James...
Marte potrebbe aver subito diversi grand...
Mortal Kombat 2: il film con Karl Urban ...
Meta sta bannando migliaia di account e ...
Tesla China taglia già il prezzo ...
L'intelligenza artificiale sta riducendo...
Salesforce ha tagliato 4.000 posti nel s...
Xiaomi continua di slancio: ad agosto co...
La community batte gli sviluppatori: FSR...
Nuovi coupon nascosti di settembre: scon...
Luxeed S7 e R7, le nuove bombe di Huawei...
TSMC domina il mercato della produzione ...
Microsoft ammette: IIS Express potrebbe ...
Conclusa con successo la campagna di ESA...
WhatsApp Beta iOS: al lavoro sugli stati...
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: 03:51.


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