Ζυγαριά

Ζυγαριά

Άσκηση εκμάθησης

Εισαγωγή

Ιδιότητες

Μια ιδιότητα στη C# είναι ένα μέλος μιας κλάσης που παρέχει πρόσβαση στα δεδομένα μέσα σε αυτή την κλάση. Όσοι καλούν μπορούν να ορίσουν ή να ανακτήσουν (get) τα δεδομένα. Οι ιδιότητες μπορούν είτε να είναι αυτόματα υλοποιημένες είτε να έχουν ένα πεδίο υποστήριξης. Περιλαμβάνουν έναν προσπελαστή set ή/και έναν προσπελαστή get. Σε κάποιες άλλες γλώσσες, ένας "mutator" είναι περίπου ισοδύναμος με έναν προσπελαστή set και ένας "accessor" είναι περίπου ισοδύναμος με έναν προσπελαστή get, αν και η σύνταξή τους είναι εντελώς διαφορετική.

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

Παρομοίως, όταν ανακτάς μια ιδιότητα, τα δεδομένα μπορούν να υπολογιστούν ή να μορφοποιηθούν, και πάλι μπορεί να εκτελεστεί οποιαδήποτε προγραμματιστική λειτουργία είναι διαθέσιμη στην κλάση.

Οι ιδιότητες έχουν προσδιοριστές πρόσβασης (public, private κ.λπ.) με τον ίδιο τρόπο όπως και τα άλλα μέλη της κλάσης, αλλά ο προσπελαστής set μπορεί να έχει επίπεδο πρόσβασης ανεξάρτητο από τον προσπελαστή ανάκτησης (get) και αντίστροφα. Μια ιδιότητα δε χρειάζεται να έχει και τους δύο προσπελαστές, μπορεί να έχει μόνο έναν (είτε get είτε set).

Η βασική σύνταξη για να εκφράσεις ιδιότητες μπορεί να πάρει δύο μορφές:

Ιδιότητες που υποστηρίζονται από πεδίο/έκφραση:

private int myField;
public int MyProperty
{
    get { return myField; }
    set { myField = value; }
}

Αυτόματα υλοποιημένες ιδιότητες

public int MyProperty { get; private set; } = 42;

Η αρχικοποίηση είναι προαιρετική.

Οδηγίες

Σε αυτή την άσκηση θα μοντελοποιήσεις μια ζυγαριά με μονάδα το χιλιόγραμμο.

Έχεις 6 εργασίες, καθεμία από τις οποίες απαιτεί να υλοποιήσεις μία ή περισσότερες ιδιότητες:

1. Επίτρεψε στη ζυγαριά να έχει ακρίβεια

Για να καλύψουμε διαφορετικές ανάγκες, κάθε ζυγαριά μπορεί να προσαρμόζεται με μια ακρίβεια (τον αριθμό των ψηφίων μετά το δεκαδικό σύμβολο). Υλοποίησε την κλάση WeighingMachine ώστε να έχει μια ιδιότητα Precision μόνο για ανάγνωση, ορισμένη στο όρισμα precision του κατασκευαστή:

var wm = new WeighingMachine(precision: 3);

//  => wm.Precision == 3

2. Επίτρεψε να ορίζεται το βάρος στη ζυγαριά

Υλοποίησε την ιδιότητα WeighingMachine.Weight ώστε το βάρος να μπορεί να διαβαστεί και να οριστεί:

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;

//  => wm.Weight == 60.5

3. Βεβαιώσου ότι απορρίπτεται ένα αρνητικό βάρος εισόδου

Προφανώς, κάποιος δεν μπορεί να έχει αρνητικό βάρος. Πρόσθεσε επικύρωση στην ιδιότητα WeighingMachine.Weight ώστε να πετάει μια εξαίρεση ArgumentOutOfRangeException όταν προσπαθείς να την ορίσεις σε αρνητικό βάρος:

var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException

4. Επίτρεψε να εφαρμόζεται μια ρύθμιση απόβαρου στη ζυγαριά

Η ρύθμιση απόβαρου μπορεί να είναι οποιαδήποτε τιμή (ακόμη και αρνητική ή μια τιμή που κάνει το εμφανιζόμενο βάρος αρνητικό) Υλοποίησε την ιδιότητα WeighingMachine.TareAdjustment ώστε να μπορεί να οριστεί η ρύθμιση απόβαρου:

var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;

// => wm.TareAdjustment == -10.6

5. Βεβαιώσου ότι η ζυγαριά έχει προεπιλεγμένη ρύθμιση απόβαρου

Μετά από διεξοδικές δοκιμές, φαίνεται ότι εξαιτίας ενός κατασκευαστικού προβλήματος όλες οι ζυγαριές έχουν την τάση να υπερεκτιμούν το βάρος κατά 5. Άλλαξε την ιδιότητα WeighingMachine.TareAdjustment ώστε η προεπιλεγμένη τιμή της να είναι 5.

var wm = new WeighingMachine(precision: 3);

// => wm.TareAdjustment == 5.0

6. Επίτρεψε την ανάκτηση του βάρους

Υλοποίησε την ιδιότητα WeighingMachine.DisplayWeight, η οποία πρέπει να επιστρέφει μια συμβολοσειρά που δείχνει το βάρος μετά τη ρύθμιση απόβαρου, με την εφαρμογή της σωστής ακρίβειας και με τη μονάδα στο τέλος. Σημείωσε ότι: display-weight = input-weight - tare-adjustment

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;

// => wm.DisplayWeight == "50.567 kg"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
C# Exercism

Έτοιμος να ξεκινήσεις την άσκηση Ζυγαριά;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις C# με 62 έννοιες178 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.