Διαδρομές
/
Scala
Scala
/
Ασκήσεις
/
Τραπεζικός Λογαριασμός
Τραπεζικός Λογαριασμός

Τραπεζικός Λογαριασμός

Μέτριο

Εισαγωγή

Ύστερα από χρόνια συμπλήρωσης εντύπων και αναμονής, απέκτησες επιτέλους την τραπεζική σου άδεια. Αυτό σημαίνει ότι πλέον δικαιούσαι επίσημα να ανοίξεις τη δική σου τράπεζα, ζήτω!

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

Επειδή βαριόσουν να γράψεις tests, καλείς κάποιους φίλους να σε βοηθήσουν να δοκιμάσετε το σύστημα. Ωστόσο, μόλις πέντε λεπτά αργότερα, ένας από τους φίλους σου ισχυρίζεται ότι έχασε χρήματα! Αν και είσαι σίγουρος ότι ο κώδικάς σου δεν έχει bugs, αρχίζεις να ψάχνεις τα αρχεία καταγραφής για να το ερευνήσεις.

Α, ναι, όπως ακριβώς υποψιαζόσουν, ο φίλος σου φταίει! Μοιράστηκε τα διαπιστευτήρια δοκιμής του με έναν άλλο φίλο, και μαζί συνωμότησαν να κάνουν καταθέσεις και αναλήψεις από τον ίδιο λογαριασμό παράλληλα. Ποιος θα έκανε κάτι τέτοιο;

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

Οδηγίες

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

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

Θα πρέπει να είναι δυνατό να κλείσεις έναν λογαριασμό· οι πράξεις σε έναν κλειστό λογαριασμό πρέπει να αποτυγχάνουν.

Αυτή η άσκηση δοκιμάζει μεταβλητή κατάσταση στην οποία μπορούν να έχουν πρόσβαση με ασφάλεια πολλαπλά νήματα. Η Scala παρέχει διάφορους τρόπους για να προστατεύσεις τη μεταβλητή κατάσταση. Για προγραμματιστές που είναι εξοικειωμένοι με τον ταυτοχρονισμό της Java, η Scala μπορεί να αξιοποιήσει την υποστήριξη ταυτοχρονισμού της Java, όπως το synchronized μπλοκ της Java.

Συνηθισμένες Παγίδες

Στη Scala υπάρχουν δύο τρόποι για να πετύχεις μεταβλητή κατάσταση: Χρησιμοποίησε μια "var" ή ένα μεταβλητό αντικείμενο. Δύο συνηθισμένα λάθη εδώ είναι:

  • Μη χρησιμοποιείς μια "var" που είναι ταυτόχρονα και μεταβλητό αντικείμενο. Το ένα αρκεί, αλλά όχι και τα δύο μαζί.
  • Μην εκθέτεις τη "var" ή το μεταβλητό αντικείμενο στον έξω κόσμο. Άρα κάν' τα "private" και μετάτρεψε το μεταβλητό αντικείμενο σε αμετάβλητο πριν το επιστρέψεις ως τιμή.
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Scala Exercism

Έτοιμος να ξεκινήσεις την άσκηση Τραπεζικός Λογαριασμός;

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