Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-11-2011, 14:27   #1
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
[Object Orientation] Metodi getter/setter. Che ne pensate?

Ciao a tutti. All'università sto seguendo il corso di Progettazione del software e ultimamente stavamo parlando di object orientation. Volevo sentire la vostra opinione sui metodi getter/setter. Li usate, preferite un altro metodo o trovate un compromesso? Se usate un altro metodo, quale? Grazie
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 15:01   #2
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Personalmente mi sono sempre sembrati una stronzata.
Io tendo a rendere tutto immutabile (ad esempio in java le mie variabili di istanza sono tutte "public final"... dove possibile ovviamente).
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 15:08   #3
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Preferisco le property, già dai tempi di Delphi.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 15:15   #4
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da shinya Guarda i messaggi
Personalmente mi sono sempre sembrati una stronzata.
Io tendo a rendere tutto immutabile (ad esempio in java le mie variabili di istanza sono tutte "public final"... dove possibile ovviamente).
Anche secondo me sono una stronzata. Però per esempio, con il metodo che dici tu, se un tuo campo lo vuoi far diventare da int a long, hai qualche problema. O sbaglio? Mi riferisco al fatto che sia public.

Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Preferisco le property, già dai tempi di Delphi.
Cosa sono le property? Per esempio, in Java?
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 15:30   #5
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Anche secondo me sono una stronzata. Però per esempio, con il metodo che dici tu, se un tuo campo lo vuoi far diventare da int a long, hai qualche problema. O sbaglio? Mi riferisco al fatto che sia public.
Eh? Tipo? Scusa fammi un esempio di come non avresti lo stesso problema con getter/setter...
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 15:38   #6
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da shinya Guarda i messaggi
Eh? Tipo? Scusa fammi un esempio di come non avresti lo stesso problema con getter/setter...
No, appunto. Dico che anche quelli non sono la soluzione.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 15:42   #7
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Preferisco le property, già dai tempi di Delphi.
vedo le property di delphi e rilancio con le automatic properties di c# 3.0
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 15:53   #8
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
vedo le property di delphi e rilancio con le automatic properties di c# 3.0
Tu passi da doghe dei letti ad automatic properties di C#
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 15:56   #9
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Concettualmente sono una stronzata (sono le properties, ne più ne meno), ma in un linguaggio che non offre le properties tipo C++ o Java vanno usati, anche se a malincuore.

Ho provato a "farla semplice" e creare semplicemente membri pubblici, ma questo impedisce qualsiasi controllo su cosa viene settato dall'esterno e quando... e questo manco a dirlo è una fabbrica di bug.

Stesso dicasi per le letture, ad esempio qualcuno potrebbe decidere di prendersi un puntatore al membro, che poi viene invalidato senza che lui lo sappia.

Quindi, in C++/Java, getter e setter vanno usati a forza. In altri linguaggi, fate vobis

PS: mentre in C++ sono spesso inline e quindi non impattano sulle performance, in Java sono vere chiamate a funzione... e quindi oltre al danno, la lentezza!
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 16:12   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Tommo Guarda i messaggi
PS: mentre in C++ sono spesso inline e quindi non impattano sulle performance, in Java sono vere chiamate a funzione... e quindi oltre al danno, la lentezza!
Hai mai provato a vedere il bytecode generato?
No perchè a sentir voi, pare sempre che negli altri linguaggi il compilatore sia furbo mentra javac deve essere per forza una ciabatta che non è capace a ottimizzare roba del genere...
__________________

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 07-11-2011, 16:24   #11
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Tu passi da doghe dei letti ad automatic properties di C#
OT: lol, come ti chiami su tgm?
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 16:29   #12
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Risposta in privato [/OT]
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 16:40   #13
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Hai mai provato a vedere il bytecode generato?
No perchè a sentir voi, pare sempre che negli altri linguaggi il compilatore sia furbo mentra javac deve essere per forza una ciabatta che non è capace a ottimizzare roba del genere...
A voi!
Codice:
// H4xx0r.java
class H4xx0r {
  private int leet;

  public int getLeet() { return leet; }
  public void setLeet(int leet) { this.leet = leet; }

  public static void main(String... args) {
    H4xx0r h = new H4xx0r();
    h.setLeet(1337);
    System.out.println(h.getLeet());
  }
}

// H4xx0r2.java
class H4xx0r2 {
  public int leet;

  public static void main(String... args) {
    H4xx0r2 h = new H4xx0r2();
    h.leet = 1337;
    System.out.println(h.leet);
  }
}

// javap -c H4xx0r
Compiled from "H4xx0r.java"
class H4xx0r extends java.lang.Object{
H4xx0r();
  Code:
   0:	aload_0
   1:	invokespecial	#1; //Method java/lang/Object."<init>":()V
   4:	return

public int getLeet();
  Code:
   0:	aload_0
   1:	getfield	#2; //Field leet:I
   4:	ireturn

public void setLeet(int);
  Code:
   0:	aload_0
   1:	iload_1
   2:	putfield	#2; //Field leet:I
   5:	return

public static void main(java.lang.String[]);
  Code:
   0:	new	#3; //class H4xx0r
   3:	dup
   4:	invokespecial	#4; //Method "<init>":()V
   7:	astore_1
   8:	aload_1
   9:	sipush	1337
   12:	invokevirtual	#5; //Method setLeet:(I)V
   15:	getstatic	#6; //Field java/lang/System.out:Ljava/io/PrintStream;
   18:	aload_1
   19:	invokevirtual	#7; //Method getLeet:()I
   22:	invokevirtual	#8; //Method java/io/PrintStream.println:(I)V
   25:	return

}

// javap -c H4xx0r2.java
Compiled from "H4xx0r2.java"
class H4xx0r2 extends java.lang.Object{
public int leet;

H4xx0r2();
  Code:
   0:	aload_0
   1:	invokespecial	#1; //Method java/lang/Object."<init>":()V
   4:	return

public static void main(java.lang.String[]);
  Code:
   0:	new	#2; //class H4xx0r2
   3:	dup
   4:	invokespecial	#3; //Method "<init>":()V
   7:	astore_1
   8:	aload_1
   9:	sipush	1337
   12:	putfield	#4; //Field leet:I
   15:	getstatic	#5; //Field java/lang/System.out:Ljava/io/PrintStream;
   18:	aload_1
   19:	getfield	#4; //Field leet:I
   22:	invokevirtual	#6; //Method java/io/PrintStream.println:(I)V
   25:	return

}
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 17:00   #14
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da shinya Guarda i messaggi
A voi!
snip...
Ok, è una ciabatta

Scherzi (e svarione mio) a parte, il costo a runtime dei getter/setter è trascurabile, se vengono effettuate poche chiamate.
Se vengono effettuate molte chiamate, la JVM compila il metodo in maniera nativa (normalmente con HotSpot ricordo che se un metodo viene invocato 1000 volte a runtime viene compilato).
Non saprei se al posto della compilazione nativa di un getter/setter liscio sia prevista la possibilità di effettuare un accesso diretto al campo...

Chiaro che se la classe è final e i suoi campi sono immutabili, questi utlimi possono semplicemente essere esposti come pubblici.

In ogni caso, a livello prestazionale, quanto può mai essere rilevante il peso dei getter/setter nella tipica applicazione media per cui viene usato Java?
__________________

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)

Ultima modifica di banryu79 : 07-11-2011 alle 17:06.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 17:50   #15
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
In ogni caso, a livello prestazionale, quanto può mai essere rilevante il peso dei getter/setter nella tipica applicazione media per cui viene usato Java?
Dato che ho qualche minuto di inattività...
Codice:
// Setters.java
class Setters {
  private double x;

  public void setX(double x) { this.x = x; }

  public static void main(String... args) {
    for (int i = 1; i <= 5; ++i) {
      System.out.print("Try " + i + ": ");
      final Setters victim = new Setters();
      final long start = System.nanoTime();
      
      for (int j = 0; j < 100000; ++j) {
        victim.setX(Math.random());
      }
      System.out.println((System.nanoTime() - start) / 1000000000.0);
    }
  }
}

// NoSetters.java
class NoSetters {
  public double x;

  public static void main(String... args) {
    for (int i = 1; i <= 5; ++i) {
      System.out.print("Try " + i + ": ");
      final NoSetters victim = new NoSetters();
      final long start = System.nanoTime();
      
      for (int j = 0; j < 100000; ++j) {
        victim.x = Math.random();
      }
      System.out.println((System.nanoTime() - start) / 1000000000.0);
    }
  }
}
I risultati sono "meh"...
Codice:
c:\> java Setters
Try 1: 0.009697214
Try 2: 0.00675697
Try 3: 0.007349395
Try 4: 0.006881777
Try 5: 0.007874961

c:\> java NoSetters

Try 1: 0.014335313
Try 2: 0.006779257
Try 3: 0.006854627
Try 4: 0.007369251
Try 5: 0.006836393
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 18:49   #16
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Cosa sono le property? Per esempio, in Java?
Java non le ha ovviamente, per cui nisba esempi.

Ti evito Delphi e fornisco un esempio semplice in C# direttamente dalla mamma.
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
vedo le property di delphi e rilancio con le automatic properties di c# 3.0
Beh, io ho detto già ai tempi. Come dire: roba vecchia.

Poi sappiamo pure chi è il papà di C#, no?

Ovviamente son d'accordo con l'evoluzione che hanno preso in C# (ci sono pure le property virtuali ).
Quote:
Originariamente inviato da Tommo Guarda i messaggi
Quindi, in C++/Java, getter e setter vanno usati a forza. In altri linguaggi, fate vobis
C'è di meglio, appunto.
Quote:
PS: mentre in C++ sono spesso inline e quindi non impattano sulle performance, in Java sono vere chiamate a funzione... e quindi oltre al danno, la lentezza!
Questo è anche dovuto al fatto che normalmente i metodi in Java sono virtuali, per cui il compilatore non può certo renderli inline come fa il C++, dove sei TU a dichiarare virtuali i metodi se proprio li vuoi così, altrimenti sono assimilabili a delle normali funzioni e quindi il compilatore può rovistarci dentro per capire se può ottimizzare qualcosa.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 18:51   #17
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
@banryu79: lol! A difendere la VM Java si rischia sempre un sacco

@shinya: quel test fa acqua, random è troppo più pesante di una singola chiamata a funzione

Prova a fare l'unroll e usare una roba del genere

Codice:
for (int i = 1; i <= 5; ++i) {
      System.out.print("Try " + i + ": ");
      final Setters victim = new Setters();
      final long start = System.nanoTime();
      
      int lol = 2389472;

      for (int j = 0; j < 100000; ++j) {
        victim.setX(lol);
        victim.setX(lol);
        victim.setX(lol);
        victim.setX(lol);

        victim.setX(lol);
        victim.setX(lol);
        victim.setX(lol);
        victim.setX(lol);
      }
      System.out.println((System.nanoTime() - start) / 1000000000.0);
    }
vedrai che la differenza si vede!

Comunque, il peso del getter e setter è sicuramente poco, ma in codici compute-intensive è sicuramente meglio non averlo

@cdimauro il NON poter dichiarare qualcosa "non virtuale" invece, prova che Java è un pò una fetecchia...
ma d'altra parte grazie alla mancanza di operator overloading pure le somme tra vettori devono essere una chiamata a funzione virtuale, quindi sta messo male
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 07-11-2011 alle 18:58.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 19:44   #18
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quello sì, l'overloading è una manna dal cielo (per anni ne ho sentito la mancanza in Delphi).

Però le funzioni non virtuali le puoi dichiarare come static: sono la stessa cosa alla fine.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 20:49   #19
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
@Tommo non mi pare che banryu abbia detto castronate
cmq ho provato il tuo codice alzando a 1 miliardo il numero di iterazioni del for: con i setter ho avuto 0.03526231 secondi di media dei 5 try, mentre senza setter ho avuto 0.03517135.
Quindi, su 1 miliardo di iterazioni, il codice coi setter è più lento dello 0,0026% rispetto al codice senza setter, ovvero 91microsecondi (sempre su 1 miliardo di iterazioni).
E' palese che non posso spalmare 91microsecondi su 8 miliardi di set, ciò mi fa dedurre che probabilmente la jvm ottimizzi "strada facendo" e che comunque non ci sia un calo di prestazioni degno di nota. Se mi importasse quel margine di performance, allora farei meglio a passare al C o direttamente all'assembly...

Conclusione: non mi pare si possa dire qualcosa su quanto schifo faccia il java sulla base di questi discorsi. Poi si sa, è solo una questione di simpatia o antipatia personale verso i linguaggi.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2011, 21:17   #20
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Quote:
Originariamente inviato da demos88 Guarda i messaggi
@Tommo non mi pare che banryu abbia detto castronate
cmq ho provato il tuo codice alzando a 1 miliardo il numero di iterazioni del for: con i setter ho avuto 0.03526231 secondi di media dei 5 try, mentre senza setter ho avuto 0.03517135.
Quindi, su 1 miliardo di iterazioni, il codice coi setter è più lento dello 0,0026% rispetto al codice senza setter, ovvero 91microsecondi (sempre su 1 miliardo di iterazioni).
E' palese che non posso spalmare 91microsecondi su 8 miliardi di set, ciò mi fa dedurre che probabilmente la jvm ottimizzi "strada facendo" e che comunque non ci sia un calo di prestazioni degno di nota. Se mi importasse quel margine di performance, allora farei meglio a passare al C o direttamente all'assembly...

Conclusione: non mi pare si possa dire qualcosa su quanto schifo faccia il java sulla base di questi discorsi. Poi si sa, è solo una questione di simpatia o antipatia personale verso i linguaggi.
beh oddio... arrivati alla versione 7 potrebbero anche provare a darvi un po' di zucchero sintattico, non fa ingrassare mica...

Codice:
public class MyClass
{
    public int Id { get; set; }

    private string _name;

    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
        }
    }
}
Kralizek è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Rapporto Clusit 2026: finanza e infrastr...
Gli stessi sali che solidificano il tofu...
Il conflitto in Medio Oriente minaccia l...
OnlyFans, scomparso il proprietario Leon...
Le migliori offerte Amazon da leggere in...
Recensioni su Trustpilot non affidabili,...
Il CISPE denuncia Broadcom all'antitrust...
Il cyberattacco che negli Usa ha trasfor...
AI Grid Intelligent Orchestration, l'inf...
Roborock Qrevo CURV 2 Flow X: tecnologia...
Quanto viaggia il modem di iPhone Air? I...
300 GB di memoria RAM per le future gene...
One-Tap Share: come funziona la condivis...
Xiaomi Redmi Note 15 Pro scende ancora d...
4 robot rasaerba crollati di prezzo, tut...
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: 17:01.


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