Προς το περιεχόμενο

Arguments σε Objective C


zarzonis

Προτεινόμενες αναρτήσεις

Δεν έχει νόημα να σου απαντήσει κανείς σε αυτή τη φάση και για αυτά που γράφεις γιατί έχεις ανακατέψει κάποιες έννοιες...

 

Εν γένει, το θέμα με τα arguments το έχεις πιάσει μέσες-άκρες. Αλλά ως εκεί :)

 

 

Διάβασε τον Booch, να καταλάβεις τι σημαίνει instance και τι class... να καταλάβεις γιατί έχουμε classes, που εξυπηρετούν και τι προσφέρουν. 

 

Αφού τον διαβάσεις, τότε θα μπορείς και μόνος σου να προχωρήσεις πολύ πιο άνετα. 

 

 

Δεν είναι κάποιο δύσκολο βιβλίο... δεν έχει (σχεδόν) καθόλου κώδικα (εάν θυμάμαι καλά). Πιο πολύ conceptual είναι. Διαβάζεται άνετα μέσα σε μία εβδομάδα. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

<p>Δεν έχει νόημα να σου απαντήσει κανείς σε αυτή τη φάση και για αυτά που γράφεις γιατί έχεις ανακατέψει κάποιες έννοιες...</p>

<p> </p>

<p>Εν γένει, το θέμα με τα arguments το έχεις πιάσει μέσες-άκρες. Αλλά ως εκεί :)</p>

<p> </p>

<p> </p>

<p>Διάβασε τον Booch, να καταλάβεις τι σημαίνει instance και τι class... να καταλάβεις γιατί έχουμε classes, που εξυπηρετούν και τι προσφέρουν. </p>

<p> </p>

<p>Αφού τον διαβάσεις, τότε θα μπορείς και μόνος σου να προχωρήσεις πολύ πιο άνετα. </p>

<p> </p>

<p> </p>

<p>Δεν είναι κάποιο δύσκολο βιβλίο... δεν έχει (σχεδόν) καθόλου κώδικα (εάν θυμάμαι καλά). Πιο πολύ conceptual είναι. Διαβάζεται άνετα μέσα σε μία εβδομάδα. </p>

 

Σε ευχαριστώ πολύ. Θα το αγοράσω το συντομότερο δυνατόν μόλις μαζέψω τα χρήματα.

ΥΓ: έπαιζα με λίγο κώδικα και τα παραδείγματα που είχε το βιβλίο που έχω τώρα, έλυσα και τις ασκήσεις και ΕΠΙΤΕΛΟΥΣ (φυσικά και με την δικιά σου βοήθεια από το πρώτο σου post) κατάλαβα τι είναι το καθένα. Τα ξεκαθάρισα απόλυτα τώρα τι είναι σαν έννοιες και πως λειτουργούν μέχρι ένα βασικό σημείο...

 

Sent from my iPhone using Insomnia

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καλησπέρα. Εχω ξεκινήσει να μαθαίνω προγραμματισμό σε Objective C με το βιβλίο του Stephen Kochan και έχω μια απορία. Δεν έχω καταλάβει τι ακριβώς είναι τα arguments.

Πχ λέει:

-( void) setNumerator: (int) n;

-(void) setDenominator: (int) d;

 

These are both instance methods that return no value. Each method takes an integer argument, which is indicated by the (int) in front of the argument name. In the case of setNumerator, the name is n. the name is arbitrary and is the name the method uses to refer to the argument.

 

Πραγματικά αν μπορούσε κάποιος να μου εξηγήσει τι ακριβώς είναι τα arguments και αυτά τα setNumerator και setDenominator από που προέκυψαν, θα του ήμουν ευγνώμων.

 

Sent from my iPhone using Insomnia

 

Καλησπέρα.Καλη σκέψη να ξεκινησεις προγραμματισμο απο νωρις.... πρεπει να εισαι έτοιμος μολις βγεις απο την σχολη να μπορεις να δουλέψεις πανω σε αυτο οποτε οσο νωριτερα τοσο το καλυτερο.... Στην C# έχεις πέρασμα παραμέτρων σε μια συνάρτηση με 2 τρόοπους. Με τιμή (pass by value) και μεσω αναφοράς ( pass by reference) θα σου μιλησω μονο για την πρωτη η οποια παιζει και στην C. H C ειναι διαδικαστικός προγραμματισμος και επισης η C ειναι ΑΥΣΤΗΡΑ pass by value. Έστω το παρακάτω παράδειγμα :

using System;
class PassingValByVal
{
    static void SquareIt(int x)
    // The parameter x is passed by value.
    // Changes to x will not affect the original value of myInt.
    {
        x *= x;
        Console.WriteLine("The value inside the method: {0}", x);
    }
    public static void Main()
    {
        int myInt = 5;
        Console.WriteLine("The value before calling the method: {0}",
           myInt);
        SquareIt(myInt);   // Passing myInt by value.
        Console.WriteLine("The value after calling the method: {0}",
           myInt);
    }
}

Οταν λέμε πέρασμα μιας παραμέτρου με τιμή μεσα σε μια συνάρτηση εννοουμε οτι η συνάρτηση δουλεύει με ένα αντιγραφο της μεταβλητής και οχι με την ιδια την μεταβλητή. Ακριβως για αυτο τον λογο μολις η συνάρτηση τελειώσει πιθανες αλλαγές στην μεταβλητή που της πέρασες δεν θα υπάρχουν πιά. Πιο πάνω έχεις μια μεταβλητή myInt η οποια στην main έχει την τιμή 5 η πρωτη WriteLine σου δειχνει αυτη την τιμή.... μετα καλείς την συνάρτηση SquareIt η οποια δέχεται σαν παράμετρο αυτον ακριβως τον αριθμό και μέσα στην συνάρτηση ουσιαστικά ο αριθμος θα ειναι x = x * x => x = 5 * 5 => x = 25. Επειδη η x *=x; ειναι ισοδυναμη με την x = x * x; μετα παλι με την WriteLine δειχνει την νέα τιμή η οποια επειδη έχει περαστει by value ΔΕΝ θα διατηρηθεί ειναι αντιγραφο οποτε στην συνέχεια οταν η συνάρτηση επιστρέψει στην main θα δωσεις αλλη μια WriteLine για να δεις αυτο που ειπαμε προ λιγου οτι δηλαδη πραγματι x= 5 και οχι x = 25. Η συνάρτηση ειναι τύπου void πραγμα που σημαινει οτι ΔΕΝ επιστρέφει κάποια τιμή.

 

Οι αλλαγές επηρεάζουν μονο την τοπική μεταβλητή μεσα στην συνάρτηση την x δηλαδη για αυτο οσο η συνάρτηση θα διαρκεί αυτη εκει μεσα θα εχει την τιμή 25 .... η εμβελεια της ειναι τοπική μέσα στο μπλοκ { ... } της συνάρτησης. Τα ονοματα των συναρτήσεων θα πρεπει να ειναι περιγραφικά δηλαδη να σου δινουν να καταλαβαινεις τι ειδους εργασια προκειται να επιτελεσουν εδω πχ επιτελεις την εργασια του τετραγώνου. Σε υποχρεωνει καποιος να χρησιμοποιησεις περιγραφικα ονοματα συναρτησεων και μεταβλητων? ΟΧΙ αλλα ειναι μια συμβαση μεταξυ των προγραμματιστων ωστε ο κωδικας να ειναι ευαναγνωστος και να μπορουν να τον παρακολουθησουν περισσοτεροι προγραμματιστες ετσι ωστε να τον διορθωσουν ή να τον αναβαθμισουν κτλπ.

 

Στις συναρτήσεις που μας έδωσες

-( void) setNumerator: (int) n;
-(void) setDenominator: (int) d;

φαινεται καταρχην οτι ειναι τύπου void και αρα δεν θα επιστρεψουν κάποια τιμή These are both instance methods that return no value σε αυτη την συναρτηση που τις κάλεσε για παραδειγμα εσυ μπορει να ηθελες να επιστρεψεις μια τιμη στην main αυτο θα ηταν κατι το διαφορετικο απο αυτο που παρουσιάζεται εδω.

 

Το ονομα setNumerator ειναι να θέσεις καποιον αριθμητη ενω το άλλο καποιον παρανομαστή και τα ορισματα που θα παιρνει η καθε συναρτηση θα ειναι δυο αριθμοι ακεραιοι... οπως γραφει και το βιβλιο σου για τις δυο συναρτήσεις Each method takes an integer argument, which is indicated by the (int) in front of the argument name.

 

Τέλος In the case of setNumerator, the name is n. the name is arbitrary and is the name the method uses to refer to the argument. Με άλλα λογια εδω σου λεει οτι το ονομα που θα επιλέξει για την μεταβλητή ειναι αυθαίρετο και ουσιαστικα ειναι το ονομα που χρησιμοποιει η μεθοδος / συνάρτηση για να αναφερθεί στο ορισμα - παράμετρος.Αλλωστε απο το ονομα που έχει επιλεξει για την ιδια την μεθοδο μπορεις να καταλαβεις αυτο το arbitrary n ή d τι ακριβως θελει να συμβολισει.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Καλησπέρα.Καλη σκέψη να ξεκινησεις προγραμματισμο απο νωρις.... πρεπει να εισαι έτοιμος μολις βγεις απο την σχολη να μπορεις να δουλέψεις πανω σε αυτο οποτε οσο νωριτερα τοσο το καλυτερο.... Στην C# έχεις πέρασμα παραμέτρων σε μια συνάρτηση με 2 τρόοπους. Με τιμή (pass by value) και μεσω αναφοράς ( pass by reference) θα σου μιλησω μονο για την πρωτη η οποια παιζει και στην C. H C ειναι διαδικαστικός προγραμματισμος και επισης η C ειναι ΑΥΣΤΗΡΑ pass by value. Έστω το παρακάτω παράδειγμα :

using System;
class PassingValByVal
{
    static void SquareIt(int x)
    // The parameter x is passed by value.
    // Changes to x will not affect the original value of myInt.
    {
        x *= x;
        Console.WriteLine("The value inside the method: {0}", x);
    }
    public static void Main()
    {
        int myInt = 5;
        Console.WriteLine("The value before calling the method: {0}",
           myInt);
        SquareIt(myInt);   // Passing myInt by value.
        Console.WriteLine("The value after calling the method: {0}",
           myInt);
    }
}

Οταν λέμε πέρασμα μιας παραμέτρου με τιμή μεσα σε μια συνάρτηση εννοουμε οτι η συνάρτηση δουλεύει με ένα αντιγραφο της μεταβλητής και οχι με την ιδια την μεταβλητή. Ακριβως για αυτο τον λογο μολις η συνάρτηση τελειώσει πιθανες αλλαγές στην μεταβλητή που της πέρασες δεν θα υπάρχουν πιά. Πιο πάνω έχεις μια μεταβλητή myInt η οποια στην main έχει την τιμή 5 η πρωτη WriteLine σου δειχνει αυτη την τιμή.... μετα καλείς την συνάρτηση SquareIt η οποια δέχεται σαν παράμετρο αυτον ακριβως τον αριθμό και μέσα στην συνάρτηση ουσιαστικά ο αριθμος θα ειναι x = x * x => x = 5 * 5 => x = 25. Επειδη η x *=x; ειναι ισοδυναμη με την x = x * x; μετα παλι με την WriteLine δειχνει την νέα τιμή η οποια επειδη έχει περαστει by value ΔΕΝ θα διατηρηθεί ειναι αντιγραφο οποτε στην συνέχεια οταν η συνάρτηση επιστρέψει στην main θα δωσεις αλλη μια WriteLine για να δεις αυτο που ειπαμε προ λιγου οτι δηλαδη πραγματι x= 5 και οχι x = 25. Η συνάρτηση ειναι τύπου void πραγμα που σημαινει οτι ΔΕΝ επιστρέφει κάποια τιμή.

 

Οι αλλαγές επηρεάζουν μονο την τοπική μεταβλητή μεσα στην συνάρτηση την x δηλαδη για αυτο οσο η συνάρτηση θα διαρκεί αυτη εκει μεσα θα εχει την τιμή 25 .... η εμβελεια της ειναι τοπική μέσα στο μπλοκ { ... } της συνάρτησης. Τα ονοματα των συναρτήσεων θα πρεπει να ειναι περιγραφικά δηλαδη να σου δινουν να καταλαβαινεις τι ειδους εργασια προκειται να επιτελεσουν εδω πχ επιτελεις την εργασια του τετραγώνου. Σε υποχρεωνει καποιος να χρησιμοποιησεις περιγραφικα ονοματα συναρτησεων και μεταβλητων? ΟΧΙ αλλα ειναι μια συμβαση μεταξυ των προγραμματιστων ωστε ο κωδικας να ειναι ευαναγνωστος και να μπορουν να τον παρακολουθησουν περισσοτεροι προγραμματιστες ετσι ωστε να τον διορθωσουν ή να τον αναβαθμισουν κτλπ.

 

Στις συναρτήσεις που μας έδωσες

-( void) setNumerator: (int) n;
-(void) setDenominator: (int) d;

φαινεται καταρχην οτι ειναι τύπου void και αρα δεν θα επιστρεψουν κάποια τιμή These are both instance methods that return no value σε αυτη την συναρτηση που τις κάλεσε για παραδειγμα εσυ μπορει να ηθελες να επιστρεψεις μια τιμη στην main αυτο θα ηταν κατι το διαφορετικο απο αυτο που παρουσιάζεται εδω.

 

Το ονομα setNumerator ειναι να θέσεις καποιον αριθμητη ενω το άλλο καποιον παρανομαστή και τα ορισματα που θα παιρνει η καθε συναρτηση θα ειναι δυο αριθμοι ακεραιοι... οπως γραφει και το βιβλιο σου για τις δυο συναρτήσεις Each method takes an integer argument, which is indicated by the (int) in front of the argument name.

 

Τέλος In the case of setNumerator, the name is n. the name is arbitrary and is the name the method uses to refer to the argument. Με άλλα λογια εδω σου λεει οτι το ονομα που θα επιλέξει για την μεταβλητή ειναι αυθαίρετο και ουσιαστικα ειναι το ονομα που χρησιμοποιει η μεθοδος / συνάρτηση για να αναφερθεί στο ορισμα - παράμετρος.Αλλωστε απο το ονομα που έχει επιλεξει για την ιδια την μεθοδο μπορεις να καταλαβεις αυτο το arbitrary n ή d τι ακριβως θελει να συμβολισει.

Τώρα το κατάλαβα πολύ καλά πιστεύω.

Στο δικό σου παράδειγμα γίνεται το εξής:

Ξεκινάει η εκτέλεση του main δίνοντας σε μια ακέραια μεταβλητή myint την τιμή 5 και με το ακριβώς από κάτω WriteLine εμφανίζει την myint δηλαδή το 5. Η επόμεση σειρά στο main περιέχει την συνάρτηση squareIt. Εκεί διακόπτεται η ροή του προγράμματαος, στέλνει την μεταβλητή int στο x της συνάρτησης όπως είναι δηλωμένη πάνω από το main. Εκεί το x τετραγωνίζεται και εκτελείται το WriteLine που βρίσκεται μέσα στην συνάρτηση. Με αυτό εμφανίζεται το νέο x, δηλαδή το 25. Εκεί τελειώνει η εκτέλεση της συνάρτησης και το πρόγραμμα επιστρέφει και πάλι στο main. Επειδή η συνάρτηση είναι τύπου void, δεν επιστρέφει τίποτα. Άρα το τελευταίο WriteLine εμφανίζει και πάλι την μεταβλητή int, που είναι το 5. Ουσιαστικά η μεταβλητή int δεν έχει υποστεί καμία αλλαγή, οπότε τα 2 WriteLine στο main είναι το ίδιο ακριβώς πράγμα, με την διαφορά ότι αλλάζει το κείμενο μέσα. Εκεί τελειώνει και το πρόγραμμα.

 

Στο δικό μου παράδειγμα

-(void) setNumerator: (int) n;

-(void) setDenominator: (int) d;

 

Το void δηλώνει ότι οι συνάρτησεις δεν επιστρέφουν τιμή, την ονομάζω setNumerator και setDenominator για να δηλώνουν τι ακριβώς κάνουν, δέχονται ακέραιες τιμές, έτσι χρησιμοποιώ το int και το n,d είναι οι παράμετροι όπως στο δικό σου παράδειγμα είναι το x...

 

Αν έχω λάθος κάπου και μπορείς, διόρθωσέ με.

Πραγματικά σας ευχαριστώ όλους. Δεν περίμενα τέτοια βοήθεια....

Επεξ/σία από zarzonis
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έτσι ειναι. Οι συναρτήσεις τύπου void δεν επιστρέφουν κάποια τιμή για αυτο στο παράδειγμα που σου έδωσα έχουμε μια WriteLine μεσα στην μέθοδο για να εκτυπώσει την τιμή. Όταν η SquareIt καλείται τα περιεχόμενα της myInt αντιγράφονται στην παράμετρο x.Αυτο που αντιγράφεται ειναι το 5 και μπορεις να το δεις και μονος σου βάζοντας μια ακομη WriteLine μεσα στην συνάρτηση πριν φτάσεις στο statement x*=x; εκει η τιμή αλλαζει σε 25 βεβαια.

 

Τα ονόματα των συναρτήσεων πρεπει να περιγράφουν τι προκειται να κάνει η συνάρτηση. Για παράδειγμα μπορει να είχες ενα προγραμμα το οποίο θα έπρεπε να ελεγχει άν κάποιος αριθμός ειναι πρώτος τοτε ένα ιδανικο όνομα για την συνάρτηση - μέθοδο που θα έκανε κάτι τέτοιο θα ηταν το is_prime. Με την ιδια λογική θα διάλεγες ονομασια και για μια συνάρτηση παραγοντικού factorial.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έτσι ειναι. Οι συναρτήσεις τύπου void δεν επιστρέφουν κάποια τιμή για αυτο στο παράδειγμα που σου έδωσα έχουμε μια WriteLine μεσα στην μέθοδο για να εκτυπώσει την τιμή. Όταν η SquareIt καλείται τα περιεχόμενα της myInt αντιγράφονται στην παράμετρο x.Αυτο που αντιγράφεται ειναι το 5 και μπορεις να το δεις και μονος σου βάζοντας μια ακομη WriteLine μεσα στην συνάρτηση πριν φτάσεις στο statement x*=x; εκει η τιμή αλλαζει σε 25 βεβαια.

 

Τα ονόματα των συναρτήσεων πρεπει να περιγράφουν τι προκειται να κάνει η συνάρτηση. Για παράδειγμα μπορει να είχες ενα προγραμμα το οποίο θα έπρεπε να ελεγχει άν κάποιος αριθμός ειναι πρώτος τοτε ένα ιδανικο όνομα για την συνάρτηση - μέθοδο που θα έκανε κάτι τέτοιο θα ηταν το is_prime. Με την ιδια λογική θα διάλεγες ονομασια και για μια συνάρτηση παραγοντικού factorial.

Σε ευχαριστώ και πάλι! Τα ξεκαθάρισα τώρα και με το παράδειγμά σου επιβεβαίωσα αυτά που κατάλαβα. Τώρα είμαι σε θέση να λύνω κάποιες απλές ασκήσεις σε Objective-C... Θα κάτσω να κάνω κάποιες ακόμα μέχρι εδώ και θα συνεχίσω παρακάτω στα Data Types and Expressions. Διαβάζοντας φυσικά και το βιβλίο του Booch που μου πρότειναν παραπάνω τα άλλα μέλη...

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Zarzonis..

 

Πραγματικά... ΜΗΝ διαβάσεις παρακάτω για object-oriented γλώσσα χωρίς να έχεις διαβάσεις για object-oriented modeling. 

 

Στην καλύτερη, θα μαθαίνεις πράγματα που δεν θα καταλαβαίνεις γιατί είναι έτσι όπως είναι. Στην χειρότερη, απλά θα διαβάζεις και θα αποστηθίζεις. 

 

 

Κάνε υπομονή 7 μέρες και διάβασε τον πατέρα της UML (Booch). 

 

Θα το καταπιείς σαν νεράκι το βιβλίο. Αλλά μην συνεχίσεις με την γλώσσα. 

 

 

Η γλώσσα είναι ένα εργαλείο και όχι ο σκοπός. Για να καταλάβεις και να εκτιμήσεις το εργαλείο πρέπει να ξέρεις τον σκοπό. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Θα σε ακούσω αν είναι. Κάτι θα ξέρεις παραπάνω από εμένα. Ξεκίνησα το διάβασμα του Booch. Μόλις το τελειώσω, συνεχίζω την γλώσσα...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μέχρι τώρα έχω διαβάσει και την 1.3 παράγραφο. Το κορυφαίο του βιβλίου είναι ότι κάνει τα πάντα σύγκριση με πράγματα της καθημερινότητας και άλλων επιστημονικών κλάδων και μετά αναφέρεται στο τι ισχύει στο software engineering. Ως τώρα είναι πολύ ενδιαφέρον.

Μάλλον όμως θα το αγοράσω σε έντυπη μορφή γιατί πάντα είχα θέμα με τα eBooks για τόσο μεγάλα βιβλία. Δεν λέω, καλό και το eBook για να ανατρέξεις σε κάποιο σημείο, να διαβάσεις μερικές σελίδες κτλ, αλλά για κανονικό διάβασμα, ιδίως σε τόσες σελίδες δυστυχώς τίποτε δεν συγκρίνεται με το κλασικό βιβλίο... Το συγκεκριμένο κιόλας βιβλίο φαίνεται ότι είναι must για κάποιον του είδους και αξίζει να υπάρχει στην βιβλιοθήκη.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Χε...

 

Προσωπική μου γνώμη είναι ότι εάν δεν μάθει κανείς να διαβάζει από οθόνη Η/Υ, θα δυσκολευτεί πολύ να μάθει για προγραμματισμό. 

 

Σχεδόν ό,τι χρειαστείς να κάνεις θα είναι εκεί, μπροστά σου... σε οθόνη Η/Υ. 

 

 

Οπότε, ναι αγόρασέ το... αλλά για να το έχεις για reference και όχι για διάβασμα :P

 

Αν και γούστα είναι αυτά :)

 

 

Πάντως.. ναι. Είναι καλό βιβλίο. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το πρόβλημά μου με το διάβασμα στον υπολογιστή δεν είναι ότι με κουράζει. Είναι ότι απλά δεν έχω συνηθήσει. Στο κλασικό βιβλίο μπορείς να σημειώνεις ότι θεωρείς σημαντικό, να ανατρέχεις σε κάθε σελίδα που θες σε χρόνο dt και γενικά η αίσθηση που έχεις με το βιβλίο στο χέρι. Μπορώ να κάτσω πολλές ώρες μπροστά στο pc αλλά όταν είναι να διαβάσω για να μάθω κάτι, απλά δεν μπορώ να συγκεντρωθώ. Τα διαβάζω κάπως μηχανικά :P

Ευτυχώς είπαν θα μου δώσουν οι γονείς μου money, αλλιώς θα περίμενα πάνω από μήνα για να το πάρω...:P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 3 εβδομάδες αργότερα...

Το βιβλίο του booch ήρθε προχθές και το έχω λιώσει. Τρομερά ενδιαφέρον και πολύ χρήσιμες αναφορές και πληροφορίες. Ευχαριστώ πολύ Timonkaipumpa που μου το πρότεινες!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...